From 5965e5343e5027c6c7ae295d90590257899f31ab Mon Sep 17 00:00:00 2001 From: Luong Thanh Tung Date: Thu, 25 Jul 2019 10:25:56 +0700 Subject: [PATCH] - update fix mapping metadata --- .babelrc | 19 + .csslintrc | 2 + .gitignore | 10 + .npmrc.template | 3 + .nvmrc | 1 + build/ami.js | 29513 +++++++++++++++++++++++---------------------- build/ami.js.map | 2 +- package.json | 2 +- 8 files changed, 15122 insertions(+), 14430 deletions(-) create mode 100644 .babelrc create mode 100644 .csslintrc create mode 100644 .gitignore create mode 100644 .npmrc.template create mode 100644 .nvmrc diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..cda9162 --- /dev/null +++ b/.babelrc @@ -0,0 +1,19 @@ +{ + "presets": [ + [ + "env", + { + "targets": { + "node": "6.9.0", + "browsers": ["chrome >= 54", "firefox ESR", "edge >= 12", "safari >= 10", "ie >= 11"] + }, + "loose": true, + "modules": false, + "useBuiltIns": true, + "debug": false + } + ] + ], + "plugins": [], + "ignore": ["external/**/*"] +} diff --git a/.csslintrc b/.csslintrc new file mode 100644 index 0000000..aacba95 --- /dev/null +++ b/.csslintrc @@ -0,0 +1,2 @@ +--exclude-exts=.min.css +--ignore=adjoining-classes,box-model,ids,order-alphabetical,unqualified-attributes diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..494fb79 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +## Directories +node_modules/ +coverage/ +documentation/ + +## Files +npm-debug.log +.idea +.DS_Store + diff --git a/.npmrc.template b/.npmrc.template new file mode 100644 index 0000000..3c1bd56 --- /dev/null +++ b/.npmrc.template @@ -0,0 +1,3 @@ +always-auth=true +tag-version-prefix="" +//registry.npmjs.org/:_authToken=${NPM_API_TOKEN} diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..a63bb50 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v10.7.0 diff --git a/build/ami.js b/build/ami.js index e6b153e..971e968 100644 --- a/build/ami.js +++ b/build/ami.js @@ -5228,7 +5228,7 @@ if (true) module.exports = OpenJPEG; else {} -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ "./node_modules/node-libs-browser/node_modules/buffer/index.js").Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../buffer/index.js */ "./node_modules/buffer/index.js").Buffer)) /***/ }), @@ -5242,8 +5242,6 @@ else {} "use strict"; /* WEBPACK VAR INJECTION */(function(global) { -var objectAssign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js"); - // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js // original notice: @@ -5285,8 +5283,6 @@ function isBuffer(b) { } // based on node assert, original notice: -// NB: The URL to the CommonJS spec is kept just for tradition. -// node-assert has evolved a lot since then, both in API and behavior. // http://wiki.commonjs.org/wiki/Unit_Testing/1.0 // @@ -5312,7 +5308,7 @@ function isBuffer(b) { // 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 util = __webpack_require__(/*! util/ */ "./node_modules/node-libs-browser/node_modules/util/util.js"); +var util = __webpack_require__(/*! util/ */ "./node_modules/util/util.js"); var hasOwn = Object.prototype.hasOwnProperty; var pSlice = Array.prototype.slice; var functionsHaveNames = (function () { @@ -5727,18 +5723,6 @@ assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) { assert.ifError = function(err) { if (err) throw err; }; -// Expose a strict only variant of assert -function strict(value, message) { - if (!value) fail(value, true, message, '==', strict); -} -assert.strict = objectAssign(strict, assert, { - equal: assert.strictEqual, - deepEqual: assert.deepStrictEqual, - notEqual: assert.notStrictEqual, - notDeepEqual: assert.notDeepStrictEqual -}); -assert.strict.strict = assert.strict; - var objectKeys = Object.keys || function (obj) { var keys = []; for (var key in obj) { @@ -5914,1519 +5898,2389 @@ function fromByteArray (uint8) { /***/ }), -/***/ "./node_modules/const-ninf-float32/lib/index.js": -/*!******************************************************!*\ - !*** ./node_modules/const-ninf-float32/lib/index.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -// VARIABLES // - -var FLOAT32_VIEW = new Float32Array( 1 ); -var UINT32_VIEW = new Uint32Array( FLOAT32_VIEW.buffer ); - -// 1 11111111 00000000000000000000000 => 4286578688 => 0xff800000 (see IEEE 754-2008) -var NINF = 0xff800000; - -// Set the ArrayBuffer bit sequence: -UINT32_VIEW[ 0 ] = NINF; - - -// EXPORTS // - -module.exports = FLOAT32_VIEW[ 0 ]; - - -/***/ }), - -/***/ "./node_modules/const-pinf-float32/lib/index.js": -/*!******************************************************!*\ - !*** ./node_modules/const-pinf-float32/lib/index.js ***! - \******************************************************/ +/***/ "./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 + * @license MIT + */ +/* eslint-disable no-proto */ -// VARIABLES // -var FLOAT32_VIEW = new Float32Array( 1 ); -var UINT32_VIEW = new Uint32Array( FLOAT32_VIEW.buffer ); +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") -// 0 11111111 00000000000000000000000 => 2139095040 => 0x7f800000 (see IEEE 754-2008) -var PINF = 0x7f800000; +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 -// Set the ArrayBuffer bit sequence: -UINT32_VIEW[ 0 ] = PINF; +/** + * 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() -// EXPORTS // +/* + * Export kMaxLength after typed array support is determined. + */ +exports.kMaxLength = kMaxLength() -module.exports = FLOAT32_VIEW[ 0 ]; +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 + } -/***/ "./node_modules/dicom-parser/dist/dicomParser.min.js": -/*!***********************************************************!*\ - !*** ./node_modules/dicom-parser/dist/dicomParser.min.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { + return that +} -/*! dicom-parser - 1.8.2 - 2018-12-05 | (c) 2017 Chris Hafey | https://github.com/cornerstonejs/dicomParser */ -!function(e,t){ true?module.exports=t():undefined}(this,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=79)}([function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";(function(e){ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -var n=r(73),i=r(72),a=r(38);function o(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(o()=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|e}function p(e,t){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return Z(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return j(e).length;default:if(n)return Z(e).length;t=(""+t).toLowerCase(),n=!0}}function g(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function m(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=l.from(t,n)),l.isBuffer(t))return 0===t.length?-1:_(e,t,r,n,i);if("number"==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):_(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function _(e,t,r,n,i){var a,o=1,s=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;o=2,s/=2,l/=2,r/=2}function f(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(i){var u=-1;for(a=r;as&&(r=s-l),a=r;a>=0;a--){for(var h=!0,d=0;di&&(n=i):n=i;var a=t.length;if(a%2!=0)throw new TypeError("Invalid hex string");n>a/2&&(n=a/2);for(var o=0;o>8,i=r%256,a.push(i),a.push(n);return a}(t,e.length-r),e,r,n)}function S(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function k(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:f>223?3:f>191?2:1;if(i+h<=r)switch(h){case 1:f<128&&(u=f);break;case 2:128==(192&(a=e[i+1]))&&(l=(31&f)<<6|63&a)>127&&(u=l);break;case 3:a=e[i+1],o=e[i+2],128==(192&a)&&128==(192&o)&&(l=(15&f)<<12|(63&a)<<6|63&o)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:a=e[i+1],o=e[i+2],s=e[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&(l=(15&f)<<18|(63&a)<<12|(63&o)<<6|63&s)>65535&&l<1114112&&(u=l)}null===u?(u=65533,h=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),i+=h}return function(e){var t=e.length;if(t<=A)return String.fromCharCode.apply(String,e);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return D(this,t,r);case"utf8":case"utf-8":return k(this,t,r);case"ascii":return P(this,t,r);case"latin1":case"binary":return T(this,t,r);case"base64":return S(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}.apply(this,arguments)},l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){var e="",r=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(e+=" ... ")),""},l.prototype.compare=function(e,t,r,n,i){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,i>>>=0,this===e)return 0;for(var a=i-n,o=r-t,s=Math.min(a,o),f=this.slice(n,i),u=e.slice(t,r),h=0;hi)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var a=!1;;)switch(n){case"hex":return y(this,e,t,r);case"utf8":case"utf-8":return b(this,e,t,r);case"ascii":return v(this,e,t,r);case"latin1":case"binary":return w(this,e,t,r);case"base64":return E(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,r);default:if(a)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),a=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var A=4096;function P(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;in)&&(r=n);for(var i="",a=t;ar)throw new RangeError("Trying to access beyond buffer length")}function R(e,t,r,n,i,a){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function L(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,a=Math.min(e.length-r,2);i>>8*(n?i:1-i)}function F(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,a=Math.min(e.length-r,4);i>>8*(n?i:3-i)&255}function B(e,t,r,n,i,a){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function U(e,t,r,n,a){return a||B(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function M(e,t,r,n,a){return a||B(e,0,r,8),i.write(e,t,r,n,52,8),r+8}l.prototype.slice=function(e,t){var r,n=this.length;if(e=~~e,t=void 0===t?n:~~t,e<0?(e+=n)<0&&(e=0):e>n&&(e=n),t<0?(t+=n)<0&&(t=0):t>n&&(t=n),t0&&(i*=256);)n+=this[e+--t]*i;return n},l.prototype.readUInt8=function(e,t){return t||I(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,t){return t||I(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,t){return t||I(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,t){return t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,t){return t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||I(e,t,this.length);for(var n=this[e],i=1,a=0;++a=(i*=128)&&(n-=Math.pow(2,8*t)),n},l.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||I(e,t,this.length);for(var n=t,i=1,a=this[e+--n];n>0&&(i*=256);)a+=this[e+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*t)),a},l.prototype.readInt8=function(e,t){return t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||I(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt16BE=function(e,t){t||I(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt32LE=function(e,t){return t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||I(e,4,this.length),i.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||I(e,4,this.length),i.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||I(e,8,this.length),i.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||I(e,8,this.length),i.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t|=0,r|=0,n)||R(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[t]=255&e;++a=0&&(a*=256);)this[t+i]=e/a&255;return t+r},l.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},l.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):F(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);R(this,e,t,r,i-1,-i)}var a=0,o=1,s=0;for(this[t]=255&e;++a>0)-s&255;return t+r},l.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);R(this,e,t,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[t+a]=255&e;--a>=0&&(o*=256);)e<0&&0===s&&0!==this[t+a+1]&&(s=1),this[t+a]=(e/o>>0)-s&255;return t+r},l.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):F(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,r){return U(this,e,t,!0,r)},l.prototype.writeFloatBE=function(e,t,r){return U(this,e,t,!1,r)},l.prototype.writeDoubleLE=function(e,t,r){return M(this,e,t,!0,r)},l.prototype.writeDoubleBE=function(e,t,r){return M(this,e,t,!1,r)},l.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--i)e[i+t]=this[i+r];else if(a<1e3||!l.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(a=t;a55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;a.push(r)}else if(r<2048){if((t-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function j(e){return n.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function C(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}}).call(this,r(0))},function(e,t,r){"use strict";var n=r(10),i=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};e.exports=h;var a=r(6);a.inherits=r(5);var o=r(35),s=r(18);a.inherits(h,o);for(var l=i(s.prototype),f=0;f1)for(var r=1;r0){var r=(0,i.readFixedString)(this.byteArray,t.dataOffset,t.length).match(/\\/g);return null===r?1:r.length+1}}},{key:"string",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){var n=(0,i.readFixedString)(this.byteArray,r.dataOffset,r.length);return t>=0?n.split("\\")[t].trim():n.trim()}}},{key:"text",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){var n=(0,i.readFixedString)(this.byteArray,r.dataOffset,r.length);return t>=0?n.split("\\")[t].replace(/ +$/,""):n.replace(/ +$/,"")}}},{key:"floatString",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){t=void 0!==t?t:0;var n=this.string(e,t);if(void 0!==n)return parseFloat(n)}}},{key:"intString",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){t=void 0!==t?t:0;var n=this.string(e,t);if(void 0!==n)return parseInt(n)}}},{key:"attributeTag",value:function(e){var t=this.elements[e];if(t&&4===t.length){var r=a(t,this.byteArrayParser).readUint16,n=this.byteArray,i=t.dataOffset;return"x"+("00000000"+(256*r(n,i)*256+r(n,i+2)).toString(16)).substr(-8)}}}]),e}();t.default=o},function(e,t,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if("object"!=typeof r)throw new TypeError(r+"must be non-object");for(var n in r)i(r,n)&&(e[n]=r[n])}}return e},t.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var a={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var a=0;a=n.length)throw"dicomParser.ByteStream: parameter 'position' cannot be greater than or equal to 'byteArray' length";this.byteArrayParser=r,this.byteArray=n,this.position=i||0,this.warnings=[]}return i(t,[{key:"seek",value:function(e){if(this.position+e<0)throw"dicomParser.ByteStream.prototype.seek: cannot seek to position < 0";this.position+=e}},{key:"readByteStream",value:function(e){if(this.position+e>this.byteArray.length)throw"dicomParser.ByteStream.prototype.readByteStream: readByteStream - buffer overread";var r=(0,o.default)(this.byteArray,this.position,e);return this.position+=e,new t(this.byteArrayParser,r)}},{key:"readUint16",value:function(){var e=this.byteArrayParser.readUint16(this.byteArray,this.position);return this.position+=2,e}},{key:"readUint32",value:function(){var e=this.byteArrayParser.readUint32(this.byteArray,this.position);return this.position+=4,e}},{key:"readFixedString",value:function(e){var t=(0,s.readFixedString)(this.byteArray,this.position,e);return this.position+=e,t}}]),t}();t.default=l}).call(this,r(1).Buffer)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if(void 0===e)throw"dicomParser.readSequenceItem: missing required parameter 'byteStream'";var t={tag:(0,a.default)(e),length:e.readUint32(),dataOffset:e.position};if("xfffee000"!==t.tag)throw"dicomParser.readSequenceItem: item tag (FFFE,E000) not found at offset "+e.position;return t};var n,i=r(4),a=(n=i)&&n.__esModule?n:{default:n}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.readFixedString=function(e,t,r){if(r<0)throw"dicomParser.readFixedString - length cannot be less than 0";if(t+r>e.length)throw"dicomParser.readFixedString: attempt to read past end of buffer";for(var n,i="",a=0;a3&&void 0!==arguments[3]?arguments[3]:{};if(r=void 0===r?t.byteArray.length:r,void 0===t)throw"dicomParser.parseDicomDataSetExplicit: missing required parameter 'byteStream'";if(rt.byteArray.length)throw"dicomParser.parseDicomDataSetExplicit: invalid value for parameter 'maxP osition'";var a=e.elements;for(;t.positionr)throw"dicomParser:parseDicomDataSetExplicit: buffer overrun"},t.parseDicomDataSetImplicit=function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(r=void 0===r?e.byteArray.length:r,void 0===t)throw"dicomParser.parseDicomDataSetImplicit: missing required parameter 'byteStream'";if(rt.byteArray.length)throw"dicomParser.parseDicomDataSetImplicit: invalid value for parameter 'maxPosition'";var a=e.elements;for(;t.position= 0";if(r>=t.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragmentIndex' must be < number of fragments";if(s<1)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'numFragments' must be > 0";if(r+s>t.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragment' + 'numFragments' < number of fragments";var u=new i.default(e.byteArrayParser,e.byteArray,t.dataOffset),h=(0,a.default)(u);if("xfffee000"!==h.tag)throw"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000";u.seek(h.length);var d=u.position;if(1===s)return(0,o.default)(u.byteArray,d+f[r].offset+8,f[r].length);for(var c=l(f,r,s),p=(0,n.default)(u.byteArray,c),g=0,m=r;m-1?n:a.nextTick;y.WritableState=_;var f=r(6);f.inherits=r(5);var u={deprecate:r(61)},h=r(34),d=r(9).Buffer,c=i.Uint8Array||function(){};var p,g=r(33);function m(){}function _(e,t){s=s||r(2),e=e||{};var n=t instanceof s;this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var i=e.highWaterMark,f=e.writableHighWaterMark,u=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(f||0===f)?f:u,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var h=!1===e.decodeStrings;this.decodeStrings=!h,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var r=e._writableState,n=r.sync,i=r.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function(e,t,r,n,i){--t.pendingcb,r?(a.nextTick(i,n),a.nextTick(S,e,t),e._writableState.errorEmitted=!0,e.emit("error",n)):(i(n),e._writableState.errorEmitted=!0,e.emit("error",n),S(e,t))}(e,r,n,t,i);else{var o=E(r);o||r.corked||r.bufferProcessing||!r.bufferedRequest||w(e,r),n?l(v,e,r,o,i):v(e,r,o,i)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function y(e){if(s=s||r(2),!(p.call(y,this)||this instanceof s))return new y(e);this._writableState=new _(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),h.call(this)}function b(e,t,r,n,i,a,o){t.writelen=n,t.writecb=o,t.writing=!0,t.sync=!0,r?e._writev(i,t.onwrite):e._write(i,a,t.onwrite),t.sync=!1}function v(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,n(),S(e,t)}function w(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,i=new Array(n),a=t.corkedRequestsFree;a.entry=r;for(var s=0,l=!0;r;)i[s]=r,r.isBuf||(l=!1),r=r.next,s+=1;i.allBuffers=l,b(e,t,!0,t.length,i,"",a.finish),t.pendingcb++,t.lastBufferedRequest=null,a.next?(t.corkedRequestsFree=a.next,a.next=null):t.corkedRequestsFree=new o(t),t.bufferedRequestCount=0}else{for(;r;){var f=r.chunk,u=r.encoding,h=r.callback;if(b(e,t,!1,t.objectMode?1:f.length,f,u,h),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function E(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function x(e,t){e._final(function(r){t.pendingcb--,r&&e.emit("error",r),t.prefinished=!0,e.emit("prefinish"),S(e,t)})}function S(e,t){var r=E(t);return r&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,a.nextTick(x,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),r}f.inherits(y,h),_.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(_.prototype,"buffer",{get:u.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(y,Symbol.hasInstance,{value:function(e){return!!p.call(this,e)||this===y&&(e&&e._writableState instanceof _)}})):p=function(e){return e instanceof this},y.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},y.prototype.write=function(e,t,r){var n,i=this._writableState,o=!1,s=!i.objectMode&&(n=e,d.isBuffer(n)||n instanceof c);return s&&!d.isBuffer(e)&&(e=function(e){return d.from(e)}(e)),"function"==typeof t&&(r=t,t=null),s?t="buffer":t||(t=i.defaultEncoding),"function"!=typeof r&&(r=m),i.ended?function(e,t){var r=new Error("write after end");e.emit("error",r),a.nextTick(t,r)}(this,r):(s||function(e,t,r,n){var i=!0,o=!1;return null===r?o=new TypeError("May not write null values to stream"):"string"==typeof r||void 0===r||t.objectMode||(o=new TypeError("Invalid non-string/buffer chunk")),o&&(e.emit("error",o),a.nextTick(n,o),i=!1),i}(this,i,e,r))&&(i.pendingcb++,o=function(e,t,r,n,i,a){if(!r){var o=function(e,t,r){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=d.from(t,r));return t}(t,n,i);n!==o&&(r=!0,i="buffer",n=o)}var s=t.objectMode?1:n.length;t.length+=s;var l=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},y.prototype._write=function(e,t,r){r(new Error("_write() is not implemented"))},y.prototype._writev=null,y.prototype.end=function(e,t,r){var n=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!==e&&void 0!==e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||function(e,t,r){t.ending=!0,S(e,t),r&&(t.finished?a.nextTick(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,n,r)},Object.defineProperty(y.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),y.prototype.destroy=g.destroy,y.prototype._undestroy=g.undestroy,y.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,r(3),r(63).setImmediate,r(0))},function(e,t,r){(t=e.exports=r(35)).Stream=t,t.Readable=t,t.Writable=r(18),t.Duplex=r(2),t.Transform=r(31),t.PassThrough=r(60)},function(e,t){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function n(e){return"function"==typeof e}function i(e){return"object"==typeof e&&null!==e}function a(e){return void 0===e}e.exports=r,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,r,o,s,l,f;if(this._events||(this._events={}),"error"===e&&(!this._events.error||i(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var u=new Error('Uncaught, unspecified "error" event. ('+t+")");throw u.context=t,u}if(a(r=this._events[e]))return!1;if(n(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),r.apply(this,s)}else if(i(r))for(s=Array.prototype.slice.call(arguments,1),o=(f=r.slice()).length,l=0;l0&&this._events[e].length>o&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){if(!n(t))throw TypeError("listener must be a function");var r=!1;function i(){this.removeListener(e,i),r||(r=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},r.prototype.removeListener=function(e,t){var r,a,o,s;if(!n(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(o=(r=this._events[e]).length,a=-1,r===t||n(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(i(r)){for(s=o;s-- >0;)if(r[s]===t||r[s].listener&&r[s].listener===t){a=s;break}if(a<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(a,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(n(r=this._events[e]))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){return this._events&&this._events[e]?n(this._events[e])?[this._events[e]]:this._events[e].slice():[]},r.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(n(t))return 1;if(t)return t.length}return 0},r.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={readUint16:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readUint16: position cannot be less than 0";if(t+2>e.length)throw"littleEndianByteArrayParser.readUint16: attempt to read past end of buffer";return e[t]+256*e[t+1]},readInt16:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readInt16: position cannot be less than 0";if(t+2>e.length)throw"littleEndianByteArrayParser.readInt16: attempt to read past end of buffer";var r=e[t]+(e[t+1]<<8);return 32768&r&&(r=r-65535-1),r},readUint32:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readUint32: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readUint32: attempt to read past end of buffer";return e[t]+256*e[t+1]+256*e[t+2]*256+256*e[t+3]*256*256},readInt32:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readInt32: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readInt32: attempt to read past end of buffer";return e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24)},readFloat:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readFloat: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readFloat: attempt to read past end of buffer";var r=new Uint8Array(4);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readDouble: position cannot be less than 0";if(t+8>e.length)throw"littleEndianByteArrayParser.readDouble: attempt to read past end of buffer";var r=new Uint8Array(8);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],r[4]=e[t+4],r[5]=e[t+5],r[6]=e[t+6],r[7]=e[t+7],new Float64Array(r.buffer)[0]}}},function(e,t,r){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(t,r){if(void 0!==e&&t instanceof e)return e.alloc(r);if(t instanceof Uint8Array)return new Uint8Array(r);throw"dicomParser.alloc: unknown type for byteArray"}}).call(this,r(1).Buffer)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){if(void 0===e)throw"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'";var o={tag:(0,a.default)(e),length:e.readUint32(),dataOffset:e.position};4294967295===o.length&&(o.hadUndefinedLength=!0);if(o.tag===t)return o;if(s(o,e,r))return(0,i.default)(e,o),o;if(o.hadUndefinedLength)return(0,n.default)(e,o),o;return e.seek(o.length),o};var n=o(r(24)),i=o(r(39)),a=o(r(4));function o(e){return e&&e.__esModule?e:{default:e}}var s=function(e,t,r){if(void 0!==r)return"SQ"===r(e.tag);if(t.position+4<=t.byteArray.length){var n=(0,a.default)(t);return t.seek(-4),"xfffee000"===n||"xfffee0dd"===n}return t.warnings.push("eof encountered before finding sequence item tag or sequence delimiter tag in peeking to determine VR"),!1}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(void 0===e)throw"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'";var r=e.byteArray.length-8;for(;e.position<=r;){var n=e.readUint16();if(65534===n){var i=e.readUint16();if(57357===i){var a=e.readUint32();return 0!==a&&e.warnings("encountered non zero length following item delimiter at position "+(e.position-4)+" while reading element of undefined length with tag "+t.tag),void(t.length=e.position-t.dataOffset)}}}t.length=e.byteArray.length-t.dataOffset,e.seek(e.byteArray.length-e.position)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={AE:!0,AS:!0,AT:!1,CS:!0,DA:!0,DS:!0,DT:!0,FL:!1,FD:!1,IS:!0,LO:!0,LT:!0,OB:!1,OD:!1,OF:!1,OW:!1,PN:!0,SH:!0,SL:!1,SQ:!1,SS:!1,ST:!0,TM:!0,UI:!0,UL:!1,UN:void 0,UR:!0,US:!1,UT:!0};t.isStringVr=function(e){return n[e]},t.isPrivateTag=function(e){return parseInt(e[4],10)%2==1},t.parsePN=function(e){if(void 0!==e){var t=e.split("^");return{familyName:t[0],givenName:t[1],middleName:t[2],prefix:t[3],suffix:t[4]}}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r,n,i){if(n=n||t.basicOffsetTable,i=i||t.fragments,void 0===e)throw"dicomParser.readEncapsulatedImageFrame: missing required parameter 'dataSet'";if(void 0===t)throw"dicomParser.readEncapsulatedImageFrame: missing required parameter 'pixelDataElement'";if(void 0===r)throw"dicomParser.readEncapsulatedImageFrame: missing required parameter 'frameIndex'";if(void 0===n)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' does not have basicOffsetTable";if("x7fe00010"!==t.tag)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to non pixel data tag (expected tag = x7fe00010)";if(!0!==t.encapsulatedPixelData)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data";if(!0!==t.hadUndefinedLength)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have undefined length";if(void 0===t.fragments)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have fragments";if(0===n.length)throw"dicomParser.readEncapsulatedImageFrame: basicOffsetTable has zero entries";if(r<0)throw"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be >= 0";if(r>=n.length)throw"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be < basicOffsetTable.length";var l=n[r],f=o(i,l);if(void 0===f)throw"dicomParser.readEncapsulatedImageFrame: unable to find fragment that matches basic offset table entry";var u=s(r,n,i,f);return(0,a.default)(e,t,f,u,i)};var n,i=r(17),a=(n=i)&&n.__esModule?n:{default:n};var o=function(e,t){for(var r=0;r>>1:e>>>1;t[r]=e}return t}();e.exports=function(e,t,r,i){var a=n,o=i+r;e^=-1;for(var s=i;s>>8^a[255&(e^t[s])];return-1^e}},function(e,t,r){"use strict";e.exports=function(e,t,r,n){for(var i=65535&e|0,a=e>>>16&65535|0,o=0;0!==r;){r-=o=r>2e3?2e3:r;do{a=a+(i=i+t[n++]|0)|0}while(--o);i%=65521,a%=65521}return i|a<<16|0}},function(e,t,r){(function(e,n){var i=/%[sdj%]/g;t.format=function(e){if(!_(e)){for(var t=[],r=0;r=a)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}}),l=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),p(r)?n.showHidden=r:r&&t._extend(n,r),y(n.showHidden)&&(n.showHidden=!1),y(n.depth)&&(n.depth=2),y(n.colors)&&(n.colors=!1),y(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),u(n,e,n.depth)}function l(e,t){var r=s.styles[t];return r?"["+s.colors[r][0]+"m"+e+"["+s.colors[r][1]+"m":e}function f(e,t){return e}function u(e,r,n){if(e.customInspect&&r&&x(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,e);return _(i)||(i=u(e,i,n)),i}var a=function(e,t){if(y(t))return e.stylize("undefined","undefined");if(_(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}if(m(t))return e.stylize(""+t,"number");if(p(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,r);if(a)return a;var o=Object.keys(r),s=function(e){var t={};return e.forEach(function(e,r){t[e]=!0}),t}(o);if(e.showHidden&&(o=Object.getOwnPropertyNames(r)),E(r)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return h(r);if(0===o.length){if(x(r)){var l=r.name?": "+r.name:"";return e.stylize("[Function"+l+"]","special")}if(b(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(w(r))return e.stylize(Date.prototype.toString.call(r),"date");if(E(r))return h(r)}var f,v="",S=!1,k=["{","}"];(c(r)&&(S=!0,k=["[","]"]),x(r))&&(v=" [Function"+(r.name?": "+r.name:"")+"]");return b(r)&&(v=" "+RegExp.prototype.toString.call(r)),w(r)&&(v=" "+Date.prototype.toUTCString.call(r)),E(r)&&(v=" "+h(r)),0!==o.length||S&&0!=r.length?n<0?b(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special"):(e.seen.push(r),f=S?function(e,t,r,n,i){for(var a=[],o=0,s=t.length;o=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60)return r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1];return r[0]+t+" "+e.join(", ")+" "+r[1]}(f,v,k)):k[0]+v+k[1]}function h(e){return"["+Error.prototype.toString.call(e)+"]"}function d(e,t,r,n,i,a){var o,s,l;if((l=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?s=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(s=e.stylize("[Setter]","special")),P(n,i)||(o="["+i+"]"),s||(e.seen.indexOf(l.value)<0?(s=g(r)?u(e,l.value,null):u(e,l.value,r-1)).indexOf("\n")>-1&&(s=a?s.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+s.split("\n").map(function(e){return" "+e}).join("\n")):s=e.stylize("[Circular]","special")),y(o)){if(a&&i.match(/^\d+$/))return s;(o=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.substr(1,o.length-2),o=e.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=e.stylize(o,"string"))}return o+": "+s}function c(e){return Array.isArray(e)}function p(e){return"boolean"==typeof e}function g(e){return null===e}function m(e){return"number"==typeof e}function _(e){return"string"==typeof e}function y(e){return void 0===e}function b(e){return v(e)&&"[object RegExp]"===S(e)}function v(e){return"object"==typeof e&&null!==e}function w(e){return v(e)&&"[object Date]"===S(e)}function E(e){return v(e)&&("[object Error]"===S(e)||e instanceof Error)}function x(e){return"function"==typeof e}function S(e){return Object.prototype.toString.call(e)}function k(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(e){if(y(a)&&(a=n.env.NODE_DEBUG||""),e=e.toUpperCase(),!o[e])if(new RegExp("\\b"+e+"\\b","i").test(a)){var r=n.pid;o[e]=function(){var n=t.format.apply(t,arguments);console.error("%s %d: %s",e,r,n)}}else o[e]=function(){};return o[e]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=c,t.isBoolean=p,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=m,t.isString=_,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=y,t.isRegExp=b,t.isObject=v,t.isDate=w,t.isError=E,t.isFunction=x,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=r(54);var A=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){var e,r;console.log("%s - %s",(e=new Date,r=[k(e.getHours()),k(e.getMinutes()),k(e.getSeconds())].join(":"),[e.getDate(),A[e.getMonth()],r].join(" ")),t.format.apply(t,arguments))},t.inherits=r(53),t._extend=function(e,t){if(!t||!v(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e}}).call(this,r(0),r(3))},function(e,t,r){"use strict";(function(t){ -/*! - * The buffer module from node.js, for the browser. +/** + * 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. * - * @author Feross Aboukhadijeh - * @license MIT + * The `Uint8Array` prototype remains unmodified. */ -function n(e,t){if(e===t)return 0;for(var r=e.length,n=t.length,i=0,a=Math.min(r,n);i=0;f--)if(u[f]!==h[f])return!1;for(f=u.length-1;f>=0;f--)if(l=u[f],!y(e[l],t[l],r,n))return!1;return!0}(e,t,r,o))}return r?e===t:e==t}function b(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function v(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function w(e,t,r,n){var i;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=function(e){var t;try{e()}catch(e){t=e}return t}(t),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),e&&!i&&m(i,r,"Missing expected exception"+n);var o="string"==typeof n,s=!e&&a.isError(i),l=!e&&i&&!r;if((s&&o&&v(i,r)||l)&&m(i,r,"Got unwanted exception"+n),e&&i&&r&&!v(i,r)||!e&&i)throw i}h.AssertionError=function(e){var t;this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=p(g((t=this).actual),128)+" "+t.operator+" "+p(g(t.expected),128),this.generatedMessage=!0);var r=e.stackStartFunction||m;if(Error.captureStackTrace)Error.captureStackTrace(this,r);else{var n=new Error;if(n.stack){var i=n.stack,a=c(r),o=i.indexOf("\n"+a);if(o>=0){var s=i.indexOf("\n",o+1);i=i.substring(s+1)}this.stack=i}}},a.inherits(h.AssertionError,Error),h.fail=m,h.ok=_,h.equal=function(e,t,r){e!=t&&m(e,t,r,"==",h.equal)},h.notEqual=function(e,t,r){e==t&&m(e,t,r,"!=",h.notEqual)},h.deepEqual=function(e,t,r){y(e,t,!1)||m(e,t,r,"deepEqual",h.deepEqual)},h.deepStrictEqual=function(e,t,r){y(e,t,!0)||m(e,t,r,"deepStrictEqual",h.deepStrictEqual)},h.notDeepEqual=function(e,t,r){y(e,t,!1)&&m(e,t,r,"notDeepEqual",h.notDeepEqual)},h.notDeepStrictEqual=function e(t,r,n){y(t,r,!0)&&m(t,r,n,"notDeepStrictEqual",e)},h.strictEqual=function(e,t,r){e!==t&&m(e,t,r,"===",h.strictEqual)},h.notStrictEqual=function(e,t,r){e===t&&m(e,t,r,"!==",h.notStrictEqual)},h.throws=function(e,t,r){w(!0,e,t,r)},h.doesNotThrow=function(e,t,r){w(!1,e,t,r)},h.ifError=function(e){if(e)throw e};var E=Object.keys||function(e){var t=[];for(var r in e)o.call(e,r)&&t.push(r);return t}}).call(this,r(0))},function(e,t,r){"use strict";e.exports=a;var n=r(2),i=r(6);function a(e){if(!(this instanceof a))return new a(e);n.call(this,e),this._transformState={afterTransform:function(e,t){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(!n)return this.emit("error",new Error("write callback called multiple times"));r.writechunk=null,r.writecb=null,null!=t&&this.push(t),n(e);var i=this._readableState;i.reading=!1,(i.needReadable||i.length>5==6?2:e>>4==14?3:e>>3==30?4:-1}function s(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,"�".repeat(r);if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�".repeat(r+1);if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�".repeat(r+2)}}(this,e,t);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function l(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function f(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function u(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function h(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function d(e){return e.toString(this.encoding)}function c(e){return e&&e.length?this.write(e):""}t.StringDecoder=a,a.prototype.write=function(e){if(0===e.length)return"";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return i>0&&(e.lastNeed=i-1),i;if(--n=0)return i>0&&(e.lastNeed=i-2),i;if(--n=0)return i>0&&(2===i?i=0:e.lastNeed=i-3),i;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString("utf8",t,n)},a.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,r){"use strict";var n=r(10);function i(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var r=this,a=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return a||o?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||n.nextTick(i,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(e){!t&&e?(n.nextTick(i,r,e),r._writableState&&(r._writableState.errorEmitted=!0)):t&&t(e)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,r){e.exports=r(20).EventEmitter},function(e,t,r){"use strict";(function(t,n){var i=r(10);e.exports=b;var a,o=r(38);b.ReadableState=y;r(20).EventEmitter;var s=function(e,t){return e.listeners(t).length},l=r(34),f=r(9).Buffer,u=t.Uint8Array||function(){};var h=r(6);h.inherits=r(5);var d=r(66),c=void 0;c=d&&d.debuglog?d.debuglog("stream"):function(){};var p,g=r(65),m=r(33);h.inherits(b,l);var _=["error","close","destroy","pause","resume"];function y(e,t){a=a||r(2),e=e||{};var n=t instanceof a;this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var i=e.highWaterMark,o=e.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(o||0===o)?o:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new g,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=r(32).StringDecoder),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function b(e){if(a=a||r(2),!(this instanceof b))return new b(e);this._readableState=new y(e,this),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),l.call(this)}function v(e,t,r,n,i){var a,o=e._readableState;null===t?(o.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,S(e)}(e,o)):(i||(a=function(e,t){var r;n=t,f.isBuffer(n)||n instanceof u||"string"==typeof t||void 0===t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk"));var n;return r}(o,t)),a?e.emit("error",a):o.objectMode||t&&t.length>0?("string"==typeof t||o.objectMode||Object.getPrototypeOf(t)===f.prototype||(t=function(e){return f.from(e)}(t)),n?o.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):w(e,o,t,!0):o.ended?e.emit("error",new Error("stream.push() after EOF")):(o.reading=!1,o.decoder&&!r?(t=o.decoder.write(t),o.objectMode||0!==t.length?w(e,o,t,!1):A(e,o)):w(e,o,t,!1))):n||(o.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=E?e=E:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function S(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(c("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?i.nextTick(k,e):k(e))}function k(e){c("emit readable"),e.emit("readable"),O(e)}function A(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(P,e,t))}function P(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;ea.length?a.length:e;if(o===a.length?i+=a:i+=a.slice(0,e),0===(e-=o)){o===a.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=a.slice(o));break}++n}return t.length-=n,i}(e,t):function(e,t){var r=f.allocUnsafe(e),n=t.head,i=1;n.data.copy(r),e-=n.data.length;for(;n=n.next;){var a=n.data,o=e>a.length?a.length:e;if(a.copy(r,r.length-e,0,o),0===(e-=o)){o===a.length?(++i,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=a.slice(o));break}++i}return t.length-=i,r}(e,t);return n}(e,t.buffer,t.decoder),r);var r}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,i.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function F(e,t){for(var r=0,n=e.length;r=t.highWaterMark||t.ended))return c("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):S(this),null;if(0===(e=x(e,t))&&t.ended)return 0===t.length&&R(this),null;var n,i=t.needReadable;return c("need readable",i),(0===t.length||t.length-e0?I(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&R(this)),null!==n&&this.emit("data",n),n},b.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},b.prototype.pipe=function(e,t){var r=this,a=this._readableState;switch(a.pipesCount){case 0:a.pipes=e;break;case 1:a.pipes=[a.pipes,e];break;default:a.pipes.push(e)}a.pipesCount+=1,c("pipe count=%d opts=%j",a.pipesCount,t);var l=(!t||!1!==t.end)&&e!==n.stdout&&e!==n.stderr?u:b;function f(t,n){c("onunpipe"),t===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,c("cleanup"),e.removeListener("close",_),e.removeListener("finish",y),e.removeListener("drain",h),e.removeListener("error",m),e.removeListener("unpipe",f),r.removeListener("end",u),r.removeListener("end",b),r.removeListener("data",g),d=!0,!a.awaitDrain||e._writableState&&!e._writableState.needDrain||h())}function u(){c("onend"),e.end()}a.endEmitted?i.nextTick(l):r.once("end",l),e.on("unpipe",f);var h=function(e){return function(){var t=e._readableState;c("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,O(e))}}(r);e.on("drain",h);var d=!1;var p=!1;function g(t){c("ondata"),p=!1,!1!==e.write(t)||p||((1===a.pipesCount&&a.pipes===e||a.pipesCount>1&&-1!==F(a.pipes,e))&&!d&&(c("false write response, pause",r._readableState.awaitDrain),r._readableState.awaitDrain++,p=!0),r.pause())}function m(t){c("onerror",t),b(),e.removeListener("error",m),0===s(e,"error")&&e.emit("error",t)}function _(){e.removeListener("finish",y),b()}function y(){c("onfinish"),e.removeListener("close",_),b()}function b(){c("unpipe"),r.unpipe(e)}return r.on("data",g),function(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?o(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,"error",m),e.once("close",_),e.once("finish",y),e.emit("pipe",r),a.flowing||(c("pipe resume"),r.resume()),e},b.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,r),this);if(!e){var n=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var a=0;a"x0002ffff"){r.position=n;break}s.parser=a.default,t[s.tag]=s}var l=new i.default(r.byteArrayParser,r.byteArray,t);return l.warnings=r.warnings,l.position=r.position,l}()};var n=s(r(12)),i=s(r(7)),a=s(r(21)),o=s(r(15));function s(e){return e&&e.__esModule?e:{default:e}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={readUint16:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readUint16: position cannot be less than 0";if(t+2>e.length)throw"bigEndianByteArrayParser.readUint16: attempt to read past end of buffer";return(e[t]<<8)+e[t+1]},readInt16:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readInt16: position cannot be less than 0";if(t+2>e.length)throw"bigEndianByteArrayParser.readInt16: attempt to read past end of buffer";var r=(e[t]<<8)+e[t+1];return 32768&r&&(r=r-65535-1),r},readUint32:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readUint32: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readUint32: attempt to read past end of buffer";return 256*(256*(256*e[t]+e[t+1])+e[t+2])+e[t+3]},readInt32:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readInt32: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readInt32: attempt to read past end of buffer";return(e[t]<<24)+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3]},readFloat:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readFloat: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readFloat: attempt to read past end of buffer";var r=new Uint8Array(4);return r[3]=e[t],r[2]=e[t+1],r[1]=e[t+2],r[0]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readDouble: position cannot be less than 0";if(t+8>e.length)throw"bigEndianByteArrayParser.readDouble: attempt to read past end of buffer";var r=new Uint8Array(8);return r[7]=e[t],r[6]=e[t+1],r[5]=e[t+2],r[4]=e[t+3],r[3]=e[t+4],r[2]=e[t+5],r[1]=e[t+6],r[0]=e[t+7],new Float64Array(r.buffer)[0]}}},function(e,t){var r={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==r.call(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){if(void 0===e)throw"dicomParser.readSequenceItemsImplicit: missing required parameter 'byteStream'";if(void 0===t)throw"dicomParser.readSequenceItemsImplicit: missing required parameter 'element'";t.items=[],4294967295===t.length?function(e,t,r){for(;e.position+4<=e.byteArray.length;){var n=(0,o.default)(e);if(e.seek(-4),"xfffee0dd"===n)return t.length=e.position-t.dataOffset,e.seek(8),t;var i=f(e,r);t.items.push(i)}e.warnings.push("eof encountered before finding sequence delimiter in sequence of undefined length"),t.length=e.byteArray.length-t.dataOffset}(e,t,r):function(e,t,r){var n=t.dataOffset+t.length;for(;e.positione.byteArray.length-e.position&&(f=e.byteArray.length-e.position),t.fragments.push({offset:e.position-s-8,position:e.position,length:f}),e.seek(f),void(t.length=e.position-t.dataOffset);t.fragments.push({offset:e.position-s-8,position:e.position,length:f}),e.seek(f)}r&&r.push("pixel data element "+t.tag+" missing sequence delimiter tag xfffee0dd")};var n,i=r(4),a=(n=i)&&n.__esModule?n:{default:n}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(void 0===e||void 0===t)throw"dicomParser.explicitElementToString: missing required parameters";if(void 0===t.vr)throw"dicomParser.explicitElementToString: cannot convert implicit element to string";var r,i=t.vr,a=t.tag;function o(t,r){for(var n="",i=0;i= 0";if(0!==t.basicOffsetTable.length)return(0,n.default)(e,t,r);return(0,i.default)(e,t,0,t.fragments.length)};var n=a(r(26)),i=a(r(17));function a(e){return e&&e.__esModule?e:{default:e}}var o=!1},function(e,t,r){"use strict";e.exports={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,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,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,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},function(e,t,r){"use strict";var n=r(8),i=[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],a=[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],o=[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],s=[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];e.exports=function(e,t,r,l,f,u,h,d){var c,p,g,m,_,y,b,v,w,E=d.bits,x=0,S=0,k=0,A=0,P=0,T=0,D=0,O=0,I=0,R=0,L=null,F=0,B=new n.Buf16(16),U=new n.Buf16(16),M=null,N=0;for(x=0;x<=15;x++)B[x]=0;for(S=0;S=1&&0===B[A];A--);if(P>A&&(P=A),0===A)return f[u++]=20971520,f[u++]=20971520,d.bits=1,0;for(k=1;k0&&(0===e||1!==A))return-1;for(U[1]=0,x=1;x<15;x++)U[x+1]=U[x]+B[x];for(S=0;S852||2===e&&I>592)return 1;for(;;){b=x-D,h[S]y?(v=M[N+h[S]],w=L[F+h[S]]):(v=96,w=0),c=1<>D)+(p-=c)]=b<<24|v<<16|w|0}while(0!==p);for(c=1<>=1;if(0!==c?(R&=c-1,R+=c):R=0,S++,0==--B[x]){if(x===A)break;x=t[r+h[S]]}if(x>P&&(R&m)!==g){for(0===D&&(D=P),_+=k,O=1<<(T=x-D);T+D852||2===e&&I>592)return 1;f[g=R&m]=P<<24|T<<16|_-u|0}}return 0!==R&&(f[_+R]=x-D<<24|64<<16|0),d.bits=P,0}},function(e,t,r){"use strict";e.exports=function(e,t){var r,n,i,a,o,s,l,f,u,h,d,c,p,g,m,_,y,b,v,w,E,x,S,k,A;r=e.state,n=e.next_in,k=e.input,i=n+(e.avail_in-5),a=e.next_out,A=e.output,o=a-(t-e.avail_out),s=a+(e.avail_out-257),l=r.dmax,f=r.wsize,u=r.whave,h=r.wnext,d=r.window,c=r.hold,p=r.bits,g=r.lencode,m=r.distcode,_=(1<>>=v=b>>>24,p-=v,0===(v=b>>>16&255))A[a++]=65535&b;else{if(!(16&v)){if(0==(64&v)){b=g[(65535&b)+(c&(1<>>=v,p-=v),p<15&&(c+=k[n++]<>>=v=b>>>24,p-=v,!(16&(v=b>>>16&255))){if(0==(64&v)){b=m[(65535&b)+(c&(1<l){e.msg="invalid distance too far back",r.mode=30;break e}if(c>>>=v,p-=v,E>(v=a-o)){if((v=E-v)>u&&r.sane){e.msg="invalid distance too far back",r.mode=30;break e}if(x=0,S=d,0===h){if(x+=f-v,v2;)A[a++]=S[x++],A[a++]=S[x++],A[a++]=S[x++],w-=3;w&&(A[a++]=S[x++],w>1&&(A[a++]=S[x++]))}else{x=a-E;do{A[a++]=A[x++],A[a++]=A[x++],A[a++]=A[x++],w-=3}while(w>2);w&&(A[a++]=A[x++],w>1&&(A[a++]=A[x++]))}break}}break}}while(n>3,c&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=a,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function ie(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=E,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(ee),t.distcode=t.distdyn=new n.Buf32(te),t.sane=1,t.back=-1,p):_}function ae(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,ie(e)):_}function oe(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?_:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,ae(e))):_}function se(e,t){var r,i;return e?(i=new function(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0},e.state=i,i.window=null,(r=oe(e,t))!==p&&(e.state=null),r):_}var le,fe,ue=!0;function he(e){if(ue){var t;for(le=new n.Buf32(512),fe=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(s(f,e.lens,0,288,le,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;s(u,e.lens,0,32,fe,0,e.work,{bits:5}),ue=!1}e.lencode=le,e.lenbits=9,e.distcode=fe,e.distbits=5}function de(e,t,r,i){var a,o=e.state;return null===o.window&&(o.wsize=1<=o.wsize?(n.arraySet(o.window,t,r-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((a=o.wsize-o.wnext)>i&&(a=i),n.arraySet(o.window,t,r-i,a,o.wnext),(i-=a)?(n.arraySet(o.window,t,r-i,i,0),o.wnext=i,o.whave=o.wsize):(o.wnext+=a,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,r.check=a(r.check,Pe,2,0),se=0,le=0,r.mode=x;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&se)<<8)+(se>>8))%31){e.msg="incorrect header check",r.mode=X;break}if((15&se)!==w){e.msg="unknown compression method",r.mode=X;break}if(le-=4,Ee=8+(15&(se>>>=4)),0===r.wbits)r.wbits=Ee;else if(Ee>r.wbits){e.msg="invalid window size",r.mode=X;break}r.dmax=1<>8&1),512&r.flags&&(Pe[0]=255&se,Pe[1]=se>>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0,r.mode=S;case S:for(;le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>8&255,Pe[2]=se>>>16&255,Pe[3]=se>>>24&255,r.check=a(r.check,Pe,4,0)),se=0,le=0,r.mode=k;case k:for(;le<16;){if(0===ae)break e;ae--,se+=ee[re++]<>8),512&r.flags&&(Pe[0]=255&se,Pe[1]=se>>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0,r.mode=A;case A:if(1024&r.flags){for(;le<16;){if(0===ae)break e;ae--,se+=ee[re++]<>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0}else r.head&&(r.head.extra=null);r.mode=P;case P:if(1024&r.flags&&((ce=r.length)>ae&&(ce=ae),ce&&(r.head&&(Ee=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,ee,re,ce,Ee)),512&r.flags&&(r.check=a(r.check,ee,ce,re)),ae-=ce,re+=ce,r.length-=ce),r.length))break e;r.length=0,r.mode=T;case T:if(2048&r.flags){if(0===ae)break e;ce=0;do{Ee=ee[re+ce++],r.head&&Ee&&r.length<65536&&(r.head.name+=String.fromCharCode(Ee))}while(Ee&&ce>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=L;break;case I:for(;le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>=7&le,le-=7&le,r.mode=V;break}for(;le<3;){if(0===ae)break e;ae--,se+=ee[re++]<>>=1)){case 0:r.mode=B;break;case 1:if(he(r),r.mode=j,t===c){se>>>=2,le-=2;break e}break;case 2:r.mode=N;break;case 3:e.msg="invalid block type",r.mode=X}se>>>=2,le-=2;break;case B:for(se>>>=7&le,le-=7≤le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=X;break}if(r.length=65535&se,se=0,le=0,r.mode=U,t===c)break e;case U:r.mode=M;case M:if(ce=r.length){if(ce>ae&&(ce=ae),ce>oe&&(ce=oe),0===ce)break e;n.arraySet(te,ee,re,ce,ie),ae-=ce,re+=ce,oe-=ce,ie+=ce,r.length-=ce;break}r.mode=L;break;case N:for(;le<14;){if(0===ae)break e;ae--,se+=ee[re++]<>>=5,le-=5,r.ndist=1+(31&se),se>>>=5,le-=5,r.ncode=4+(15&se),se>>>=4,le-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=X;break}r.have=0,r.mode=z;case z:for(;r.have>>=3,le-=3}for(;r.have<19;)r.lens[Te[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,Se={bits:r.lenbits},xe=s(l,r.lens,0,19,r.lencode,0,r.work,Se),r.lenbits=Se.bits,xe){e.msg="invalid code lengths set",r.mode=X;break}r.have=0,r.mode=Z;case Z:for(;r.have>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=me,le-=me,r.lens[r.have++]=ye;else{if(16===ye){for(ke=me+2;le>>=me,le-=me,0===r.have){e.msg="invalid bit length repeat",r.mode=X;break}Ee=r.lens[r.have-1],ce=3+(3&se),se>>>=2,le-=2}else if(17===ye){for(ke=me+3;le>>=me)),se>>>=3,le-=3}else{for(ke=me+7;le>>=me)),se>>>=7,le-=7}if(r.have+ce>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=X;break}for(;ce--;)r.lens[r.have++]=Ee}}if(r.mode===X)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=X;break}if(r.lenbits=9,Se={bits:r.lenbits},xe=s(f,r.lens,0,r.nlen,r.lencode,0,r.work,Se),r.lenbits=Se.bits,xe){e.msg="invalid literal/lengths set",r.mode=X;break}if(r.distbits=6,r.distcode=r.distdyn,Se={bits:r.distbits},xe=s(u,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,Se),r.distbits=Se.bits,xe){e.msg="invalid distances set",r.mode=X;break}if(r.mode=j,t===c)break e;case j:r.mode=C;case C:if(ae>=6&&oe>=258){e.next_out=ie,e.avail_out=oe,e.next_in=re,e.avail_in=ae,r.hold=se,r.bits=le,o(e,ue),ie=e.next_out,te=e.output,oe=e.avail_out,re=e.next_in,ee=e.input,ae=e.avail_in,se=r.hold,le=r.bits,r.mode===L&&(r.back=-1);break}for(r.back=0;_e=(Ae=r.lencode[se&(1<>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>be)])>>>16&255,ye=65535&Ae,!(be+(me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=be,le-=be,r.back+=be}if(se>>>=me,le-=me,r.back+=me,r.length=ye,0===_e){r.mode=G;break}if(32&_e){r.back=-1,r.mode=L;break}if(64&_e){e.msg="invalid literal/length code",r.mode=X;break}r.extra=15&_e,r.mode=q;case q:if(r.extra){for(ke=r.extra;le>>=r.extra,le-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=Y;case Y:for(;_e=(Ae=r.distcode[se&(1<>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>be)])>>>16&255,ye=65535&Ae,!(be+(me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=be,le-=be,r.back+=be}if(se>>>=me,le-=me,r.back+=me,64&_e){e.msg="invalid distance code",r.mode=X;break}r.offset=ye,r.extra=15&_e,r.mode=W;case W:if(r.extra){for(ke=r.extra;le>>=r.extra,le-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=X;break}r.mode=H;case H:if(0===oe)break e;if(ce=ue-oe,r.offset>ce){if((ce=r.offset-ce)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=X;break}ce>r.wnext?(ce-=r.wnext,pe=r.wsize-ce):pe=r.wnext-ce,ce>r.length&&(ce=r.length),ge=r.window}else ge=te,pe=ie-r.offset,ce=r.length;ce>oe&&(ce=oe),oe-=ce,r.length-=ce;do{te[ie++]=ge[pe++]}while(--ce);0===r.length&&(r.mode=C);break;case G:if(0===oe)break e;te[ie++]=r.length,oe--,r.mode=C;break;case V:if(r.wrap){for(;le<32;){if(0===ae)break e;ae--,se|=ee[re++]<=0;)e[t]=0}var f=0,u=1,h=2,d=29,c=256,p=c+1+d,g=30,m=19,_=2*p+1,y=15,b=16,v=7,w=256,E=16,x=17,S=18,k=[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],A=[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],P=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],T=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],D=new Array(2*(p+2));l(D);var O=new Array(2*g);l(O);var I=new Array(512);l(I);var R=new Array(256);l(R);var L=new Array(d);l(L);var F,B,U,M=new Array(g);function N(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function z(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function Z(e){return e<256?I[e]:I[256+(e>>>7)]}function j(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function C(e,t,r){e.bi_valid>b-r?(e.bi_buf|=t<>b-e.bi_valid,e.bi_valid+=r-b):(e.bi_buf|=t<>>=1,r<<=1}while(--t>0);return r>>>1}function W(e,t,r){var n,i,a=new Array(y+1),o=0;for(n=1;n<=y;n++)a[n]=o=o+r[n-1]<<1;for(i=0;i<=t;i++){var s=e[2*i+1];0!==s&&(e[2*i]=Y(a[s]++,s))}}function H(e){var t;for(t=0;t8?j(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function V(e,t,r,n){var i=2*t,a=2*r;return e[i]>1;r>=1;r--)J(e,a,r);i=l;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],J(e,a,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,a[2*i]=a[2*r]+a[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,a[2*r+1]=a[2*n+1]=i,e.heap[1]=i++,J(e,a,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,a,o,s,l=t.dyn_tree,f=t.max_code,u=t.stat_desc.static_tree,h=t.stat_desc.has_stree,d=t.stat_desc.extra_bits,c=t.stat_desc.extra_base,p=t.stat_desc.max_length,g=0;for(a=0;a<=y;a++)e.bl_count[a]=0;for(l[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)(a=l[2*l[2*(n=e.heap[r])+1]+1]+1)>p&&(a=p,g++),l[2*n+1]=a,n>f||(e.bl_count[a]++,o=0,n>=c&&(o=d[n-c]),s=l[2*n],e.opt_len+=s*(a+o),h&&(e.static_len+=s*(u[2*n+1]+o)));if(0!==g){do{for(a=p-1;0===e.bl_count[a];)a--;e.bl_count[a]--,e.bl_count[a+1]+=2,e.bl_count[p]--,g-=2}while(g>0);for(a=p;0!==a;a--)for(n=e.bl_count[a];0!==n;)(i=e.heap[--r])>f||(l[2*i+1]!==a&&(e.opt_len+=(a-l[2*i+1])*l[2*i],l[2*i+1]=a),n--)}}(e,t),W(a,f,e.bl_count)}function $(e,t,r){var n,i,a=-1,o=t[1],s=0,l=7,f=4;for(0===o&&(l=138,f=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=o,o=t[2*(n+1)+1],++s>=7;n0?(e.strm.data_type===s&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return a;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return o;for(t=32;t=3&&0===e.bl_tree[2*T[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),l=e.opt_len+3+7>>>3,(f=e.static_len+3+7>>>3)<=l&&(l=f)):l=f=r+5,r+4<=l&&-1!==t?te(e,t,r,n):e.strategy===i||f===l?(C(e,(u<<1)+(n?1:0),3),K(e,D,O)):(C(e,(h<<1)+(n?1:0),3),function(e,t,r,n){var i;for(C(e,t-257,5),C(e,r-1,5),C(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(R[r]+c+1)]++,e.dyn_dtree[2*Z(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){C(e,u<<1,3),q(e,w,D),function(e){16===e.bi_valid?(j(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},function(e,t,r){"use strict";var n,i=r(8),a=r(50),o=r(28),s=r(27),l=r(49),f=0,u=1,h=3,d=4,c=5,p=0,g=1,m=-2,_=-3,y=-5,b=-1,v=1,w=2,E=3,x=4,S=0,k=2,A=8,P=9,T=15,D=8,O=286,I=30,R=19,L=2*O+1,F=15,B=3,U=258,M=U+B+1,N=32,z=42,Z=69,j=73,C=91,q=103,Y=113,W=666,H=1,G=2,V=3,J=4,K=3;function X(e,t){return e.msg=l[t],t}function $(e){return(e<<1)-(e>4?9:0)}function Q(e){for(var t=e.length;--t>=0;)e[t]=0}function ee(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(i.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function te(e,t){a._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,ee(e.strm)}function re(e,t){e.pending_buf[e.pending++]=t}function ne(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function ie(e,t){var r,n,i=e.max_chain_length,a=e.strstart,o=e.prev_length,s=e.nice_match,l=e.strstart>e.w_size-M?e.strstart-(e.w_size-M):0,f=e.window,u=e.w_mask,h=e.prev,d=e.strstart+U,c=f[a+o-1],p=f[a+o];e.prev_length>=e.good_match&&(i>>=2),s>e.lookahead&&(s=e.lookahead);do{if(f[(r=t)+o]===p&&f[r+o-1]===c&&f[r]===f[a]&&f[++r]===f[a+1]){a+=2,r++;do{}while(f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&ao){if(e.match_start=t,o=n,n>=s)break;c=f[a+o-1],p=f[a+o]}}}while((t=h[t&u])>l&&0!=--i);return o<=e.lookahead?o:e.lookahead}function ae(e){var t,r,n,a,l,f,u,h,d,c,p=e.w_size;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-M)){i.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,t=r=e.hash_size;do{n=e.head[--t],e.head[t]=n>=p?n-p:0}while(--r);t=r=p;do{n=e.prev[--t],e.prev[t]=n>=p?n-p:0}while(--r);a+=p}if(0===e.strm.avail_in)break;if(f=e.strm,u=e.window,h=e.strstart+e.lookahead,d=a,c=void 0,(c=f.avail_in)>d&&(c=d),r=0===c?0:(f.avail_in-=c,i.arraySet(u,f.input,f.next_in,c,h),1===f.state.wrap?f.adler=o(f.adler,u,c,h):2===f.state.wrap&&(f.adler=s(f.adler,u,c,h)),f.next_in+=c,f.total_in+=c,c),e.lookahead+=r,e.lookahead+e.insert>=B)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=B&&(e.ins_h=(e.ins_h<=B)if(n=a._tr_tally(e,e.strstart-e.match_start,e.match_length-B),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=B){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=B&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=B-1)),e.prev_length>=B&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-B,n=a._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-B),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<15&&(s=2,n-=16),a<1||a>P||r!==A||n<8||n>15||t<0||t>9||o<0||o>x)return X(e,m);8===n&&(n=9);var l=new function(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=A,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*L),this.dyn_dtree=new i.Buf16(2*(2*I+1)),this.bl_tree=new i.Buf16(2*(2*R+1)),Q(this.dyn_ltree),Q(this.dyn_dtree),Q(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(F+1),this.heap=new i.Buf16(2*O+1),Q(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*O+1),Q(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0};return e.state=l,l.strm=e,l.wrap=s,l.gzhead=null,l.w_bits=n,l.w_size=1<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(ae(e),0===e.lookahead&&t===f)return H;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,te(e,!1),0===e.strm.avail_out))return H;if(e.strstart-e.block_start>=e.w_size-M&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):(e.strstart>e.block_start&&(te(e,!1),e.strm.avail_out),H)}),new le(4,4,8,4,oe),new le(4,5,16,8,oe),new le(4,6,32,32,oe),new le(4,4,16,16,se),new le(8,16,32,32,se),new le(8,16,128,128,se),new le(8,32,128,256,se),new le(32,128,258,1024,se),new le(32,258,258,4096,se)],t.deflateInit=function(e,t){return he(e,t,A,T,D,S)},t.deflateInit2=he,t.deflateReset=ue,t.deflateResetKeep=fe,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?m:(e.state.gzhead=t,p):m},t.deflate=function(e,t){var r,i,o,l;if(!e||!e.state||t>c||t<0)return e?X(e,m):m;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||i.status===W&&t!==d)return X(e,0===e.avail_out?y:m);if(i.strm=e,r=i.last_flush,i.last_flush=t,i.status===z)if(2===i.wrap)e.adler=0,re(i,31),re(i,139),re(i,8),i.gzhead?(re(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),re(i,255&i.gzhead.time),re(i,i.gzhead.time>>8&255),re(i,i.gzhead.time>>16&255),re(i,i.gzhead.time>>24&255),re(i,9===i.level?2:i.strategy>=w||i.level<2?4:0),re(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(re(i,255&i.gzhead.extra.length),re(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=s(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=Z):(re(i,0),re(i,0),re(i,0),re(i,0),re(i,0),re(i,9===i.level?2:i.strategy>=w||i.level<2?4:0),re(i,K),i.status=Y);else{var _=A+(i.w_bits-8<<4)<<8;_|=(i.strategy>=w||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(_|=N),_+=31-_%31,i.status=Y,ne(i,_),0!==i.strstart&&(ne(i,e.adler>>>16),ne(i,65535&e.adler)),e.adler=1}if(i.status===Z)if(i.gzhead.extra){for(o=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending!==i.pending_buf_size));)re(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=j)}else i.status=j;if(i.status===j)if(i.gzhead.name){o=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexo&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),0===l&&(i.gzindex=0,i.status=C)}else i.status=C;if(i.status===C)if(i.gzhead.comment){o=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexo&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),0===l&&(i.status=q)}else i.status=q;if(i.status===q&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&ee(e),i.pending+2<=i.pending_buf_size&&(re(i,255&e.adler),re(i,e.adler>>8&255),e.adler=0,i.status=Y)):i.status=Y),0!==i.pending){if(ee(e),0===e.avail_out)return i.last_flush=-1,p}else if(0===e.avail_in&&$(t)<=$(r)&&t!==d)return X(e,y);if(i.status===W&&0!==e.avail_in)return X(e,y);if(0!==e.avail_in||0!==i.lookahead||t!==f&&i.status!==W){var b=i.strategy===w?function(e,t){for(var r;;){if(0===e.lookahead&&(ae(e),0===e.lookahead)){if(t===f)return H;break}if(e.match_length=0,r=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?H:G}(i,t):i.strategy===E?function(e,t){for(var r,n,i,o,s=e.window;;){if(e.lookahead<=U){if(ae(e),e.lookahead<=U&&t===f)return H;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=B&&e.strstart>0&&(n=s[i=e.strstart-1])===s[++i]&&n===s[++i]&&n===s[++i]){o=e.strstart+U;do{}while(n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=B?(r=a._tr_tally(e,1,e.match_length-B),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?H:G}(i,t):n[i.level].func(i,t);if(b!==V&&b!==J||(i.status=W),b===H||b===V)return 0===e.avail_out&&(i.last_flush=-1),p;if(b===G&&(t===u?a._tr_align(i):t!==c&&(a._tr_stored_block(i,0,0,!1),t===h&&(Q(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ee(e),0===e.avail_out))return i.last_flush=-1,p}return t!==d?p:i.wrap<=0?g:(2===i.wrap?(re(i,255&e.adler),re(i,e.adler>>8&255),re(i,e.adler>>16&255),re(i,e.adler>>24&255),re(i,255&e.total_in),re(i,e.total_in>>8&255),re(i,e.total_in>>16&255),re(i,e.total_in>>24&255)):(ne(i,e.adler>>>16),ne(i,65535&e.adler)),ee(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?p:g)},t.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==z&&t!==Z&&t!==j&&t!==C&&t!==q&&t!==Y&&t!==W?X(e,m):(e.state=null,t===Y?X(e,_):p):m},t.deflateSetDictionary=function(e,t){var r,n,a,s,l,f,u,h,d=t.length;if(!e||!e.state)return m;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==z||r.lookahead)return m;for(1===s&&(e.adler=o(e.adler,t,d,0)),r.wrap=0,d>=r.w_size&&(0===s&&(Q(r.head),r.strstart=0,r.block_start=0,r.insert=0),h=new i.Buf8(r.w_size),i.arraySet(h,t,d-r.w_size,r.w_size,0),t=h,d=r.w_size),l=e.avail_in,f=e.next_in,u=e.input,e.avail_in=d,e.next_in=0,e.input=t,ae(r);r.lookahead>=B;){n=r.strstart,a=r.lookahead-(B-1);do{r.ins_h=(r.ins_h<t.UNZIP)throw new TypeError("Bad argument");this.dictionary=null,this.err=0,this.flush=0,this.init_done=!1,this.level=0,this.memLevel=0,this.mode=e,this.strategy=0,this.windowBits=0,this.write_in_progress=!1,this.pending_close=!1,this.gzip_id_bytes_read=0}u.prototype.close=function(){this.write_in_progress?this.pending_close=!0:(this.pending_close=!1,i(this.init_done,"close before init"),i(this.mode<=t.UNZIP),this.mode===t.DEFLATE||this.mode===t.GZIP||this.mode===t.DEFLATERAW?o.deflateEnd(this.strm):this.mode!==t.INFLATE&&this.mode!==t.GUNZIP&&this.mode!==t.INFLATERAW&&this.mode!==t.UNZIP||s.inflateEnd(this.strm),this.mode=t.NONE,this.dictionary=null)},u.prototype.write=function(e,t,r,n,i,a,o){return this._write(!0,e,t,r,n,i,a,o)},u.prototype.writeSync=function(e,t,r,n,i,a,o){return this._write(!1,e,t,r,n,i,a,o)},u.prototype._write=function(r,a,o,s,l,f,u,h){if(i.equal(arguments.length,8),i(this.init_done,"write before init"),i(this.mode!==t.NONE,"already finalized"),i.equal(!1,this.write_in_progress,"write already in progress"),i.equal(!1,this.pending_close,"close is pending"),this.write_in_progress=!0,i.equal(!1,void 0===a,"must provide flush value"),this.write_in_progress=!0,a!==t.Z_NO_FLUSH&&a!==t.Z_PARTIAL_FLUSH&&a!==t.Z_SYNC_FLUSH&&a!==t.Z_FULL_FLUSH&&a!==t.Z_FINISH&&a!==t.Z_BLOCK)throw new Error("Invalid flush value");if(null==o&&(o=e.alloc(0),l=0,s=0),this.strm.avail_in=l,this.strm.input=o,this.strm.next_in=s,this.strm.avail_out=h,this.strm.output=f,this.strm.next_out=u,this.flush=a,!r)return this._process(),this._checkError()?this._afterSync():void 0;var d=this;return n.nextTick(function(){d._process(),d._after()}),this},u.prototype._afterSync=function(){var e=this.strm.avail_out,t=this.strm.avail_in;return this.write_in_progress=!1,[t,e]},u.prototype._process=function(){var e=null;switch(this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=o.deflate(this.strm,this.flush);break;case t.UNZIP:switch(this.strm.avail_in>0&&(e=this.strm.next_in),this.gzip_id_bytes_read){case 0:if(null===e)break;if(31!==this.strm.input[e]){this.mode=t.INFLATE;break}if(this.gzip_id_bytes_read=1,e++,1===this.strm.avail_in)break;case 1:if(null===e)break;139===this.strm.input[e]?(this.gzip_id_bytes_read=2,this.mode=t.GUNZIP):this.mode=t.INFLATE;break;default:throw new Error("invalid number of gzip magic number bytes read")}case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:for(this.err=s.inflate(this.strm,this.flush),this.err===t.Z_NEED_DICT&&this.dictionary&&(this.err=s.inflateSetDictionary(this.strm,this.dictionary),this.err===t.Z_OK?this.err=s.inflate(this.strm,this.flush):this.err===t.Z_DATA_ERROR&&(this.err=t.Z_NEED_DICT));this.strm.avail_in>0&&this.mode===t.GUNZIP&&this.err===t.Z_STREAM_END&&0!==this.strm.next_in[0];)this.reset(),this.err=s.inflate(this.strm,this.flush);break;default:throw new Error("Unknown mode "+this.mode)}},u.prototype._checkError=function(){switch(this.err){case t.Z_OK:case t.Z_BUF_ERROR:if(0!==this.strm.avail_out&&this.flush===t.Z_FINISH)return this._error("unexpected end of file"),!1;break;case t.Z_STREAM_END:break;case t.Z_NEED_DICT:return null==this.dictionary?this._error("Missing dictionary"):this._error("Bad dictionary"),!1;default:return this._error("Zlib error"),!1}return!0},u.prototype._after=function(){if(this._checkError()){var e=this.strm.avail_out,t=this.strm.avail_in;this.write_in_progress=!1,this.callback(t,e),this.pending_close&&this.close()}},u.prototype._error=function(e){this.strm.msg&&(e=this.strm.msg),this.onerror(e,this.err),this.write_in_progress=!1,this.pending_close&&this.close()},u.prototype.init=function(e,r,n,a,o){i(4===arguments.length||5===arguments.length,"init(windowBits, level, memLevel, strategy, [dictionary])"),i(e>=8&&e<=15,"invalid windowBits"),i(r>=-1&&r<=9,"invalid compression level"),i(n>=1&&n<=9,"invalid memlevel"),i(a===t.Z_FILTERED||a===t.Z_HUFFMAN_ONLY||a===t.Z_RLE||a===t.Z_FIXED||a===t.Z_DEFAULT_STRATEGY,"invalid strategy"),this._init(r,e,n,a,o),this._setDictionary()},u.prototype.params=function(){throw new Error("deflateParams Not supported")},u.prototype.reset=function(){this._reset(),this._setDictionary()},u.prototype._init=function(e,r,n,i,l){switch(this.level=e,this.windowBits=r,this.memLevel=n,this.strategy=i,this.flush=t.Z_NO_FLUSH,this.err=t.Z_OK,this.mode!==t.GZIP&&this.mode!==t.GUNZIP||(this.windowBits+=16),this.mode===t.UNZIP&&(this.windowBits+=32),this.mode!==t.DEFLATERAW&&this.mode!==t.INFLATERAW||(this.windowBits=-1*this.windowBits),this.strm=new a,this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=o.deflateInit2(this.strm,this.level,t.Z_DEFLATED,this.windowBits,this.memLevel,this.strategy);break;case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:case t.UNZIP:this.err=s.inflateInit2(this.strm,this.windowBits);break;default:throw new Error("Unknown mode "+this.mode)}this.err!==t.Z_OK&&this._error("Init error"),this.dictionary=l,this.write_in_progress=!1,this.init_done=!0},u.prototype._setDictionary=function(){if(null!=this.dictionary){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:this.err=o.deflateSetDictionary(this.strm,this.dictionary)}this.err!==t.Z_OK&&this._error("Failed to set dictionary")}},u.prototype._reset=function(){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:case t.GZIP:this.err=o.deflateReset(this.strm);break;case t.INFLATE:case t.INFLATERAW:case t.GUNZIP:this.err=s.inflateReset(this.strm)}this.err!==t.Z_OK&&this._error("Failed to reset stream")},t.Zlib=u}).call(this,r(1).Buffer,r(3))},function(e,t,r){e.exports=r(19).PassThrough},function(e,t,r){e.exports=r(19).Transform},function(e,t,r){e.exports=r(2)},function(e,t,r){e.exports=r(18)},function(e,t,r){"use strict";e.exports=a;var n=r(31),i=r(6);function a(e){if(!(this instanceof a))return new a(e);n.call(this,e)}i.inherits=r(5),i.inherits(a,n),a.prototype._transform=function(e,t,r){r(null,e)}},function(e,t,r){(function(t){function r(e){try{if(!t.localStorage)return!1}catch(e){return!1}var r=t.localStorage[e];return null!=r&&"true"===String(r).toLowerCase()}e.exports=function(e,t){if(r("noDeprecation"))return e;var n=!1;return function(){if(!n){if(r("throwDeprecation"))throw new Error(t);r("traceDeprecation")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}}}).call(this,r(0))},function(e,t,r){(function(e,t){!function(e,r){"use strict";if(!e.setImmediate){var n,i,a,o,s,l=1,f={},u=!1,h=e.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(e);d=d&&d.setTimeout?d:e,"[object process]"==={}.toString.call(e.process)?n=function(e){t.nextTick(function(){p(e)})}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,r=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=r,t}}()?e.MessageChannel?((a=new MessageChannel).port1.onmessage=function(e){p(e.data)},n=function(e){a.port2.postMessage(e)}):h&&"onreadystatechange"in h.createElement("script")?(i=h.documentElement,n=function(e){var t=h.createElement("script");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):n=function(e){setTimeout(p,0,e)}:(o="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(o)&&p(+t.data.slice(o.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),n=function(t){e.postMessage(o+t,"*")}),d.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),r=0;r=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},r(62),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,r(0))},function(e,t){},function(e,t,r){"use strict";var n=r(9).Buffer,i=r(64);e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return n.alloc(0);if(1===this.length)return this.head.data;for(var t,r,i,a=n.allocUnsafe(e>>>0),o=this.head,s=0;o;)t=o.data,r=a,i=s,t.copy(r,i),s+=o.data.length,o=o.next;return a},e}(),i&&i.inspect&&i.inspect.custom&&(e.exports.prototype[i.inspect.custom]=function(){var e=i.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,r){e.exports=i;var n=r(20).EventEmitter;function i(){n.call(this)}r(5)(i,n),i.Readable=r(19),i.Writable=r(59),i.Duplex=r(58),i.Transform=r(57),i.PassThrough=r(56),i.Stream=i,i.prototype.pipe=function(e,t){var r=this;function i(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function a(){r.readable&&r.resume&&r.resume()}r.on("data",i),e.on("drain",a),e._isStdio||t&&!1===t.end||(r.on("end",s),r.on("close",l));var o=!1;function s(){o||(o=!0,e.end())}function l(){o||(o=!0,"function"==typeof e.destroy&&e.destroy())}function f(e){if(u(),0===n.listenerCount(this,"error"))throw e}function u(){r.removeListener("data",i),e.removeListener("drain",a),r.removeListener("end",s),r.removeListener("close",l),r.removeListener("error",f),e.removeListener("error",f),r.removeListener("end",u),r.removeListener("close",u),e.removeListener("close",u)}return r.on("error",f),e.on("error",f),r.on("end",u),r.on("close",u),e.on("close",u),e.emit("pipe",r),e}},function(e,t,r){"use strict";(function(e){var n=r(1).Buffer,i=r(67).Transform,a=r(55),o=r(29),s=r(30).ok,l=r(1).kMaxLength,f="Cannot create final Buffer. It would be larger than 0x"+l.toString(16)+" bytes";a.Z_MIN_WINDOWBITS=8,a.Z_MAX_WINDOWBITS=15,a.Z_DEFAULT_WINDOWBITS=15,a.Z_MIN_CHUNK=64,a.Z_MAX_CHUNK=1/0,a.Z_DEFAULT_CHUNK=16384,a.Z_MIN_MEMLEVEL=1,a.Z_MAX_MEMLEVEL=9,a.Z_DEFAULT_MEMLEVEL=8,a.Z_MIN_LEVEL=-1,a.Z_MAX_LEVEL=9,a.Z_DEFAULT_LEVEL=a.Z_DEFAULT_COMPRESSION;for(var u=Object.keys(a),h=0;h=l?o=new RangeError(f):t=n.concat(i,a),i=[],e.close(),r(o,t)}e.on("error",function(t){e.removeListener("end",s),e.removeListener("readable",o),r(t)}),e.on("end",s),e.end(t),o()}function y(e,t){if("string"==typeof t&&(t=n.from(t)),!n.isBuffer(t))throw new TypeError("Not a string or buffer");var r=e._finishFlushFlag;return e._processChunk(t,r)}function b(e){if(!(this instanceof b))return new b(e);P.call(this,e,a.DEFLATE)}function v(e){if(!(this instanceof v))return new v(e);P.call(this,e,a.INFLATE)}function w(e){if(!(this instanceof w))return new w(e);P.call(this,e,a.GZIP)}function E(e){if(!(this instanceof E))return new E(e);P.call(this,e,a.GUNZIP)}function x(e){if(!(this instanceof x))return new x(e);P.call(this,e,a.DEFLATERAW)}function S(e){if(!(this instanceof S))return new S(e);P.call(this,e,a.INFLATERAW)}function k(e){if(!(this instanceof k))return new k(e);P.call(this,e,a.UNZIP)}function A(e){return e===a.Z_NO_FLUSH||e===a.Z_PARTIAL_FLUSH||e===a.Z_SYNC_FLUSH||e===a.Z_FULL_FLUSH||e===a.Z_FINISH||e===a.Z_BLOCK}function P(e,r){var o=this;if(this._opts=e=e||{},this._chunkSize=e.chunkSize||t.Z_DEFAULT_CHUNK,i.call(this,e),e.flush&&!A(e.flush))throw new Error("Invalid flush flag: "+e.flush);if(e.finishFlush&&!A(e.finishFlush))throw new Error("Invalid flush flag: "+e.finishFlush);if(this._flushFlag=e.flush||a.Z_NO_FLUSH,this._finishFlushFlag=void 0!==e.finishFlush?e.finishFlush:a.Z_FINISH,e.chunkSize&&(e.chunkSizet.Z_MAX_CHUNK))throw new Error("Invalid chunk size: "+e.chunkSize);if(e.windowBits&&(e.windowBitst.Z_MAX_WINDOWBITS))throw new Error("Invalid windowBits: "+e.windowBits);if(e.level&&(e.levelt.Z_MAX_LEVEL))throw new Error("Invalid compression level: "+e.level);if(e.memLevel&&(e.memLevelt.Z_MAX_MEMLEVEL))throw new Error("Invalid memLevel: "+e.memLevel);if(e.strategy&&e.strategy!=t.Z_FILTERED&&e.strategy!=t.Z_HUFFMAN_ONLY&&e.strategy!=t.Z_RLE&&e.strategy!=t.Z_FIXED&&e.strategy!=t.Z_DEFAULT_STRATEGY)throw new Error("Invalid strategy: "+e.strategy);if(e.dictionary&&!n.isBuffer(e.dictionary))throw new Error("Invalid dictionary: it should be a Buffer instance");this._handle=new a.Zlib(r);var s=this;this._hadError=!1,this._handle.onerror=function(e,r){T(s),s._hadError=!0;var n=new Error(e);n.errno=r,n.code=t.codes[r],s.emit("error",n)};var l=t.Z_DEFAULT_COMPRESSION;"number"==typeof e.level&&(l=e.level);var f=t.Z_DEFAULT_STRATEGY;"number"==typeof e.strategy&&(f=e.strategy),this._handle.init(e.windowBits||t.Z_DEFAULT_WINDOWBITS,l,e.memLevel||t.Z_DEFAULT_MEMLEVEL,f,e.dictionary),this._buffer=n.allocUnsafe(this._chunkSize),this._offset=0,this._level=l,this._strategy=f,this.once("end",this.close),Object.defineProperty(this,"_closed",{get:function(){return!o._handle},configurable:!0,enumerable:!0})}function T(t,r){r&&e.nextTick(r),t._handle&&(t._handle.close(),t._handle=null)}function D(e){e.emit("close")}Object.defineProperty(t,"codes",{enumerable:!0,value:Object.freeze(c),writable:!1}),t.Deflate=b,t.Inflate=v,t.Gzip=w,t.Gunzip=E,t.DeflateRaw=x,t.InflateRaw=S,t.Unzip=k,t.createDeflate=function(e){return new b(e)},t.createInflate=function(e){return new v(e)},t.createDeflateRaw=function(e){return new x(e)},t.createInflateRaw=function(e){return new S(e)},t.createGzip=function(e){return new w(e)},t.createGunzip=function(e){return new E(e)},t.createUnzip=function(e){return new k(e)},t.deflate=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new b(t),e,r)},t.deflateSync=function(e,t){return y(new b(t),e)},t.gzip=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new w(t),e,r)},t.gzipSync=function(e,t){return y(new w(t),e)},t.deflateRaw=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new x(t),e,r)},t.deflateRawSync=function(e,t){return y(new x(t),e)},t.unzip=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new k(t),e,r)},t.unzipSync=function(e,t){return y(new k(t),e)},t.inflate=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new v(t),e,r)},t.inflateSync=function(e,t){return y(new v(t),e)},t.gunzip=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new E(t),e,r)},t.gunzipSync=function(e,t){return y(new E(t),e)},t.inflateRaw=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new S(t),e,r)},t.inflateRawSync=function(e,t){return y(new S(t),e)},o.inherits(P,i),P.prototype.params=function(r,n,i){if(rt.Z_MAX_LEVEL)throw new RangeError("Invalid compression level: "+r);if(n!=t.Z_FILTERED&&n!=t.Z_HUFFMAN_ONLY&&n!=t.Z_RLE&&n!=t.Z_FIXED&&n!=t.Z_DEFAULT_STRATEGY)throw new TypeError("Invalid strategy: "+n);if(this._level!==r||this._strategy!==n){var o=this;this.flush(a.Z_SYNC_FLUSH,function(){s(o._handle,"zlib binding closed"),o._handle.params(r,n),o._hadError||(o._level=r,o._strategy=n,i&&i())})}else e.nextTick(i)},P.prototype.reset=function(){return s(this._handle,"zlib binding closed"),this._handle.reset()},P.prototype._flush=function(e){this._transform(n.alloc(0),"",e)},P.prototype.flush=function(t,r){var i=this,o=this._writableState;("function"==typeof t||void 0===t&&!r)&&(r=t,t=a.Z_FULL_FLUSH),o.ended?r&&e.nextTick(r):o.ending?r&&this.once("end",r):o.needDrain?r&&this.once("drain",function(){return i.flush(t,r)}):(this._flushFlag=t,this.write(n.alloc(0),"",r))},P.prototype.close=function(t){T(this,t),e.nextTick(D,this)},P.prototype._transform=function(e,t,r){var i,o=this._writableState,s=(o.ending||o.ended)&&(!e||o.length===e.length);return null===e||n.isBuffer(e)?this._handle?(s?i=this._finishFlushFlag:(i=this._flushFlag,e.length>=o.length&&(this._flushFlag=this._opts.flush||a.Z_NO_FLUSH)),void this._processChunk(e,i,r)):r(new Error("zlib binding closed")):r(new Error("invalid input"))},P.prototype._processChunk=function(e,t,r){var i=e&&e.length,a=this._chunkSize-this._offset,o=0,u=this,h="function"==typeof r;if(!h){var d,c=[],p=0;this.on("error",function(e){d=e}),s(this._handle,"zlib binding closed");do{var g=this._handle.writeSync(t,e,o,i,this._buffer,this._offset,a)}while(!this._hadError&&y(g[0],g[1]));if(this._hadError)throw d;if(p>=l)throw T(this),new RangeError(f);var m=n.concat(c,p);return T(this),m}s(this._handle,"zlib binding closed");var _=this._handle.write(t,e,o,i,this._buffer,this._offset,a);function y(l,f){if(this&&(this.buffer=null,this.callback=null),!u._hadError){var d=a-f;if(s(d>=0,"have should not go down"),d>0){var g=u._buffer.slice(u._offset,u._offset+d);u._offset+=d,h?u.push(g):(c.push(g),p+=g.length)}if((0===f||u._offset>=u._chunkSize)&&(a=u._chunkSize,u._offset=0,u._buffer=n.allocUnsafe(u._chunkSize)),0===f){if(o+=i-l,i=l,!h)return!0;var m=u._handle.write(t,e,o,i,u._buffer,u._offset,u._chunkSize);return m.callback=y,void(m.buffer=e)}if(!h)return!1;r()}}_.buffer=e,_.callback=y},o.inherits(b,P),o.inherits(v,P),o.inherits(w,P),o.inherits(E,P),o.inherits(x,P),o.inherits(S,P),o.inherits(k,P)}).call(this,r(3))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,r){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(t,d){if(void 0===t)throw"dicomParser.parseDicom: missing required parameter 'byteArray'";function c(l){var c=function(e){if(void 0===e.elements.x00020010)throw"dicomParser.parseDicom: missing required meta header attribute 0002,0010";var r=e.elements.x00020010;return u.readFixedString(t,r.dataOffset,r.length)}(l),p=function(e){if("1.2.840.10008.1.2"===e)return!1;return!0}(c),g=function(o,l){if("1.2.840.10008.1.2.1.99"===o){if(d&&d.inflater){var u=d.inflater(t,l);return new a.default(s.default,u,0)}if(void 0!==e&&this.module!==e){var h=r(68),c=(0,f.default)(t,l,t.length-l),p=h.inflateRawSync(c),g=(0,n.default)(t,p.length+l);return t.copy(g,0,0,l),p.copy(g,l),new a.default(s.default,g,0)}if("undefined"!=typeof pako){var m=t.slice(l),_=pako.inflateRaw(m),y=(0,n.default)(t,_.length+l);return y.set(t.slice(0,l),0),y.set(_,l),new a.default(s.default,y,0)}throw"dicomParser.parseDicom: no inflater available to handle deflate transfer syntax"}if("1.2.840.10008.1.2.2"===o)return new a.default(i.default,t,l);return new a.default(s.default,t,l)}(c,l.position),m=new o.default(g.byteArrayParser,g.byteArray,{});m.warnings=g.warnings;try{p?h.parseDicomDataSetExplicit(m,g,g.byteArray.length,d):h.parseDicomDataSetImplicit(m,g,g.byteArray.length,d)}catch(e){var _={exception:e,dataSet:m};throw _}return m}return p=(0,l.default)(t,d),g=c(p),function(e,t){for(var r in e.elements)e.elements.hasOwnProperty(r)&&(t.elements[r]=e.elements[r]);return void 0!==e.warnings&&(t.warnings=e.warnings.concat(t.warnings)),t}(p,g);var p,g};var n=c(r(22)),i=c(r(37)),a=c(r(12)),o=c(r(7)),s=c(r(21)),l=c(r(36)),f=c(r(11)),u=d(r(14)),h=d(r(16));function d(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function c(e){return e&&e.__esModule?e:{default:e}}}).call(this,r(69)(e))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default="1.8.2"},function(e,t){t.read=function(e,t,r,n,i){var a,o,s=8*i-n-1,l=(1<>1,u=-7,h=r?i-1:0,d=r?-1:1,c=e[t+h];for(h+=d,a=c&(1<<-u)-1,c>>=-u,u+=s;u>0;a=256*a+e[t+h],h+=d,u-=8);for(o=a&(1<<-u)-1,a>>=-u,u+=n;u>0;o=256*o+e[t+h],h+=d,u-=8);if(0===a)a=1-f;else{if(a===l)return o?NaN:1/0*(c?-1:1);o+=Math.pow(2,n),a-=f}return(c?-1:1)*o*Math.pow(2,a-n)},t.write=function(e,t,r,n,i,a){var o,s,l,f=8*a-i-1,u=(1<>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,c=n?0:a-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,o=u):(o=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-o))<1&&(o--,l*=2),(t+=o+h>=1?d/l:d*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(t*l-1)*Math.pow(2,i),o+=h):(s=t*Math.pow(2,h-1)*Math.pow(2,i),o=0));i>=8;e[r+c]=255&s,c+=p,s/=256,i-=8);for(o=o<0;e[r+c]=255&o,c+=p,o/=256,f-=8);e[r+c-p]|=128*g}},function(e,t,r){"use strict";t.byteLength=function(e){return 3*e.length/4-f(e)},t.toByteArray=function(e){var t,r,n,o,s,l=e.length;o=f(e),s=new a(3*l/4-o),r=o>0?l-4:l;var u=0;for(t=0;t>16&255,s[u++]=n>>8&255,s[u++]=255&n;2===o?(n=i[e.charCodeAt(t)]<<2|i[e.charCodeAt(t+1)]>>4,s[u++]=255&n):1===o&&(n=i[e.charCodeAt(t)]<<10|i[e.charCodeAt(t+1)]<<4|i[e.charCodeAt(t+2)]>>2,s[u++]=n>>8&255,s[u++]=255&n);return s},t.fromByteArray=function(e){for(var t,r=e.length,i=r%3,a="",o=[],s=0,l=r-i;sl?l:s+16383));1===i?(t=e[r-1],a+=n[t>>2],a+=n[t<<4&63],a+="=="):2===i&&(t=(e[r-2]<<8)+e[r-1],a+=n[t>>10],a+=n[t>>4&63],a+=n[t<<2&63],a+="=");return o.push(a),o.join("")};for(var n=[],i=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,l=o.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===e[t-2]?2:"="===e[t-1]?1:0}function u(e,t,r){for(var i,a,o=[],s=t;s>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(e,t,r){"use strict";function n(e,t){return 255===e.byteArray[t]&&217===e.byteArray[t+1]}function i(e,t,r){var i=t.fragments[r];return!(!n(e,i.position+i.length-2)&&!n(e,i.position+i.length-3))}function a(e,t,r){for(var n=r;n0&&t<=12&&e>0&&e<=function(e,t){switch(e){case 2:return t%4==0&&t%100||t%400==0?29:28;case 9:case 4:case 6:case 11:return 30;default:return 31}}(t,r)}(i,n,r))throw"invalid DA '"+e+"'";return{year:r,month:n,day:i}}if(t)throw"invalid DA '"+e+"'";return}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(e.length>=2){var r=parseInt(e.substring(0,2),10),n=e.length>=4?parseInt(e.substring(2,4),10):void 0,i=e.length>=6?parseInt(e.substring(4,6),10):void 0,a=e.length>=8?parseInt(e.substring(7,13),10):void 0;if(t&&(isNaN(r)||void 0!==n&&isNaN(n)||void 0!==i&&isNaN(i)||void 0!==a&&isNaN(a)||r<0||r>23||n&&(n<0||n>59)||i&&(i<0||i>59)||a&&(a<0||a>999999)))throw"invalid TM '"+e+"'";return{hours:r,minutes:n,seconds:i,fractionalSeconds:a}}if(t)throw"invalid TM '"+e+"'";return}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createJPEGBasicOffsetTable=t.explicitDataSetToJS=t.explicitElementToString=t.parseDA=t.parseTM=t.parsePN=t.isPrivateTag=t.isStringVr=void 0;var n=r(25),i=f(r(77)),a=f(r(76)),o=f(r(43)),s=f(r(75)),l=f(r(74));function f(e){return e&&e.__esModule?e:{default:e}}t.isStringVr=n.isStringVr,t.isPrivateTag=n.isPrivateTag,t.parsePN=n.parsePN,t.parseTM=i.default,t.parseDA=a.default,t.explicitElementToString=o.default,t.explicitDataSetToJS=s.default,t.createJPEGBasicOffsetTable=l.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.readTag=t.readSequenceItem=t.readSequenceItemsImplicit=t.readSequenceItemsExplicit=t.readPart10Header=t.readEncapsulatedPixelDataFromFragments=t.readEncapsulatedPixelData=t.readEncapsulatedImageFrame=t.readDicomElementImplicit=t.readDicomElementExplicit=t.parseDicom=t.littleEndianByteArrayParser=t.findItemDelimitationItemAndSetElementLength=t.findEndOfEncapsulatedElement=t.findAndSetUNElementLength=t.DataSet=t.sharedCopy=t.ByteStream=t.bigEndianByteArrayParser=t.version=t.alloc=t.readFixedString=t.parseDicomDataSetImplicit=t.parseDicomDataSetExplicit=t.createJPEGBasicOffsetTable=t.explicitDataSetToJS=t.explicitElementToString=t.parseDA=t.parseTM=t.parsePN=t.isPrivateTag=t.isStringVr=void 0;var n=r(78),i=r(16),a=r(14),o=P(r(22)),s=P(r(71)),l=P(r(37)),f=P(r(12)),u=P(r(11)),h=P(r(7)),d=P(r(41)),c=P(r(42)),p=P(r(24)),g=P(r(21)),m=P(r(70)),_=P(r(15)),y=P(r(23)),b=P(r(26)),v=P(r(44)),w=P(r(17)),E=P(r(36)),x=P(r(40)),S=P(r(39)),k=P(r(13)),A=P(r(4));function P(e){return e&&e.__esModule?e:{default:e}}var T={isStringVr:n.isStringVr,isPrivateTag:n.isPrivateTag,parsePN:n.parsePN,parseTM:n.parseTM,parseDA:n.parseDA,explicitElementToString:n.explicitElementToString,explicitDataSetToJS:n.explicitDataSetToJS,createJPEGBasicOffsetTable:n.createJPEGBasicOffsetTable,parseDicomDataSetExplicit:i.parseDicomDataSetExplicit,parseDicomDataSetImplicit:i.parseDicomDataSetImplicit,readFixedString:a.readFixedString,alloc:o.default,version:s.default,bigEndianByteArrayParser:l.default,ByteStream:f.default,sharedCopy:u.default,DataSet:h.default,findAndSetUNElementLength:d.default,findEndOfEncapsulatedElement:c.default,findItemDelimitationItemAndSetElementLength:p.default,littleEndianByteArrayParser:g.default,parseDicom:m.default,readDicomElementExplicit:_.default,readDicomElementImplicit:y.default,readEncapsulatedImageFrame:b.default,readEncapsulatedPixelData:v.default,readEncapsulatedPixelDataFromFragments:w.default,readPart10Header:E.default,readSequenceItemsExplicit:x.default,readSequenceItemsImplicit:S.default,readSequenceItem:k.default,readTag:A.default};t.isStringVr=n.isStringVr,t.isPrivateTag=n.isPrivateTag,t.parsePN=n.parsePN,t.parseTM=n.parseTM,t.parseDA=n.parseDA,t.explicitElementToString=n.explicitElementToString,t.explicitDataSetToJS=n.explicitDataSetToJS,t.createJPEGBasicOffsetTable=n.createJPEGBasicOffsetTable,t.parseDicomDataSetExplicit=i.parseDicomDataSetExplicit,t.parseDicomDataSetImplicit=i.parseDicomDataSetImplicit,t.readFixedString=a.readFixedString,t.alloc=o.default,t.version=s.default,t.bigEndianByteArrayParser=l.default,t.ByteStream=f.default,t.sharedCopy=u.default,t.DataSet=h.default,t.findAndSetUNElementLength=d.default,t.findEndOfEncapsulatedElement=c.default,t.findItemDelimitationItemAndSetElementLength=p.default,t.littleEndianByteArrayParser=g.default,t.parseDicom=m.default,t.readDicomElementExplicit=_.default,t.readDicomElementImplicit=y.default,t.readEncapsulatedImageFrame=b.default,t.readEncapsulatedPixelData=v.default,t.readEncapsulatedPixelDataFromFragments=w.default,t.readPart10Header=E.default,t.readSequenceItemsExplicit=x.default,t.readSequenceItemsImplicit=S.default,t.readSequenceItem=k.default,t.readTag=A.default,t.default=T}])}); -//# sourceMappingURL=dicomParser.min.js.map -/***/ }), +function Buffer (arg, encodingOrOffset, length) { + if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { + return new Buffer(arg, encodingOrOffset, length) + } -/***/ "./node_modules/ieee754/index.js": -/*!***************************************!*\ - !*** ./node_modules/ieee754/index.js ***! - \***************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { + // 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) +} -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] +Buffer.poolSize = 8192 // not used by this implementation - i += d +// TODO: Legacy, not needed anymore. Remove in next major version. +Buffer._augment = function (arr) { + arr.__proto__ = Buffer.prototype + return arr +} - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} +function from (that, value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number') + } - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} + if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { + return fromArrayBuffer(that, value, encodingOrOffset, length) + } - 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 + if (typeof value === 'string') { + return fromString(that, value, encodingOrOffset) } - 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 + return fromObject(that, value) +} - value = Math.abs(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 (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 (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 + }) + } +} - 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 - } +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') } +} - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} +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) +} - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(null, size, fill, encoding) +} - buffer[offset + i - d] |= s * 128 +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' + } -/***/ "./node_modules/isarray/index.js": -/*!***************************************!*\ - !*** ./node_modules/isarray/index.js ***! - \***************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('"encoding" must be a valid string encoding') + } -var toString = {}.toString; + var length = byteLength(string, encoding) | 0 + that = createBuffer(that, length) -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; -}; + 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 +} -/***/ "./node_modules/jpeg-lossless-decoder-js/src/component-spec.js": -/*!*********************************************************************!*\ - !*** ./node_modules/jpeg-lossless-decoder-js/src/component-spec.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +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 +} -"use strict"; -/* - * Copyright (C) 2015 Michael Martinez - * Changes: Added support for selection values 2-7, fixed minor bugs & - * warnings, split into multiple class files, and general clean up. - * - * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. - */ +function fromArrayBuffer (that, array, byteOffset, length) { + array.byteLength // this throws if `array` is not a valid ArrayBuffer -/* - * Copyright (C) Helmut Dersch - * - * 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: + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('\'offset\' is out of bounds') + } - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('\'length\' is out of bounds') + } - * 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. - */ + 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) + } -/*jslint browser: true, node: true */ -/*global require, module */ + 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 + } -/*** Imports ***/ -var jpeg = jpeg || {}; -jpeg.lossless = jpeg.lossless || {}; + 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) + } -/*** Constructor ***/ -jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || function () { - this.hSamp = 0; // Horizontal sampling factor - this.quantTableSel = 0; // Quantization table destination selector - this.vSamp = 0; // Vertical -}; + 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.') +} -/*** Exports ***/ +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 +} -var moduleType = typeof module; -if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.ComponentSpec; +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') + } -/***/ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js": -/*!******************************************************************!*\ - !*** ./node_modules/jpeg-lossless-decoder-js/src/data-stream.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { + if (a === b) return 0 -"use strict"; -/* - * Copyright (C) 2015 Michael Martinez - * Changes: Added support for selection values 2-7, fixed minor bugs & - * warnings, split into multiple class files, and general clean up. - * - * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. - */ + var x = a.length + var y = b.length -/* - * Copyright (C) Helmut Dersch - * - * 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. + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } - * 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. - */ + if (x < y) return -1 + if (y < x) return 1 + return 0 +} -/*jslint browser: true, node: true */ -/*global require, module */ +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) + } -/*** Imports ***/ -var jpeg = jpeg || {}; -jpeg.lossless = jpeg.lossless || {}; + 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 +} -/*** Constructor ***/ -jpeg.lossless.DataStream = jpeg.lossless.DataStream || function (data, offset, length) { - this.buffer = new DataView(data, offset, length); - this.index = 0; -}; +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 -jpeg.lossless.DataStream.prototype.get16 = function () { - var value = this.buffer.getUint16(this.index, false); - this.index += 2; - return value; -}; +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 '' + } -jpeg.lossless.DataStream.prototype.get8 = function () { - var value = this.buffer.getUint8(this.index); - this.index += 1; - return value; -}; + if (end === undefined || end > this.length) { + end = this.length + } + if (end <= 0) { + return '' + } -/*** Exports ***/ + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 -var moduleType = typeof module; -if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.DataStream; -} + if (end <= start) { + return '' + } + if (!encoding) encoding = 'utf8' -/***/ }), + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) -/***/ "./node_modules/jpeg-lossless-decoder-js/src/decoder.js": -/*!**************************************************************!*\ - !*** ./node_modules/jpeg-lossless-decoder-js/src/decoder.js ***! - \**************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) -"use strict"; -/* - * Copyright (C) 2015 Michael Martinez - * Changes: Added support for selection values 2-7, fixed minor bugs & - * warnings, split into multiple class files, and general clean up. - * - * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. - */ + case 'ascii': + return asciiSlice(this, start, end) -/* - * Copyright (C) Helmut Dersch - * - * 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: + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. + case 'base64': + return base64Slice(this, start, end) - * 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. - */ + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) -/*jslint browser: true, node: true */ -/*global require, module */ + 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 +} -/*** Imports ***/ -var jpeg = jpeg || {}; -jpeg.lossless = jpeg.lossless || {}; -jpeg.lossless.DataStream = jpeg.lossless.DataStream || (( true) ? __webpack_require__(/*! ./data-stream.js */ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js") : undefined); -jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || (( true) ? __webpack_require__(/*! ./huffman-table.js */ "./node_modules/jpeg-lossless-decoder-js/src/huffman-table.js") : undefined); -jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || (( true) ? __webpack_require__(/*! ./quantization-table.js */ "./node_modules/jpeg-lossless-decoder-js/src/quantization-table.js") : undefined); -jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || (( true) ? __webpack_require__(/*! ./scan-header.js */ "./node_modules/jpeg-lossless-decoder-js/src/scan-header.js") : undefined); -jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || (( true) ? __webpack_require__(/*! ./frame-header.js */ "./node_modules/jpeg-lossless-decoder-js/src/frame-header.js") : undefined); -jpeg.lossless.Utils = jpeg.lossless.Utils || (( true) ? __webpack_require__(/*! ./utils.js */ "./node_modules/jpeg-lossless-decoder-js/src/utils.js") : undefined); +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 +} -/*** Constructor ***/ -jpeg.lossless.Decoder = jpeg.lossless.Decoder || function (buffer, numBytes) { - this.buffer = buffer; - this.frame = new jpeg.lossless.FrameHeader(); - this.huffTable = new jpeg.lossless.HuffmanTable(); - this.quantTable = new jpeg.lossless.QuantizationTable(); - this.scan = new jpeg.lossless.ScanHeader(); - this.DU = jpeg.lossless.Utils.createArray(10, 4, 64); // at most 10 data units in a MCU, at most 4 data units in one component - this.HuffTab = jpeg.lossless.Utils.createArray(4, 2, 50 * 256); - this.IDCT_Source = []; - this.nBlock = []; // number of blocks in the i-th Comp in a scan - this.acTab = jpeg.lossless.Utils.createArray(10, 1); // ac HuffTab for the i-th Comp in a scan - this.dcTab = jpeg.lossless.Utils.createArray(10, 1); // dc HuffTab for the i-th Comp in a scan - this.qTab = jpeg.lossless.Utils.createArray(10, 1); // quantization table for the i-th Comp in a scan - this.marker = 0; - this.markerIndex = 0; - this.numComp = 0; - this.restartInterval = 0; - this.selection = 0; - this.xDim = 0; - this.yDim = 0; - this.xLoc = 0; - this.yLoc = 0; - this.numBytes = 0; - this.outputData = null; - this.restarting = false; - this.mask = 0; +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 +} - if (typeof numBytes !== "undefined") { - this.numBytes = numBytes; - } -}; +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 +} -/*** Static Pseudo-constants ***/ +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 '' +} -jpeg.lossless.Decoder.IDCT_P = [0, 5, 40, 16, 45, 2, 7, 42, 21, 56, 8, 61, 18, 47, 1, 4, 41, 23, 58, 13, 32, 24, 37, 10, 63, 17, 44, 3, 6, 43, 20, - 57, 15, 34, 29, 48, 53, 26, 39, 9, 60, 19, 46, 22, 59, 12, 33, 31, 50, 55, 25, 36, 11, 62, 14, 35, 28, 49, 52, 27, 38, 30, 51, 54]; -jpeg.lossless.Decoder.TABLE = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, - 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63]; -jpeg.lossless.Decoder.MAX_HUFFMAN_SUBTREE = 50; -jpeg.lossless.Decoder.MSB = 0x80000000; -jpeg.lossless.Decoder.RESTART_MARKER_BEGIN = 0xFFD0; -jpeg.lossless.Decoder.RESTART_MARKER_END = 0xFFD7; +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (!Buffer.isBuffer(target)) { + throw new TypeError('Argument must be a Buffer') + } -/*** Prototype Methods ***/ + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } -jpeg.lossless.Decoder.prototype.decompress = function (buffer, offset, length) { - return this.decode(buffer, offset, length).buffer; -}; + 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 -jpeg.lossless.Decoder.prototype.decode = function (buffer, offset, length, numBytes) { - /*jslint bitwise: true */ + if (this === target) return 0 - var current, scanNum = 0, pred = [], i, compN, temp = [], index = [], mcuNum; + var x = thisEnd - thisStart + var y = end - start + var len = Math.min(x, y) - if (typeof buffer !== "undefined") { - this.buffer = buffer; - } + var thisCopy = this.slice(thisStart, thisEnd) + var targetCopy = target.slice(start, end) - if (typeof numBytes !== "undefined") { - this.numBytes = numBytes; + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break } + } - this.stream = new jpeg.lossless.DataStream(this.buffer, offset, length); - this.buffer = null; + if (x < y) return -1 + if (y < x) return 1 + return 0 +} - this.xLoc = 0; - this.yLoc = 0; - current = this.stream.get16(); +// 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 - if (current !== 0xFFD8) { // SOI - throw new Error("Not a JPEG file"); - } + // 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) + } - current = this.stream.get16(); + // 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 + } - while ((((current >> 4) !== 0x0FFC) || (current === 0xFFC4))) { // SOF 0~15 - switch (current) { - case 0xFFC4: // DHT - this.huffTable.read(this.stream, this.HuffTab); - break; - case 0xFFCC: // DAC - throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); - case 0xFFDB: - this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); - break; - case 0xFFDD: - this.restartInterval = this.readNumber(); - break; - case 0xFFE0: - case 0xFFE1: - case 0xFFE2: - case 0xFFE3: - case 0xFFE4: - case 0xFFE5: - case 0xFFE6: - case 0xFFE7: - case 0xFFE8: - case 0xFFE9: - case 0xFFEA: - case 0xFFEB: - case 0xFFEC: - case 0xFFED: - case 0xFFEE: - case 0xFFEF: - this.readApp(); - break; - case 0xFFFE: - this.readComment(); - break; - default: - if ((current >> 8) !== 0xFF) { - throw new Error("ERROR: format throw new IOException! (decode)"); - } - } + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } - current = this.stream.get16(); + // 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 } - - if ((current < 0xFFC0) || (current > 0xFFC7)) { - throw new Error("ERROR: could not handle arithmetic code!"); + 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) + } - this.frame.read(this.stream); - current = this.stream.get16(); + throw new TypeError('val must be string, number or Buffer') +} - do { - while (current !== 0x0FFDA) { // SOS - switch (current) { - case 0xFFC4: // DHT - this.huffTable.read(this.stream, this.HuffTab); - break; - case 0xFFCC: // DAC - throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); - case 0xFFDB: - this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); - break; - case 0xFFDD: - this.restartInterval = this.readNumber(); - break; - case 0xFFE0: - case 0xFFE1: - case 0xFFE2: - case 0xFFE3: - case 0xFFE4: - case 0xFFE5: - case 0xFFE6: - case 0xFFE7: - case 0xFFE8: - case 0xFFE9: - case 0xFFEA: - case 0xFFEB: - case 0xFFEC: - case 0xFFED: - case 0xFFEE: - case 0xFFEF: - this.readApp(); - break; - case 0xFFFE: - this.readComment(); - break; - default: - if ((current >> 8) !== 0xFF) { - throw new Error("ERROR: format throw new IOException! (Parser.decode)"); - } - } +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + var indexSize = 1 + var arrLength = arr.length + var valLength = val.length - current = this.stream.get16(); - } + 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 + } + } - this.precision = this.frame.precision; - this.components = this.frame.components; + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } - if (!this.numBytes) { - this.numBytes = parseInt(Math.ceil(this.precision / 8)); + 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 + } + } - if (this.numBytes == 1) { - this.mask = 0xFF; - } else { - this.mask = 0xFFFF; - } + return -1 +} - this.scan.read(this.stream); - this.numComp = this.scan.numComp; - this.selection = this.scan.selection; +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} - if (this.numBytes === 1) { - if (this.numComp === 3) { - this.getter = this.getValueRGB; - this.setter = this.setValueRGB; - this.output = this.outputRGB; - } else { - this.getter = this.getValue8; - this.setter = this.setValue8; - this.output = this.outputSingle; - } - } else { - this.getter = this.getValue16; - this.setter = this.setValue16; - this.output = this.outputSingle; - } +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} - switch (this.selection) { - case 2: - this.selector = this.select2; - break; - case 3: - this.selector = this.select3; - break; - case 4: - this.selector = this.select4; - break; - case 5: - this.selector = this.select5; - break; - case 6: - this.selector = this.select6; - break; - case 7: - this.selector = this.select7; - break; - default: - this.selector = this.select1; - break; - } +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} - this.scanComps = this.scan.components; - this.quantTables = this.quantTable.quantTables; +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 + } + } - for (i = 0; i < this.numComp; i+=1) { - compN = this.scanComps[i].scanCompSel; - this.qTab[i] = this.quantTables[this.components[compN].quantTableSel]; - this.nBlock[i] = this.components[compN].vSamp * this.components[compN].hSamp; - this.dcTab[i] = this.HuffTab[this.scanComps[i].dcTabSel][0]; - this.acTab[i] = this.HuffTab[this.scanComps[i].acTabSel][1]; - } + // must be an even number of digits + var strLen = string.length + if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') - this.xDim = this.frame.dimX; - this.yDim = this.frame.dimY; - this.outputData = new DataView(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp)); + 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 +} - scanNum+=1; +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} - while (true) { // Decode one scan - temp[0] = 0; - index[0] = 0; +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} - for (i = 0; i < 10; i+=1) { - pred[i] = (1 << (this.precision - 1)); - } +function latin1Write (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} - if (this.restartInterval === 0) { - current = this.decodeUnit(pred, temp, index); +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} - while ((current === 0) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim))) { - this.output(pred); - current = this.decodeUnit(pred, temp, index); - } +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} - break; //current=MARKER - } +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' + ) + } - for (mcuNum = 0; mcuNum < this.restartInterval; mcuNum+=1) { - this.restarting = (mcuNum == 0); - current = this.decodeUnit(pred, temp, index); - this.output(pred); + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining - if (current !== 0) { - break; - } - } + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } - if (current === 0) { - if (this.markerIndex !== 0) { - current = (0xFF00 | this.marker); - this.markerIndex = 0; - } else { - current = this.stream.get16(); - } - } + if (!encoding) encoding = 'utf8' - if (!((current >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && - (current <= jpeg.lossless.Decoder.RESTART_MARKER_END))) { - break; //current=MARKER - } - } + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) - if ((current === 0xFFDC) && (scanNum === 1)) { //DNL - this.readNumber(); - current = this.stream.get16(); - } - } while ((current !== 0xFFD9) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) && (scanNum === 0)); + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) - return this.outputData; -}; + 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) -jpeg.lossless.Decoder.prototype.decodeUnit = function (prev, temp, index) { - if (this.numComp == 1) { - return this.decodeSingle(prev, temp, index); - } else if (this.numComp == 3) { - return this.decodeRGB(prev, temp, index); - } else { - return -1; + 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)) + } +} -jpeg.lossless.Decoder.prototype.select1 = function (compOffset) { - return this.getPreviousX(compOffset); -}; +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 -jpeg.lossless.Decoder.prototype.select2 = function (compOffset) { - return this.getPreviousY(compOffset); -}; + 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 + } -jpeg.lossless.Decoder.prototype.select3 = function (compOffset) { - return this.getPreviousXY(compOffset); -}; + 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() + } -jpeg.lossless.Decoder.prototype.select4 = function (compOffset) { - return (this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) - this.getPreviousXY(compOffset); -}; + // 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 +} -jpeg.lossless.Decoder.prototype.select5 = function (compOffset) { - return this.getPreviousX(compOffset) + ((this.getPreviousY(compOffset) - this.getPreviousXY(compOffset)) >> 1); -}; +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 -jpeg.lossless.Decoder.prototype.select6 = function (compOffset) { - return this.getPreviousY(compOffset) + ((this.getPreviousX(compOffset) - this.getPreviousXY(compOffset)) >> 1); -}; + 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 +} -jpeg.lossless.Decoder.prototype.select7 = function (compOffset) { - return ((this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) / 2); -}; +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 + } -jpeg.lossless.Decoder.prototype.decodeRGB = function (prev, temp, index) { - /*jslint bitwise: true */ + if (end < start) end = start - var value, actab, dctab, qtab, ctrC, i, k, j; + 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] + } + } - prev[0] = this.selector(0); - prev[1] = this.selector(1); - prev[2] = this.selector(2); + return newBuf +} - for (ctrC = 0; ctrC < this.numComp; ctrC+=1) { - qtab = this.qTab[ctrC]; - actab = this.acTab[ctrC]; - dctab = this.dcTab[ctrC]; - for (i = 0; i < this.nBlock[ctrC]; i+=1) { - for (k = 0; k < this.IDCT_Source.length; k+=1) { - this.IDCT_Source[k] = 0; - } - - value = this.getHuffmanValue(dctab, temp, index); - - if (value >= 0xFF00) { - return value; - } +/* + * 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') +} - prev[ctrC] = this.IDCT_Source[0] = prev[ctrC] + this.getn(index, value, temp, index); - this.IDCT_Source[0] *= qtab[0]; +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) - for (j = 1; j < 64; j+=1) { - value = this.getHuffmanValue(actab, temp, index); + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } - if (value >= 0xFF00) { - return value; - } + return val +} - j += (value >> 4); +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } - if ((value & 0x0F) === 0) { - if ((value >> 4) === 0) { - break; - } - } else { - this.IDCT_Source[jpeg.lossless.Decoder.IDCT_P[j]] = this.getn(index, value & 0x0F, temp, index) * qtab[j]; - } - } - } - } + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } - return 0; -}; + 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) +} -jpeg.lossless.Decoder.prototype.decodeSingle = function (prev, temp, index) { - /*jslint bitwise: true */ +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} - var value, i, n, nRestart; +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) - if (this.restarting) { - this.restarting = false; - prev[0] = (1 << (this.frame.precision - 1)); - } else { - prev[0] = this.selector(); - } + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} - for (i = 0; i < this.nBlock[0]; i+=1) { - value = this.getHuffmanValue(this.dcTab[0], temp, index); - if (value >= 0xFF00) { - return value; - } +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) - n = this.getn(prev, value, temp, index); - nRestart = (n >> 8); + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} - if ((nRestart >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && (nRestart <= jpeg.lossless.Decoder.RESTART_MARKER_END)) { - return nRestart; - } +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) - prev[0] += n; - } + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 - return 0; -}; + 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) -// Huffman table for fast search: (HuffTab) 8-bit Look up table 2-layer search architecture, 1st-layer represent 256 node (8 bits) if codeword-length > 8 -// bits, then the entry of 1st-layer = (# of 2nd-layer table) | MSB and it is stored in the 2nd-layer Size of tables in each layer are 256. -// HuffTab[*][*][0-256] is always the only 1st-layer table. -// -// An entry can be: (1) (# of 2nd-layer table) | MSB , for code length > 8 in 1st-layer (2) (Code length) << 8 | HuffVal -// -// HuffmanValue(table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) -// ): -// return: Huffman Value of table -// 0xFF?? if it receives a MARKER -// Parameter: table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) -// temp temp storage for remainded bits -// index index to bit of temp -// in FILE pointer -// Effect: -// temp store new remainded bits -// index change to new index -// in change to new position -// NOTE: -// Initial by temp=0; index=0; -// NOTE: (explain temp and index) -// temp: is always in the form at calling time or returning time -// | byte 4 | byte 3 | byte 2 | byte 1 | -// | 0 | 0 | 00000000 | 00000??? | if not a MARKER -// ^index=3 (from 0 to 15) -// 321 -// NOTE (marker and marker_index): -// If get a MARKER from 'in', marker=the low-byte of the MARKER -// and marker_index=9 -// If marker_index=9 then index is always > 8, or HuffmanValue() -// will not be called -jpeg.lossless.Decoder.prototype.getHuffmanValue = function (table, temp, index) { - /*jslint bitwise: true */ + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 - var code, input, mask; - mask = 0xFFFF; + if (val >= mul) val -= Math.pow(2, 8 * byteLength) - if (index[0] < 8) { - temp[0] <<= 8; - input = this.stream.get8(); - if (input === 0xFF) { - this.marker = this.stream.get8(); - if (this.marker !== 0) { - this.markerIndex = 9; - } - } - temp[0] |= input; - } else { - index[0] -= 8; - } + return val +} - code = table[temp[0] >> index[0]]; +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) +} - if ((code & jpeg.lossless.Decoder.MSB) !== 0) { - if (this.markerIndex !== 0) { - this.markerIndex = 0; - return 0xFF00 | this.marker; - } +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 +} - temp[0] &= (mask >> (16 - index[0])); - temp[0] <<= 8; - input = this.stream.get8(); +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 +} - if (input === 0xFF) { - this.marker = this.stream.get8(); - if (this.marker !== 0) { - this.markerIndex = 9; - } - } +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) - temp[0] |= input; - code = table[((code & 0xFF) * 256) + (temp[0] >> index[0])]; - index[0] += 8; - } + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} - index[0] += 8 - (code >> 8); +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) - if (index[0] < 0) { - throw new Error("index=" + index[0] + " temp=" + temp[0] + " code=" + code + " in HuffmanValue()"); - } + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} - if (index[0] < this.markerIndex) { - this.markerIndex = 0; - return 0xFF00 | this.marker; - } +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} - temp[0] &= (mask >> (16 - index[0])); - return code & 0xFF; -}; +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) +} -jpeg.lossless.Decoder.prototype.getn = function (PRED, n, temp, index) { - /*jslint bitwise: true */ +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') +} - var result, one, n_one, mask, input; - one = 1; - n_one = -1; - mask = 0xFFFF; +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) + } - if (n === 0) { - return 0; - } + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } - if (n === 16) { - if (PRED[0] >= 0) { - return -32768; - } else { - return 32768; - } - } + return offset + byteLength +} - index[0] -= n; +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) + } - if (index[0] >= 0) { - if ((index[0] < this.markerIndex) && !this.isLastPixel()) { // this was corrupting the last pixel in some cases - this.markerIndex = 0; - return (0xFF00 | this.marker) << 8; - } + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } - result = temp[0] >> index[0]; - temp[0] &= (mask >> (16 - index[0])); - } else { - temp[0] <<= 8; - input = this.stream.get8(); + return offset + byteLength +} - if (input === 0xFF) { - this.marker = this.stream.get8(); - if (this.marker !== 0) { - this.markerIndex = 9; - } - } +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 +} - temp[0] |= input; - index[0] += 8; +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 + } +} - if (index[0] < 0) { - if (this.markerIndex !== 0) { - this.markerIndex = 0; - return (0xFF00 | this.marker) << 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 +} - temp[0] <<= 8; - input = this.stream.get8(); +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 +} - if (input === 0xFF) { - this.marker = this.stream.get8(); - if (this.marker !== 0) { - this.markerIndex = 9; - } - } +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 + } +} - temp[0] |= input; - index[0] += 8; - } +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 +} - if (index[0] < 0) { - throw new Error("index=" + index[0] + " in getn()"); - } +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 +} - if (index[0] < this.markerIndex) { - this.markerIndex = 0; - return (0xFF00 | this.marker) << 8; - } +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) - result = temp[0] >> index[0]; - temp[0] &= (mask >> (16 - index[0])); - } + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } - if (result < (one << (n - 1))) { - result += (n_one << n) + 1; + 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 result; -}; - + 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) -jpeg.lossless.Decoder.prototype.getPreviousX = function (compOffset) { - /*jslint bitwise: true */ + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } - if (this.xLoc > 0) { - return this.getter((((this.yLoc * this.xDim) + this.xLoc) - 1), compOffset); - } else if (this.yLoc > 0) { - return this.getPreviousY(compOffset); - } else { - return (1 << (this.frame.precision - 1)); + 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 } -}; - - - -jpeg.lossless.Decoder.prototype.getPreviousXY = function (compOffset) { - /*jslint bitwise: true */ + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } - if ((this.xLoc > 0) && (this.yLoc > 0)) { - return this.getter(((((this.yLoc - 1) * this.xDim) + this.xLoc) - 1), compOffset); - } else { - return this.getPreviousY(compOffset); - } -}; + 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 +} -jpeg.lossless.Decoder.prototype.getPreviousY = function (compOffset) { - /*jslint bitwise: true */ +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 +} - if (this.yLoc > 0) { - return this.getter((((this.yLoc - 1) * this.xDim) + this.xLoc), compOffset); - } else { - return this.getPreviousX(compOffset); - } -}; +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') +} -jpeg.lossless.Decoder.prototype.isLastPixel = function () { - return (this.xLoc === (this.xDim - 1)) && (this.yLoc === (this.yDim - 1)); -}; +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) +} -jpeg.lossless.Decoder.prototype.outputSingle = function (PRED) { - if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { - this.setter((((this.yLoc * this.xDim) + this.xLoc)), this.mask & PRED[0]); +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 +} - this.xLoc+=1; +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} - if (this.xLoc >= this.xDim) { - this.yLoc+=1; - this.xLoc = 0; - } - } -}; +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 -jpeg.lossless.Decoder.prototype.outputRGB = function (PRED) { - var offset = ((this.yLoc * this.xDim) + this.xLoc); + // 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') - if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { - this.setter(offset, PRED[0], 0); - this.setter(offset, PRED[1], 1); - this.setter(offset, PRED[2], 2); + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } - this.xLoc+=1; + var len = end - start + var i - if (this.xLoc >= this.xDim) { - this.yLoc+=1; - this.xLoc = 0; - } + 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 + ) + } -jpeg.lossless.Decoder.prototype.setValue16 = function (index, val) { - this.outputData.setInt16(index * 2, val, true); -}; + 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') + } -jpeg.lossless.Decoder.prototype.getValue16 = function (index) { - return this.outputData.getInt16(index * 2, true); -}; + if (end <= start) { + return this + } + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + if (!val) val = 0 -jpeg.lossless.Decoder.prototype.setValue8 = function (index, val) { - this.outputData.setInt8(index, val); -}; + 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 +// ================ -jpeg.lossless.Decoder.prototype.getValue8 = function (index) { - return this.outputData.getInt8(index); -}; +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, '') +} -jpeg.lossless.Decoder.prototype.setValueRGB = function (index, val, compOffset) { - this.outputData.setUint8(index * 3 + compOffset, val); -}; +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) -jpeg.lossless.Decoder.prototype.getValueRGB = function (index, compOffset) { - return this.outputData.getUint8(index * 3 + compOffset); -}; + // 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 + } -jpeg.lossless.Decoder.prototype.readApp = function() { - var count = 0, length = this.stream.get16(); - count += 2; + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } - while (count < length) { - this.stream.get8(); - count+=1; + // 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) } - return length; -}; - - - -jpeg.lossless.Decoder.prototype.readComment = function () { - var sb = "", count = 0, length; - - length = this.stream.get16(); - count += 2; + leadSurrogate = null - while (count < length) { - sb += this.stream.get8(); - count+=1; + // 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 sb; -}; - - + return bytes +} -jpeg.lossless.Decoder.prototype.readNumber = function() { - var Ld = this.stream.get16(); +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 +} - if (Ld !== 4) { - throw new Error("ERROR: Define number format throw new IOException [Ld!=4]"); - } +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break - return this.stream.get16(); -}; + 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)) +} -/*** Exports ***/ +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 +} -var moduleType = typeof module; -if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.Decoder; +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/jpeg-lossless-decoder-js/src/frame-header.js": -/*!*******************************************************************!*\ - !*** ./node_modules/jpeg-lossless-decoder-js/src/frame-header.js ***! - \*******************************************************************/ +/***/ "./node_modules/const-ninf-float32/lib/index.js": +/*!******************************************************!*\ + !*** ./node_modules/const-ninf-float32/lib/index.js ***! + \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -/* - * Copyright (C) 2015 Michael Martinez - * Changes: Added support for selection values 2-7, fixed minor bugs & - * warnings, split into multiple class files, and general clean up. - * - * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. - */ -/* - * Copyright (C) Helmut Dersch - * - * 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. +// VARIABLES // - * 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 FLOAT32_VIEW = new Float32Array( 1 ); +var UINT32_VIEW = new Uint32Array( FLOAT32_VIEW.buffer ); -/*jslint browser: true, node: true */ -/*global require, module */ +// 1 11111111 00000000000000000000000 => 4286578688 => 0xff800000 (see IEEE 754-2008) +var NINF = 0xff800000; +// Set the ArrayBuffer bit sequence: +UINT32_VIEW[ 0 ] = NINF; -/*** Imports ***/ -var jpeg = jpeg || {}; -jpeg.lossless = jpeg.lossless || {}; -jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || (( true) ? __webpack_require__(/*! ./component-spec.js */ "./node_modules/jpeg-lossless-decoder-js/src/component-spec.js") : undefined); -jpeg.lossless.DataStream = jpeg.lossless.DataStream || (( true) ? __webpack_require__(/*! ./data-stream.js */ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js") : undefined); +// EXPORTS // +module.exports = FLOAT32_VIEW[ 0 ]; -/*** Constructor ***/ -jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || function () { - this.components = []; // Components - this.dimX = 0; // Number of samples per line - this.dimY = 0; // Number of lines - this.numComp = 0; // Number of component in the frame - this.precision = 0; // Sample Precision (from the original image) -}; +/***/ }), +/***/ "./node_modules/const-pinf-float32/lib/index.js": +/*!******************************************************!*\ + !*** ./node_modules/const-pinf-float32/lib/index.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { -/*** Prototype Methods ***/ +"use strict"; -jpeg.lossless.FrameHeader.prototype.read = function (data) { - /*jslint bitwise: true */ - var count = 0, length, i, c, temp; +// VARIABLES // - length = data.get16(); - count += 2; +var FLOAT32_VIEW = new Float32Array( 1 ); +var UINT32_VIEW = new Uint32Array( FLOAT32_VIEW.buffer ); - this.precision = data.get8(); - count+=1; +// 0 11111111 00000000000000000000000 => 2139095040 => 0x7f800000 (see IEEE 754-2008) +var PINF = 0x7f800000; - this.dimY = data.get16(); - count += 2; +// Set the ArrayBuffer bit sequence: +UINT32_VIEW[ 0 ] = PINF; - this.dimX = data.get16(); - count += 2; - this.numComp = data.get8(); - count+=1; - for (i = 1; i <= this.numComp; i+=1) { - if (count > length) { - throw new Error("ERROR: frame format error"); - } +// EXPORTS // - c = data.get8(); - count+=1; +module.exports = FLOAT32_VIEW[ 0 ]; - if (count >= length) { - throw new Error("ERROR: frame format error [c>=Lf]"); - } - temp = data.get8(); - count+=1; +/***/ }), - if (!this.components[c]) { - this.components[c] = new jpeg.lossless.ComponentSpec(); - } +/***/ "./node_modules/dicom-parser/dist/dicomParser.min.js": +/*!***********************************************************!*\ + !*** ./node_modules/dicom-parser/dist/dicomParser.min.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { - this.components[c].hSamp = temp >> 4; - this.components[c].vSamp = temp & 0x0F; - this.components[c].quantTableSel = data.get8(); - count+=1; - } +/*! dicom-parser - 1.8.2 - 2018-12-05 | (c) 2017 Chris Hafey | https://github.com/cornerstonejs/dicomParser */ +!function(e,t){ true?module.exports=t():undefined}(this,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=79)}([function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";(function(e){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +var n=r(73),i=r(72),a=r(38);function o(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(o()=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|e}function p(e,t){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return Z(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return j(e).length;default:if(n)return Z(e).length;t=(""+t).toLowerCase(),n=!0}}function g(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function m(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=l.from(t,n)),l.isBuffer(t))return 0===t.length?-1:_(e,t,r,n,i);if("number"==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):_(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function _(e,t,r,n,i){var a,o=1,s=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;o=2,s/=2,l/=2,r/=2}function f(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(i){var u=-1;for(a=r;as&&(r=s-l),a=r;a>=0;a--){for(var h=!0,d=0;di&&(n=i):n=i;var a=t.length;if(a%2!=0)throw new TypeError("Invalid hex string");n>a/2&&(n=a/2);for(var o=0;o>8,i=r%256,a.push(i),a.push(n);return a}(t,e.length-r),e,r,n)}function S(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function k(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:f>223?3:f>191?2:1;if(i+h<=r)switch(h){case 1:f<128&&(u=f);break;case 2:128==(192&(a=e[i+1]))&&(l=(31&f)<<6|63&a)>127&&(u=l);break;case 3:a=e[i+1],o=e[i+2],128==(192&a)&&128==(192&o)&&(l=(15&f)<<12|(63&a)<<6|63&o)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:a=e[i+1],o=e[i+2],s=e[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&(l=(15&f)<<18|(63&a)<<12|(63&o)<<6|63&s)>65535&&l<1114112&&(u=l)}null===u?(u=65533,h=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),i+=h}return function(e){var t=e.length;if(t<=A)return String.fromCharCode.apply(String,e);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return D(this,t,r);case"utf8":case"utf-8":return k(this,t,r);case"ascii":return P(this,t,r);case"latin1":case"binary":return T(this,t,r);case"base64":return S(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}.apply(this,arguments)},l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){var e="",r=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(e+=" ... ")),""},l.prototype.compare=function(e,t,r,n,i){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,i>>>=0,this===e)return 0;for(var a=i-n,o=r-t,s=Math.min(a,o),f=this.slice(n,i),u=e.slice(t,r),h=0;hi)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var a=!1;;)switch(n){case"hex":return y(this,e,t,r);case"utf8":case"utf-8":return b(this,e,t,r);case"ascii":return v(this,e,t,r);case"latin1":case"binary":return w(this,e,t,r);case"base64":return E(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,r);default:if(a)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),a=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var A=4096;function P(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;in)&&(r=n);for(var i="",a=t;ar)throw new RangeError("Trying to access beyond buffer length")}function R(e,t,r,n,i,a){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function L(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,a=Math.min(e.length-r,2);i>>8*(n?i:1-i)}function F(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,a=Math.min(e.length-r,4);i>>8*(n?i:3-i)&255}function B(e,t,r,n,i,a){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function U(e,t,r,n,a){return a||B(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function M(e,t,r,n,a){return a||B(e,0,r,8),i.write(e,t,r,n,52,8),r+8}l.prototype.slice=function(e,t){var r,n=this.length;if(e=~~e,t=void 0===t?n:~~t,e<0?(e+=n)<0&&(e=0):e>n&&(e=n),t<0?(t+=n)<0&&(t=0):t>n&&(t=n),t0&&(i*=256);)n+=this[e+--t]*i;return n},l.prototype.readUInt8=function(e,t){return t||I(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,t){return t||I(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,t){return t||I(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,t){return t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,t){return t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||I(e,t,this.length);for(var n=this[e],i=1,a=0;++a=(i*=128)&&(n-=Math.pow(2,8*t)),n},l.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||I(e,t,this.length);for(var n=t,i=1,a=this[e+--n];n>0&&(i*=256);)a+=this[e+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*t)),a},l.prototype.readInt8=function(e,t){return t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||I(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt16BE=function(e,t){t||I(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt32LE=function(e,t){return t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||I(e,4,this.length),i.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||I(e,4,this.length),i.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||I(e,8,this.length),i.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||I(e,8,this.length),i.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t|=0,r|=0,n)||R(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[t]=255&e;++a=0&&(a*=256);)this[t+i]=e/a&255;return t+r},l.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},l.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):F(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);R(this,e,t,r,i-1,-i)}var a=0,o=1,s=0;for(this[t]=255&e;++a>0)-s&255;return t+r},l.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);R(this,e,t,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[t+a]=255&e;--a>=0&&(o*=256);)e<0&&0===s&&0!==this[t+a+1]&&(s=1),this[t+a]=(e/o>>0)-s&255;return t+r},l.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):F(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,r){return U(this,e,t,!0,r)},l.prototype.writeFloatBE=function(e,t,r){return U(this,e,t,!1,r)},l.prototype.writeDoubleLE=function(e,t,r){return M(this,e,t,!0,r)},l.prototype.writeDoubleBE=function(e,t,r){return M(this,e,t,!1,r)},l.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--i)e[i+t]=this[i+r];else if(a<1e3||!l.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(a=t;a55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;a.push(r)}else if(r<2048){if((t-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function j(e){return n.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function C(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}}).call(this,r(0))},function(e,t,r){"use strict";var n=r(10),i=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};e.exports=h;var a=r(6);a.inherits=r(5);var o=r(35),s=r(18);a.inherits(h,o);for(var l=i(s.prototype),f=0;f1)for(var r=1;r0){var r=(0,i.readFixedString)(this.byteArray,t.dataOffset,t.length).match(/\\/g);return null===r?1:r.length+1}}},{key:"string",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){var n=(0,i.readFixedString)(this.byteArray,r.dataOffset,r.length);return t>=0?n.split("\\")[t].trim():n.trim()}}},{key:"text",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){var n=(0,i.readFixedString)(this.byteArray,r.dataOffset,r.length);return t>=0?n.split("\\")[t].replace(/ +$/,""):n.replace(/ +$/,"")}}},{key:"floatString",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){t=void 0!==t?t:0;var n=this.string(e,t);if(void 0!==n)return parseFloat(n)}}},{key:"intString",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){t=void 0!==t?t:0;var n=this.string(e,t);if(void 0!==n)return parseInt(n)}}},{key:"attributeTag",value:function(e){var t=this.elements[e];if(t&&4===t.length){var r=a(t,this.byteArrayParser).readUint16,n=this.byteArray,i=t.dataOffset;return"x"+("00000000"+(256*r(n,i)*256+r(n,i+2)).toString(16)).substr(-8)}}}]),e}();t.default=o},function(e,t,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if("object"!=typeof r)throw new TypeError(r+"must be non-object");for(var n in r)i(r,n)&&(e[n]=r[n])}}return e},t.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var a={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var a=0;a=n.length)throw"dicomParser.ByteStream: parameter 'position' cannot be greater than or equal to 'byteArray' length";this.byteArrayParser=r,this.byteArray=n,this.position=i||0,this.warnings=[]}return i(t,[{key:"seek",value:function(e){if(this.position+e<0)throw"dicomParser.ByteStream.prototype.seek: cannot seek to position < 0";this.position+=e}},{key:"readByteStream",value:function(e){if(this.position+e>this.byteArray.length)throw"dicomParser.ByteStream.prototype.readByteStream: readByteStream - buffer overread";var r=(0,o.default)(this.byteArray,this.position,e);return this.position+=e,new t(this.byteArrayParser,r)}},{key:"readUint16",value:function(){var e=this.byteArrayParser.readUint16(this.byteArray,this.position);return this.position+=2,e}},{key:"readUint32",value:function(){var e=this.byteArrayParser.readUint32(this.byteArray,this.position);return this.position+=4,e}},{key:"readFixedString",value:function(e){var t=(0,s.readFixedString)(this.byteArray,this.position,e);return this.position+=e,t}}]),t}();t.default=l}).call(this,r(1).Buffer)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if(void 0===e)throw"dicomParser.readSequenceItem: missing required parameter 'byteStream'";var t={tag:(0,a.default)(e),length:e.readUint32(),dataOffset:e.position};if("xfffee000"!==t.tag)throw"dicomParser.readSequenceItem: item tag (FFFE,E000) not found at offset "+e.position;return t};var n,i=r(4),a=(n=i)&&n.__esModule?n:{default:n}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.readFixedString=function(e,t,r){if(r<0)throw"dicomParser.readFixedString - length cannot be less than 0";if(t+r>e.length)throw"dicomParser.readFixedString: attempt to read past end of buffer";for(var n,i="",a=0;a3&&void 0!==arguments[3]?arguments[3]:{};if(r=void 0===r?t.byteArray.length:r,void 0===t)throw"dicomParser.parseDicomDataSetExplicit: missing required parameter 'byteStream'";if(rt.byteArray.length)throw"dicomParser.parseDicomDataSetExplicit: invalid value for parameter 'maxP osition'";var a=e.elements;for(;t.positionr)throw"dicomParser:parseDicomDataSetExplicit: buffer overrun"},t.parseDicomDataSetImplicit=function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(r=void 0===r?e.byteArray.length:r,void 0===t)throw"dicomParser.parseDicomDataSetImplicit: missing required parameter 'byteStream'";if(rt.byteArray.length)throw"dicomParser.parseDicomDataSetImplicit: invalid value for parameter 'maxPosition'";var a=e.elements;for(;t.position= 0";if(r>=t.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragmentIndex' must be < number of fragments";if(s<1)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'numFragments' must be > 0";if(r+s>t.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragment' + 'numFragments' < number of fragments";var u=new i.default(e.byteArrayParser,e.byteArray,t.dataOffset),h=(0,a.default)(u);if("xfffee000"!==h.tag)throw"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000";u.seek(h.length);var d=u.position;if(1===s)return(0,o.default)(u.byteArray,d+f[r].offset+8,f[r].length);for(var c=l(f,r,s),p=(0,n.default)(u.byteArray,c),g=0,m=r;m-1?n:a.nextTick;y.WritableState=_;var f=r(6);f.inherits=r(5);var u={deprecate:r(61)},h=r(34),d=r(9).Buffer,c=i.Uint8Array||function(){};var p,g=r(33);function m(){}function _(e,t){s=s||r(2),e=e||{};var n=t instanceof s;this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var i=e.highWaterMark,f=e.writableHighWaterMark,u=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(f||0===f)?f:u,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var h=!1===e.decodeStrings;this.decodeStrings=!h,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var r=e._writableState,n=r.sync,i=r.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function(e,t,r,n,i){--t.pendingcb,r?(a.nextTick(i,n),a.nextTick(S,e,t),e._writableState.errorEmitted=!0,e.emit("error",n)):(i(n),e._writableState.errorEmitted=!0,e.emit("error",n),S(e,t))}(e,r,n,t,i);else{var o=E(r);o||r.corked||r.bufferProcessing||!r.bufferedRequest||w(e,r),n?l(v,e,r,o,i):v(e,r,o,i)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function y(e){if(s=s||r(2),!(p.call(y,this)||this instanceof s))return new y(e);this._writableState=new _(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),h.call(this)}function b(e,t,r,n,i,a,o){t.writelen=n,t.writecb=o,t.writing=!0,t.sync=!0,r?e._writev(i,t.onwrite):e._write(i,a,t.onwrite),t.sync=!1}function v(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,n(),S(e,t)}function w(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,i=new Array(n),a=t.corkedRequestsFree;a.entry=r;for(var s=0,l=!0;r;)i[s]=r,r.isBuf||(l=!1),r=r.next,s+=1;i.allBuffers=l,b(e,t,!0,t.length,i,"",a.finish),t.pendingcb++,t.lastBufferedRequest=null,a.next?(t.corkedRequestsFree=a.next,a.next=null):t.corkedRequestsFree=new o(t),t.bufferedRequestCount=0}else{for(;r;){var f=r.chunk,u=r.encoding,h=r.callback;if(b(e,t,!1,t.objectMode?1:f.length,f,u,h),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function E(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function x(e,t){e._final(function(r){t.pendingcb--,r&&e.emit("error",r),t.prefinished=!0,e.emit("prefinish"),S(e,t)})}function S(e,t){var r=E(t);return r&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,a.nextTick(x,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),r}f.inherits(y,h),_.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(_.prototype,"buffer",{get:u.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(y,Symbol.hasInstance,{value:function(e){return!!p.call(this,e)||this===y&&(e&&e._writableState instanceof _)}})):p=function(e){return e instanceof this},y.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},y.prototype.write=function(e,t,r){var n,i=this._writableState,o=!1,s=!i.objectMode&&(n=e,d.isBuffer(n)||n instanceof c);return s&&!d.isBuffer(e)&&(e=function(e){return d.from(e)}(e)),"function"==typeof t&&(r=t,t=null),s?t="buffer":t||(t=i.defaultEncoding),"function"!=typeof r&&(r=m),i.ended?function(e,t){var r=new Error("write after end");e.emit("error",r),a.nextTick(t,r)}(this,r):(s||function(e,t,r,n){var i=!0,o=!1;return null===r?o=new TypeError("May not write null values to stream"):"string"==typeof r||void 0===r||t.objectMode||(o=new TypeError("Invalid non-string/buffer chunk")),o&&(e.emit("error",o),a.nextTick(n,o),i=!1),i}(this,i,e,r))&&(i.pendingcb++,o=function(e,t,r,n,i,a){if(!r){var o=function(e,t,r){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=d.from(t,r));return t}(t,n,i);n!==o&&(r=!0,i="buffer",n=o)}var s=t.objectMode?1:n.length;t.length+=s;var l=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},y.prototype._write=function(e,t,r){r(new Error("_write() is not implemented"))},y.prototype._writev=null,y.prototype.end=function(e,t,r){var n=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!==e&&void 0!==e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||function(e,t,r){t.ending=!0,S(e,t),r&&(t.finished?a.nextTick(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,n,r)},Object.defineProperty(y.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),y.prototype.destroy=g.destroy,y.prototype._undestroy=g.undestroy,y.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,r(3),r(63).setImmediate,r(0))},function(e,t,r){(t=e.exports=r(35)).Stream=t,t.Readable=t,t.Writable=r(18),t.Duplex=r(2),t.Transform=r(31),t.PassThrough=r(60)},function(e,t){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function n(e){return"function"==typeof e}function i(e){return"object"==typeof e&&null!==e}function a(e){return void 0===e}e.exports=r,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,r,o,s,l,f;if(this._events||(this._events={}),"error"===e&&(!this._events.error||i(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var u=new Error('Uncaught, unspecified "error" event. ('+t+")");throw u.context=t,u}if(a(r=this._events[e]))return!1;if(n(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),r.apply(this,s)}else if(i(r))for(s=Array.prototype.slice.call(arguments,1),o=(f=r.slice()).length,l=0;l0&&this._events[e].length>o&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){if(!n(t))throw TypeError("listener must be a function");var r=!1;function i(){this.removeListener(e,i),r||(r=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},r.prototype.removeListener=function(e,t){var r,a,o,s;if(!n(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(o=(r=this._events[e]).length,a=-1,r===t||n(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(i(r)){for(s=o;s-- >0;)if(r[s]===t||r[s].listener&&r[s].listener===t){a=s;break}if(a<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(a,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(n(r=this._events[e]))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){return this._events&&this._events[e]?n(this._events[e])?[this._events[e]]:this._events[e].slice():[]},r.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(n(t))return 1;if(t)return t.length}return 0},r.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={readUint16:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readUint16: position cannot be less than 0";if(t+2>e.length)throw"littleEndianByteArrayParser.readUint16: attempt to read past end of buffer";return e[t]+256*e[t+1]},readInt16:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readInt16: position cannot be less than 0";if(t+2>e.length)throw"littleEndianByteArrayParser.readInt16: attempt to read past end of buffer";var r=e[t]+(e[t+1]<<8);return 32768&r&&(r=r-65535-1),r},readUint32:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readUint32: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readUint32: attempt to read past end of buffer";return e[t]+256*e[t+1]+256*e[t+2]*256+256*e[t+3]*256*256},readInt32:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readInt32: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readInt32: attempt to read past end of buffer";return e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24)},readFloat:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readFloat: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readFloat: attempt to read past end of buffer";var r=new Uint8Array(4);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readDouble: position cannot be less than 0";if(t+8>e.length)throw"littleEndianByteArrayParser.readDouble: attempt to read past end of buffer";var r=new Uint8Array(8);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],r[4]=e[t+4],r[5]=e[t+5],r[6]=e[t+6],r[7]=e[t+7],new Float64Array(r.buffer)[0]}}},function(e,t,r){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(t,r){if(void 0!==e&&t instanceof e)return e.alloc(r);if(t instanceof Uint8Array)return new Uint8Array(r);throw"dicomParser.alloc: unknown type for byteArray"}}).call(this,r(1).Buffer)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){if(void 0===e)throw"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'";var o={tag:(0,a.default)(e),length:e.readUint32(),dataOffset:e.position};4294967295===o.length&&(o.hadUndefinedLength=!0);if(o.tag===t)return o;if(s(o,e,r))return(0,i.default)(e,o),o;if(o.hadUndefinedLength)return(0,n.default)(e,o),o;return e.seek(o.length),o};var n=o(r(24)),i=o(r(39)),a=o(r(4));function o(e){return e&&e.__esModule?e:{default:e}}var s=function(e,t,r){if(void 0!==r)return"SQ"===r(e.tag);if(t.position+4<=t.byteArray.length){var n=(0,a.default)(t);return t.seek(-4),"xfffee000"===n||"xfffee0dd"===n}return t.warnings.push("eof encountered before finding sequence item tag or sequence delimiter tag in peeking to determine VR"),!1}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(void 0===e)throw"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'";var r=e.byteArray.length-8;for(;e.position<=r;){var n=e.readUint16();if(65534===n){var i=e.readUint16();if(57357===i){var a=e.readUint32();return 0!==a&&e.warnings("encountered non zero length following item delimiter at position "+(e.position-4)+" while reading element of undefined length with tag "+t.tag),void(t.length=e.position-t.dataOffset)}}}t.length=e.byteArray.length-t.dataOffset,e.seek(e.byteArray.length-e.position)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={AE:!0,AS:!0,AT:!1,CS:!0,DA:!0,DS:!0,DT:!0,FL:!1,FD:!1,IS:!0,LO:!0,LT:!0,OB:!1,OD:!1,OF:!1,OW:!1,PN:!0,SH:!0,SL:!1,SQ:!1,SS:!1,ST:!0,TM:!0,UI:!0,UL:!1,UN:void 0,UR:!0,US:!1,UT:!0};t.isStringVr=function(e){return n[e]},t.isPrivateTag=function(e){return parseInt(e[4],10)%2==1},t.parsePN=function(e){if(void 0!==e){var t=e.split("^");return{familyName:t[0],givenName:t[1],middleName:t[2],prefix:t[3],suffix:t[4]}}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r,n,i){if(n=n||t.basicOffsetTable,i=i||t.fragments,void 0===e)throw"dicomParser.readEncapsulatedImageFrame: missing required parameter 'dataSet'";if(void 0===t)throw"dicomParser.readEncapsulatedImageFrame: missing required parameter 'pixelDataElement'";if(void 0===r)throw"dicomParser.readEncapsulatedImageFrame: missing required parameter 'frameIndex'";if(void 0===n)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' does not have basicOffsetTable";if("x7fe00010"!==t.tag)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to non pixel data tag (expected tag = x7fe00010)";if(!0!==t.encapsulatedPixelData)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data";if(!0!==t.hadUndefinedLength)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have undefined length";if(void 0===t.fragments)throw"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have fragments";if(0===n.length)throw"dicomParser.readEncapsulatedImageFrame: basicOffsetTable has zero entries";if(r<0)throw"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be >= 0";if(r>=n.length)throw"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be < basicOffsetTable.length";var l=n[r],f=o(i,l);if(void 0===f)throw"dicomParser.readEncapsulatedImageFrame: unable to find fragment that matches basic offset table entry";var u=s(r,n,i,f);return(0,a.default)(e,t,f,u,i)};var n,i=r(17),a=(n=i)&&n.__esModule?n:{default:n};var o=function(e,t){for(var r=0;r>>1:e>>>1;t[r]=e}return t}();e.exports=function(e,t,r,i){var a=n,o=i+r;e^=-1;for(var s=i;s>>8^a[255&(e^t[s])];return-1^e}},function(e,t,r){"use strict";e.exports=function(e,t,r,n){for(var i=65535&e|0,a=e>>>16&65535|0,o=0;0!==r;){r-=o=r>2e3?2e3:r;do{a=a+(i=i+t[n++]|0)|0}while(--o);i%=65521,a%=65521}return i|a<<16|0}},function(e,t,r){(function(e,n){var i=/%[sdj%]/g;t.format=function(e){if(!_(e)){for(var t=[],r=0;r=a)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}}),l=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),p(r)?n.showHidden=r:r&&t._extend(n,r),y(n.showHidden)&&(n.showHidden=!1),y(n.depth)&&(n.depth=2),y(n.colors)&&(n.colors=!1),y(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),u(n,e,n.depth)}function l(e,t){var r=s.styles[t];return r?"["+s.colors[r][0]+"m"+e+"["+s.colors[r][1]+"m":e}function f(e,t){return e}function u(e,r,n){if(e.customInspect&&r&&x(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,e);return _(i)||(i=u(e,i,n)),i}var a=function(e,t){if(y(t))return e.stylize("undefined","undefined");if(_(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}if(m(t))return e.stylize(""+t,"number");if(p(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,r);if(a)return a;var o=Object.keys(r),s=function(e){var t={};return e.forEach(function(e,r){t[e]=!0}),t}(o);if(e.showHidden&&(o=Object.getOwnPropertyNames(r)),E(r)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return h(r);if(0===o.length){if(x(r)){var l=r.name?": "+r.name:"";return e.stylize("[Function"+l+"]","special")}if(b(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(w(r))return e.stylize(Date.prototype.toString.call(r),"date");if(E(r))return h(r)}var f,v="",S=!1,k=["{","}"];(c(r)&&(S=!0,k=["[","]"]),x(r))&&(v=" [Function"+(r.name?": "+r.name:"")+"]");return b(r)&&(v=" "+RegExp.prototype.toString.call(r)),w(r)&&(v=" "+Date.prototype.toUTCString.call(r)),E(r)&&(v=" "+h(r)),0!==o.length||S&&0!=r.length?n<0?b(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special"):(e.seen.push(r),f=S?function(e,t,r,n,i){for(var a=[],o=0,s=t.length;o=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60)return r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1];return r[0]+t+" "+e.join(", ")+" "+r[1]}(f,v,k)):k[0]+v+k[1]}function h(e){return"["+Error.prototype.toString.call(e)+"]"}function d(e,t,r,n,i,a){var o,s,l;if((l=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?s=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(s=e.stylize("[Setter]","special")),P(n,i)||(o="["+i+"]"),s||(e.seen.indexOf(l.value)<0?(s=g(r)?u(e,l.value,null):u(e,l.value,r-1)).indexOf("\n")>-1&&(s=a?s.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+s.split("\n").map(function(e){return" "+e}).join("\n")):s=e.stylize("[Circular]","special")),y(o)){if(a&&i.match(/^\d+$/))return s;(o=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.substr(1,o.length-2),o=e.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=e.stylize(o,"string"))}return o+": "+s}function c(e){return Array.isArray(e)}function p(e){return"boolean"==typeof e}function g(e){return null===e}function m(e){return"number"==typeof e}function _(e){return"string"==typeof e}function y(e){return void 0===e}function b(e){return v(e)&&"[object RegExp]"===S(e)}function v(e){return"object"==typeof e&&null!==e}function w(e){return v(e)&&"[object Date]"===S(e)}function E(e){return v(e)&&("[object Error]"===S(e)||e instanceof Error)}function x(e){return"function"==typeof e}function S(e){return Object.prototype.toString.call(e)}function k(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(e){if(y(a)&&(a=n.env.NODE_DEBUG||""),e=e.toUpperCase(),!o[e])if(new RegExp("\\b"+e+"\\b","i").test(a)){var r=n.pid;o[e]=function(){var n=t.format.apply(t,arguments);console.error("%s %d: %s",e,r,n)}}else o[e]=function(){};return o[e]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=c,t.isBoolean=p,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=m,t.isString=_,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=y,t.isRegExp=b,t.isObject=v,t.isDate=w,t.isError=E,t.isFunction=x,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=r(54);var A=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){var e,r;console.log("%s - %s",(e=new Date,r=[k(e.getHours()),k(e.getMinutes()),k(e.getSeconds())].join(":"),[e.getDate(),A[e.getMonth()],r].join(" ")),t.format.apply(t,arguments))},t.inherits=r(53),t._extend=function(e,t){if(!t||!v(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e}}).call(this,r(0),r(3))},function(e,t,r){"use strict";(function(t){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +function n(e,t){if(e===t)return 0;for(var r=e.length,n=t.length,i=0,a=Math.min(r,n);i=0;f--)if(u[f]!==h[f])return!1;for(f=u.length-1;f>=0;f--)if(l=u[f],!y(e[l],t[l],r,n))return!1;return!0}(e,t,r,o))}return r?e===t:e==t}function b(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function v(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function w(e,t,r,n){var i;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=function(e){var t;try{e()}catch(e){t=e}return t}(t),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),e&&!i&&m(i,r,"Missing expected exception"+n);var o="string"==typeof n,s=!e&&a.isError(i),l=!e&&i&&!r;if((s&&o&&v(i,r)||l)&&m(i,r,"Got unwanted exception"+n),e&&i&&r&&!v(i,r)||!e&&i)throw i}h.AssertionError=function(e){var t;this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=p(g((t=this).actual),128)+" "+t.operator+" "+p(g(t.expected),128),this.generatedMessage=!0);var r=e.stackStartFunction||m;if(Error.captureStackTrace)Error.captureStackTrace(this,r);else{var n=new Error;if(n.stack){var i=n.stack,a=c(r),o=i.indexOf("\n"+a);if(o>=0){var s=i.indexOf("\n",o+1);i=i.substring(s+1)}this.stack=i}}},a.inherits(h.AssertionError,Error),h.fail=m,h.ok=_,h.equal=function(e,t,r){e!=t&&m(e,t,r,"==",h.equal)},h.notEqual=function(e,t,r){e==t&&m(e,t,r,"!=",h.notEqual)},h.deepEqual=function(e,t,r){y(e,t,!1)||m(e,t,r,"deepEqual",h.deepEqual)},h.deepStrictEqual=function(e,t,r){y(e,t,!0)||m(e,t,r,"deepStrictEqual",h.deepStrictEqual)},h.notDeepEqual=function(e,t,r){y(e,t,!1)&&m(e,t,r,"notDeepEqual",h.notDeepEqual)},h.notDeepStrictEqual=function e(t,r,n){y(t,r,!0)&&m(t,r,n,"notDeepStrictEqual",e)},h.strictEqual=function(e,t,r){e!==t&&m(e,t,r,"===",h.strictEqual)},h.notStrictEqual=function(e,t,r){e===t&&m(e,t,r,"!==",h.notStrictEqual)},h.throws=function(e,t,r){w(!0,e,t,r)},h.doesNotThrow=function(e,t,r){w(!1,e,t,r)},h.ifError=function(e){if(e)throw e};var E=Object.keys||function(e){var t=[];for(var r in e)o.call(e,r)&&t.push(r);return t}}).call(this,r(0))},function(e,t,r){"use strict";e.exports=a;var n=r(2),i=r(6);function a(e){if(!(this instanceof a))return new a(e);n.call(this,e),this._transformState={afterTransform:function(e,t){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(!n)return this.emit("error",new Error("write callback called multiple times"));r.writechunk=null,r.writecb=null,null!=t&&this.push(t),n(e);var i=this._readableState;i.reading=!1,(i.needReadable||i.length>5==6?2:e>>4==14?3:e>>3==30?4:-1}function s(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,"�".repeat(r);if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�".repeat(r+1);if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�".repeat(r+2)}}(this,e,t);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function l(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function f(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function u(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function h(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function d(e){return e.toString(this.encoding)}function c(e){return e&&e.length?this.write(e):""}t.StringDecoder=a,a.prototype.write=function(e){if(0===e.length)return"";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return i>0&&(e.lastNeed=i-1),i;if(--n=0)return i>0&&(e.lastNeed=i-2),i;if(--n=0)return i>0&&(2===i?i=0:e.lastNeed=i-3),i;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString("utf8",t,n)},a.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,r){"use strict";var n=r(10);function i(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var r=this,a=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return a||o?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||n.nextTick(i,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(e){!t&&e?(n.nextTick(i,r,e),r._writableState&&(r._writableState.errorEmitted=!0)):t&&t(e)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,r){e.exports=r(20).EventEmitter},function(e,t,r){"use strict";(function(t,n){var i=r(10);e.exports=b;var a,o=r(38);b.ReadableState=y;r(20).EventEmitter;var s=function(e,t){return e.listeners(t).length},l=r(34),f=r(9).Buffer,u=t.Uint8Array||function(){};var h=r(6);h.inherits=r(5);var d=r(66),c=void 0;c=d&&d.debuglog?d.debuglog("stream"):function(){};var p,g=r(65),m=r(33);h.inherits(b,l);var _=["error","close","destroy","pause","resume"];function y(e,t){a=a||r(2),e=e||{};var n=t instanceof a;this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var i=e.highWaterMark,o=e.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(o||0===o)?o:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new g,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=r(32).StringDecoder),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function b(e){if(a=a||r(2),!(this instanceof b))return new b(e);this._readableState=new y(e,this),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),l.call(this)}function v(e,t,r,n,i){var a,o=e._readableState;null===t?(o.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,S(e)}(e,o)):(i||(a=function(e,t){var r;n=t,f.isBuffer(n)||n instanceof u||"string"==typeof t||void 0===t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk"));var n;return r}(o,t)),a?e.emit("error",a):o.objectMode||t&&t.length>0?("string"==typeof t||o.objectMode||Object.getPrototypeOf(t)===f.prototype||(t=function(e){return f.from(e)}(t)),n?o.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):w(e,o,t,!0):o.ended?e.emit("error",new Error("stream.push() after EOF")):(o.reading=!1,o.decoder&&!r?(t=o.decoder.write(t),o.objectMode||0!==t.length?w(e,o,t,!1):A(e,o)):w(e,o,t,!1))):n||(o.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=E?e=E:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function S(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(c("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?i.nextTick(k,e):k(e))}function k(e){c("emit readable"),e.emit("readable"),O(e)}function A(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(P,e,t))}function P(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;ea.length?a.length:e;if(o===a.length?i+=a:i+=a.slice(0,e),0===(e-=o)){o===a.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=a.slice(o));break}++n}return t.length-=n,i}(e,t):function(e,t){var r=f.allocUnsafe(e),n=t.head,i=1;n.data.copy(r),e-=n.data.length;for(;n=n.next;){var a=n.data,o=e>a.length?a.length:e;if(a.copy(r,r.length-e,0,o),0===(e-=o)){o===a.length?(++i,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=a.slice(o));break}++i}return t.length-=i,r}(e,t);return n}(e,t.buffer,t.decoder),r);var r}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,i.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function F(e,t){for(var r=0,n=e.length;r=t.highWaterMark||t.ended))return c("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):S(this),null;if(0===(e=x(e,t))&&t.ended)return 0===t.length&&R(this),null;var n,i=t.needReadable;return c("need readable",i),(0===t.length||t.length-e0?I(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&R(this)),null!==n&&this.emit("data",n),n},b.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},b.prototype.pipe=function(e,t){var r=this,a=this._readableState;switch(a.pipesCount){case 0:a.pipes=e;break;case 1:a.pipes=[a.pipes,e];break;default:a.pipes.push(e)}a.pipesCount+=1,c("pipe count=%d opts=%j",a.pipesCount,t);var l=(!t||!1!==t.end)&&e!==n.stdout&&e!==n.stderr?u:b;function f(t,n){c("onunpipe"),t===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,c("cleanup"),e.removeListener("close",_),e.removeListener("finish",y),e.removeListener("drain",h),e.removeListener("error",m),e.removeListener("unpipe",f),r.removeListener("end",u),r.removeListener("end",b),r.removeListener("data",g),d=!0,!a.awaitDrain||e._writableState&&!e._writableState.needDrain||h())}function u(){c("onend"),e.end()}a.endEmitted?i.nextTick(l):r.once("end",l),e.on("unpipe",f);var h=function(e){return function(){var t=e._readableState;c("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,O(e))}}(r);e.on("drain",h);var d=!1;var p=!1;function g(t){c("ondata"),p=!1,!1!==e.write(t)||p||((1===a.pipesCount&&a.pipes===e||a.pipesCount>1&&-1!==F(a.pipes,e))&&!d&&(c("false write response, pause",r._readableState.awaitDrain),r._readableState.awaitDrain++,p=!0),r.pause())}function m(t){c("onerror",t),b(),e.removeListener("error",m),0===s(e,"error")&&e.emit("error",t)}function _(){e.removeListener("finish",y),b()}function y(){c("onfinish"),e.removeListener("close",_),b()}function b(){c("unpipe"),r.unpipe(e)}return r.on("data",g),function(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?o(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,"error",m),e.once("close",_),e.once("finish",y),e.emit("pipe",r),a.flowing||(c("pipe resume"),r.resume()),e},b.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,r),this);if(!e){var n=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var a=0;a"x0002ffff"){r.position=n;break}s.parser=a.default,t[s.tag]=s}var l=new i.default(r.byteArrayParser,r.byteArray,t);return l.warnings=r.warnings,l.position=r.position,l}()};var n=s(r(12)),i=s(r(7)),a=s(r(21)),o=s(r(15));function s(e){return e&&e.__esModule?e:{default:e}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={readUint16:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readUint16: position cannot be less than 0";if(t+2>e.length)throw"bigEndianByteArrayParser.readUint16: attempt to read past end of buffer";return(e[t]<<8)+e[t+1]},readInt16:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readInt16: position cannot be less than 0";if(t+2>e.length)throw"bigEndianByteArrayParser.readInt16: attempt to read past end of buffer";var r=(e[t]<<8)+e[t+1];return 32768&r&&(r=r-65535-1),r},readUint32:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readUint32: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readUint32: attempt to read past end of buffer";return 256*(256*(256*e[t]+e[t+1])+e[t+2])+e[t+3]},readInt32:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readInt32: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readInt32: attempt to read past end of buffer";return(e[t]<<24)+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3]},readFloat:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readFloat: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readFloat: attempt to read past end of buffer";var r=new Uint8Array(4);return r[3]=e[t],r[2]=e[t+1],r[1]=e[t+2],r[0]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readDouble: position cannot be less than 0";if(t+8>e.length)throw"bigEndianByteArrayParser.readDouble: attempt to read past end of buffer";var r=new Uint8Array(8);return r[7]=e[t],r[6]=e[t+1],r[5]=e[t+2],r[4]=e[t+3],r[3]=e[t+4],r[2]=e[t+5],r[1]=e[t+6],r[0]=e[t+7],new Float64Array(r.buffer)[0]}}},function(e,t){var r={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==r.call(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){if(void 0===e)throw"dicomParser.readSequenceItemsImplicit: missing required parameter 'byteStream'";if(void 0===t)throw"dicomParser.readSequenceItemsImplicit: missing required parameter 'element'";t.items=[],4294967295===t.length?function(e,t,r){for(;e.position+4<=e.byteArray.length;){var n=(0,o.default)(e);if(e.seek(-4),"xfffee0dd"===n)return t.length=e.position-t.dataOffset,e.seek(8),t;var i=f(e,r);t.items.push(i)}e.warnings.push("eof encountered before finding sequence delimiter in sequence of undefined length"),t.length=e.byteArray.length-t.dataOffset}(e,t,r):function(e,t,r){var n=t.dataOffset+t.length;for(;e.positione.byteArray.length-e.position&&(f=e.byteArray.length-e.position),t.fragments.push({offset:e.position-s-8,position:e.position,length:f}),e.seek(f),void(t.length=e.position-t.dataOffset);t.fragments.push({offset:e.position-s-8,position:e.position,length:f}),e.seek(f)}r&&r.push("pixel data element "+t.tag+" missing sequence delimiter tag xfffee0dd")};var n,i=r(4),a=(n=i)&&n.__esModule?n:{default:n}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(void 0===e||void 0===t)throw"dicomParser.explicitElementToString: missing required parameters";if(void 0===t.vr)throw"dicomParser.explicitElementToString: cannot convert implicit element to string";var r,i=t.vr,a=t.tag;function o(t,r){for(var n="",i=0;i= 0";if(0!==t.basicOffsetTable.length)return(0,n.default)(e,t,r);return(0,i.default)(e,t,0,t.fragments.length)};var n=a(r(26)),i=a(r(17));function a(e){return e&&e.__esModule?e:{default:e}}var o=!1},function(e,t,r){"use strict";e.exports={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,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,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,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},function(e,t,r){"use strict";var n=r(8),i=[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],a=[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],o=[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],s=[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];e.exports=function(e,t,r,l,f,u,h,d){var c,p,g,m,_,y,b,v,w,E=d.bits,x=0,S=0,k=0,A=0,P=0,T=0,D=0,O=0,I=0,R=0,L=null,F=0,B=new n.Buf16(16),U=new n.Buf16(16),M=null,N=0;for(x=0;x<=15;x++)B[x]=0;for(S=0;S=1&&0===B[A];A--);if(P>A&&(P=A),0===A)return f[u++]=20971520,f[u++]=20971520,d.bits=1,0;for(k=1;k0&&(0===e||1!==A))return-1;for(U[1]=0,x=1;x<15;x++)U[x+1]=U[x]+B[x];for(S=0;S852||2===e&&I>592)return 1;for(;;){b=x-D,h[S]y?(v=M[N+h[S]],w=L[F+h[S]]):(v=96,w=0),c=1<>D)+(p-=c)]=b<<24|v<<16|w|0}while(0!==p);for(c=1<>=1;if(0!==c?(R&=c-1,R+=c):R=0,S++,0==--B[x]){if(x===A)break;x=t[r+h[S]]}if(x>P&&(R&m)!==g){for(0===D&&(D=P),_+=k,O=1<<(T=x-D);T+D852||2===e&&I>592)return 1;f[g=R&m]=P<<24|T<<16|_-u|0}}return 0!==R&&(f[_+R]=x-D<<24|64<<16|0),d.bits=P,0}},function(e,t,r){"use strict";e.exports=function(e,t){var r,n,i,a,o,s,l,f,u,h,d,c,p,g,m,_,y,b,v,w,E,x,S,k,A;r=e.state,n=e.next_in,k=e.input,i=n+(e.avail_in-5),a=e.next_out,A=e.output,o=a-(t-e.avail_out),s=a+(e.avail_out-257),l=r.dmax,f=r.wsize,u=r.whave,h=r.wnext,d=r.window,c=r.hold,p=r.bits,g=r.lencode,m=r.distcode,_=(1<>>=v=b>>>24,p-=v,0===(v=b>>>16&255))A[a++]=65535&b;else{if(!(16&v)){if(0==(64&v)){b=g[(65535&b)+(c&(1<>>=v,p-=v),p<15&&(c+=k[n++]<>>=v=b>>>24,p-=v,!(16&(v=b>>>16&255))){if(0==(64&v)){b=m[(65535&b)+(c&(1<l){e.msg="invalid distance too far back",r.mode=30;break e}if(c>>>=v,p-=v,E>(v=a-o)){if((v=E-v)>u&&r.sane){e.msg="invalid distance too far back",r.mode=30;break e}if(x=0,S=d,0===h){if(x+=f-v,v2;)A[a++]=S[x++],A[a++]=S[x++],A[a++]=S[x++],w-=3;w&&(A[a++]=S[x++],w>1&&(A[a++]=S[x++]))}else{x=a-E;do{A[a++]=A[x++],A[a++]=A[x++],A[a++]=A[x++],w-=3}while(w>2);w&&(A[a++]=A[x++],w>1&&(A[a++]=A[x++]))}break}}break}}while(n>3,c&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=a,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function ie(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=E,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(ee),t.distcode=t.distdyn=new n.Buf32(te),t.sane=1,t.back=-1,p):_}function ae(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,ie(e)):_}function oe(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?_:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,ae(e))):_}function se(e,t){var r,i;return e?(i=new function(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0},e.state=i,i.window=null,(r=oe(e,t))!==p&&(e.state=null),r):_}var le,fe,ue=!0;function he(e){if(ue){var t;for(le=new n.Buf32(512),fe=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(s(f,e.lens,0,288,le,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;s(u,e.lens,0,32,fe,0,e.work,{bits:5}),ue=!1}e.lencode=le,e.lenbits=9,e.distcode=fe,e.distbits=5}function de(e,t,r,i){var a,o=e.state;return null===o.window&&(o.wsize=1<=o.wsize?(n.arraySet(o.window,t,r-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((a=o.wsize-o.wnext)>i&&(a=i),n.arraySet(o.window,t,r-i,a,o.wnext),(i-=a)?(n.arraySet(o.window,t,r-i,i,0),o.wnext=i,o.whave=o.wsize):(o.wnext+=a,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,r.check=a(r.check,Pe,2,0),se=0,le=0,r.mode=x;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&se)<<8)+(se>>8))%31){e.msg="incorrect header check",r.mode=X;break}if((15&se)!==w){e.msg="unknown compression method",r.mode=X;break}if(le-=4,Ee=8+(15&(se>>>=4)),0===r.wbits)r.wbits=Ee;else if(Ee>r.wbits){e.msg="invalid window size",r.mode=X;break}r.dmax=1<>8&1),512&r.flags&&(Pe[0]=255&se,Pe[1]=se>>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0,r.mode=S;case S:for(;le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>8&255,Pe[2]=se>>>16&255,Pe[3]=se>>>24&255,r.check=a(r.check,Pe,4,0)),se=0,le=0,r.mode=k;case k:for(;le<16;){if(0===ae)break e;ae--,se+=ee[re++]<>8),512&r.flags&&(Pe[0]=255&se,Pe[1]=se>>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0,r.mode=A;case A:if(1024&r.flags){for(;le<16;){if(0===ae)break e;ae--,se+=ee[re++]<>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0}else r.head&&(r.head.extra=null);r.mode=P;case P:if(1024&r.flags&&((ce=r.length)>ae&&(ce=ae),ce&&(r.head&&(Ee=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,ee,re,ce,Ee)),512&r.flags&&(r.check=a(r.check,ee,ce,re)),ae-=ce,re+=ce,r.length-=ce),r.length))break e;r.length=0,r.mode=T;case T:if(2048&r.flags){if(0===ae)break e;ce=0;do{Ee=ee[re+ce++],r.head&&Ee&&r.length<65536&&(r.head.name+=String.fromCharCode(Ee))}while(Ee&&ce>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=L;break;case I:for(;le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>=7&le,le-=7&le,r.mode=V;break}for(;le<3;){if(0===ae)break e;ae--,se+=ee[re++]<>>=1)){case 0:r.mode=B;break;case 1:if(he(r),r.mode=j,t===c){se>>>=2,le-=2;break e}break;case 2:r.mode=N;break;case 3:e.msg="invalid block type",r.mode=X}se>>>=2,le-=2;break;case B:for(se>>>=7&le,le-=7≤le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=X;break}if(r.length=65535&se,se=0,le=0,r.mode=U,t===c)break e;case U:r.mode=M;case M:if(ce=r.length){if(ce>ae&&(ce=ae),ce>oe&&(ce=oe),0===ce)break e;n.arraySet(te,ee,re,ce,ie),ae-=ce,re+=ce,oe-=ce,ie+=ce,r.length-=ce;break}r.mode=L;break;case N:for(;le<14;){if(0===ae)break e;ae--,se+=ee[re++]<>>=5,le-=5,r.ndist=1+(31&se),se>>>=5,le-=5,r.ncode=4+(15&se),se>>>=4,le-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=X;break}r.have=0,r.mode=z;case z:for(;r.have>>=3,le-=3}for(;r.have<19;)r.lens[Te[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,Se={bits:r.lenbits},xe=s(l,r.lens,0,19,r.lencode,0,r.work,Se),r.lenbits=Se.bits,xe){e.msg="invalid code lengths set",r.mode=X;break}r.have=0,r.mode=Z;case Z:for(;r.have>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=me,le-=me,r.lens[r.have++]=ye;else{if(16===ye){for(ke=me+2;le>>=me,le-=me,0===r.have){e.msg="invalid bit length repeat",r.mode=X;break}Ee=r.lens[r.have-1],ce=3+(3&se),se>>>=2,le-=2}else if(17===ye){for(ke=me+3;le>>=me)),se>>>=3,le-=3}else{for(ke=me+7;le>>=me)),se>>>=7,le-=7}if(r.have+ce>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=X;break}for(;ce--;)r.lens[r.have++]=Ee}}if(r.mode===X)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=X;break}if(r.lenbits=9,Se={bits:r.lenbits},xe=s(f,r.lens,0,r.nlen,r.lencode,0,r.work,Se),r.lenbits=Se.bits,xe){e.msg="invalid literal/lengths set",r.mode=X;break}if(r.distbits=6,r.distcode=r.distdyn,Se={bits:r.distbits},xe=s(u,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,Se),r.distbits=Se.bits,xe){e.msg="invalid distances set",r.mode=X;break}if(r.mode=j,t===c)break e;case j:r.mode=C;case C:if(ae>=6&&oe>=258){e.next_out=ie,e.avail_out=oe,e.next_in=re,e.avail_in=ae,r.hold=se,r.bits=le,o(e,ue),ie=e.next_out,te=e.output,oe=e.avail_out,re=e.next_in,ee=e.input,ae=e.avail_in,se=r.hold,le=r.bits,r.mode===L&&(r.back=-1);break}for(r.back=0;_e=(Ae=r.lencode[se&(1<>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>be)])>>>16&255,ye=65535&Ae,!(be+(me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=be,le-=be,r.back+=be}if(se>>>=me,le-=me,r.back+=me,r.length=ye,0===_e){r.mode=G;break}if(32&_e){r.back=-1,r.mode=L;break}if(64&_e){e.msg="invalid literal/length code",r.mode=X;break}r.extra=15&_e,r.mode=q;case q:if(r.extra){for(ke=r.extra;le>>=r.extra,le-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=Y;case Y:for(;_e=(Ae=r.distcode[se&(1<>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>be)])>>>16&255,ye=65535&Ae,!(be+(me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=be,le-=be,r.back+=be}if(se>>>=me,le-=me,r.back+=me,64&_e){e.msg="invalid distance code",r.mode=X;break}r.offset=ye,r.extra=15&_e,r.mode=W;case W:if(r.extra){for(ke=r.extra;le>>=r.extra,le-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=X;break}r.mode=H;case H:if(0===oe)break e;if(ce=ue-oe,r.offset>ce){if((ce=r.offset-ce)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=X;break}ce>r.wnext?(ce-=r.wnext,pe=r.wsize-ce):pe=r.wnext-ce,ce>r.length&&(ce=r.length),ge=r.window}else ge=te,pe=ie-r.offset,ce=r.length;ce>oe&&(ce=oe),oe-=ce,r.length-=ce;do{te[ie++]=ge[pe++]}while(--ce);0===r.length&&(r.mode=C);break;case G:if(0===oe)break e;te[ie++]=r.length,oe--,r.mode=C;break;case V:if(r.wrap){for(;le<32;){if(0===ae)break e;ae--,se|=ee[re++]<=0;)e[t]=0}var f=0,u=1,h=2,d=29,c=256,p=c+1+d,g=30,m=19,_=2*p+1,y=15,b=16,v=7,w=256,E=16,x=17,S=18,k=[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],A=[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],P=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],T=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],D=new Array(2*(p+2));l(D);var O=new Array(2*g);l(O);var I=new Array(512);l(I);var R=new Array(256);l(R);var L=new Array(d);l(L);var F,B,U,M=new Array(g);function N(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function z(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function Z(e){return e<256?I[e]:I[256+(e>>>7)]}function j(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function C(e,t,r){e.bi_valid>b-r?(e.bi_buf|=t<>b-e.bi_valid,e.bi_valid+=r-b):(e.bi_buf|=t<>>=1,r<<=1}while(--t>0);return r>>>1}function W(e,t,r){var n,i,a=new Array(y+1),o=0;for(n=1;n<=y;n++)a[n]=o=o+r[n-1]<<1;for(i=0;i<=t;i++){var s=e[2*i+1];0!==s&&(e[2*i]=Y(a[s]++,s))}}function H(e){var t;for(t=0;t8?j(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function V(e,t,r,n){var i=2*t,a=2*r;return e[i]>1;r>=1;r--)J(e,a,r);i=l;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],J(e,a,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,a[2*i]=a[2*r]+a[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,a[2*r+1]=a[2*n+1]=i,e.heap[1]=i++,J(e,a,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,a,o,s,l=t.dyn_tree,f=t.max_code,u=t.stat_desc.static_tree,h=t.stat_desc.has_stree,d=t.stat_desc.extra_bits,c=t.stat_desc.extra_base,p=t.stat_desc.max_length,g=0;for(a=0;a<=y;a++)e.bl_count[a]=0;for(l[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)(a=l[2*l[2*(n=e.heap[r])+1]+1]+1)>p&&(a=p,g++),l[2*n+1]=a,n>f||(e.bl_count[a]++,o=0,n>=c&&(o=d[n-c]),s=l[2*n],e.opt_len+=s*(a+o),h&&(e.static_len+=s*(u[2*n+1]+o)));if(0!==g){do{for(a=p-1;0===e.bl_count[a];)a--;e.bl_count[a]--,e.bl_count[a+1]+=2,e.bl_count[p]--,g-=2}while(g>0);for(a=p;0!==a;a--)for(n=e.bl_count[a];0!==n;)(i=e.heap[--r])>f||(l[2*i+1]!==a&&(e.opt_len+=(a-l[2*i+1])*l[2*i],l[2*i+1]=a),n--)}}(e,t),W(a,f,e.bl_count)}function $(e,t,r){var n,i,a=-1,o=t[1],s=0,l=7,f=4;for(0===o&&(l=138,f=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=o,o=t[2*(n+1)+1],++s>=7;n0?(e.strm.data_type===s&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return a;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return o;for(t=32;t=3&&0===e.bl_tree[2*T[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),l=e.opt_len+3+7>>>3,(f=e.static_len+3+7>>>3)<=l&&(l=f)):l=f=r+5,r+4<=l&&-1!==t?te(e,t,r,n):e.strategy===i||f===l?(C(e,(u<<1)+(n?1:0),3),K(e,D,O)):(C(e,(h<<1)+(n?1:0),3),function(e,t,r,n){var i;for(C(e,t-257,5),C(e,r-1,5),C(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(R[r]+c+1)]++,e.dyn_dtree[2*Z(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){C(e,u<<1,3),q(e,w,D),function(e){16===e.bi_valid?(j(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},function(e,t,r){"use strict";var n,i=r(8),a=r(50),o=r(28),s=r(27),l=r(49),f=0,u=1,h=3,d=4,c=5,p=0,g=1,m=-2,_=-3,y=-5,b=-1,v=1,w=2,E=3,x=4,S=0,k=2,A=8,P=9,T=15,D=8,O=286,I=30,R=19,L=2*O+1,F=15,B=3,U=258,M=U+B+1,N=32,z=42,Z=69,j=73,C=91,q=103,Y=113,W=666,H=1,G=2,V=3,J=4,K=3;function X(e,t){return e.msg=l[t],t}function $(e){return(e<<1)-(e>4?9:0)}function Q(e){for(var t=e.length;--t>=0;)e[t]=0}function ee(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(i.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function te(e,t){a._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,ee(e.strm)}function re(e,t){e.pending_buf[e.pending++]=t}function ne(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function ie(e,t){var r,n,i=e.max_chain_length,a=e.strstart,o=e.prev_length,s=e.nice_match,l=e.strstart>e.w_size-M?e.strstart-(e.w_size-M):0,f=e.window,u=e.w_mask,h=e.prev,d=e.strstart+U,c=f[a+o-1],p=f[a+o];e.prev_length>=e.good_match&&(i>>=2),s>e.lookahead&&(s=e.lookahead);do{if(f[(r=t)+o]===p&&f[r+o-1]===c&&f[r]===f[a]&&f[++r]===f[a+1]){a+=2,r++;do{}while(f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&ao){if(e.match_start=t,o=n,n>=s)break;c=f[a+o-1],p=f[a+o]}}}while((t=h[t&u])>l&&0!=--i);return o<=e.lookahead?o:e.lookahead}function ae(e){var t,r,n,a,l,f,u,h,d,c,p=e.w_size;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-M)){i.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,t=r=e.hash_size;do{n=e.head[--t],e.head[t]=n>=p?n-p:0}while(--r);t=r=p;do{n=e.prev[--t],e.prev[t]=n>=p?n-p:0}while(--r);a+=p}if(0===e.strm.avail_in)break;if(f=e.strm,u=e.window,h=e.strstart+e.lookahead,d=a,c=void 0,(c=f.avail_in)>d&&(c=d),r=0===c?0:(f.avail_in-=c,i.arraySet(u,f.input,f.next_in,c,h),1===f.state.wrap?f.adler=o(f.adler,u,c,h):2===f.state.wrap&&(f.adler=s(f.adler,u,c,h)),f.next_in+=c,f.total_in+=c,c),e.lookahead+=r,e.lookahead+e.insert>=B)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=B&&(e.ins_h=(e.ins_h<=B)if(n=a._tr_tally(e,e.strstart-e.match_start,e.match_length-B),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=B){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=B&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=B-1)),e.prev_length>=B&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-B,n=a._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-B),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<15&&(s=2,n-=16),a<1||a>P||r!==A||n<8||n>15||t<0||t>9||o<0||o>x)return X(e,m);8===n&&(n=9);var l=new function(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=A,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*L),this.dyn_dtree=new i.Buf16(2*(2*I+1)),this.bl_tree=new i.Buf16(2*(2*R+1)),Q(this.dyn_ltree),Q(this.dyn_dtree),Q(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(F+1),this.heap=new i.Buf16(2*O+1),Q(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*O+1),Q(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0};return e.state=l,l.strm=e,l.wrap=s,l.gzhead=null,l.w_bits=n,l.w_size=1<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(ae(e),0===e.lookahead&&t===f)return H;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,te(e,!1),0===e.strm.avail_out))return H;if(e.strstart-e.block_start>=e.w_size-M&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):(e.strstart>e.block_start&&(te(e,!1),e.strm.avail_out),H)}),new le(4,4,8,4,oe),new le(4,5,16,8,oe),new le(4,6,32,32,oe),new le(4,4,16,16,se),new le(8,16,32,32,se),new le(8,16,128,128,se),new le(8,32,128,256,se),new le(32,128,258,1024,se),new le(32,258,258,4096,se)],t.deflateInit=function(e,t){return he(e,t,A,T,D,S)},t.deflateInit2=he,t.deflateReset=ue,t.deflateResetKeep=fe,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?m:(e.state.gzhead=t,p):m},t.deflate=function(e,t){var r,i,o,l;if(!e||!e.state||t>c||t<0)return e?X(e,m):m;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||i.status===W&&t!==d)return X(e,0===e.avail_out?y:m);if(i.strm=e,r=i.last_flush,i.last_flush=t,i.status===z)if(2===i.wrap)e.adler=0,re(i,31),re(i,139),re(i,8),i.gzhead?(re(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),re(i,255&i.gzhead.time),re(i,i.gzhead.time>>8&255),re(i,i.gzhead.time>>16&255),re(i,i.gzhead.time>>24&255),re(i,9===i.level?2:i.strategy>=w||i.level<2?4:0),re(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(re(i,255&i.gzhead.extra.length),re(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=s(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=Z):(re(i,0),re(i,0),re(i,0),re(i,0),re(i,0),re(i,9===i.level?2:i.strategy>=w||i.level<2?4:0),re(i,K),i.status=Y);else{var _=A+(i.w_bits-8<<4)<<8;_|=(i.strategy>=w||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(_|=N),_+=31-_%31,i.status=Y,ne(i,_),0!==i.strstart&&(ne(i,e.adler>>>16),ne(i,65535&e.adler)),e.adler=1}if(i.status===Z)if(i.gzhead.extra){for(o=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending!==i.pending_buf_size));)re(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=j)}else i.status=j;if(i.status===j)if(i.gzhead.name){o=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexo&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),0===l&&(i.gzindex=0,i.status=C)}else i.status=C;if(i.status===C)if(i.gzhead.comment){o=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexo&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),0===l&&(i.status=q)}else i.status=q;if(i.status===q&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&ee(e),i.pending+2<=i.pending_buf_size&&(re(i,255&e.adler),re(i,e.adler>>8&255),e.adler=0,i.status=Y)):i.status=Y),0!==i.pending){if(ee(e),0===e.avail_out)return i.last_flush=-1,p}else if(0===e.avail_in&&$(t)<=$(r)&&t!==d)return X(e,y);if(i.status===W&&0!==e.avail_in)return X(e,y);if(0!==e.avail_in||0!==i.lookahead||t!==f&&i.status!==W){var b=i.strategy===w?function(e,t){for(var r;;){if(0===e.lookahead&&(ae(e),0===e.lookahead)){if(t===f)return H;break}if(e.match_length=0,r=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?H:G}(i,t):i.strategy===E?function(e,t){for(var r,n,i,o,s=e.window;;){if(e.lookahead<=U){if(ae(e),e.lookahead<=U&&t===f)return H;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=B&&e.strstart>0&&(n=s[i=e.strstart-1])===s[++i]&&n===s[++i]&&n===s[++i]){o=e.strstart+U;do{}while(n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=B?(r=a._tr_tally(e,1,e.match_length-B),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?H:G}(i,t):n[i.level].func(i,t);if(b!==V&&b!==J||(i.status=W),b===H||b===V)return 0===e.avail_out&&(i.last_flush=-1),p;if(b===G&&(t===u?a._tr_align(i):t!==c&&(a._tr_stored_block(i,0,0,!1),t===h&&(Q(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ee(e),0===e.avail_out))return i.last_flush=-1,p}return t!==d?p:i.wrap<=0?g:(2===i.wrap?(re(i,255&e.adler),re(i,e.adler>>8&255),re(i,e.adler>>16&255),re(i,e.adler>>24&255),re(i,255&e.total_in),re(i,e.total_in>>8&255),re(i,e.total_in>>16&255),re(i,e.total_in>>24&255)):(ne(i,e.adler>>>16),ne(i,65535&e.adler)),ee(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?p:g)},t.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==z&&t!==Z&&t!==j&&t!==C&&t!==q&&t!==Y&&t!==W?X(e,m):(e.state=null,t===Y?X(e,_):p):m},t.deflateSetDictionary=function(e,t){var r,n,a,s,l,f,u,h,d=t.length;if(!e||!e.state)return m;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==z||r.lookahead)return m;for(1===s&&(e.adler=o(e.adler,t,d,0)),r.wrap=0,d>=r.w_size&&(0===s&&(Q(r.head),r.strstart=0,r.block_start=0,r.insert=0),h=new i.Buf8(r.w_size),i.arraySet(h,t,d-r.w_size,r.w_size,0),t=h,d=r.w_size),l=e.avail_in,f=e.next_in,u=e.input,e.avail_in=d,e.next_in=0,e.input=t,ae(r);r.lookahead>=B;){n=r.strstart,a=r.lookahead-(B-1);do{r.ins_h=(r.ins_h<t.UNZIP)throw new TypeError("Bad argument");this.dictionary=null,this.err=0,this.flush=0,this.init_done=!1,this.level=0,this.memLevel=0,this.mode=e,this.strategy=0,this.windowBits=0,this.write_in_progress=!1,this.pending_close=!1,this.gzip_id_bytes_read=0}u.prototype.close=function(){this.write_in_progress?this.pending_close=!0:(this.pending_close=!1,i(this.init_done,"close before init"),i(this.mode<=t.UNZIP),this.mode===t.DEFLATE||this.mode===t.GZIP||this.mode===t.DEFLATERAW?o.deflateEnd(this.strm):this.mode!==t.INFLATE&&this.mode!==t.GUNZIP&&this.mode!==t.INFLATERAW&&this.mode!==t.UNZIP||s.inflateEnd(this.strm),this.mode=t.NONE,this.dictionary=null)},u.prototype.write=function(e,t,r,n,i,a,o){return this._write(!0,e,t,r,n,i,a,o)},u.prototype.writeSync=function(e,t,r,n,i,a,o){return this._write(!1,e,t,r,n,i,a,o)},u.prototype._write=function(r,a,o,s,l,f,u,h){if(i.equal(arguments.length,8),i(this.init_done,"write before init"),i(this.mode!==t.NONE,"already finalized"),i.equal(!1,this.write_in_progress,"write already in progress"),i.equal(!1,this.pending_close,"close is pending"),this.write_in_progress=!0,i.equal(!1,void 0===a,"must provide flush value"),this.write_in_progress=!0,a!==t.Z_NO_FLUSH&&a!==t.Z_PARTIAL_FLUSH&&a!==t.Z_SYNC_FLUSH&&a!==t.Z_FULL_FLUSH&&a!==t.Z_FINISH&&a!==t.Z_BLOCK)throw new Error("Invalid flush value");if(null==o&&(o=e.alloc(0),l=0,s=0),this.strm.avail_in=l,this.strm.input=o,this.strm.next_in=s,this.strm.avail_out=h,this.strm.output=f,this.strm.next_out=u,this.flush=a,!r)return this._process(),this._checkError()?this._afterSync():void 0;var d=this;return n.nextTick(function(){d._process(),d._after()}),this},u.prototype._afterSync=function(){var e=this.strm.avail_out,t=this.strm.avail_in;return this.write_in_progress=!1,[t,e]},u.prototype._process=function(){var e=null;switch(this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=o.deflate(this.strm,this.flush);break;case t.UNZIP:switch(this.strm.avail_in>0&&(e=this.strm.next_in),this.gzip_id_bytes_read){case 0:if(null===e)break;if(31!==this.strm.input[e]){this.mode=t.INFLATE;break}if(this.gzip_id_bytes_read=1,e++,1===this.strm.avail_in)break;case 1:if(null===e)break;139===this.strm.input[e]?(this.gzip_id_bytes_read=2,this.mode=t.GUNZIP):this.mode=t.INFLATE;break;default:throw new Error("invalid number of gzip magic number bytes read")}case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:for(this.err=s.inflate(this.strm,this.flush),this.err===t.Z_NEED_DICT&&this.dictionary&&(this.err=s.inflateSetDictionary(this.strm,this.dictionary),this.err===t.Z_OK?this.err=s.inflate(this.strm,this.flush):this.err===t.Z_DATA_ERROR&&(this.err=t.Z_NEED_DICT));this.strm.avail_in>0&&this.mode===t.GUNZIP&&this.err===t.Z_STREAM_END&&0!==this.strm.next_in[0];)this.reset(),this.err=s.inflate(this.strm,this.flush);break;default:throw new Error("Unknown mode "+this.mode)}},u.prototype._checkError=function(){switch(this.err){case t.Z_OK:case t.Z_BUF_ERROR:if(0!==this.strm.avail_out&&this.flush===t.Z_FINISH)return this._error("unexpected end of file"),!1;break;case t.Z_STREAM_END:break;case t.Z_NEED_DICT:return null==this.dictionary?this._error("Missing dictionary"):this._error("Bad dictionary"),!1;default:return this._error("Zlib error"),!1}return!0},u.prototype._after=function(){if(this._checkError()){var e=this.strm.avail_out,t=this.strm.avail_in;this.write_in_progress=!1,this.callback(t,e),this.pending_close&&this.close()}},u.prototype._error=function(e){this.strm.msg&&(e=this.strm.msg),this.onerror(e,this.err),this.write_in_progress=!1,this.pending_close&&this.close()},u.prototype.init=function(e,r,n,a,o){i(4===arguments.length||5===arguments.length,"init(windowBits, level, memLevel, strategy, [dictionary])"),i(e>=8&&e<=15,"invalid windowBits"),i(r>=-1&&r<=9,"invalid compression level"),i(n>=1&&n<=9,"invalid memlevel"),i(a===t.Z_FILTERED||a===t.Z_HUFFMAN_ONLY||a===t.Z_RLE||a===t.Z_FIXED||a===t.Z_DEFAULT_STRATEGY,"invalid strategy"),this._init(r,e,n,a,o),this._setDictionary()},u.prototype.params=function(){throw new Error("deflateParams Not supported")},u.prototype.reset=function(){this._reset(),this._setDictionary()},u.prototype._init=function(e,r,n,i,l){switch(this.level=e,this.windowBits=r,this.memLevel=n,this.strategy=i,this.flush=t.Z_NO_FLUSH,this.err=t.Z_OK,this.mode!==t.GZIP&&this.mode!==t.GUNZIP||(this.windowBits+=16),this.mode===t.UNZIP&&(this.windowBits+=32),this.mode!==t.DEFLATERAW&&this.mode!==t.INFLATERAW||(this.windowBits=-1*this.windowBits),this.strm=new a,this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=o.deflateInit2(this.strm,this.level,t.Z_DEFLATED,this.windowBits,this.memLevel,this.strategy);break;case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:case t.UNZIP:this.err=s.inflateInit2(this.strm,this.windowBits);break;default:throw new Error("Unknown mode "+this.mode)}this.err!==t.Z_OK&&this._error("Init error"),this.dictionary=l,this.write_in_progress=!1,this.init_done=!0},u.prototype._setDictionary=function(){if(null!=this.dictionary){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:this.err=o.deflateSetDictionary(this.strm,this.dictionary)}this.err!==t.Z_OK&&this._error("Failed to set dictionary")}},u.prototype._reset=function(){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:case t.GZIP:this.err=o.deflateReset(this.strm);break;case t.INFLATE:case t.INFLATERAW:case t.GUNZIP:this.err=s.inflateReset(this.strm)}this.err!==t.Z_OK&&this._error("Failed to reset stream")},t.Zlib=u}).call(this,r(1).Buffer,r(3))},function(e,t,r){e.exports=r(19).PassThrough},function(e,t,r){e.exports=r(19).Transform},function(e,t,r){e.exports=r(2)},function(e,t,r){e.exports=r(18)},function(e,t,r){"use strict";e.exports=a;var n=r(31),i=r(6);function a(e){if(!(this instanceof a))return new a(e);n.call(this,e)}i.inherits=r(5),i.inherits(a,n),a.prototype._transform=function(e,t,r){r(null,e)}},function(e,t,r){(function(t){function r(e){try{if(!t.localStorage)return!1}catch(e){return!1}var r=t.localStorage[e];return null!=r&&"true"===String(r).toLowerCase()}e.exports=function(e,t){if(r("noDeprecation"))return e;var n=!1;return function(){if(!n){if(r("throwDeprecation"))throw new Error(t);r("traceDeprecation")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}}}).call(this,r(0))},function(e,t,r){(function(e,t){!function(e,r){"use strict";if(!e.setImmediate){var n,i,a,o,s,l=1,f={},u=!1,h=e.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(e);d=d&&d.setTimeout?d:e,"[object process]"==={}.toString.call(e.process)?n=function(e){t.nextTick(function(){p(e)})}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,r=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=r,t}}()?e.MessageChannel?((a=new MessageChannel).port1.onmessage=function(e){p(e.data)},n=function(e){a.port2.postMessage(e)}):h&&"onreadystatechange"in h.createElement("script")?(i=h.documentElement,n=function(e){var t=h.createElement("script");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):n=function(e){setTimeout(p,0,e)}:(o="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(o)&&p(+t.data.slice(o.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),n=function(t){e.postMessage(o+t,"*")}),d.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),r=0;r=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},r(62),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,r(0))},function(e,t){},function(e,t,r){"use strict";var n=r(9).Buffer,i=r(64);e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return n.alloc(0);if(1===this.length)return this.head.data;for(var t,r,i,a=n.allocUnsafe(e>>>0),o=this.head,s=0;o;)t=o.data,r=a,i=s,t.copy(r,i),s+=o.data.length,o=o.next;return a},e}(),i&&i.inspect&&i.inspect.custom&&(e.exports.prototype[i.inspect.custom]=function(){var e=i.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,r){e.exports=i;var n=r(20).EventEmitter;function i(){n.call(this)}r(5)(i,n),i.Readable=r(19),i.Writable=r(59),i.Duplex=r(58),i.Transform=r(57),i.PassThrough=r(56),i.Stream=i,i.prototype.pipe=function(e,t){var r=this;function i(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function a(){r.readable&&r.resume&&r.resume()}r.on("data",i),e.on("drain",a),e._isStdio||t&&!1===t.end||(r.on("end",s),r.on("close",l));var o=!1;function s(){o||(o=!0,e.end())}function l(){o||(o=!0,"function"==typeof e.destroy&&e.destroy())}function f(e){if(u(),0===n.listenerCount(this,"error"))throw e}function u(){r.removeListener("data",i),e.removeListener("drain",a),r.removeListener("end",s),r.removeListener("close",l),r.removeListener("error",f),e.removeListener("error",f),r.removeListener("end",u),r.removeListener("close",u),e.removeListener("close",u)}return r.on("error",f),e.on("error",f),r.on("end",u),r.on("close",u),e.on("close",u),e.emit("pipe",r),e}},function(e,t,r){"use strict";(function(e){var n=r(1).Buffer,i=r(67).Transform,a=r(55),o=r(29),s=r(30).ok,l=r(1).kMaxLength,f="Cannot create final Buffer. It would be larger than 0x"+l.toString(16)+" bytes";a.Z_MIN_WINDOWBITS=8,a.Z_MAX_WINDOWBITS=15,a.Z_DEFAULT_WINDOWBITS=15,a.Z_MIN_CHUNK=64,a.Z_MAX_CHUNK=1/0,a.Z_DEFAULT_CHUNK=16384,a.Z_MIN_MEMLEVEL=1,a.Z_MAX_MEMLEVEL=9,a.Z_DEFAULT_MEMLEVEL=8,a.Z_MIN_LEVEL=-1,a.Z_MAX_LEVEL=9,a.Z_DEFAULT_LEVEL=a.Z_DEFAULT_COMPRESSION;for(var u=Object.keys(a),h=0;h=l?o=new RangeError(f):t=n.concat(i,a),i=[],e.close(),r(o,t)}e.on("error",function(t){e.removeListener("end",s),e.removeListener("readable",o),r(t)}),e.on("end",s),e.end(t),o()}function y(e,t){if("string"==typeof t&&(t=n.from(t)),!n.isBuffer(t))throw new TypeError("Not a string or buffer");var r=e._finishFlushFlag;return e._processChunk(t,r)}function b(e){if(!(this instanceof b))return new b(e);P.call(this,e,a.DEFLATE)}function v(e){if(!(this instanceof v))return new v(e);P.call(this,e,a.INFLATE)}function w(e){if(!(this instanceof w))return new w(e);P.call(this,e,a.GZIP)}function E(e){if(!(this instanceof E))return new E(e);P.call(this,e,a.GUNZIP)}function x(e){if(!(this instanceof x))return new x(e);P.call(this,e,a.DEFLATERAW)}function S(e){if(!(this instanceof S))return new S(e);P.call(this,e,a.INFLATERAW)}function k(e){if(!(this instanceof k))return new k(e);P.call(this,e,a.UNZIP)}function A(e){return e===a.Z_NO_FLUSH||e===a.Z_PARTIAL_FLUSH||e===a.Z_SYNC_FLUSH||e===a.Z_FULL_FLUSH||e===a.Z_FINISH||e===a.Z_BLOCK}function P(e,r){var o=this;if(this._opts=e=e||{},this._chunkSize=e.chunkSize||t.Z_DEFAULT_CHUNK,i.call(this,e),e.flush&&!A(e.flush))throw new Error("Invalid flush flag: "+e.flush);if(e.finishFlush&&!A(e.finishFlush))throw new Error("Invalid flush flag: "+e.finishFlush);if(this._flushFlag=e.flush||a.Z_NO_FLUSH,this._finishFlushFlag=void 0!==e.finishFlush?e.finishFlush:a.Z_FINISH,e.chunkSize&&(e.chunkSizet.Z_MAX_CHUNK))throw new Error("Invalid chunk size: "+e.chunkSize);if(e.windowBits&&(e.windowBitst.Z_MAX_WINDOWBITS))throw new Error("Invalid windowBits: "+e.windowBits);if(e.level&&(e.levelt.Z_MAX_LEVEL))throw new Error("Invalid compression level: "+e.level);if(e.memLevel&&(e.memLevelt.Z_MAX_MEMLEVEL))throw new Error("Invalid memLevel: "+e.memLevel);if(e.strategy&&e.strategy!=t.Z_FILTERED&&e.strategy!=t.Z_HUFFMAN_ONLY&&e.strategy!=t.Z_RLE&&e.strategy!=t.Z_FIXED&&e.strategy!=t.Z_DEFAULT_STRATEGY)throw new Error("Invalid strategy: "+e.strategy);if(e.dictionary&&!n.isBuffer(e.dictionary))throw new Error("Invalid dictionary: it should be a Buffer instance");this._handle=new a.Zlib(r);var s=this;this._hadError=!1,this._handle.onerror=function(e,r){T(s),s._hadError=!0;var n=new Error(e);n.errno=r,n.code=t.codes[r],s.emit("error",n)};var l=t.Z_DEFAULT_COMPRESSION;"number"==typeof e.level&&(l=e.level);var f=t.Z_DEFAULT_STRATEGY;"number"==typeof e.strategy&&(f=e.strategy),this._handle.init(e.windowBits||t.Z_DEFAULT_WINDOWBITS,l,e.memLevel||t.Z_DEFAULT_MEMLEVEL,f,e.dictionary),this._buffer=n.allocUnsafe(this._chunkSize),this._offset=0,this._level=l,this._strategy=f,this.once("end",this.close),Object.defineProperty(this,"_closed",{get:function(){return!o._handle},configurable:!0,enumerable:!0})}function T(t,r){r&&e.nextTick(r),t._handle&&(t._handle.close(),t._handle=null)}function D(e){e.emit("close")}Object.defineProperty(t,"codes",{enumerable:!0,value:Object.freeze(c),writable:!1}),t.Deflate=b,t.Inflate=v,t.Gzip=w,t.Gunzip=E,t.DeflateRaw=x,t.InflateRaw=S,t.Unzip=k,t.createDeflate=function(e){return new b(e)},t.createInflate=function(e){return new v(e)},t.createDeflateRaw=function(e){return new x(e)},t.createInflateRaw=function(e){return new S(e)},t.createGzip=function(e){return new w(e)},t.createGunzip=function(e){return new E(e)},t.createUnzip=function(e){return new k(e)},t.deflate=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new b(t),e,r)},t.deflateSync=function(e,t){return y(new b(t),e)},t.gzip=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new w(t),e,r)},t.gzipSync=function(e,t){return y(new w(t),e)},t.deflateRaw=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new x(t),e,r)},t.deflateRawSync=function(e,t){return y(new x(t),e)},t.unzip=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new k(t),e,r)},t.unzipSync=function(e,t){return y(new k(t),e)},t.inflate=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new v(t),e,r)},t.inflateSync=function(e,t){return y(new v(t),e)},t.gunzip=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new E(t),e,r)},t.gunzipSync=function(e,t){return y(new E(t),e)},t.inflateRaw=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new S(t),e,r)},t.inflateRawSync=function(e,t){return y(new S(t),e)},o.inherits(P,i),P.prototype.params=function(r,n,i){if(rt.Z_MAX_LEVEL)throw new RangeError("Invalid compression level: "+r);if(n!=t.Z_FILTERED&&n!=t.Z_HUFFMAN_ONLY&&n!=t.Z_RLE&&n!=t.Z_FIXED&&n!=t.Z_DEFAULT_STRATEGY)throw new TypeError("Invalid strategy: "+n);if(this._level!==r||this._strategy!==n){var o=this;this.flush(a.Z_SYNC_FLUSH,function(){s(o._handle,"zlib binding closed"),o._handle.params(r,n),o._hadError||(o._level=r,o._strategy=n,i&&i())})}else e.nextTick(i)},P.prototype.reset=function(){return s(this._handle,"zlib binding closed"),this._handle.reset()},P.prototype._flush=function(e){this._transform(n.alloc(0),"",e)},P.prototype.flush=function(t,r){var i=this,o=this._writableState;("function"==typeof t||void 0===t&&!r)&&(r=t,t=a.Z_FULL_FLUSH),o.ended?r&&e.nextTick(r):o.ending?r&&this.once("end",r):o.needDrain?r&&this.once("drain",function(){return i.flush(t,r)}):(this._flushFlag=t,this.write(n.alloc(0),"",r))},P.prototype.close=function(t){T(this,t),e.nextTick(D,this)},P.prototype._transform=function(e,t,r){var i,o=this._writableState,s=(o.ending||o.ended)&&(!e||o.length===e.length);return null===e||n.isBuffer(e)?this._handle?(s?i=this._finishFlushFlag:(i=this._flushFlag,e.length>=o.length&&(this._flushFlag=this._opts.flush||a.Z_NO_FLUSH)),void this._processChunk(e,i,r)):r(new Error("zlib binding closed")):r(new Error("invalid input"))},P.prototype._processChunk=function(e,t,r){var i=e&&e.length,a=this._chunkSize-this._offset,o=0,u=this,h="function"==typeof r;if(!h){var d,c=[],p=0;this.on("error",function(e){d=e}),s(this._handle,"zlib binding closed");do{var g=this._handle.writeSync(t,e,o,i,this._buffer,this._offset,a)}while(!this._hadError&&y(g[0],g[1]));if(this._hadError)throw d;if(p>=l)throw T(this),new RangeError(f);var m=n.concat(c,p);return T(this),m}s(this._handle,"zlib binding closed");var _=this._handle.write(t,e,o,i,this._buffer,this._offset,a);function y(l,f){if(this&&(this.buffer=null,this.callback=null),!u._hadError){var d=a-f;if(s(d>=0,"have should not go down"),d>0){var g=u._buffer.slice(u._offset,u._offset+d);u._offset+=d,h?u.push(g):(c.push(g),p+=g.length)}if((0===f||u._offset>=u._chunkSize)&&(a=u._chunkSize,u._offset=0,u._buffer=n.allocUnsafe(u._chunkSize)),0===f){if(o+=i-l,i=l,!h)return!0;var m=u._handle.write(t,e,o,i,u._buffer,u._offset,u._chunkSize);return m.callback=y,void(m.buffer=e)}if(!h)return!1;r()}}_.buffer=e,_.callback=y},o.inherits(b,P),o.inherits(v,P),o.inherits(w,P),o.inherits(E,P),o.inherits(x,P),o.inherits(S,P),o.inherits(k,P)}).call(this,r(3))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,r){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(t,d){if(void 0===t)throw"dicomParser.parseDicom: missing required parameter 'byteArray'";function c(l){var c=function(e){if(void 0===e.elements.x00020010)throw"dicomParser.parseDicom: missing required meta header attribute 0002,0010";var r=e.elements.x00020010;return u.readFixedString(t,r.dataOffset,r.length)}(l),p=function(e){if("1.2.840.10008.1.2"===e)return!1;return!0}(c),g=function(o,l){if("1.2.840.10008.1.2.1.99"===o){if(d&&d.inflater){var u=d.inflater(t,l);return new a.default(s.default,u,0)}if(void 0!==e&&this.module!==e){var h=r(68),c=(0,f.default)(t,l,t.length-l),p=h.inflateRawSync(c),g=(0,n.default)(t,p.length+l);return t.copy(g,0,0,l),p.copy(g,l),new a.default(s.default,g,0)}if("undefined"!=typeof pako){var m=t.slice(l),_=pako.inflateRaw(m),y=(0,n.default)(t,_.length+l);return y.set(t.slice(0,l),0),y.set(_,l),new a.default(s.default,y,0)}throw"dicomParser.parseDicom: no inflater available to handle deflate transfer syntax"}if("1.2.840.10008.1.2.2"===o)return new a.default(i.default,t,l);return new a.default(s.default,t,l)}(c,l.position),m=new o.default(g.byteArrayParser,g.byteArray,{});m.warnings=g.warnings;try{p?h.parseDicomDataSetExplicit(m,g,g.byteArray.length,d):h.parseDicomDataSetImplicit(m,g,g.byteArray.length,d)}catch(e){var _={exception:e,dataSet:m};throw _}return m}return p=(0,l.default)(t,d),g=c(p),function(e,t){for(var r in e.elements)e.elements.hasOwnProperty(r)&&(t.elements[r]=e.elements[r]);return void 0!==e.warnings&&(t.warnings=e.warnings.concat(t.warnings)),t}(p,g);var p,g};var n=c(r(22)),i=c(r(37)),a=c(r(12)),o=c(r(7)),s=c(r(21)),l=c(r(36)),f=c(r(11)),u=d(r(14)),h=d(r(16));function d(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function c(e){return e&&e.__esModule?e:{default:e}}}).call(this,r(69)(e))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default="1.8.2"},function(e,t){t.read=function(e,t,r,n,i){var a,o,s=8*i-n-1,l=(1<>1,u=-7,h=r?i-1:0,d=r?-1:1,c=e[t+h];for(h+=d,a=c&(1<<-u)-1,c>>=-u,u+=s;u>0;a=256*a+e[t+h],h+=d,u-=8);for(o=a&(1<<-u)-1,a>>=-u,u+=n;u>0;o=256*o+e[t+h],h+=d,u-=8);if(0===a)a=1-f;else{if(a===l)return o?NaN:1/0*(c?-1:1);o+=Math.pow(2,n),a-=f}return(c?-1:1)*o*Math.pow(2,a-n)},t.write=function(e,t,r,n,i,a){var o,s,l,f=8*a-i-1,u=(1<>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,c=n?0:a-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,o=u):(o=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-o))<1&&(o--,l*=2),(t+=o+h>=1?d/l:d*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(t*l-1)*Math.pow(2,i),o+=h):(s=t*Math.pow(2,h-1)*Math.pow(2,i),o=0));i>=8;e[r+c]=255&s,c+=p,s/=256,i-=8);for(o=o<0;e[r+c]=255&o,c+=p,o/=256,f-=8);e[r+c-p]|=128*g}},function(e,t,r){"use strict";t.byteLength=function(e){return 3*e.length/4-f(e)},t.toByteArray=function(e){var t,r,n,o,s,l=e.length;o=f(e),s=new a(3*l/4-o),r=o>0?l-4:l;var u=0;for(t=0;t>16&255,s[u++]=n>>8&255,s[u++]=255&n;2===o?(n=i[e.charCodeAt(t)]<<2|i[e.charCodeAt(t+1)]>>4,s[u++]=255&n):1===o&&(n=i[e.charCodeAt(t)]<<10|i[e.charCodeAt(t+1)]<<4|i[e.charCodeAt(t+2)]>>2,s[u++]=n>>8&255,s[u++]=255&n);return s},t.fromByteArray=function(e){for(var t,r=e.length,i=r%3,a="",o=[],s=0,l=r-i;sl?l:s+16383));1===i?(t=e[r-1],a+=n[t>>2],a+=n[t<<4&63],a+="=="):2===i&&(t=(e[r-2]<<8)+e[r-1],a+=n[t>>10],a+=n[t>>4&63],a+=n[t<<2&63],a+="=");return o.push(a),o.join("")};for(var n=[],i=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,l=o.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===e[t-2]?2:"="===e[t-1]?1:0}function u(e,t,r){for(var i,a,o=[],s=t;s>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(e,t,r){"use strict";function n(e,t){return 255===e.byteArray[t]&&217===e.byteArray[t+1]}function i(e,t,r){var i=t.fragments[r];return!(!n(e,i.position+i.length-2)&&!n(e,i.position+i.length-3))}function a(e,t,r){for(var n=r;n0&&t<=12&&e>0&&e<=function(e,t){switch(e){case 2:return t%4==0&&t%100||t%400==0?29:28;case 9:case 4:case 6:case 11:return 30;default:return 31}}(t,r)}(i,n,r))throw"invalid DA '"+e+"'";return{year:r,month:n,day:i}}if(t)throw"invalid DA '"+e+"'";return}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(e.length>=2){var r=parseInt(e.substring(0,2),10),n=e.length>=4?parseInt(e.substring(2,4),10):void 0,i=e.length>=6?parseInt(e.substring(4,6),10):void 0,a=e.length>=8?parseInt(e.substring(7,13),10):void 0;if(t&&(isNaN(r)||void 0!==n&&isNaN(n)||void 0!==i&&isNaN(i)||void 0!==a&&isNaN(a)||r<0||r>23||n&&(n<0||n>59)||i&&(i<0||i>59)||a&&(a<0||a>999999)))throw"invalid TM '"+e+"'";return{hours:r,minutes:n,seconds:i,fractionalSeconds:a}}if(t)throw"invalid TM '"+e+"'";return}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createJPEGBasicOffsetTable=t.explicitDataSetToJS=t.explicitElementToString=t.parseDA=t.parseTM=t.parsePN=t.isPrivateTag=t.isStringVr=void 0;var n=r(25),i=f(r(77)),a=f(r(76)),o=f(r(43)),s=f(r(75)),l=f(r(74));function f(e){return e&&e.__esModule?e:{default:e}}t.isStringVr=n.isStringVr,t.isPrivateTag=n.isPrivateTag,t.parsePN=n.parsePN,t.parseTM=i.default,t.parseDA=a.default,t.explicitElementToString=o.default,t.explicitDataSetToJS=s.default,t.createJPEGBasicOffsetTable=l.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.readTag=t.readSequenceItem=t.readSequenceItemsImplicit=t.readSequenceItemsExplicit=t.readPart10Header=t.readEncapsulatedPixelDataFromFragments=t.readEncapsulatedPixelData=t.readEncapsulatedImageFrame=t.readDicomElementImplicit=t.readDicomElementExplicit=t.parseDicom=t.littleEndianByteArrayParser=t.findItemDelimitationItemAndSetElementLength=t.findEndOfEncapsulatedElement=t.findAndSetUNElementLength=t.DataSet=t.sharedCopy=t.ByteStream=t.bigEndianByteArrayParser=t.version=t.alloc=t.readFixedString=t.parseDicomDataSetImplicit=t.parseDicomDataSetExplicit=t.createJPEGBasicOffsetTable=t.explicitDataSetToJS=t.explicitElementToString=t.parseDA=t.parseTM=t.parsePN=t.isPrivateTag=t.isStringVr=void 0;var n=r(78),i=r(16),a=r(14),o=P(r(22)),s=P(r(71)),l=P(r(37)),f=P(r(12)),u=P(r(11)),h=P(r(7)),d=P(r(41)),c=P(r(42)),p=P(r(24)),g=P(r(21)),m=P(r(70)),_=P(r(15)),y=P(r(23)),b=P(r(26)),v=P(r(44)),w=P(r(17)),E=P(r(36)),x=P(r(40)),S=P(r(39)),k=P(r(13)),A=P(r(4));function P(e){return e&&e.__esModule?e:{default:e}}var T={isStringVr:n.isStringVr,isPrivateTag:n.isPrivateTag,parsePN:n.parsePN,parseTM:n.parseTM,parseDA:n.parseDA,explicitElementToString:n.explicitElementToString,explicitDataSetToJS:n.explicitDataSetToJS,createJPEGBasicOffsetTable:n.createJPEGBasicOffsetTable,parseDicomDataSetExplicit:i.parseDicomDataSetExplicit,parseDicomDataSetImplicit:i.parseDicomDataSetImplicit,readFixedString:a.readFixedString,alloc:o.default,version:s.default,bigEndianByteArrayParser:l.default,ByteStream:f.default,sharedCopy:u.default,DataSet:h.default,findAndSetUNElementLength:d.default,findEndOfEncapsulatedElement:c.default,findItemDelimitationItemAndSetElementLength:p.default,littleEndianByteArrayParser:g.default,parseDicom:m.default,readDicomElementExplicit:_.default,readDicomElementImplicit:y.default,readEncapsulatedImageFrame:b.default,readEncapsulatedPixelData:v.default,readEncapsulatedPixelDataFromFragments:w.default,readPart10Header:E.default,readSequenceItemsExplicit:x.default,readSequenceItemsImplicit:S.default,readSequenceItem:k.default,readTag:A.default};t.isStringVr=n.isStringVr,t.isPrivateTag=n.isPrivateTag,t.parsePN=n.parsePN,t.parseTM=n.parseTM,t.parseDA=n.parseDA,t.explicitElementToString=n.explicitElementToString,t.explicitDataSetToJS=n.explicitDataSetToJS,t.createJPEGBasicOffsetTable=n.createJPEGBasicOffsetTable,t.parseDicomDataSetExplicit=i.parseDicomDataSetExplicit,t.parseDicomDataSetImplicit=i.parseDicomDataSetImplicit,t.readFixedString=a.readFixedString,t.alloc=o.default,t.version=s.default,t.bigEndianByteArrayParser=l.default,t.ByteStream=f.default,t.sharedCopy=u.default,t.DataSet=h.default,t.findAndSetUNElementLength=d.default,t.findEndOfEncapsulatedElement=c.default,t.findItemDelimitationItemAndSetElementLength=p.default,t.littleEndianByteArrayParser=g.default,t.parseDicom=m.default,t.readDicomElementExplicit=_.default,t.readDicomElementImplicit=y.default,t.readEncapsulatedImageFrame=b.default,t.readEncapsulatedPixelData=v.default,t.readEncapsulatedPixelDataFromFragments=w.default,t.readPart10Header=E.default,t.readSequenceItemsExplicit=x.default,t.readSequenceItemsImplicit=S.default,t.readSequenceItem=k.default,t.readTag=A.default,t.default=T}])}); +//# sourceMappingURL=dicomParser.min.js.map - if (count !== length) { - throw new Error("ERROR: frame format error [Lf!=count]"); - } - - return 1; -}; +/***/ }), +/***/ "./node_modules/events/events.js": +/*!***************************************!*\ + !*** ./node_modules/events/events.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { -/*** Exports ***/ +// 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 moduleType = typeof module; -if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.FrameHeader; +function EventEmitter() { + this._events = this._events || {}; + this._maxListeners = this._maxListeners || undefined; } +module.exports = EventEmitter; +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; -/***/ }), +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; -/***/ "./node_modules/jpeg-lossless-decoder-js/src/huffman-table.js": -/*!********************************************************************!*\ - !*** ./node_modules/jpeg-lossless-decoder-js/src/huffman-table.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +// 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. +EventEmitter.defaultMaxListeners = 10; -"use strict"; -/* - * Copyright (C) 2015 Michael Martinez - * Changes: Added support for selection values 2-7, fixed minor bugs & - * warnings, split into multiple class files, and general clean up. - * - * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. - */ +// 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(n) { + if (!isNumber(n) || n < 0 || isNaN(n)) + throw TypeError('n must be a positive number'); + this._maxListeners = n; + return this; +}; -/* - * Copyright (C) Helmut Dersch - * - * 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: +EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. + if (!this._events) + this._events = {}; - * 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. - */ + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events.error || + (isObject(this._events.error) && !this._events.error.length)) { + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + // At least give some kind of context to the user + var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); + err.context = er; + throw err; + } + } + } -/*jslint browser: true, node: true */ -/*global require, module */ + handler = this._events[type]; + + if (isUndefined(handler)) + return false; + + if (isFunction(handler)) { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + args = Array.prototype.slice.call(arguments, 1); + handler.apply(this, args); + } + } else if (isObject(handler)) { + args = Array.prototype.slice.call(arguments, 1); + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) + listeners[i].apply(this, args); + } + return true; +}; +EventEmitter.prototype.addListener = function(type, listener) { + var m; -/*** Imports ***/ -var jpeg = jpeg || {}; -jpeg.lossless = jpeg.lossless || {}; -jpeg.lossless.DataStream = jpeg.lossless.DataStream || (( true) ? __webpack_require__(/*! ./data-stream.js */ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js") : undefined); -jpeg.lossless.Utils = jpeg.lossless.Utils || (( true) ? __webpack_require__(/*! ./utils.js */ "./node_modules/jpeg-lossless-decoder-js/src/utils.js") : undefined); + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + if (!this._events) + this._events = {}; -/*** Constructor ***/ -jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || function () { - this.l = jpeg.lossless.Utils.createArray(4, 2, 16); - this.th = []; - this.v = jpeg.lossless.Utils.createArray(4, 2, 16, 200); - this.tc = jpeg.lossless.Utils.createArray(4, 2); + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (this._events.newListener) + this.emit('newListener', type, + isFunction(listener.listener) ? + listener.listener : listener); - this.tc[0][0] = 0; - this.tc[1][0] = 0; - this.tc[2][0] = 0; - this.tc[3][0] = 0; - this.tc[0][1] = 0; - this.tc[1][1] = 0; - this.tc[2][1] = 0; - this.tc[3][1] = 0; - this.th[0] = 0; - this.th[1] = 0; - this.th[2] = 0; - this.th[3] = 0; -}; + if (!this._events[type]) + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + else if (isObject(this._events[type])) + // If we've already got an array, just append. + this._events[type].push(listener); + else + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + // Check for listener leak + if (isObject(this._events[type]) && !this._events[type].warned) { + if (!isUndefined(this._maxListeners)) { + m = this._maxListeners; + } else { + m = EventEmitter.defaultMaxListeners; + } + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + // not supported in IE 10 + console.trace(); + } + } + } -/*** Static Pseudo-constants ***/ + return this; +}; -jpeg.lossless.HuffmanTable.MSB = 0x80000000; +EventEmitter.prototype.on = EventEmitter.prototype.addListener; +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); -/*** Prototype Methods ***/ + var fired = false; -jpeg.lossless.HuffmanTable.prototype.read = function(data, HuffTab) { - /*jslint bitwise: true */ + function g() { + this.removeListener(type, g); - var count = 0, length, temp, t, c, i, j; + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } - length = data.get16(); - count += 2; + g.listener = listener; + this.on(type, g); - while (count < length) { - temp = data.get8(); - count+=1; - t = temp & 0x0F; - if (t > 3) { - throw new Error("ERROR: Huffman table ID > 3"); - } + return this; +}; - c = temp >> 4; - if (c > 2) { - throw new Error("ERROR: Huffman table [Table class > 2 ]"); - } +// emits a 'removeListener' event iff the listener was removed +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; - this.th[t] = 1; - this.tc[t][c] = 1; + if (!isFunction(listener)) + throw TypeError('listener must be a function'); - for (i = 0; i < 16; i+=1) { - this.l[t][c][i] = data.get8(); - count+=1; - } + if (!this._events || !this._events[type]) + return this; - for (i = 0; i < 16; i+=1) { - for (j = 0; j < this.l[t][c][i]; j+=1) { - if (count > length) { - throw new Error("ERROR: Huffman table format error [count>Lh]"); - } + list = this._events[type]; + length = list.length; + position = -1; - this.v[t][c][i][j] = data.get8(); - count+=1; - } - } + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); + + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } } - if (count !== length) { - throw new Error("ERROR: Huffman table format error [count!=Lf]"); + if (position < 0) + return this; + + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); } - for (i = 0; i < 4; i+=1) { - for (j = 0; j < 2; j+=1) { - if (this.tc[i][j] !== 0) { - this.buildHuffTable(HuffTab[i][j], this.l[i][j], this.v[i][j]); - } - } + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; + + if (!this._events) + return this; + + // not listening for removeListener, no need to emit + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } - return 1; + listeners = this._events[type]; + + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else if (listeners) { + // LIFO order + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; + + return this; }; +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; +EventEmitter.prototype.listenerCount = function(type) { + if (this._events) { + var evlistener = this._events[type]; -// Build_HuffTab() -// Parameter: t table ID -// c table class ( 0 for DC, 1 for AC ) -// L[i] # of codewords which length is i -// V[i][j] Huffman Value (length=i) -// Effect: -// build up HuffTab[t][c] using L and V. -jpeg.lossless.HuffmanTable.prototype.buildHuffTable = function(tab, L, V) { - /*jslint bitwise: true */ + if (isFunction(evlistener)) + return 1; + else if (evlistener) + return evlistener.length; + } + return 0; +}; - var currentTable, temp, k, i, j, n; - temp = 256; - k = 0; +EventEmitter.listenerCount = function(emitter, type) { + return emitter.listenerCount(type); +}; - for (i = 0; i < 8; i+=1) { // i+1 is Code length - for (j = 0; j < L[i]; j+=1) { - for (n = 0; n < (temp >> (i + 1)); n+=1) { - tab[k] = V[i][j] | ((i + 1) << 8); - k+=1; - } - } +function isFunction(arg) { + return typeof arg === 'function'; +} + +function isNumber(arg) { + return typeof arg === 'number'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isUndefined(arg) { + return arg === void 0; +} + + +/***/ }), + +/***/ "./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 } - for (i = 1; k < 256; i+=1, k+=1) { - tab[k] = i | jpeg.lossless.HuffmanTable.MSB; + 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 } + } - currentTable = 1; - k = 0; + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - for (i = 8; i < 16; i+=1) { // i+1 is Code length - for (j = 0; j < L[i]; j+=1) { - for (n = 0; n < (temp >> (i - 7)); n+=1) { - tab[(currentTable * 256) + k] = V[i][j] | ((i + 1) << 8); - k+=1; - } + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - if (k >= 256) { - if (k > 256) { - throw new Error("ERROR: Huffman table error(1)!"); - } + buffer[offset + i - d] |= s * 128 +} - k = 0; - currentTable+=1; - } - } - } -}; +/***/ }), -/*** Exports ***/ +/***/ "./node_modules/inherits/inherits_browser.js": +/*!***************************************************!*\ + !*** ./node_modules/inherits/inherits_browser.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { -var moduleType = typeof module; -if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.HuffmanTable; +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/jpeg-lossless-decoder-js/src/main.js": -/*!***********************************************************!*\ - !*** ./node_modules/jpeg-lossless-decoder-js/src/main.js ***! - \***********************************************************/ +/***/ "./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/jpeg-lossless-decoder-js/src/component-spec.js": +/*!*********************************************************************!*\ + !*** ./node_modules/jpeg-lossless-decoder-js/src/component-spec.js ***! + \*********************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; +/* + * Copyright (C) 2015 Michael Martinez + * Changes: Added support for selection values 2-7, fixed minor bugs & + * warnings, split into multiple class files, and general clean up. + * + * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. + */ + +/* + * Copyright (C) Helmut Dersch + * + * 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. + */ + /*jslint browser: true, node: true */ /*global require, module */ @@ -7435,30 +8289,30 @@ if ((moduleType !== 'undefined') && module.exports) { /*** Imports ***/ var jpeg = jpeg || {}; jpeg.lossless = jpeg.lossless || {}; -jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || (( true) ? __webpack_require__(/*! ./component-spec.js */ "./node_modules/jpeg-lossless-decoder-js/src/component-spec.js") : undefined); -jpeg.lossless.DataStream = jpeg.lossless.DataStream || (( true) ? __webpack_require__(/*! ./data-stream.js */ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js") : undefined); -jpeg.lossless.Decoder = jpeg.lossless.Decoder || (( true) ? __webpack_require__(/*! ./decoder.js */ "./node_modules/jpeg-lossless-decoder-js/src/decoder.js") : undefined); -jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || (( true) ? __webpack_require__(/*! ./frame-header.js */ "./node_modules/jpeg-lossless-decoder-js/src/frame-header.js") : undefined); -jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || (( true) ? __webpack_require__(/*! ./huffman-table.js */ "./node_modules/jpeg-lossless-decoder-js/src/huffman-table.js") : undefined); -jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || (( true) ? __webpack_require__(/*! ./quantization-table.js */ "./node_modules/jpeg-lossless-decoder-js/src/quantization-table.js") : undefined); -jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || (( true) ? __webpack_require__(/*! ./scan-component.js */ "./node_modules/jpeg-lossless-decoder-js/src/scan-component.js") : undefined); -jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || (( true) ? __webpack_require__(/*! ./scan-header.js */ "./node_modules/jpeg-lossless-decoder-js/src/scan-header.js") : undefined); -jpeg.lossless.Utils = jpeg.lossless.Utils || (( true) ? __webpack_require__(/*! ./utils.js */ "./node_modules/jpeg-lossless-decoder-js/src/utils.js") : undefined); + + +/*** Constructor ***/ +jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || function () { + this.hSamp = 0; // Horizontal sampling factor + this.quantTableSel = 0; // Quantization table destination selector + this.vSamp = 0; // Vertical +}; /*** Exports ***/ + var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg; + module.exports = jpeg.lossless.ComponentSpec; } /***/ }), -/***/ "./node_modules/jpeg-lossless-decoder-js/src/quantization-table.js": -/*!*************************************************************************!*\ - !*** ./node_modules/jpeg-lossless-decoder-js/src/quantization-table.js ***! - \*************************************************************************/ +/***/ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js": +/*!******************************************************************!*\ + !*** ./node_modules/jpeg-lossless-decoder-js/src/data-stream.js ***! + \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -7501,138 +8355,45 @@ if ((moduleType !== 'undefined') && module.exports) { /*** Imports ***/ var jpeg = jpeg || {}; jpeg.lossless = jpeg.lossless || {}; -jpeg.lossless.DataStream = jpeg.lossless.DataStream || (( true) ? __webpack_require__(/*! ./data-stream.js */ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js") : undefined); -jpeg.lossless.Utils = jpeg.lossless.Utils || (( true) ? __webpack_require__(/*! ./utils.js */ "./node_modules/jpeg-lossless-decoder-js/src/utils.js") : undefined); /*** Constructor ***/ -jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || function () { - this.precision = []; // Quantization precision 8 or 16 - this.tq = []; // 1: this table is presented - this.quantTables = jpeg.lossless.Utils.createArray(4, 64); // Tables - - this.tq[0] = 0; - this.tq[1] = 0; - this.tq[2] = 0; - this.tq[3] = 0; +jpeg.lossless.DataStream = jpeg.lossless.DataStream || function (data, offset, length) { + this.buffer = new DataView(data, offset, length); + this.index = 0; }; -/*** Static Methods ***/ +jpeg.lossless.DataStream.prototype.get16 = function () { + var value = this.buffer.getUint16(this.index, false); + this.index += 2; + return value; +}; -jpeg.lossless.QuantizationTable.enhanceQuantizationTable = function(qtab, table) { - /*jslint bitwise: true */ - var i; - - for (i = 0; i < 8; i+=1) { - qtab[table[(0 * 8) + i]] *= 90; - qtab[table[(4 * 8) + i]] *= 90; - qtab[table[(2 * 8) + i]] *= 118; - qtab[table[(6 * 8) + i]] *= 49; - qtab[table[(5 * 8) + i]] *= 71; - qtab[table[(1 * 8) + i]] *= 126; - qtab[table[(7 * 8) + i]] *= 25; - qtab[table[(3 * 8) + i]] *= 106; - } - - for (i = 0; i < 8; i+=1) { - qtab[table[0 + (8 * i)]] *= 90; - qtab[table[4 + (8 * i)]] *= 90; - qtab[table[2 + (8 * i)]] *= 118; - qtab[table[6 + (8 * i)]] *= 49; - qtab[table[5 + (8 * i)]] *= 71; - qtab[table[1 + (8 * i)]] *= 126; - qtab[table[7 + (8 * i)]] *= 25; - qtab[table[3 + (8 * i)]] *= 106; - } - - for (i = 0; i < 64; i+=1) { - qtab[i] >>= 6; - } -}; - - -/*** Prototype Methods ***/ - -jpeg.lossless.QuantizationTable.prototype.read = function (data, table) { - /*jslint bitwise: true */ - - var count = 0, length, temp, t, i; - - length = data.get16(); - count += 2; - - while (count < length) { - temp = data.get8(); - count+=1; - t = temp & 0x0F; - - if (t > 3) { - throw new Error("ERROR: Quantization table ID > 3"); - } - - this.precision[t] = temp >> 4; - - if (this.precision[t] === 0) { - this.precision[t] = 8; - } else if (this.precision[t] === 1) { - this.precision[t] = 16; - } else { - throw new Error("ERROR: Quantization table precision error"); - } - - this.tq[t] = 1; - - if (this.precision[t] === 8) { - for (i = 0; i < 64; i+=1) { - if (count > length) { - throw new Error("ERROR: Quantization table format error"); - } - - this.quantTables[t][i] = data.get8(); - count+=1; - } - - jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); - } else { - for (i = 0; i < 64; i+=1) { - if (count > length) { - throw new Error("ERROR: Quantization table format error"); - } - - this.quantTables[t][i] = data.get16(); - count += 2; - } - - jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); - } - } - - if (count !== length) { - throw new Error("ERROR: Quantization table error [count!=Lq]"); - } - - return 1; -}; +jpeg.lossless.DataStream.prototype.get8 = function () { + var value = this.buffer.getUint8(this.index); + this.index += 1; + return value; +}; /*** Exports ***/ var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.QuantizationTable; + module.exports = jpeg.lossless.DataStream; } /***/ }), -/***/ "./node_modules/jpeg-lossless-decoder-js/src/scan-component.js": -/*!*********************************************************************!*\ - !*** ./node_modules/jpeg-lossless-decoder-js/src/scan-component.js ***! - \*********************************************************************/ +/***/ "./node_modules/jpeg-lossless-decoder-js/src/decoder.js": +/*!**************************************************************!*\ + !*** ./node_modules/jpeg-lossless-decoder-js/src/decoder.js ***! + \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -7675,1654 +8436,1385 @@ if ((moduleType !== 'undefined') && module.exports) { /*** Imports ***/ var jpeg = jpeg || {}; jpeg.lossless = jpeg.lossless || {}; +jpeg.lossless.DataStream = jpeg.lossless.DataStream || (( true) ? __webpack_require__(/*! ./data-stream.js */ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js") : undefined); +jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || (( true) ? __webpack_require__(/*! ./huffman-table.js */ "./node_modules/jpeg-lossless-decoder-js/src/huffman-table.js") : undefined); +jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || (( true) ? __webpack_require__(/*! ./quantization-table.js */ "./node_modules/jpeg-lossless-decoder-js/src/quantization-table.js") : undefined); +jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || (( true) ? __webpack_require__(/*! ./scan-header.js */ "./node_modules/jpeg-lossless-decoder-js/src/scan-header.js") : undefined); +jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || (( true) ? __webpack_require__(/*! ./frame-header.js */ "./node_modules/jpeg-lossless-decoder-js/src/frame-header.js") : undefined); +jpeg.lossless.Utils = jpeg.lossless.Utils || (( true) ? __webpack_require__(/*! ./utils.js */ "./node_modules/jpeg-lossless-decoder-js/src/utils.js") : undefined); /*** Constructor ***/ -jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || function () { - this.acTabSel = 0; // AC table selector - this.dcTabSel = 0; // DC table selector - this.scanCompSel = 0; // Scan component selector -}; +jpeg.lossless.Decoder = jpeg.lossless.Decoder || function (buffer, numBytes) { + this.buffer = buffer; + this.frame = new jpeg.lossless.FrameHeader(); + this.huffTable = new jpeg.lossless.HuffmanTable(); + this.quantTable = new jpeg.lossless.QuantizationTable(); + this.scan = new jpeg.lossless.ScanHeader(); + this.DU = jpeg.lossless.Utils.createArray(10, 4, 64); // at most 10 data units in a MCU, at most 4 data units in one component + this.HuffTab = jpeg.lossless.Utils.createArray(4, 2, 50 * 256); + this.IDCT_Source = []; + this.nBlock = []; // number of blocks in the i-th Comp in a scan + this.acTab = jpeg.lossless.Utils.createArray(10, 1); // ac HuffTab for the i-th Comp in a scan + this.dcTab = jpeg.lossless.Utils.createArray(10, 1); // dc HuffTab for the i-th Comp in a scan + this.qTab = jpeg.lossless.Utils.createArray(10, 1); // quantization table for the i-th Comp in a scan + this.marker = 0; + this.markerIndex = 0; + this.numComp = 0; + this.restartInterval = 0; + this.selection = 0; + this.xDim = 0; + this.yDim = 0; + this.xLoc = 0; + this.yLoc = 0; + this.numBytes = 0; + this.outputData = null; + this.restarting = false; + this.mask = 0; + if (typeof numBytes !== "undefined") { + this.numBytes = numBytes; + } +}; -/*** Exports ***/ +/*** Static Pseudo-constants ***/ -var moduleType = typeof module; -if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.ScanComponent; -} +jpeg.lossless.Decoder.IDCT_P = [0, 5, 40, 16, 45, 2, 7, 42, 21, 56, 8, 61, 18, 47, 1, 4, 41, 23, 58, 13, 32, 24, 37, 10, 63, 17, 44, 3, 6, 43, 20, + 57, 15, 34, 29, 48, 53, 26, 39, 9, 60, 19, 46, 22, 59, 12, 33, 31, 50, 55, 25, 36, 11, 62, 14, 35, 28, 49, 52, 27, 38, 30, 51, 54]; +jpeg.lossless.Decoder.TABLE = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, + 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63]; +jpeg.lossless.Decoder.MAX_HUFFMAN_SUBTREE = 50; +jpeg.lossless.Decoder.MSB = 0x80000000; +jpeg.lossless.Decoder.RESTART_MARKER_BEGIN = 0xFFD0; +jpeg.lossless.Decoder.RESTART_MARKER_END = 0xFFD7; +/*** Prototype Methods ***/ -/***/ }), +jpeg.lossless.Decoder.prototype.decompress = function (buffer, offset, length) { + return this.decode(buffer, offset, length).buffer; +}; -/***/ "./node_modules/jpeg-lossless-decoder-js/src/scan-header.js": -/*!******************************************************************!*\ - !*** ./node_modules/jpeg-lossless-decoder-js/src/scan-header.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { -"use strict"; -/* - * Copyright (C) 2015 Michael Martinez - * Changes: Added support for selection values 2-7, fixed minor bugs & - * warnings, split into multiple class files, and general clean up. - * - * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. - */ -/* - * Copyright (C) Helmut Dersch - * - * 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: +jpeg.lossless.Decoder.prototype.decode = function (buffer, offset, length, numBytes) { + /*jslint bitwise: true */ - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. + var current, scanNum = 0, pred = [], i, compN, temp = [], index = [], mcuNum; - * 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. - */ + if (typeof buffer !== "undefined") { + this.buffer = buffer; + } -/*jslint browser: true, node: true */ -/*global require, module */ + if (typeof numBytes !== "undefined") { + this.numBytes = numBytes; + } + this.stream = new jpeg.lossless.DataStream(this.buffer, offset, length); + this.buffer = null; + this.xLoc = 0; + this.yLoc = 0; + current = this.stream.get16(); -/*** Imports ***/ -var jpeg = jpeg || {}; -jpeg.lossless = jpeg.lossless || {}; -jpeg.lossless.DataStream = jpeg.lossless.DataStream || (( true) ? __webpack_require__(/*! ./data-stream.js */ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js") : undefined); -jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || (( true) ? __webpack_require__(/*! ./scan-component.js */ "./node_modules/jpeg-lossless-decoder-js/src/scan-component.js") : undefined); + if (current !== 0xFFD8) { // SOI + throw new Error("Not a JPEG file"); + } + current = this.stream.get16(); -/*** Constructor ***/ -jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || function () { - this.ah = 0; - this.al = 0; - this.numComp = 0; // Number of components in the scan - this.selection = 0; // Start of spectral or predictor selection - this.spectralEnd = 0; // End of spectral selection - this.components = []; -}; + while ((((current >> 4) !== 0x0FFC) || (current === 0xFFC4))) { // SOF 0~15 + switch (current) { + case 0xFFC4: // DHT + this.huffTable.read(this.stream, this.HuffTab); + break; + case 0xFFCC: // DAC + throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); + case 0xFFDB: + this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); + break; + case 0xFFDD: + this.restartInterval = this.readNumber(); + break; + case 0xFFE0: + case 0xFFE1: + case 0xFFE2: + case 0xFFE3: + case 0xFFE4: + case 0xFFE5: + case 0xFFE6: + case 0xFFE7: + case 0xFFE8: + case 0xFFE9: + case 0xFFEA: + case 0xFFEB: + case 0xFFEC: + case 0xFFED: + case 0xFFEE: + case 0xFFEF: + this.readApp(); + break; + case 0xFFFE: + this.readComment(); + break; + default: + if ((current >> 8) !== 0xFF) { + throw new Error("ERROR: format throw new IOException! (decode)"); + } + } + current = this.stream.get16(); + } -/*** Prototype Methods ***/ + if ((current < 0xFFC0) || (current > 0xFFC7)) { + throw new Error("ERROR: could not handle arithmetic code!"); + } -jpeg.lossless.ScanHeader.prototype.read = function(data) { - /*jslint bitwise: true */ + this.frame.read(this.stream); + current = this.stream.get16(); - var count = 0, length, i, temp; + do { + while (current !== 0x0FFDA) { // SOS + switch (current) { + case 0xFFC4: // DHT + this.huffTable.read(this.stream, this.HuffTab); + break; + case 0xFFCC: // DAC + throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); + case 0xFFDB: + this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); + break; + case 0xFFDD: + this.restartInterval = this.readNumber(); + break; + case 0xFFE0: + case 0xFFE1: + case 0xFFE2: + case 0xFFE3: + case 0xFFE4: + case 0xFFE5: + case 0xFFE6: + case 0xFFE7: + case 0xFFE8: + case 0xFFE9: + case 0xFFEA: + case 0xFFEB: + case 0xFFEC: + case 0xFFED: + case 0xFFEE: + case 0xFFEF: + this.readApp(); + break; + case 0xFFFE: + this.readComment(); + break; + default: + if ((current >> 8) !== 0xFF) { + throw new Error("ERROR: format throw new IOException! (Parser.decode)"); + } + } - length = data.get16(); - count += 2; + current = this.stream.get16(); + } - this.numComp = data.get8(); - count+=1; + this.precision = this.frame.precision; + this.components = this.frame.components; - for (i = 0; i < this.numComp; i+=1) { - this.components[i] = new jpeg.lossless.ScanComponent(); + if (!this.numBytes) { + this.numBytes = parseInt(Math.ceil(this.precision / 8)); + } - if (count > length) { - throw new Error("ERROR: scan header format error"); + if (this.numBytes == 1) { + this.mask = 0xFF; + } else { + this.mask = 0xFFFF; } - this.components[i].scanCompSel = data.get8(); - count+=1; + this.scan.read(this.stream); + this.numComp = this.scan.numComp; + this.selection = this.scan.selection; - temp = data.get8(); - count+=1; + if (this.numBytes === 1) { + if (this.numComp === 3) { + this.getter = this.getValueRGB; + this.setter = this.setValueRGB; + this.output = this.outputRGB; + } else { + this.getter = this.getValue8; + this.setter = this.setValue8; + this.output = this.outputSingle; + } + } else { + this.getter = this.getValue16; + this.setter = this.setValue16; + this.output = this.outputSingle; + } - this.components[i].dcTabSel = (temp >> 4); - this.components[i].acTabSel = (temp & 0x0F); - } + switch (this.selection) { + case 2: + this.selector = this.select2; + break; + case 3: + this.selector = this.select3; + break; + case 4: + this.selector = this.select4; + break; + case 5: + this.selector = this.select5; + break; + case 6: + this.selector = this.select6; + break; + case 7: + this.selector = this.select7; + break; + default: + this.selector = this.select1; + break; + } - this.selection = data.get8(); - count+=1; + this.scanComps = this.scan.components; + this.quantTables = this.quantTable.quantTables; - this.spectralEnd = data.get8(); - count+=1; + for (i = 0; i < this.numComp; i+=1) { + compN = this.scanComps[i].scanCompSel; + this.qTab[i] = this.quantTables[this.components[compN].quantTableSel]; + this.nBlock[i] = this.components[compN].vSamp * this.components[compN].hSamp; + this.dcTab[i] = this.HuffTab[this.scanComps[i].dcTabSel][0]; + this.acTab[i] = this.HuffTab[this.scanComps[i].acTabSel][1]; + } - temp = data.get8(); - this.ah = (temp >> 4); - this.al = (temp & 0x0F); - count+=1; + this.xDim = this.frame.dimX; + this.yDim = this.frame.dimY; + this.outputData = new DataView(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp)); - if (count !== length) { - throw new Error("ERROR: scan header format error [count!=Ns]"); - } + scanNum+=1; - return 1; -}; + while (true) { // Decode one scan + temp[0] = 0; + index[0] = 0; + for (i = 0; i < 10; i+=1) { + pred[i] = (1 << (this.precision - 1)); + } + if (this.restartInterval === 0) { + current = this.decodeUnit(pred, temp, index); -/*** Exports ***/ + while ((current === 0) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim))) { + this.output(pred); + current = this.decodeUnit(pred, temp, index); + } -var moduleType = typeof module; -if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.ScanHeader; -} + break; //current=MARKER + } + for (mcuNum = 0; mcuNum < this.restartInterval; mcuNum+=1) { + this.restarting = (mcuNum == 0); + current = this.decodeUnit(pred, temp, index); + this.output(pred); -/***/ }), + if (current !== 0) { + break; + } + } -/***/ "./node_modules/jpeg-lossless-decoder-js/src/utils.js": -/*!************************************************************!*\ - !*** ./node_modules/jpeg-lossless-decoder-js/src/utils.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { + if (current === 0) { + if (this.markerIndex !== 0) { + current = (0xFF00 | this.marker); + this.markerIndex = 0; + } else { + current = this.stream.get16(); + } + } -"use strict"; -/* - * Copyright (C) 2015 Michael Martinez - * Changes: Added support for selection values 2-7, fixed minor bugs & - * warnings, split into multiple class files, and general clean up. - * - * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. - */ + if (!((current >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && + (current <= jpeg.lossless.Decoder.RESTART_MARKER_END))) { + break; //current=MARKER + } + } -/* - * Copyright (C) Helmut Dersch - * - * 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: + if ((current === 0xFFDC) && (scanNum === 1)) { //DNL + this.readNumber(); + current = this.stream.get16(); + } + } while ((current !== 0xFFD9) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) && (scanNum === 0)); - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. + return this.outputData; +}; - * 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. - */ -/*jslint browser: true, node: true */ -/*global require, module */ +jpeg.lossless.Decoder.prototype.decodeUnit = function (prev, temp, index) { + if (this.numComp == 1) { + return this.decodeSingle(prev, temp, index); + } else if (this.numComp == 3) { + return this.decodeRGB(prev, temp, index); + } else { + return -1; + } +}; -/*** Imports ***/ -var jpeg = jpeg || {}; -jpeg.lossless = jpeg.lossless || {}; +jpeg.lossless.Decoder.prototype.select1 = function (compOffset) { + return this.getPreviousX(compOffset); +}; -/*** Constructor ***/ -jpeg.lossless.Utils = jpeg.lossless.Utils || {}; -/*** Static methods ***/ +jpeg.lossless.Decoder.prototype.select2 = function (compOffset) { + return this.getPreviousY(compOffset); +}; -// http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript -jpeg.lossless.Utils.createArray = function (length) { - var arr = new Array(length || 0), - i = length; - if (arguments.length > 1) { - var args = Array.prototype.slice.call(arguments, 1); - while(i--) arr[length-1 - i] = jpeg.lossless.Utils.createArray.apply(this, args); - } - return arr; +jpeg.lossless.Decoder.prototype.select3 = function (compOffset) { + return this.getPreviousXY(compOffset); }; -// http://stackoverflow.com/questions/18638900/javascript-crc32 -jpeg.lossless.Utils.makeCRCTable = function(){ - var c; - var crcTable = []; - for(var n =0; n < 256; n++){ - c = n; - for(var k =0; k < 8; k++){ - c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); - } - crcTable[n] = c; - } - return crcTable; + +jpeg.lossless.Decoder.prototype.select4 = function (compOffset) { + return (this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) - this.getPreviousXY(compOffset); }; -jpeg.lossless.Utils.crc32 = function(dataView) { - var crcTable = jpeg.lossless.Utils.crcTable || (jpeg.lossless.Utils.crcTable = jpeg.lossless.Utils.makeCRCTable()); - var crc = 0 ^ (-1); - for (var i = 0; i < dataView.byteLength; i++ ) { - crc = (crc >>> 8) ^ crcTable[(crc ^ dataView.getUint8(i)) & 0xFF]; - } - return (crc ^ (-1)) >>> 0; +jpeg.lossless.Decoder.prototype.select5 = function (compOffset) { + return this.getPreviousX(compOffset) + ((this.getPreviousY(compOffset) - this.getPreviousXY(compOffset)) >> 1); }; -/*** Exports ***/ - -var moduleType = typeof module; -if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.Utils; -} +jpeg.lossless.Decoder.prototype.select6 = function (compOffset) { + return this.getPreviousY(compOffset) + ((this.getPreviousX(compOffset) - this.getPreviousXY(compOffset)) >> 1); +}; -/***/ }), -/***/ "./node_modules/math-abs/lib/index.js": -/*!********************************************!*\ - !*** ./node_modules/math-abs/lib/index.js ***! - \********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { -"use strict"; +jpeg.lossless.Decoder.prototype.select7 = function (compOffset) { + return ((this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) / 2); +}; -/** -* FUNCTION: abs( x ) -* Computes the absolute value of `x`. -* -* @param {Number} x - input value -* @returns {Number} absolute value -*/ -function abs( x ) { - if ( x < 0 ) { - return -x; - } - if ( x === 0 ) { - return 0; // handle negative zero - } - return x; -} // end FUNCTION abs() +jpeg.lossless.Decoder.prototype.decodeRGB = function (prev, temp, index) { + /*jslint bitwise: true */ -// EXPORTS // + var value, actab, dctab, qtab, ctrC, i, k, j; -module.exports = abs; + prev[0] = this.selector(0); + prev[1] = this.selector(1); + prev[2] = this.selector(2); + for (ctrC = 0; ctrC < this.numComp; ctrC+=1) { + qtab = this.qTab[ctrC]; + actab = this.acTab[ctrC]; + dctab = this.dcTab[ctrC]; + for (i = 0; i < this.nBlock[ctrC]; i+=1) { + for (k = 0; k < this.IDCT_Source.length; k+=1) { + this.IDCT_Source[k] = 0; + } -/***/ }), + value = this.getHuffmanValue(dctab, temp, index); -/***/ "./node_modules/math-ceil/lib/index.js": -/*!*********************************************!*\ - !*** ./node_modules/math-ceil/lib/index.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { + if (value >= 0xFF00) { + return value; + } -"use strict"; + prev[ctrC] = this.IDCT_Source[0] = prev[ctrC] + this.getn(index, value, temp, index); + this.IDCT_Source[0] *= qtab[0]; + for (j = 1; j < 64; j+=1) { + value = this.getHuffmanValue(actab, temp, index); -// EXPORTS // + if (value >= 0xFF00) { + return value; + } -module.exports = Math.ceil; + j += (value >> 4); + if ((value & 0x0F) === 0) { + if ((value >> 4) === 0) { + break; + } + } else { + this.IDCT_Source[jpeg.lossless.Decoder.IDCT_P[j]] = this.getn(index, value & 0x0F, temp, index) * qtab[j]; + } + } + } + } -/***/ }), + return 0; +}; -/***/ "./node_modules/math-float32-to-binary-string/lib/div2.js": -/*!****************************************************************!*\ - !*** ./node_modules/math-float32-to-binary-string/lib/div2.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { -"use strict"; +jpeg.lossless.Decoder.prototype.decodeSingle = function (prev, temp, index) { + /*jslint bitwise: true */ -// MODULES // + var value, i, n, nRestart; -var floor = __webpack_require__( /*! math-floor */ "./node_modules/math-floor/lib/index.js" ); + if (this.restarting) { + this.restarting = false; + prev[0] = (1 << (this.frame.precision - 1)); + } else { + prev[0] = this.selector(); + } + for (i = 0; i < this.nBlock[0]; i+=1) { + value = this.getHuffmanValue(this.dcTab[0], temp, index); + if (value >= 0xFF00) { + return value; + } -// DIV2 // + n = this.getn(prev, value, temp, index); + nRestart = (n >> 8); -/** -* FUNCTION: div2( x ) -* Converts a nonnegative integer to a literal bit representation using the divide-by-2 algorithm. -* -* @param {Number} x - nonnegative integer -* @returns {String} bit representation -*/ -function div2( x ) { - var str = ''; - var y; + if ((nRestart >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && (nRestart <= jpeg.lossless.Decoder.RESTART_MARKER_END)) { + return nRestart; + } - // We repeatedly divide by 2 and check for a remainder. If a remainder exists, the number is odd and we add a '1' bit... - while ( x > 0 ) { - y = x / 2; - x = floor( y ); - if ( y === x ) { - str = '0' + str; - } else { - str = '1' + str; - } - } - return str; -} // end FUNCTION div2() + prev[0] += n; + } + return 0; +}; -// EXPORTS // -module.exports = div2; +// Huffman table for fast search: (HuffTab) 8-bit Look up table 2-layer search architecture, 1st-layer represent 256 node (8 bits) if codeword-length > 8 +// bits, then the entry of 1st-layer = (# of 2nd-layer table) | MSB and it is stored in the 2nd-layer Size of tables in each layer are 256. +// HuffTab[*][*][0-256] is always the only 1st-layer table. +// +// An entry can be: (1) (# of 2nd-layer table) | MSB , for code length > 8 in 1st-layer (2) (Code length) << 8 | HuffVal +// +// HuffmanValue(table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) +// ): +// return: Huffman Value of table +// 0xFF?? if it receives a MARKER +// Parameter: table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) +// temp temp storage for remainded bits +// index index to bit of temp +// in FILE pointer +// Effect: +// temp store new remainded bits +// index change to new index +// in change to new position +// NOTE: +// Initial by temp=0; index=0; +// NOTE: (explain temp and index) +// temp: is always in the form at calling time or returning time +// | byte 4 | byte 3 | byte 2 | byte 1 | +// | 0 | 0 | 00000000 | 00000??? | if not a MARKER +// ^index=3 (from 0 to 15) +// 321 +// NOTE (marker and marker_index): +// If get a MARKER from 'in', marker=the low-byte of the MARKER +// and marker_index=9 +// If marker_index=9 then index is always > 8, or HuffmanValue() +// will not be called +jpeg.lossless.Decoder.prototype.getHuffmanValue = function (table, temp, index) { + /*jslint bitwise: true */ -/***/ }), + var code, input, mask; + mask = 0xFFFF; -/***/ "./node_modules/math-float32-to-binary-string/lib/index.js": -/*!*****************************************************************!*\ - !*** ./node_modules/math-float32-to-binary-string/lib/index.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { + if (index[0] < 8) { + temp[0] <<= 8; + input = this.stream.get8(); + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } + temp[0] |= input; + } else { + index[0] -= 8; + } -"use strict"; + code = table[temp[0] >> index[0]]; + if ((code & jpeg.lossless.Decoder.MSB) !== 0) { + if (this.markerIndex !== 0) { + this.markerIndex = 0; + return 0xFF00 | this.marker; + } -// MODULES // + temp[0] &= (mask >> (16 - index[0])); + temp[0] <<= 8; + input = this.stream.get8(); -var pinf = __webpack_require__( /*! const-pinf-float32 */ "./node_modules/const-pinf-float32/lib/index.js" ); -var ninf = __webpack_require__( /*! const-ninf-float32 */ "./node_modules/const-ninf-float32/lib/index.js" ); -var abs = __webpack_require__( /*! math-abs */ "./node_modules/math-abs/lib/index.js" ); -var floor = __webpack_require__( /*! math-floor */ "./node_modules/math-floor/lib/index.js" ); -var rpad = __webpack_require__( /*! utils-right-pad-string */ "./node_modules/utils-right-pad-string/lib/index.js" ); -var lpad = __webpack_require__( /*! utils-left-pad-string */ "./node_modules/utils-left-pad-string/lib/index.js" ); -var repeat = __webpack_require__( /*! utils-repeat-string */ "./node_modules/utils-repeat-string/lib/index.js" ); -var div2 = __webpack_require__( /*! ./div2.js */ "./node_modules/math-float32-to-binary-string/lib/div2.js" ); -var mult2 = __webpack_require__( /*! ./mult2.js */ "./node_modules/math-float32-to-binary-string/lib/mult2.js" ); + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } + temp[0] |= input; + code = table[((code & 0xFF) * 256) + (temp[0] >> index[0])]; + index[0] += 8; + } -// CONSTANTS // + index[0] += 8 - (code >> 8); -var BIAS = 127; // exponent bias => (2**8)/2 - 1 + if (index[0] < 0) { + throw new Error("index=" + index[0] + " temp=" + temp[0] + " code=" + code + " in HuffmanValue()"); + } + if (index[0] < this.markerIndex) { + this.markerIndex = 0; + return 0xFF00 | this.marker; + } -// BINARY STRING // + temp[0] &= (mask >> (16 - index[0])); + return code & 0xFF; +}; -/** -* FUNCTION: binaryString( x ) -* Returns a string giving the literal bit representation of a single-precision floating-point number. -* -* @param {Number} x - input value -* @returns {String} bit representation -*/ -function binaryString( x ) { - var nbits; - var sign; - var str; - var exp; - var n; - var f; - var i; - // Check for a negative value or negative zero... - if ( x < 0 || 1/x === ninf ) { - sign = '1'; - } else { - sign = '0'; - } - // Special case: +-infinity - if ( x === pinf || x === ninf ) { - // Based on IEEE 754-2008... - exp = repeat( '1', 8 ); // all 1s - str = repeat( '0', 23 ); // all 0s - return sign + exp + str; - } - // Special case: NaN - if ( x !== x ) { - // Based on IEEE 754-2008... - exp = repeat( '1', 8 ); // all 1s - str = '1' + repeat( '0', 22 ); // can't be all 0s - return sign + exp + str; - } - // Special case: +-0 - if ( x === 0 ) { - // Based on IEEE 754-2008... - exp = repeat( '0', 8 ); // all 0s - str = repeat( '0', 23 ); // all 0s - return sign + exp + str; - } - x = abs( x ); - // Isolate the integer part (digits before the decimal): - n = floor( x ); +jpeg.lossless.Decoder.prototype.getn = function (PRED, n, temp, index) { + /*jslint bitwise: true */ - // Isolate the fractional part (digits after the decimal): - f = x - n; + var result, one, n_one, mask, input; + one = 1; + n_one = -1; + mask = 0xFFFF; - // Convert the integer and fractional parts to bit strings: - n = div2( n ); - f = mult2( f ); + if (n === 0) { + return 0; + } - // Determine the exponent needed to normalize the integer+fractional parts... - if ( n ) { - // Move the decimal `d` digits to the left: - exp = n.length - 1; - } else { - // Find the first '1' bit... - for ( i = 0; i < f.length; i++ ) { - if ( f[ i ] === '1' ) { - nbits = i + 1; - break; - } - } - // Move the decimal `d` digits to the right: - exp = -nbits; - } - // Normalize the combined integer+fractional string... - str = n + f; - if ( exp < 0 ) { - // Handle subnormals... - if ( exp <= -BIAS ) { - // Cap the number of bits removed: - nbits = BIAS - 1; - } - // Remove all leading zeros and the first '1' for normal values, and, for subnormals, remove at most BIAS-1 leading bits: - str = str.substring( nbits ); - } else { - // Remove the leading '1' (implicit/hidden bit): - str = str.substring( 1 ); - } - // Convert the exponent to a bit string: - exp = div2( exp + BIAS ); - exp = lpad( exp, 8, '0' ); + if (n === 16) { + if (PRED[0] >= 0) { + return -32768; + } else { + return 32768; + } + } - // Fill in any trailing zeros and ensure we have only 23 fraction bits: - str = rpad( str, 23, '0' ).substring( 0, 23 ); + index[0] -= n; - // Return a bit representation: - return sign + exp + str; -} // end FUNCTION binaryString() + if (index[0] >= 0) { + if ((index[0] < this.markerIndex) && !this.isLastPixel()) { // this was corrupting the last pixel in some cases + this.markerIndex = 0; + return (0xFF00 | this.marker) << 8; + } + result = temp[0] >> index[0]; + temp[0] &= (mask >> (16 - index[0])); + } else { + temp[0] <<= 8; + input = this.stream.get8(); -// EXPORTS // + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } -module.exports = binaryString; + temp[0] |= input; + index[0] += 8; + if (index[0] < 0) { + if (this.markerIndex !== 0) { + this.markerIndex = 0; + return (0xFF00 | this.marker) << 8; + } -/***/ }), + temp[0] <<= 8; + input = this.stream.get8(); -/***/ "./node_modules/math-float32-to-binary-string/lib/mult2.js": -/*!*****************************************************************!*\ - !*** ./node_modules/math-float32-to-binary-string/lib/mult2.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } -"use strict"; + temp[0] |= input; + index[0] += 8; + } + if (index[0] < 0) { + throw new Error("index=" + index[0] + " in getn()"); + } -// VARIABLES // + if (index[0] < this.markerIndex) { + this.markerIndex = 0; + return (0xFF00 | this.marker) << 8; + } -var MAX_ITER = 149; // 127+22 (subnormals) -var MAX_BITS = 24; // only 23 bits for fraction + result = temp[0] >> index[0]; + temp[0] &= (mask >> (16 - index[0])); + } + if (result < (one << (n - 1))) { + result += (n_one << n) + 1; + } -// MULT2 // + return result; +}; -/** -* FUNCTION: mult2( x ) -* Converts a fraction to a literal bit representation using the multiply-by-2 algorithm. -* -* @param {Number} x - number less than 1 -* @returns {String} bit representation -*/ -function mult2( x ) { - var str; - var y; - var i; - var j; - str = ''; - if ( x === 0 ) { - return str; - } - j = MAX_ITER; - // Each time we multiply by 2 and find a ones digit, add a '1'; otherwise, add a '0'.. - for ( i = 0; i < MAX_ITER; i++ ) { - y = x * 2; - if ( y >= 1 ) { - x = y - 1; - str += '1'; - if ( j === MAX_ITER ) { - j = i; // first '1' - } - } else { - x = y; - str += '0'; - } - // Stop when we have no more decimals to process or in the event we found a fraction which cannot be represented in a finite number of bits... - if ( y === 1 || i-j > MAX_BITS ) { - break; - } - } - return str; -} // end FUNCTION mult2() +jpeg.lossless.Decoder.prototype.getPreviousX = function (compOffset) { + /*jslint bitwise: true */ + if (this.xLoc > 0) { + return this.getter((((this.yLoc * this.xDim) + this.xLoc) - 1), compOffset); + } else if (this.yLoc > 0) { + return this.getPreviousY(compOffset); + } else { + return (1 << (this.frame.precision - 1)); + } +}; -// EXPORTS // -module.exports = mult2; +jpeg.lossless.Decoder.prototype.getPreviousXY = function (compOffset) { + /*jslint bitwise: true */ -/***/ }), + if ((this.xLoc > 0) && (this.yLoc > 0)) { + return this.getter(((((this.yLoc - 1) * this.xDim) + this.xLoc) - 1), compOffset); + } else { + return this.getPreviousY(compOffset); + } +}; -/***/ "./node_modules/math-floor/lib/index.js": -/*!**********************************************!*\ - !*** ./node_modules/math-floor/lib/index.js ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { -"use strict"; +jpeg.lossless.Decoder.prototype.getPreviousY = function (compOffset) { + /*jslint bitwise: true */ -// EXPORTS // + if (this.yLoc > 0) { + return this.getter((((this.yLoc - 1) * this.xDim) + this.xLoc), compOffset); + } else { + return this.getPreviousX(compOffset); + } +}; -module.exports = Math.floor; -/***/ }), +jpeg.lossless.Decoder.prototype.isLastPixel = function () { + return (this.xLoc === (this.xDim - 1)) && (this.yLoc === (this.yDim - 1)); +}; -/***/ "./node_modules/nifti-reader-js/src/nifti.js": -/*!***************************************************!*\ - !*** ./node_modules/nifti-reader-js/src/nifti.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { -"use strict"; -/*jslint browser: true, node: true */ -/*global require, module */ +jpeg.lossless.Decoder.prototype.outputSingle = function (PRED) { + if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { + this.setter((((this.yLoc * this.xDim) + this.xLoc)), this.mask & PRED[0]); + this.xLoc+=1; + if (this.xLoc >= this.xDim) { + this.yLoc+=1; + this.xLoc = 0; + } + } +}; -/*** Imports ***/ -/** - * nifti - * @type {*|{}} - */ -var nifti = nifti || {}; -nifti.NIFTI1 = nifti.NIFTI1 || (( true) ? __webpack_require__(/*! ./nifti1.js */ "./node_modules/nifti-reader-js/src/nifti1.js") : undefined); -nifti.NIFTI2 = nifti.NIFTI2 || (( true) ? __webpack_require__(/*! ./nifti2.js */ "./node_modules/nifti-reader-js/src/nifti2.js") : undefined); -nifti.Utils = nifti.Utils || (( true) ? __webpack_require__(/*! ./utilities.js */ "./node_modules/nifti-reader-js/src/utilities.js") : undefined); -var pako = pako || (( true) ? __webpack_require__(/*! pako */ "./node_modules/pako/index.js") : undefined); +jpeg.lossless.Decoder.prototype.outputRGB = function (PRED) { + var offset = ((this.yLoc * this.xDim) + this.xLoc); + if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { + this.setter(offset, PRED[0], 0); + this.setter(offset, PRED[1], 1); + this.setter(offset, PRED[2], 2); + this.xLoc+=1; -/*** Static Methods ***/ + if (this.xLoc >= this.xDim) { + this.yLoc+=1; + this.xLoc = 0; + } + } +}; -/** - * Returns true if this data represents a NIFTI-1 header. - * @param {ArrayBuffer} data - * @returns {boolean} - */ -nifti.isNIFTI1 = function (data) { - var buf, mag1, mag2, mag3; - buf = new DataView(data); - mag1 = buf.getUint8(nifti.NIFTI1.MAGIC_NUMBER_LOCATION); - mag2 = buf.getUint8(nifti.NIFTI1.MAGIC_NUMBER_LOCATION + 1); - mag3 = buf.getUint8(nifti.NIFTI1.MAGIC_NUMBER_LOCATION + 2); - return !!((mag1 === nifti.NIFTI1.MAGIC_NUMBER[0]) && (mag2 === nifti.NIFTI1.MAGIC_NUMBER[1]) && - (mag3 === nifti.NIFTI1.MAGIC_NUMBER[2])); +jpeg.lossless.Decoder.prototype.setValue16 = function (index, val) { + this.outputData.setInt16(index * 2, val, true); }; -/** - * Returns true if this data represents a NIFTI-2 header. - * @param {ArrayBuffer} data - * @returns {boolean} - */ -nifti.isNIFTI2 = function (data) { - var buf, mag1, mag2, mag3; - - buf = new DataView(data); - mag1 = buf.getUint8(nifti.NIFTI2.MAGIC_NUMBER_LOCATION); - mag2 = buf.getUint8(nifti.NIFTI2.MAGIC_NUMBER_LOCATION + 1); - mag3 = buf.getUint8(nifti.NIFTI2.MAGIC_NUMBER_LOCATION + 2); - return !!((mag1 === nifti.NIFTI2.MAGIC_NUMBER[0]) && (mag2 === nifti.NIFTI2.MAGIC_NUMBER[1]) && - (mag3 === nifti.NIFTI2.MAGIC_NUMBER[2])); +jpeg.lossless.Decoder.prototype.getValue16 = function (index) { + return this.outputData.getInt16(index * 2, true); }; -/** - * Returns true if this data represents a NIFTI header. - * @param {ArrayBuffer} data - * @returns {boolean} - */ -nifti.isNIFTI = function (data) { - return (nifti.isNIFTI1(data) || nifti.isNIFTI2(data)); +jpeg.lossless.Decoder.prototype.setValue8 = function (index, val) { + this.outputData.setInt8(index, val); }; -/** - * Returns true if this data is GZIP compressed. - * @param {ArrayBuffer} data - * @returns {boolean} - */ -nifti.isCompressed = function (data) { - var buf, magicCookie1, magicCookie2; - - if (data) { - buf = new DataView(data); - - magicCookie1 = buf.getUint8(0); - magicCookie2 = buf.getUint8(1); +jpeg.lossless.Decoder.prototype.getValue8 = function (index) { + return this.outputData.getInt8(index); +}; - if (magicCookie1 === nifti.Utils.GUNZIP_MAGIC_COOKIE1) { - return true; - } - if (magicCookie2 === nifti.Utils.GUNZIP_MAGIC_COOKIE2) { - return true; - } - } - return false; +jpeg.lossless.Decoder.prototype.setValueRGB = function (index, val, compOffset) { + this.outputData.setUint8(index * 3 + compOffset, val); }; -/** - * Returns decompressed data. - * @param {ArrayBuffer} data - * @returns {ArrayBuffer} - */ -nifti.decompress = function (data) { - return pako.inflate(data).buffer; +jpeg.lossless.Decoder.prototype.getValueRGB = function (index, compOffset) { + return this.outputData.getUint8(index * 3 + compOffset); }; -/** - * Reads and returns the header object. - * @param {ArrayBuffer} data - * @returns {nifti.NIFTI1|nifti.NIFTI2|null} - */ -nifti.readHeader = function (data) { - var header = null; - - if (nifti.isCompressed(data)) { - data = nifti.decompress(data); - } - - if (nifti.isNIFTI1(data)) { - header = new nifti.NIFTI1(); - } else if (nifti.isNIFTI2(data)) { - header = new nifti.NIFTI2(); - } +jpeg.lossless.Decoder.prototype.readApp = function() { + var count = 0, length = this.stream.get16(); + count += 2; - if (header) { - header.readHeader(data); - } else { - console.error("That file does not appear to be NIFTI!"); + while (count < length) { + this.stream.get8(); + count+=1; } - return header; -}; - - - -/** - * Returns true if this header contains an extension. - * @param {nifti.NIFTI1|nifti.NIFTI2} header - * @returns {boolean} - */ -nifti.hasExtension = function (header) { - return (header.extensionFlag[0] != 0); + return length; }; -/** - * Returns the image data. - * @param {nifti.NIFTI1|nifti.NIFTI2} header - * @param {ArrayBuffer} data - * @returns {ArrayBuffer} - */ -nifti.readImage = function (header, data) { - var imageOffset = header.vox_offset, - timeDim = 1, - statDim = 1; +jpeg.lossless.Decoder.prototype.readComment = function () { + var sb = "", count = 0, length; - if (header.dims[4]) { - timeDim = header.dims[4]; - } + length = this.stream.get16(); + count += 2; - if (header.dims[5]) { - statDim = header.dims[5]; + while (count < length) { + sb += this.stream.get8(); + count+=1; } - var imageSize = header.dims[1] * header.dims[2] * header.dims[3] * timeDim * statDim * (header.numBitsPerVoxel / 8); - return data.slice(imageOffset, imageOffset + imageSize); + return sb; }; -/** - * Returns the extension data (including extension header). - * @param {nifti.NIFTI1|nifti.NIFTI2} header - * @param {ArrayBuffer} data - * @returns {ArrayBuffer} - */ -nifti.readExtension = function (header, data) { - var loc = header.getExtensionLocation(), - size = header.extensionSize; - - return data.slice(loc, loc + size); -}; - - +jpeg.lossless.Decoder.prototype.readNumber = function() { + var Ld = this.stream.get16(); -/** - * Returns the extension data. - * @param {nifti.NIFTI1|nifti.NIFTI2} header - * @param {ArrayBuffer} data - * @returns {ArrayBuffer} - */ -nifti.readExtensionData = function (header, data) { - var loc = header.getExtensionLocation(), - size = header.extensionSize; + if (Ld !== 4) { + throw new Error("ERROR: Define number format throw new IOException [Ld!=4]"); + } - return data.slice(loc + 8, loc + size - 8); + return this.stream.get16(); }; + /*** Exports ***/ var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = nifti; + module.exports = jpeg.lossless.Decoder; } /***/ }), -/***/ "./node_modules/nifti-reader-js/src/nifti1.js": -/*!****************************************************!*\ - !*** ./node_modules/nifti-reader-js/src/nifti1.js ***! - \****************************************************/ +/***/ "./node_modules/jpeg-lossless-decoder-js/src/frame-header.js": +/*!*******************************************************************!*\ + !*** ./node_modules/jpeg-lossless-decoder-js/src/frame-header.js ***! + \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; +/* + * Copyright (C) 2015 Michael Martinez + * Changes: Added support for selection values 2-7, fixed minor bugs & + * warnings, split into multiple class files, and general clean up. + * + * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. + */ + +/* + * Copyright (C) Helmut Dersch + * + * 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. + */ /*jslint browser: true, node: true */ -/*global */ +/*global require, module */ /*** Imports ***/ +var jpeg = jpeg || {}; +jpeg.lossless = jpeg.lossless || {}; +jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || (( true) ? __webpack_require__(/*! ./component-spec.js */ "./node_modules/jpeg-lossless-decoder-js/src/component-spec.js") : undefined); +jpeg.lossless.DataStream = jpeg.lossless.DataStream || (( true) ? __webpack_require__(/*! ./data-stream.js */ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js") : undefined); -var nifti = nifti || {}; -nifti.Utils = nifti.Utils || (( true) ? __webpack_require__(/*! ./utilities.js */ "./node_modules/nifti-reader-js/src/utilities.js") : undefined); +/*** Constructor ***/ +jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || function () { + this.components = []; // Components + this.dimX = 0; // Number of samples per line + this.dimY = 0; // Number of lines + this.numComp = 0; // Number of component in the frame + this.precision = 0; // Sample Precision (from the original image) +}; -/*** Constructor ***/ -/** - * The NIFTI1 constructor. - * @constructor - * @property {boolean} littleEndian - * @property {number} dim_info - * @property {number[]} dims - image dimensions - * @property {number} intent_p1 - * @property {number} intent_p2 - * @property {number} intent_p3 - * @property {number} intent_code - * @property {number} datatypeCode - * @property {number} numBitsPerVoxel - * @property {number} slice_start - * @property {number} slice_end - * @property {number} slice_code - * @property {number[]} pixDims - voxel dimensions - * @property {number} vox_offset - * @property {number} scl_slope - * @property {number} scl_inter - * @property {number} xyzt_units - * @property {number} cal_max - * @property {number} cal_min - * @property {number} slice_duration - * @property {number} toffset - * @property {string} description - * @property {string} aux_file - * @property {string} intent_name - * @property {number} qform_code - * @property {number} sform_code - * @property {number} quatern_b - * @property {number} quatern_c - * @property {number} quatern_d - * @property {number} quatern_x - * @property {number} quatern_y - * @property {number} quatern_z - * @property {Array.>} affine - * @property {string} magic - * @property {boolean} isHDR - if hdr/img format - * @property {number[]} extensionFlag - * @property {number} extensionSize - * @property {number} extensionCode - * @type {Function} - */ -nifti.NIFTI1 = nifti.NIFTI1 || function () { - this.littleEndian = false; - this.dim_info = 0; - this.dims = []; - this.intent_p1 = 0; - this.intent_p2 = 0; - this.intent_p3 = 0; - this.intent_code = 0; - this.datatypeCode = 0; - this.numBitsPerVoxel = 0; - this.slice_start = 0; - this.slice_end = 0; - this.slice_code = 0; - this.pixDims = []; - this.vox_offset = 0; - this.scl_slope = 1; - this.scl_inter = 0; - this.xyzt_units = 0; - this.cal_max = 0; - this.cal_min = 0; - this.slice_duration = 0; - this.toffset = 0; - this.description = ""; - this.aux_file = ""; - this.intent_name = ""; - this.qform_code = 0; - this.sform_code = 0; - this.quatern_b = 0; - this.quatern_c = 0; - this.quatern_d = 0; - this.qoffset_x = 0; - this.qoffset_y = 0; - this.qoffset_z = 0; - this.affine = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]; - this.magic = 0; - this.isHDR = false; - this.extensionFlag = [0, 0, 0, 0]; - this.extensionSize = 0; - this.extensionCode = 0; -}; +/*** Prototype Methods ***/ +jpeg.lossless.FrameHeader.prototype.read = function (data) { + /*jslint bitwise: true */ + var count = 0, length, i, c, temp; -/*** Static Pseudo-constants ***/ + length = data.get16(); + count += 2; -// datatype codes -nifti.NIFTI1.TYPE_NONE = 0; -nifti.NIFTI1.TYPE_BINARY = 1; -nifti.NIFTI1.TYPE_UINT8 = 2; -nifti.NIFTI1.TYPE_INT16 = 4; -nifti.NIFTI1.TYPE_INT32 = 8; -nifti.NIFTI1.TYPE_FLOAT32 = 16; -nifti.NIFTI1.TYPE_COMPLEX64 = 32; -nifti.NIFTI1.TYPE_FLOAT64 = 64; -nifti.NIFTI1.TYPE_RGB24 = 128; -nifti.NIFTI1.TYPE_INT8 = 256; -nifti.NIFTI1.TYPE_UINT16 = 512; -nifti.NIFTI1.TYPE_UINT32 = 768; -nifti.NIFTI1.TYPE_INT64 = 1024; -nifti.NIFTI1.TYPE_UINT64 = 1280; -nifti.NIFTI1.TYPE_FLOAT128 = 1536; -nifti.NIFTI1.TYPE_COMPLEX128 = 1792; -nifti.NIFTI1.TYPE_COMPLEX256 = 2048; + this.precision = data.get8(); + count+=1; -// transform codes -nifti.NIFTI1.XFORM_UNKNOWN = 0; -nifti.NIFTI1.XFORM_SCANNER_ANAT = 1; -nifti.NIFTI1.XFORM_ALIGNED_ANAT = 2; -nifti.NIFTI1.XFORM_TALAIRACH = 3; -nifti.NIFTI1.XFORM_MNI_152 = 4; + this.dimY = data.get16(); + count += 2; -// unit codes -nifti.NIFTI1.SPATIAL_UNITS_MASK = 0x07; -nifti.NIFTI1.TEMPORAL_UNITS_MASK = 0x38; -nifti.NIFTI1.UNITS_UNKNOWN = 0; -nifti.NIFTI1.UNITS_METER = 1; -nifti.NIFTI1.UNITS_MM = 2; -nifti.NIFTI1.UNITS_MICRON = 3; -nifti.NIFTI1.UNITS_SEC = 8; -nifti.NIFTI1.UNITS_MSEC = 16; -nifti.NIFTI1.UNITS_USEC = 24; -nifti.NIFTI1.UNITS_HZ = 32; -nifti.NIFTI1.UNITS_PPM = 40; -nifti.NIFTI1.UNITS_RADS = 48; + this.dimX = data.get16(); + count += 2; -// nifti1 codes -nifti.NIFTI1.MAGIC_COOKIE = 348; -nifti.NIFTI1.MAGIC_NUMBER_LOCATION = 344; -nifti.NIFTI1.MAGIC_NUMBER = [0x6E, 0x2B, 0x31]; // n+1 (.nii) -nifti.NIFTI1.MAGIC_NUMBER2 = [0x6E, 0x69, 0x31]; // ni1 (.hdr/.img) -nifti.NIFTI1.EXTENSION_HEADER_SIZE = 8; + this.numComp = data.get8(); + count+=1; + for (i = 1; i <= this.numComp; i+=1) { + if (count > length) { + throw new Error("ERROR: frame format error"); + } + c = data.get8(); + count+=1; -/*** Prototype Methods ***/ + if (count >= length) { + throw new Error("ERROR: frame format error [c>=Lf]"); + } -/** - * Reads the header data. - * @param {ArrayBuffer} data - */ -nifti.NIFTI1.prototype.readHeader = function (data) { - var rawData = new DataView(data), - magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian), - ctr, - ctrOut, - ctrIn, - index; + temp = data.get8(); + count+=1; - if (magicCookieVal !== nifti.NIFTI1.MAGIC_COOKIE) { // try as little endian - this.littleEndian = true; - magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian); - } + if (!this.components[c]) { + this.components[c] = new jpeg.lossless.ComponentSpec(); + } - if (magicCookieVal !== nifti.NIFTI1.MAGIC_COOKIE) { - throw new Error("This does not appear to be a NIFTI file!"); + this.components[c].hSamp = temp >> 4; + this.components[c].vSamp = temp & 0x0F; + this.components[c].quantTableSel = data.get8(); + count+=1; } - this.dim_info = nifti.Utils.getByteAt(rawData, 39); - - for (ctr = 0; ctr < 8; ctr += 1) { - index = 40 + (ctr * 2); - this.dims[ctr] = nifti.Utils.getShortAt(rawData, index, this.littleEndian); + if (count !== length) { + throw new Error("ERROR: frame format error [Lf!=count]"); } - this.intent_p1 = nifti.Utils.getFloatAt(rawData, 56, this.littleEndian); - this.intent_p2 = nifti.Utils.getFloatAt(rawData, 60, this.littleEndian); - this.intent_p3 = nifti.Utils.getFloatAt(rawData, 64, this.littleEndian); - this.intent_code = nifti.Utils.getShortAt(rawData, 68, this.littleEndian); + return 1; +}; - this.datatypeCode = nifti.Utils.getShortAt(rawData, 70, this.littleEndian); - this.numBitsPerVoxel = nifti.Utils.getShortAt(rawData, 72, this.littleEndian); - this.slice_start = nifti.Utils.getShortAt(rawData, 74, this.littleEndian); +/*** Exports ***/ - for (ctr = 0; ctr < 8; ctr += 1) { - index = 76 + (ctr * 4); - this.pixDims[ctr] = nifti.Utils.getFloatAt(rawData, index, this.littleEndian); - } +var moduleType = typeof module; +if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg.lossless.FrameHeader; +} - this.vox_offset = nifti.Utils.getFloatAt(rawData, 108, this.littleEndian); - this.scl_slope = nifti.Utils.getFloatAt(rawData, 112, this.littleEndian); - this.scl_inter = nifti.Utils.getFloatAt(rawData, 116, this.littleEndian); +/***/ }), - this.slice_end = nifti.Utils.getShortAt(rawData, 120, this.littleEndian); - this.slice_code = nifti.Utils.getByteAt(rawData, 122); +/***/ "./node_modules/jpeg-lossless-decoder-js/src/huffman-table.js": +/*!********************************************************************!*\ + !*** ./node_modules/jpeg-lossless-decoder-js/src/huffman-table.js ***! + \********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { - this.xyzt_units = nifti.Utils.getByteAt(rawData, 123); +"use strict"; +/* + * Copyright (C) 2015 Michael Martinez + * Changes: Added support for selection values 2-7, fixed minor bugs & + * warnings, split into multiple class files, and general clean up. + * + * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. + */ - this.cal_max = nifti.Utils.getFloatAt(rawData, 124, this.littleEndian); - this.cal_min = nifti.Utils.getFloatAt(rawData, 128, this.littleEndian); +/* + * Copyright (C) Helmut Dersch + * + * 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: - this.slice_duration = nifti.Utils.getFloatAt(rawData, 132, this.littleEndian); - this.toffset = nifti.Utils.getFloatAt(rawData, 136, this.littleEndian); + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. - this.description = nifti.Utils.getStringAt(rawData, 148, 228); - this.aux_file = nifti.Utils.getStringAt(rawData, 228, 252); - - this.qform_code = nifti.Utils.getShortAt(rawData, 252, this.littleEndian); - this.sform_code = nifti.Utils.getShortAt(rawData, 254, this.littleEndian); + * 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. + */ - this.quatern_b = nifti.Utils.getFloatAt(rawData, 256, this.littleEndian); - this.quatern_c = nifti.Utils.getFloatAt(rawData, 260, this.littleEndian); - this.quatern_d = nifti.Utils.getFloatAt(rawData, 264, this.littleEndian); - this.qoffset_x = nifti.Utils.getFloatAt(rawData, 268, this.littleEndian); - this.qoffset_y = nifti.Utils.getFloatAt(rawData, 272, this.littleEndian); - this.qoffset_z = nifti.Utils.getFloatAt(rawData, 276, this.littleEndian); +/*jslint browser: true, node: true */ +/*global require, module */ - for (ctrOut = 0; ctrOut < 3; ctrOut += 1) { - for (ctrIn = 0; ctrIn < 4; ctrIn += 1) { - index = 280 + (((ctrOut * 4) + ctrIn) * 4); - this.affine[ctrOut][ctrIn] = nifti.Utils.getFloatAt(rawData, index, this.littleEndian); - } - } - this.affine[3][0] = 0; - this.affine[3][1] = 0; - this.affine[3][2] = 0; - this.affine[3][3] = 1; - this.intent_name = nifti.Utils.getStringAt(rawData, 328, 344); - this.magic = nifti.Utils.getStringAt(rawData, 344, 348); +/*** Imports ***/ +var jpeg = jpeg || {}; +jpeg.lossless = jpeg.lossless || {}; +jpeg.lossless.DataStream = jpeg.lossless.DataStream || (( true) ? __webpack_require__(/*! ./data-stream.js */ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js") : undefined); +jpeg.lossless.Utils = jpeg.lossless.Utils || (( true) ? __webpack_require__(/*! ./utils.js */ "./node_modules/jpeg-lossless-decoder-js/src/utils.js") : undefined); - this.isHDR = (this.magic === nifti.NIFTI1.MAGIC_NUMBER2); - if (rawData.byteLength > nifti.NIFTI1.MAGIC_COOKIE) { - this.extensionFlag[0] = nifti.Utils.getByteAt(rawData, 348); - this.extensionFlag[1] = nifti.Utils.getByteAt(rawData, 348 + 1); - this.extensionFlag[2] = nifti.Utils.getByteAt(rawData, 348 + 2); - this.extensionFlag[3] = nifti.Utils.getByteAt(rawData, 348 + 3); +/*** Constructor ***/ +jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || function () { + this.l = jpeg.lossless.Utils.createArray(4, 2, 16); + this.th = []; + this.v = jpeg.lossless.Utils.createArray(4, 2, 16, 200); + this.tc = jpeg.lossless.Utils.createArray(4, 2); - if (this.extensionFlag[0]) { - this.extensionSize = this.getExtensionSize(rawData); - this.extensionCode = this.getExtensionCode(rawData); - } - } + this.tc[0][0] = 0; + this.tc[1][0] = 0; + this.tc[2][0] = 0; + this.tc[3][0] = 0; + this.tc[0][1] = 0; + this.tc[1][1] = 0; + this.tc[2][1] = 0; + this.tc[3][1] = 0; + this.th[0] = 0; + this.th[1] = 0; + this.th[2] = 0; + this.th[3] = 0; }; -/** - * Returns a formatted string of header fields. - * @returns {string} - */ -nifti.NIFTI1.prototype.toFormattedString = function () { - var fmt = nifti.Utils.formatNumber, - string = ""; - string += ("Dim Info = " + this.dim_info + "\n"); +/*** Static Pseudo-constants ***/ - string += ("Image Dimensions (1-8): " + - this.dims[0] + ", " + - this.dims[1] + ", " + - this.dims[2] + ", " + - this.dims[3] + ", " + - this.dims[4] + ", " + - this.dims[5] + ", " + - this.dims[6] + ", " + - this.dims[7] + "\n"); +jpeg.lossless.HuffmanTable.MSB = 0x80000000; - string += ("Intent Parameters (1-3): " + - this.intent_p1 + ", " + - this.intent_p2 + ", " + - this.intent_p3) + "\n"; - string += ("Intent Code = " + this.intent_code + "\n"); - string += ("Datatype = " + this.datatypeCode + " (" + this.getDatatypeCodeString(this.datatypeCode) + ")\n"); - string += ("Bits Per Voxel = " + this.numBitsPerVoxel + "\n"); - string += ("Slice Start = " + this.slice_start + "\n"); - string += ("Voxel Dimensions (1-8): " + - fmt(this.pixDims[0]) + ", " + - fmt(this.pixDims[1]) + ", " + - fmt(this.pixDims[2]) + ", " + - fmt(this.pixDims[3]) + ", " + - fmt(this.pixDims[4]) + ", " + - fmt(this.pixDims[5]) + ", " + - fmt(this.pixDims[6]) + ", " + - fmt(this.pixDims[7]) + "\n"); +/*** Prototype Methods ***/ - string += ("Image Offset = " + this.vox_offset + "\n"); - string += ("Data Scale: Slope = " + fmt(this.scl_slope) + " Intercept = " + fmt(this.scl_inter) + "\n"); - string += ("Slice End = " + this.slice_end + "\n"); - string += ("Slice Code = " + this.slice_code + "\n"); - string += ("Units Code = " + this.xyzt_units + " (" + this.getUnitsCodeString(nifti.NIFTI1.SPATIAL_UNITS_MASK & this.xyzt_units) + ", " + this.getUnitsCodeString(nifti.NIFTI1.TEMPORAL_UNITS_MASK & this.xyzt_units) + ")\n"); - string += ("Display Range: Max = " + fmt(this.cal_max) + " Min = " + fmt(this.cal_min) + "\n"); - string += ("Slice Duration = " + this.slice_duration + "\n"); - string += ("Time Axis Shift = " + this.toffset + "\n"); - string += ("Description: \"" + this.description + "\"\n"); - string += ("Auxiliary File: \"" + this.aux_file + "\"\n"); - string += ("Q-Form Code = " + this.qform_code + " (" + this.getTransformCodeString(this.qform_code) + ")\n"); - string += ("S-Form Code = " + this.sform_code + " (" + this.getTransformCodeString(this.sform_code) + ")\n"); - string += ("Quaternion Parameters: " + - "b = " + fmt(this.quatern_b) + " " + - "c = " + fmt(this.quatern_c) + " " + - "d = " + fmt(this.quatern_d) + "\n"); +jpeg.lossless.HuffmanTable.prototype.read = function(data, HuffTab) { + /*jslint bitwise: true */ - string += ("Quaternion Offsets: " + - "x = " + this.qoffset_x + " " + - "y = " + this.qoffset_y + " " + - "z = " + this.qoffset_z + "\n"); + var count = 0, length, temp, t, c, i, j; - string += ("S-Form Parameters X: " + - fmt(this.affine[0][0]) + ", " + - fmt(this.affine[0][1]) + ", " + - fmt(this.affine[0][2]) + ", " + - fmt(this.affine[0][3]) + "\n"); + length = data.get16(); + count += 2; - string += ("S-Form Parameters Y: " + - fmt(this.affine[1][0]) + ", " + - fmt(this.affine[1][1]) + ", " + - fmt(this.affine[1][2]) + ", " + - fmt(this.affine[1][3]) + "\n"); + while (count < length) { + temp = data.get8(); + count+=1; + t = temp & 0x0F; + if (t > 3) { + throw new Error("ERROR: Huffman table ID > 3"); + } - string += ("S-Form Parameters Z: " + - fmt(this.affine[2][0]) + ", " + - fmt(this.affine[2][1]) + ", " + - fmt(this.affine[2][2]) + ", " + - fmt(this.affine[2][3]) + "\n"); + c = temp >> 4; + if (c > 2) { + throw new Error("ERROR: Huffman table [Table class > 2 ]"); + } - string += ("Intent Name: \"" + this.intent_name + "\"\n"); + this.th[t] = 1; + this.tc[t][c] = 1; - if (this.extensionFlag[0]) { - string += ("Extension: Size = " + this.extensionSize + " Code = " + this.extensionCode + "\n"); + for (i = 0; i < 16; i+=1) { + this.l[t][c][i] = data.get8(); + count+=1; + } - } + for (i = 0; i < 16; i+=1) { + for (j = 0; j < this.l[t][c][i]; j+=1) { + if (count > length) { + throw new Error("ERROR: Huffman table format error [count>Lh]"); + } - return string; -}; + this.v[t][c][i][j] = data.get8(); + count+=1; + } + } + } + if (count !== length) { + throw new Error("ERROR: Huffman table format error [count!=Lf]"); + } -/** - * Returns a human-readable string of datatype. - * @param {number} code - * @returns {string} - */ -nifti.NIFTI1.prototype.getDatatypeCodeString = function (code) { - if (code === nifti.NIFTI1.TYPE_UINT8) { - return "1-Byte Unsigned Integer"; - } else if (code === nifti.NIFTI1.TYPE_INT16) { - return "2-Byte Signed Integer"; - } else if (code === nifti.NIFTI1.TYPE_INT32) { - return "4-Byte Signed Integer"; - } else if (code === nifti.NIFTI1.TYPE_FLOAT32) { - return "4-Byte Float"; - } else if (code === nifti.NIFTI1.TYPE_FLOAT64) { - return "8-Byte Float"; - } else if (code === nifti.NIFTI1.TYPE_RGB24) { - return "RGB"; - } else if (code === nifti.NIFTI1.TYPE_INT8) { - return "1-Byte Signed Integer"; - } else if (code === nifti.NIFTI1.TYPE_UINT16) { - return "2-Byte Unsigned Integer"; - } else if (code === nifti.NIFTI1.TYPE_UINT32) { - return "4-Byte Unsigned Integer"; - } else if (code === nifti.NIFTI1.TYPE_INT64) { - return "8-Byte Signed Integer"; - } else if (code === nifti.NIFTI1.TYPE_UINT64) { - return "8-Byte Unsigned Integer"; - } else { - return "Unknown"; + for (i = 0; i < 4; i+=1) { + for (j = 0; j < 2; j+=1) { + if (this.tc[i][j] !== 0) { + this.buildHuffTable(HuffTab[i][j], this.l[i][j], this.v[i][j]); + } + } } + + return 1; }; -/** - * Returns a human-readable string of transform type. - * @param {number} code - * @returns {string} - */ -nifti.NIFTI1.prototype.getTransformCodeString = function (code) { - if (code === nifti.NIFTI1.XFORM_SCANNER_ANAT) { - return "Scanner"; - } else if (code === nifti.NIFTI1.XFORM_ALIGNED_ANAT) { - return "Aligned"; - } else if (code === nifti.NIFTI1.XFORM_TALAIRACH) { - return "Talairach"; - } else if (code === nifti.NIFTI1.XFORM_MNI_152) { - return "MNI"; - } else { - return "Unknown"; - } -}; +// Build_HuffTab() +// Parameter: t table ID +// c table class ( 0 for DC, 1 for AC ) +// L[i] # of codewords which length is i +// V[i][j] Huffman Value (length=i) +// Effect: +// build up HuffTab[t][c] using L and V. +jpeg.lossless.HuffmanTable.prototype.buildHuffTable = function(tab, L, V) { + /*jslint bitwise: true */ -/** - * Returns a human-readable string of spatial and temporal units. - * @param {number} code - * @returns {string} - */ -nifti.NIFTI1.prototype.getUnitsCodeString = function (code) { - if (code === nifti.NIFTI1.UNITS_METER) { - return "Meters"; - } else if (code === nifti.NIFTI1.UNITS_MM) { - return "Millimeters"; - } else if (code === nifti.NIFTI1.UNITS_MICRON) { - return "Microns"; - } else if (code === nifti.NIFTI1.UNITS_SEC) { - return "Seconds"; - } else if (code === nifti.NIFTI1.UNITS_MSEC) { - return "Milliseconds"; - } else if (code === nifti.NIFTI1.UNITS_USEC) { - return "Microseconds"; - } else if (code === nifti.NIFTI1.UNITS_HZ) { - return "Hz"; - } else if (code === nifti.NIFTI1.UNITS_PPM) { - return "PPM"; - } else if (code === nifti.NIFTI1.UNITS_RADS) { - return "Rads"; - } else { - return "Unknown"; + var currentTable, temp, k, i, j, n; + temp = 256; + k = 0; + + for (i = 0; i < 8; i+=1) { // i+1 is Code length + for (j = 0; j < L[i]; j+=1) { + for (n = 0; n < (temp >> (i + 1)); n+=1) { + tab[k] = V[i][j] | ((i + 1) << 8); + k+=1; + } + } } -}; + for (i = 1; k < 256; i+=1, k+=1) { + tab[k] = i | jpeg.lossless.HuffmanTable.MSB; + } -/** - * Returns the qform matrix. - * @returns {Array.>} - */ -nifti.NIFTI1.prototype.getQformMat = function () { - return this.convertNiftiQFormToNiftiSForm(this.quatern_b, this.quatern_c, this.quatern_d, this.qoffset_x, - this.qoffset_y, this.qoffset_z, this.pixDims[1], this.pixDims[2], this.pixDims[3], this.pixDims[0]); + currentTable = 1; + k = 0; + + for (i = 8; i < 16; i+=1) { // i+1 is Code length + for (j = 0; j < L[i]; j+=1) { + for (n = 0; n < (temp >> (i - 7)); n+=1) { + tab[(currentTable * 256) + k] = V[i][j] | ((i + 1) << 8); + k+=1; + } + + if (k >= 256) { + if (k > 256) { + throw new Error("ERROR: Huffman table error(1)!"); + } + + k = 0; + currentTable+=1; + } + } + } }; +/*** Exports ***/ -/** - * Converts qform to an affine. (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c) - * @param {number} qb - * @param {number} qc - * @param {number} qd - * @param {number} qx - * @param {number} qy - * @param {number} qz - * @param {number} dx - * @param {number} dy - * @param {number} dz - * @param {number} qfac - * @returns {Array.>} - */ -nifti.NIFTI1.prototype.convertNiftiQFormToNiftiSForm = function (qb, qc, qd, qx, qy, qz, dx, dy, dz, - qfac) { - var R = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], - a, - b = qb, - c = qc, - d = qd, - xd, - yd, - zd; +var moduleType = typeof module; +if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg.lossless.HuffmanTable; +} - // last row is always [ 0 0 0 1 ] - R[3][0] = R[3][1] = R[3][2] = 0.0; - R[3][3] = 1.0; - // compute a parameter from b,c,d - a = 1.0 - (b * b + c * c + d * d); - if (a < 0.0000001) { /* special case */ +/***/ }), - a = 1.0 / Math.sqrt(b * b + c * c + d * d); - b *= a; - c *= a; - d *= a; /* normalize (b,c,d) vector */ - a = 0.0; /* a = 0 ==> 180 degree rotation */ - } else { +/***/ "./node_modules/jpeg-lossless-decoder-js/src/main.js": +/*!***********************************************************!*\ + !*** ./node_modules/jpeg-lossless-decoder-js/src/main.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { - a = Math.sqrt(a); /* angle = 2*arccos(a) */ - } +"use strict"; +/*jslint browser: true, node: true */ +/*global require, module */ - // load rotation matrix, including scaling factors for voxel sizes - xd = (dx > 0.0) ? dx : 1.0; /* make sure are positive */ - yd = (dy > 0.0) ? dy : 1.0; - zd = (dz > 0.0) ? dz : 1.0; - if (qfac < 0.0) { - zd = -zd; /* left handedness? */ - } - R[0][0] = (a * a + b * b - c * c - d * d) * xd; - R[0][1] = 2.0 * (b * c - a * d) * yd; - R[0][2] = 2.0 * (b * d + a * c) * zd; - R[1][0] = 2.0 * (b * c + a * d) * xd; - R[1][1] = (a * a + c * c - b * b - d * d) * yd; - R[1][2] = 2.0 * (c * d - a * b) * zd; - R[2][0] = 2.0 * (b * d - a * c) * xd; - R[2][1] = 2.0 * (c * d + a * b) * yd; - R[2][2] = (a * a + d * d - c * c - b * b) * zd; +/*** Imports ***/ +var jpeg = jpeg || {}; +jpeg.lossless = jpeg.lossless || {}; +jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || (( true) ? __webpack_require__(/*! ./component-spec.js */ "./node_modules/jpeg-lossless-decoder-js/src/component-spec.js") : undefined); +jpeg.lossless.DataStream = jpeg.lossless.DataStream || (( true) ? __webpack_require__(/*! ./data-stream.js */ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js") : undefined); +jpeg.lossless.Decoder = jpeg.lossless.Decoder || (( true) ? __webpack_require__(/*! ./decoder.js */ "./node_modules/jpeg-lossless-decoder-js/src/decoder.js") : undefined); +jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || (( true) ? __webpack_require__(/*! ./frame-header.js */ "./node_modules/jpeg-lossless-decoder-js/src/frame-header.js") : undefined); +jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || (( true) ? __webpack_require__(/*! ./huffman-table.js */ "./node_modules/jpeg-lossless-decoder-js/src/huffman-table.js") : undefined); +jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || (( true) ? __webpack_require__(/*! ./quantization-table.js */ "./node_modules/jpeg-lossless-decoder-js/src/quantization-table.js") : undefined); +jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || (( true) ? __webpack_require__(/*! ./scan-component.js */ "./node_modules/jpeg-lossless-decoder-js/src/scan-component.js") : undefined); +jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || (( true) ? __webpack_require__(/*! ./scan-header.js */ "./node_modules/jpeg-lossless-decoder-js/src/scan-header.js") : undefined); +jpeg.lossless.Utils = jpeg.lossless.Utils || (( true) ? __webpack_require__(/*! ./utils.js */ "./node_modules/jpeg-lossless-decoder-js/src/utils.js") : undefined); - // load offsets - R[0][3] = qx; - R[1][3] = qy; - R[2][3] = qz; - return R; -}; +/*** Exports ***/ +var moduleType = typeof module; +if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg; +} +/***/ }), -/** - * Converts sform to an orientation string (e.g., XYZ+--). (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c) - * @param {Array.>} R - * @returns {string} +/***/ "./node_modules/jpeg-lossless-decoder-js/src/quantization-table.js": +/*!*************************************************************************!*\ + !*** ./node_modules/jpeg-lossless-decoder-js/src/quantization-table.js ***! + \*************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* + * Copyright (C) 2015 Michael Martinez + * Changes: Added support for selection values 2-7, fixed minor bugs & + * warnings, split into multiple class files, and general clean up. + * + * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. */ -nifti.NIFTI1.prototype.convertNiftiSFormToNEMA = function (R) { - var xi, xj, xk, yi, yj, yk, zi, zj, zk, val, detQ, detP, i, j, k, p, q, r, ibest, jbest, kbest, pbest, qbest, rbest, - M, vbest, Q, P, iChar, jChar, kChar, iSense, jSense, kSense; - k = 0; - Q = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]; - P = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]; +/* + * Copyright (C) Helmut Dersch + * + * 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: - //if( icod == NULL || jcod == NULL || kcod == NULL ) return ; /* bad */ + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. - //*icod = *jcod = *kcod = 0 ; /* this.errorMessage returns, if sh*t happens */ + * 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. + */ - /* load column vectors for each (i,j,k) direction from matrix */ +/*jslint browser: true, node: true */ +/*global require, module */ - /*-- i axis --*/ /*-- j axis --*/ /*-- k axis --*/ - xi = R[0][0]; - xj = R[0][1]; - xk = R[0][2]; - yi = R[1][0]; - yj = R[1][1]; - yk = R[1][2]; +/*** Imports ***/ +var jpeg = jpeg || {}; +jpeg.lossless = jpeg.lossless || {}; +jpeg.lossless.DataStream = jpeg.lossless.DataStream || (( true) ? __webpack_require__(/*! ./data-stream.js */ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js") : undefined); +jpeg.lossless.Utils = jpeg.lossless.Utils || (( true) ? __webpack_require__(/*! ./utils.js */ "./node_modules/jpeg-lossless-decoder-js/src/utils.js") : undefined); - zi = R[2][0]; - zj = R[2][1]; - zk = R[2][2]; - /* normalize column vectors to get unit vectors along each ijk-axis */ +/*** Constructor ***/ +jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || function () { + this.precision = []; // Quantization precision 8 or 16 + this.tq = []; // 1: this table is presented + this.quantTables = jpeg.lossless.Utils.createArray(4, 64); // Tables - /* normalize i axis */ - val = Math.sqrt(xi * xi + yi * yi + zi * zi); - if (val === 0.0) { /* stupid input */ - return null; - } + this.tq[0] = 0; + this.tq[1] = 0; + this.tq[2] = 0; + this.tq[3] = 0; +}; - xi /= val; - yi /= val; - zi /= val; - /* normalize j axis */ - val = Math.sqrt(xj * xj + yj * yj + zj * zj); - if (val === 0.0) { /* stupid input */ - return null; - } - xj /= val; - yj /= val; - zj /= val; +/*** Static Methods ***/ - /* orthogonalize j axis to i axis, if needed */ - val = xi * xj + yi * yj + zi * zj; /* dot product between i and j */ - if (Math.abs(val) > 1.E-4) { - xj -= val * xi; - yj -= val * yi; - zj -= val * zi; - val = Math.sqrt(xj * xj + yj * yj + zj * zj); /* must renormalize */ - if (val === 0.0) { /* j was parallel to i? */ - return null; - } - xj /= val; - yj /= val; - zj /= val; - } +jpeg.lossless.QuantizationTable.enhanceQuantizationTable = function(qtab, table) { + /*jslint bitwise: true */ - /* normalize k axis; if it is zero, make it the cross product i x j */ - val = Math.sqrt(xk * xk + yk * yk + zk * zk); - if (val === 0.0) { - xk = yi * zj - zi * yj; - yk = zi * xj - zj * xi; - zk = xi * yj - yi * xj; - } else { - xk /= val; - yk /= val; - zk /= val; + var i; + + for (i = 0; i < 8; i+=1) { + qtab[table[(0 * 8) + i]] *= 90; + qtab[table[(4 * 8) + i]] *= 90; + qtab[table[(2 * 8) + i]] *= 118; + qtab[table[(6 * 8) + i]] *= 49; + qtab[table[(5 * 8) + i]] *= 71; + qtab[table[(1 * 8) + i]] *= 126; + qtab[table[(7 * 8) + i]] *= 25; + qtab[table[(3 * 8) + i]] *= 106; } - /* orthogonalize k to i */ - val = xi * xk + yi * yk + zi * zk; /* dot product between i and k */ - if (Math.abs(val) > 1.E-4) { - xk -= val * xi; - yk -= val * yi; - zk -= val * zi; - val = Math.sqrt(xk * xk + yk * yk + zk * zk); - if (val === 0.0) { /* bad */ - return null; - } - xk /= val; - yk /= val; - zk /= val; + for (i = 0; i < 8; i+=1) { + qtab[table[0 + (8 * i)]] *= 90; + qtab[table[4 + (8 * i)]] *= 90; + qtab[table[2 + (8 * i)]] *= 118; + qtab[table[6 + (8 * i)]] *= 49; + qtab[table[5 + (8 * i)]] *= 71; + qtab[table[1 + (8 * i)]] *= 126; + qtab[table[7 + (8 * i)]] *= 25; + qtab[table[3 + (8 * i)]] *= 106; } - /* orthogonalize k to j */ - val = xj * xk + yj * yk + zj * zk; /* dot product between j and k */ - if (Math.abs(val) > 1.e-4) { - xk -= val * xj; - yk -= val * yj; - zk -= val * zj; - val = Math.sqrt(xk * xk + yk * yk + zk * zk); - if (val === 0.0) { /* bad */ - return null; - } - xk /= val; - yk /= val; - zk /= val; + for (i = 0; i < 64; i+=1) { + qtab[i] >>= 6; } +}; - Q[0][0] = xi; - Q[0][1] = xj; - Q[0][2] = xk; - Q[1][0] = yi; - Q[1][1] = yj; - Q[1][2] = yk; - Q[2][0] = zi; - Q[2][1] = zj; - Q[2][2] = zk; - /* at this point, Q is the rotation matrix from the (i,j,k) to (x,y,z) axes */ +/*** Prototype Methods ***/ - detQ = this.nifti_mat33_determ(Q); - if (detQ === 0.0) { /* shouldn't happen unless user is a DUFIS */ - return null; - } +jpeg.lossless.QuantizationTable.prototype.read = function (data, table) { + /*jslint bitwise: true */ - /* Build and test all possible +1/-1 coordinate permutation matrices P; - then find the P such that the rotation matrix M=PQ is closest to the - identity, in the sense of M having the smallest total rotation angle. */ + var count = 0, length, temp, t, i; - /* Despite the formidable looking 6 nested loops, there are - only 3*3*3*2*2*2 = 216 passes, which will run very quickly. */ + length = data.get16(); + count += 2; - vbest = -666.0; - ibest = pbest = qbest = rbest = 1; - jbest = 2; - kbest = 3; + while (count < length) { + temp = data.get8(); + count+=1; + t = temp & 0x0F; - for (i = 1; i <= 3; i += 1) { /* i = column number to use for row #1 */ - for (j = 1; j <= 3; j += 1) { /* j = column number to use for row #2 */ - if (i !== j) { - for (k = 1; k <= 3; k += 1) { /* k = column number to use for row #3 */ - if (!(i === k || j === k)) { - P[0][0] = P[0][1] = P[0][2] = P[1][0] = P[1][1] = P[1][2] = P[2][0] = P[2][1] = P[2][2] = 0.0; - for (p = -1; p <= 1; p += 2) { /* p,q,r are -1 or +1 */ - for (q = -1; q <= 1; q += 2) { /* and go into rows #1,2,3 */ - for (r = -1; r <= 1; r += 2) { - P[0][i - 1] = p; - P[1][j - 1] = q; - P[2][k - 1] = r; - detP = this.nifti_mat33_determ(P); /* sign of permutation */ - if ((detP * detQ) > 0.0) { - M = this.nifti_mat33_mul(P, Q); + if (t > 3) { + throw new Error("ERROR: Quantization table ID > 3"); + } - /* angle of M rotation = 2.0*acos(0.5*sqrt(1.0+trace(M))) */ - /* we want largest trace(M) == smallest angle == M nearest to I */ + this.precision[t] = temp >> 4; - val = M[0][0] + M[1][1] + M[2][2]; /* trace */ - if (val > vbest) { - vbest = val; - ibest = i; - jbest = j; - kbest = k; - pbest = p; - qbest = q; - rbest = r; - } - } /* doesn't match sign of Q */ - } - } - } - } - } - } + if (this.precision[t] === 0) { + this.precision[t] = 8; + } else if (this.precision[t] === 1) { + this.precision[t] = 16; + } else { + throw new Error("ERROR: Quantization table precision error"); } - } - - /* At this point ibest is 1 or 2 or 3; pbest is -1 or +1; etc. - The matrix P that corresponds is the best permutation approximation - to Q-inverse; that is, P (approximately) takes (x,y,z) coordinates - to the (i,j,k) axes. + this.tq[t] = 1; - For example, the first row of P (which contains pbest in column ibest) - determines the way the i axis points relative to the anatomical - (x,y,z) axes. If ibest is 2, then the i axis is along the y axis, - which is direction P2A (if pbest > 0) or A2P (if pbest < 0). + if (this.precision[t] === 8) { + for (i = 0; i < 64; i+=1) { + if (count > length) { + throw new Error("ERROR: Quantization table format error"); + } - So, using ibest and pbest, we can assign the output code for - the i axis. Mutatis mutandis for the j and k axes, of course. */ + this.quantTables[t][i] = data.get8(); + count+=1; + } - iChar = jChar = kChar = iSense = jSense = kSense = 0; + jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); + } else { + for (i = 0; i < 64; i+=1) { + if (count > length) { + throw new Error("ERROR: Quantization table format error"); + } - switch (ibest * pbest) { - case 1: /*i = NIFTI_L2R*/ - iChar = 'X'; - iSense = '+'; - break; - case -1: /*i = NIFTI_R2L*/ - iChar = 'X'; - iSense = '-'; - break; - case 2: /*i = NIFTI_P2A*/ - iChar = 'Y'; - iSense = '+'; - break; - case -2: /*i = NIFTI_A2P*/ - iChar = 'Y'; - iSense = '-'; - break; - case 3: /*i = NIFTI_I2S*/ - iChar = 'Z'; - iSense = '+'; - break; - case -3: /*i = NIFTI_S2I*/ - iChar = 'Z'; - iSense = '-'; - break; - } + this.quantTables[t][i] = data.get16(); + count += 2; + } - switch (jbest * qbest) { - case 1: /*j = NIFTI_L2R*/ - jChar = 'X'; - jSense = '+'; - break; - case -1: /*j = NIFTI_R2L*/ - jChar = 'X'; - jSense = '-'; - break; - case 2: /*j = NIFTI_P2A*/ - jChar = 'Y'; - jSense = '+'; - break; - case -2: /*j = NIFTI_A2P*/ - jChar = 'Y'; - jSense = '-'; - break; - case 3: /*j = NIFTI_I2S*/ - jChar = 'Z'; - jSense = '+'; - break; - case -3: /*j = NIFTI_S2I*/ - jChar = 'Z'; - jSense = '-'; - break; + jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); + } } - switch (kbest * rbest) { - case 1: /*k = NIFTI_L2R*/ - kChar = 'X'; - kSense = '+'; - break; - case -1: /*k = NIFTI_R2L*/ - kChar = 'X'; - kSense = '-'; - break; - case 2: /*k = NIFTI_P2A*/ - kChar = 'Y'; - kSense = '+'; - break; - case -2: /*k = NIFTI_A2P*/ - kChar = 'Y'; - kSense = '-'; - break; - case 3: /*k = NIFTI_I2S*/ - kChar = 'Z'; - kSense = '+'; - break; - case -3: /*k = NIFTI_S2I*/ - kChar = 'Z'; - kSense = '-'; - break; + if (count !== length) { + throw new Error("ERROR: Quantization table error [count!=Lq]"); } - return (iChar + jChar + kChar + iSense + jSense + kSense); + return 1; }; -nifti.NIFTI1.prototype.nifti_mat33_mul = function (A, B) { - var C = [[0, 0, 0], [0, 0, 0], [0, 0, 0]], - i, - j; +/*** Exports ***/ - for (i = 0; i < 3; i += 1) { - for (j = 0; j < 3; j += 1) { - C[i][j] = A[i][0] * B[0][j] + A[i][1] * B[1][j] + A[i][2] * B[2][j]; - } - } +var moduleType = typeof module; +if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg.lossless.QuantizationTable; +} - return C; -}; +/***/ }), +/***/ "./node_modules/jpeg-lossless-decoder-js/src/scan-component.js": +/*!*********************************************************************!*\ + !*** ./node_modules/jpeg-lossless-decoder-js/src/scan-component.js ***! + \*********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { -nifti.NIFTI1.prototype.nifti_mat33_determ = function (R) { - var r11, r12, r13, r21, r22, r23, r31, r32, r33; - /* INPUT MATRIX: */ - r11 = R[0][0]; - r12 = R[0][1]; - r13 = R[0][2]; - r21 = R[1][0]; - r22 = R[1][1]; - r23 = R[1][2]; - r31 = R[2][0]; - r32 = R[2][1]; - r33 = R[2][2]; +"use strict"; +/* + * Copyright (C) 2015 Michael Martinez + * Changes: Added support for selection values 2-7, fixed minor bugs & + * warnings, split into multiple class files, and general clean up. + * + * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. + */ - return (r11 * r22 * r33 - r11 * r32 * r23 - r21 * r12 * r33 + r21 * r32 * r13 + r31 * r12 * r23 - r31 * r22 * r13); -}; +/* + * Copyright (C) Helmut Dersch + * + * 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. -/** - * Returns the byte index of the extension. - * @returns {number} + * 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. */ -nifti.NIFTI1.prototype.getExtensionLocation = function() { - return nifti.NIFTI1.MAGIC_COOKIE + 4; -}; + +/*jslint browser: true, node: true */ +/*global require, module */ -/** - * Returns the extension size. - * @param {DataView} data - * @returns {number} - */ -nifti.NIFTI1.prototype.getExtensionSize = function(data) { - return nifti.Utils.getIntAt(data, this.getExtensionLocation(), this.littleEndian); -}; +/*** Imports ***/ +var jpeg = jpeg || {}; +jpeg.lossless = jpeg.lossless || {}; -/** - * Returns the extension code. - * @param {DataView} data - * @returns {number} - */ -nifti.NIFTI1.prototype.getExtensionCode = function(data) { - return nifti.Utils.getIntAt(data, this.getExtensionLocation() + 4, this.littleEndian); +/*** Constructor ***/ +jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || function () { + this.acTabSel = 0; // AC table selector + this.dcTabSel = 0; // DC table selector + this.scanCompSel = 0; // Scan component selector }; @@ -9331,3625 +9823,2239 @@ nifti.NIFTI1.prototype.getExtensionCode = function(data) { var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = nifti.NIFTI1; + module.exports = jpeg.lossless.ScanComponent; } /***/ }), -/***/ "./node_modules/nifti-reader-js/src/nifti2.js": -/*!****************************************************!*\ - !*** ./node_modules/nifti-reader-js/src/nifti2.js ***! - \****************************************************/ +/***/ "./node_modules/jpeg-lossless-decoder-js/src/scan-header.js": +/*!******************************************************************!*\ + !*** ./node_modules/jpeg-lossless-decoder-js/src/scan-header.js ***! + \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; +/* + * Copyright (C) 2015 Michael Martinez + * Changes: Added support for selection values 2-7, fixed minor bugs & + * warnings, split into multiple class files, and general clean up. + * + * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. + */ + +/* + * Copyright (C) Helmut Dersch + * + * 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. + */ /*jslint browser: true, node: true */ -/*global */ +/*global require, module */ /*** Imports ***/ - -var nifti = nifti || {}; -nifti.Utils = nifti.Utils || (( true) ? __webpack_require__(/*! ./utilities.js */ "./node_modules/nifti-reader-js/src/utilities.js") : undefined); -nifti.NIFTI1 = nifti.NIFTI1 || (( true) ? __webpack_require__(/*! ./nifti1.js */ "./node_modules/nifti-reader-js/src/nifti1.js") : undefined); +var jpeg = jpeg || {}; +jpeg.lossless = jpeg.lossless || {}; +jpeg.lossless.DataStream = jpeg.lossless.DataStream || (( true) ? __webpack_require__(/*! ./data-stream.js */ "./node_modules/jpeg-lossless-decoder-js/src/data-stream.js") : undefined); +jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || (( true) ? __webpack_require__(/*! ./scan-component.js */ "./node_modules/jpeg-lossless-decoder-js/src/scan-component.js") : undefined); /*** Constructor ***/ - -/** - * The NIFTI2 constructor. - * @constructor - * @property {boolean} littleEndian - * @property {number} dim_info - * @property {number[]} dims - image dimensions - * @property {number} intent_p1 - * @property {number} intent_p2 - * @property {number} intent_p3 - * @property {number} intent_code - * @property {number} datatypeCode - * @property {number} numBitsPerVoxel - * @property {number} slice_start - * @property {number} slice_end - * @property {number} slice_code - * @property {number[]} pixDims - voxel dimensions - * @property {number} vox_offset - * @property {number} scl_slope - * @property {number} scl_inter - * @property {number} xyzt_units - * @property {number} cal_max - * @property {number} cal_min - * @property {number} slice_duration - * @property {number} toffset - * @property {string} description - * @property {string} aux_file - * @property {string} intent_name - * @property {number} qform_code - * @property {number} sform_code - * @property {number} quatern_b - * @property {number} quatern_c - * @property {number} quatern_d - * @property {number} quatern_x - * @property {number} quatern_y - * @property {number} quatern_z - * @property {Array.>} affine - * @property {string} magic - * @property {number[]} extensionFlag - * @type {Function} - */ -nifti.NIFTI2 = nifti.NIFTI2 || function () { - this.littleEndian = false; - this.dim_info = 0; - this.dims = []; - this.intent_p1 = 0; - this.intent_p2 = 0; - this.intent_p3 = 0; - this.intent_code = 0; - this.datatypeCode = 0; - this.numBitsPerVoxel = 0; - this.slice_start = 0; - this.slice_end = 0; - this.slice_code = 0; - this.pixDims = []; - this.vox_offset = 0; - this.scl_slope = 1; - this.scl_inter = 0; - this.xyzt_units = 0; - this.cal_max = 0; - this.cal_min = 0; - this.slice_duration = 0; - this.toffset = 0; - this.description = ""; - this.aux_file = ""; - this.intent_name = ""; - this.qform_code = 0; - this.sform_code = 0; - this.quatern_b = 0; - this.quatern_c = 0; - this.quatern_d = 0; - this.qoffset_x = 0; - this.qoffset_y = 0; - this.qoffset_z = 0; - this.affine = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]; - this.magic = 0; - this.extensionFlag = [0, 0, 0, 0]; +jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || function () { + this.ah = 0; + this.al = 0; + this.numComp = 0; // Number of components in the scan + this.selection = 0; // Start of spectral or predictor selection + this.spectralEnd = 0; // End of spectral selection + this.components = []; }; +/*** Prototype Methods ***/ -/*** Static Pseudo-constants ***/ - -nifti.NIFTI2.MAGIC_COOKIE = 540; -nifti.NIFTI2.MAGIC_NUMBER_LOCATION = 4; -nifti.NIFTI2.MAGIC_NUMBER = [0x6E, 0x2B, 0x32, 0, 0x0D, 0x0A, 0x1A, 0x0A]; // n+2\0 +jpeg.lossless.ScanHeader.prototype.read = function(data) { + /*jslint bitwise: true */ + var count = 0, length, i, temp; + length = data.get16(); + count += 2; -/*** Prototype Methods ***/ + this.numComp = data.get8(); + count+=1; -/** - * Reads the header data. - * @param {ArrayBuffer} data - */ -nifti.NIFTI2.prototype.readHeader = function (data) { - var rawData = new DataView(data), - magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian), - ctr, - ctrOut, - ctrIn, - index, - array; + for (i = 0; i < this.numComp; i+=1) { + this.components[i] = new jpeg.lossless.ScanComponent(); - if (magicCookieVal !== nifti.NIFTI2.MAGIC_COOKIE) { // try as little endian - this.littleEndian = true; - magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian); - } + if (count > length) { + throw new Error("ERROR: scan header format error"); + } - if (magicCookieVal !== nifti.NIFTI2.MAGIC_COOKIE) { - throw new Error("This does not appear to be a NIFTI file!"); - } - - this.datatypeCode = nifti.Utils.getShortAt(rawData, 12, this.littleEndian); - this.numBitsPerVoxel = nifti.Utils.getShortAt(rawData, 14, this.littleEndian); - - for (ctr = 0; ctr < 8; ctr += 1) { - index = 16 + (ctr * 8); - this.dims[ctr] = nifti.Utils.getLongAt(rawData, index, this.littleEndian); - } + this.components[i].scanCompSel = data.get8(); + count+=1; - this.intent_p1 = nifti.Utils.getDoubleAt(rawData, 80, this.littleEndian); - this.intent_p2 = nifti.Utils.getDoubleAt(rawData, 88, this.littleEndian); - this.intent_p3 = nifti.Utils.getDoubleAt(rawData, 96, this.littleEndian); + temp = data.get8(); + count+=1; - for (ctr = 0; ctr < 8; ctr += 1) { - index = 104 + (ctr * 8); - this.pixDims[ctr] = nifti.Utils.getDoubleAt(rawData, index, this.littleEndian); + this.components[i].dcTabSel = (temp >> 4); + this.components[i].acTabSel = (temp & 0x0F); } - this.vox_offset = nifti.Utils.getLongAt(rawData, 168, this.littleEndian); + this.selection = data.get8(); + count+=1; - this.scl_slope = nifti.Utils.getDoubleAt(rawData, 176, this.littleEndian); - this.scl_inter = nifti.Utils.getDoubleAt(rawData, 184, this.littleEndian); + this.spectralEnd = data.get8(); + count+=1; - this.cal_max = nifti.Utils.getDoubleAt(rawData, 192, this.littleEndian); - this.cal_min = nifti.Utils.getDoubleAt(rawData, 200, this.littleEndian); + temp = data.get8(); + this.ah = (temp >> 4); + this.al = (temp & 0x0F); + count+=1; - this.slice_duration = nifti.Utils.getDoubleAt(rawData, 208, this.littleEndian); + if (count !== length) { + throw new Error("ERROR: scan header format error [count!=Ns]"); + } - this.toffset = nifti.Utils.getDoubleAt(rawData, 216, this.littleEndian); + return 1; +}; - this.slice_start = nifti.Utils.getLongAt(rawData, 224, this.littleEndian); - this.slice_end = nifti.Utils.getLongAt(rawData, 232, this.littleEndian); - this.description = nifti.Utils.getStringAt(rawData, 240, 240 + 80); - this.aux_file = nifti.Utils.getStringAt(rawData, 320, 320 + 24); - this.qform_code = nifti.Utils.getIntAt(rawData, 344, this.littleEndian); - this.sform_code = nifti.Utils.getIntAt(rawData, 348, this.littleEndian); +/*** Exports ***/ - this.quatern_b = nifti.Utils.getDoubleAt(rawData, 352, this.littleEndian); - this.quatern_c = nifti.Utils.getDoubleAt(rawData, 360, this.littleEndian); - this.quatern_d = nifti.Utils.getDoubleAt(rawData, 368, this.littleEndian); - this.qoffset_x = nifti.Utils.getDoubleAt(rawData, 376, this.littleEndian); - this.qoffset_y = nifti.Utils.getDoubleAt(rawData, 384, this.littleEndian); - this.qoffset_z = nifti.Utils.getDoubleAt(rawData, 392, this.littleEndian); +var moduleType = typeof module; +if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg.lossless.ScanHeader; +} - for (ctrOut = 0; ctrOut < 3; ctrOut += 1) { - for (ctrIn = 0; ctrIn < 4; ctrIn += 1) { - index = 400 + (((ctrOut * 4) + ctrIn) * 8); - this.affine[ctrOut][ctrIn] = nifti.Utils.getDoubleAt(rawData, index, this.littleEndian); - } - } - this.affine[3][0] = 0; - this.affine[3][1] = 0; - this.affine[3][2] = 0; - this.affine[3][3] = 1; +/***/ }), - this.slice_code = nifti.Utils.getIntAt(rawData, 496, this.littleEndian); - this.xyzt_units = nifti.Utils.getIntAt(rawData, 500, this.littleEndian); - this.intent_code = nifti.Utils.getIntAt(rawData, 504, this.littleEndian); - this.intent_name = nifti.Utils.getStringAt(rawData, 508, 508 + 16); +/***/ "./node_modules/jpeg-lossless-decoder-js/src/utils.js": +/*!************************************************************!*\ + !*** ./node_modules/jpeg-lossless-decoder-js/src/utils.js ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { - this.dim_info = nifti.Utils.getByteAt(rawData, 524); +"use strict"; +/* + * Copyright (C) 2015 Michael Martinez + * Changes: Added support for selection values 2-7, fixed minor bugs & + * warnings, split into multiple class files, and general clean up. + * + * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. + */ - if (rawData.byteLength > nifti.NIFTI2.MAGIC_COOKIE) { - this.extensionFlag[0] = nifti.Utils.getByteAt(rawData, 540); - this.extensionFlag[1] = nifti.Utils.getByteAt(rawData, 540 + 1); - this.extensionFlag[2] = nifti.Utils.getByteAt(rawData, 540 + 2); - this.extensionFlag[3] = nifti.Utils.getByteAt(rawData, 540 + 3); +/* + * Copyright (C) Helmut Dersch + * + * 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: - if (this.extensionFlag[0]) { - this.extensionSize = this.getExtensionSize(rawData); - this.extensionCode = this.getExtensionCode(rawData); - } - } -}; + * 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. + */ +/*jslint browser: true, node: true */ +/*global require, module */ -/** - * Returns a formatted string of header fields. - * @returns {string} - */ -nifti.NIFTI2.prototype.toFormattedString = function () { - var fmt = nifti.Utils.formatNumber, - string = ""; - string += ("Datatype = " + + this.datatypeCode + " (" + this.getDatatypeCodeString(this.datatypeCode) + ")\n"); - string += ("Bits Per Voxel = " + " = " + this.numBitsPerVoxel + "\n"); - string += ("Image Dimensions" + " (1-8): " + - this.dims[0] + ", " + - this.dims[1] + ", " + - this.dims[2] + ", " + - this.dims[3] + ", " + - this.dims[4] + ", " + - this.dims[5] + ", " + - this.dims[6] + ", " + - this.dims[7] + "\n"); - string += ("Intent Parameters (1-3): " + - this.intent_p1 + ", " + - this.intent_p2 + ", " + - this.intent_p3) + "\n"; +/*** Imports ***/ +var jpeg = jpeg || {}; +jpeg.lossless = jpeg.lossless || {}; - string += ("Voxel Dimensions (1-8): " + - fmt(this.pixDims[0]) + ", " + - fmt(this.pixDims[1]) + ", " + - fmt(this.pixDims[2]) + ", " + - fmt(this.pixDims[3]) + ", " + - fmt(this.pixDims[4]) + ", " + - fmt(this.pixDims[5]) + ", " + - fmt(this.pixDims[6]) + ", " + - fmt(this.pixDims[7]) + "\n"); - string += ("Image Offset = " + this.vox_offset + "\n"); - string += ("Data Scale: Slope = " + fmt(this.scl_slope) + " Intercept = " + fmt(this.scl_inter) + "\n"); - string += ("Display Range: Max = " + fmt(this.cal_max) + " Min = " + fmt(this.cal_min) + "\n"); - string += ("Slice Duration = " + this.slice_duration + "\n"); - string += ("Time Axis Shift = " + this.toffset + "\n"); - string += ("Slice Start = " + this.slice_start + "\n"); - string += ("Slice End = " + this.slice_end + "\n"); - string += ("Description: \"" + this.description + "\"\n"); - string += ("Auxiliary File: \"" + this.aux_file + "\"\n"); - string += ("Q-Form Code = " + this.qform_code + " (" + this.getTransformCodeString(this.qform_code) + ")\n"); - string += ("S-Form Code = " + this.sform_code + " (" + this.getTransformCodeString(this.sform_code) + ")\n"); - string += ("Quaternion Parameters: " + - "b = " + fmt(this.quatern_b) + " " + - "c = " + fmt(this.quatern_c) + " " + - "d = " + fmt(this.quatern_d) + "\n"); +/*** Constructor ***/ +jpeg.lossless.Utils = jpeg.lossless.Utils || {}; - string += ("Quaternion Offsets: " + - "x = " + this.qoffset_x + " " + - "y = " + this.qoffset_y + " " + - "z = " + this.qoffset_z + "\n"); - string += ("S-Form Parameters X: " + - fmt(this.affine[0][0]) + ", " + - fmt(this.affine[0][1]) + ", " + - fmt(this.affine[0][2]) + ", " + - fmt(this.affine[0][3]) + "\n"); +/*** Static methods ***/ - string += ("S-Form Parameters Y: " + - fmt(this.affine[1][0]) + ", " + - fmt(this.affine[1][1]) + ", " + - fmt(this.affine[1][2]) + ", " + - fmt(this.affine[1][3]) + "\n"); +// http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript +jpeg.lossless.Utils.createArray = function (length) { + var arr = new Array(length || 0), + i = length; - string += ("S-Form Parameters Z: " + - fmt(this.affine[2][0]) + ", " + - fmt(this.affine[2][1]) + ", " + - fmt(this.affine[2][2]) + ", " + - fmt(this.affine[2][3]) + "\n"); + if (arguments.length > 1) { + var args = Array.prototype.slice.call(arguments, 1); + while(i--) arr[length-1 - i] = jpeg.lossless.Utils.createArray.apply(this, args); + } - string += ("Slice Code = " + this.slice_code + "\n"); - string += ("Units Code = " + this.xyzt_units + " (" + this.getUnitsCodeString(nifti.NIFTI1.SPATIAL_UNITS_MASK & this.xyzt_units) + ", " + this.getUnitsCodeString(nifti.NIFTI1.TEMPORAL_UNITS_MASK & this.xyzt_units) + ")\n"); - string += ("Intent Code = " + this.intent_code + "\n"); - string += ("Intent Name: \"" + this.intent_name + "\"\n"); + return arr; +}; - string += ("Dim Info = " + this.dim_info + "\n"); - return string; +// http://stackoverflow.com/questions/18638900/javascript-crc32 +jpeg.lossless.Utils.makeCRCTable = function(){ + var c; + var crcTable = []; + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + crcTable[n] = c; + } + return crcTable; }; +jpeg.lossless.Utils.crc32 = function(dataView) { + var crcTable = jpeg.lossless.Utils.crcTable || (jpeg.lossless.Utils.crcTable = jpeg.lossless.Utils.makeCRCTable()); + var crc = 0 ^ (-1); + for (var i = 0; i < dataView.byteLength; i++ ) { + crc = (crc >>> 8) ^ crcTable[(crc ^ dataView.getUint8(i)) & 0xFF]; + } -/** - * Returns the byte index of the extension. - * @returns {number} - */ -nifti.NIFTI2.prototype.getExtensionLocation = function() { - return nifti.NIFTI2.MAGIC_COOKIE + 4; + return (crc ^ (-1)) >>> 0; }; +/*** Exports ***/ -/** - * Returns the extension size. - * @param {DataView} data - * @returns {number} - */ -nifti.NIFTI2.prototype.getExtensionSize = nifti.NIFTI1.prototype.getExtensionSize; +var moduleType = typeof module; +if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg.lossless.Utils; +} +/***/ }), -/** - * Returns the extension code. - * @param {DataView} data - * @returns {number} - */ -nifti.NIFTI2.prototype.getExtensionCode = nifti.NIFTI1.prototype.getExtensionCode; +/***/ "./node_modules/math-abs/lib/index.js": +/*!********************************************!*\ + !*** ./node_modules/math-abs/lib/index.js ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { +"use strict"; /** - * Returns a human-readable string of datatype. - * @param {number} code - * @returns {string} - */ -nifti.NIFTI2.prototype.getDatatypeCodeString = nifti.NIFTI1.prototype.getDatatypeCodeString; - +* FUNCTION: abs( x ) +* Computes the absolute value of `x`. +* +* @param {Number} x - input value +* @returns {Number} absolute value +*/ +function abs( x ) { + if ( x < 0 ) { + return -x; + } + if ( x === 0 ) { + return 0; // handle negative zero + } + return x; +} // end FUNCTION abs() -/** - * Returns a human-readable string of transform type. - * @param {number} code - * @returns {string} - */ -nifti.NIFTI2.prototype.getTransformCodeString = nifti.NIFTI1.prototype.getTransformCodeString; +// EXPORTS // +module.exports = abs; -/** - * Returns a human-readable string of spatial and temporal units. - * @param {number} code - * @returns {string} - */ -nifti.NIFTI2.prototype.getUnitsCodeString = nifti.NIFTI1.prototype.getUnitsCodeString; +/***/ }), +/***/ "./node_modules/math-ceil/lib/index.js": +/*!*********************************************!*\ + !*** ./node_modules/math-ceil/lib/index.js ***! + \*********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { +"use strict"; -/** - * Returns the qform matrix. - * @returns {Array.>} - */ -nifti.NIFTI2.prototype.getQformMat = nifti.NIFTI1.prototype.getQformMat; +// EXPORTS // +module.exports = Math.ceil; -/** - * Converts qform to an affine. (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c) - * @param {number} qb - * @param {number} qc - * @param {number} qd - * @param {number} qx - * @param {number} qy - * @param {number} qz - * @param {number} dx - * @param {number} dy - * @param {number} dz - * @param {number} qfac - * @returns {Array.>} - */ -nifti.NIFTI2.prototype.convertNiftiQFormToNiftiSForm = nifti.NIFTI1.prototype.convertNiftiQFormToNiftiSForm; +/***/ }), +/***/ "./node_modules/math-float32-to-binary-string/lib/div2.js": +/*!****************************************************************!*\ + !*** ./node_modules/math-float32-to-binary-string/lib/div2.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { -/** - * Converts sform to an orientation string (e.g., XYZ+--). (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c) - * @param {Array.>} R - * @returns {string} - */ -nifti.NIFTI2.prototype.convertNiftiSFormToNEMA = nifti.NIFTI1.prototype.convertNiftiSFormToNEMA; +"use strict"; +// MODULES // -nifti.NIFTI2.prototype.nifti_mat33_mul = nifti.NIFTI1.prototype.nifti_mat33_mul; +var floor = __webpack_require__( /*! math-floor */ "./node_modules/math-floor/lib/index.js" ); +// DIV2 // -nifti.NIFTI2.prototype.nifti_mat33_determ = nifti.NIFTI1.prototype.nifti_mat33_determ; +/** +* FUNCTION: div2( x ) +* Converts a nonnegative integer to a literal bit representation using the divide-by-2 algorithm. +* +* @param {Number} x - nonnegative integer +* @returns {String} bit representation +*/ +function div2( x ) { + var str = ''; + var y; + // We repeatedly divide by 2 and check for a remainder. If a remainder exists, the number is odd and we add a '1' bit... + while ( x > 0 ) { + y = x / 2; + x = floor( y ); + if ( y === x ) { + str = '0' + str; + } else { + str = '1' + str; + } + } + return str; +} // end FUNCTION div2() -/*** Exports ***/ +// EXPORTS // -var moduleType = typeof module; -if ((moduleType !== 'undefined') && module.exports) { - module.exports = nifti.NIFTI2; -} +module.exports = div2; /***/ }), -/***/ "./node_modules/nifti-reader-js/src/utilities.js": -/*!*******************************************************!*\ - !*** ./node_modules/nifti-reader-js/src/utilities.js ***! - \*******************************************************/ +/***/ "./node_modules/math-float32-to-binary-string/lib/index.js": +/*!*****************************************************************!*\ + !*** ./node_modules/math-float32-to-binary-string/lib/index.js ***! + \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -/*jslint browser: true, node: true */ -/*global require, module */ - - -/*** Imports ***/ - -var nifti = nifti || {}; -nifti.Utils = nifti.Utils || {}; +// MODULES // +var pinf = __webpack_require__( /*! const-pinf-float32 */ "./node_modules/const-pinf-float32/lib/index.js" ); +var ninf = __webpack_require__( /*! const-ninf-float32 */ "./node_modules/const-ninf-float32/lib/index.js" ); +var abs = __webpack_require__( /*! math-abs */ "./node_modules/math-abs/lib/index.js" ); +var floor = __webpack_require__( /*! math-floor */ "./node_modules/math-floor/lib/index.js" ); +var rpad = __webpack_require__( /*! utils-right-pad-string */ "./node_modules/utils-right-pad-string/lib/index.js" ); +var lpad = __webpack_require__( /*! utils-left-pad-string */ "./node_modules/utils-left-pad-string/lib/index.js" ); +var repeat = __webpack_require__( /*! utils-repeat-string */ "./node_modules/utils-repeat-string/lib/index.js" ); +var div2 = __webpack_require__( /*! ./div2.js */ "./node_modules/math-float32-to-binary-string/lib/div2.js" ); +var mult2 = __webpack_require__( /*! ./mult2.js */ "./node_modules/math-float32-to-binary-string/lib/mult2.js" ); -/*** Static Pseudo-constants ***/ +// CONSTANTS // -nifti.Utils.crcTable = null; -nifti.Utils.GUNZIP_MAGIC_COOKIE1 = 31; -nifti.Utils.GUNZIP_MAGIC_COOKIE2 = 139; +var BIAS = 127; // exponent bias => (2**8)/2 - 1 +// BINARY STRING // -/*** Static methods ***/ +/** +* FUNCTION: binaryString( x ) +* Returns a string giving the literal bit representation of a single-precision floating-point number. +* +* @param {Number} x - input value +* @returns {String} bit representation +*/ +function binaryString( x ) { + var nbits; + var sign; + var str; + var exp; + var n; + var f; + var i; -nifti.Utils.getStringAt = function (data, start, end) { - var str = "", ctr, ch; + // Check for a negative value or negative zero... + if ( x < 0 || 1/x === ninf ) { + sign = '1'; + } else { + sign = '0'; + } + // Special case: +-infinity + if ( x === pinf || x === ninf ) { + // Based on IEEE 754-2008... + exp = repeat( '1', 8 ); // all 1s + str = repeat( '0', 23 ); // all 0s + return sign + exp + str; + } + // Special case: NaN + if ( x !== x ) { + // Based on IEEE 754-2008... + exp = repeat( '1', 8 ); // all 1s + str = '1' + repeat( '0', 22 ); // can't be all 0s + return sign + exp + str; + } + // Special case: +-0 + if ( x === 0 ) { + // Based on IEEE 754-2008... + exp = repeat( '0', 8 ); // all 0s + str = repeat( '0', 23 ); // all 0s + return sign + exp + str; + } + x = abs( x ); - for (ctr = start; ctr < end; ctr += 1) { - ch = data.getUint8(ctr); + // Isolate the integer part (digits before the decimal): + n = floor( x ); - if (ch !== 0) { - str += String.fromCharCode(ch); - } - } + // Isolate the fractional part (digits after the decimal): + f = x - n; - return str; -}; + // Convert the integer and fractional parts to bit strings: + n = div2( n ); + f = mult2( f ); + // Determine the exponent needed to normalize the integer+fractional parts... + if ( n ) { + // Move the decimal `d` digits to the left: + exp = n.length - 1; + } else { + // Find the first '1' bit... + for ( i = 0; i < f.length; i++ ) { + if ( f[ i ] === '1' ) { + nbits = i + 1; + break; + } + } + // Move the decimal `d` digits to the right: + exp = -nbits; + } + // Normalize the combined integer+fractional string... + str = n + f; + if ( exp < 0 ) { + // Handle subnormals... + if ( exp <= -BIAS ) { + // Cap the number of bits removed: + nbits = BIAS - 1; + } + // Remove all leading zeros and the first '1' for normal values, and, for subnormals, remove at most BIAS-1 leading bits: + str = str.substring( nbits ); + } else { + // Remove the leading '1' (implicit/hidden bit): + str = str.substring( 1 ); + } + // Convert the exponent to a bit string: + exp = div2( exp + BIAS ); + exp = lpad( exp, 8, '0' ); + // Fill in any trailing zeros and ensure we have only 23 fraction bits: + str = rpad( str, 23, '0' ).substring( 0, 23 ); -nifti.Utils.getByteAt = function (data, start) { - return data.getInt8(start); -}; + // Return a bit representation: + return sign + exp + str; +} // end FUNCTION binaryString() +// EXPORTS // -nifti.Utils.getShortAt = function (data, start, littleEndian) { - return data.getInt16(start, littleEndian); -}; +module.exports = binaryString; +/***/ }), -nifti.Utils.getIntAt = function (data, start, littleEndian) { - return data.getInt32(start, littleEndian); -}; +/***/ "./node_modules/math-float32-to-binary-string/lib/mult2.js": +/*!*****************************************************************!*\ + !*** ./node_modules/math-float32-to-binary-string/lib/mult2.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { +"use strict"; -nifti.Utils.getFloatAt = function (data, start, littleEndian) { - return data.getFloat32(start, littleEndian); -}; +// VARIABLES // +var MAX_ITER = 149; // 127+22 (subnormals) +var MAX_BITS = 24; // only 23 bits for fraction -nifti.Utils.getDoubleAt = function (data, start, littleEndian) { - return data.getFloat64(start, littleEndian); -}; +// MULT2 // +/** +* FUNCTION: mult2( x ) +* Converts a fraction to a literal bit representation using the multiply-by-2 algorithm. +* +* @param {Number} x - number less than 1 +* @returns {String} bit representation +*/ +function mult2( x ) { + var str; + var y; + var i; + var j; + str = ''; + if ( x === 0 ) { + return str; + } + j = MAX_ITER; -nifti.Utils.getLongAt = function (data, start, littleEndian) { - var ctr, array = [], value = 0; + // Each time we multiply by 2 and find a ones digit, add a '1'; otherwise, add a '0'.. + for ( i = 0; i < MAX_ITER; i++ ) { + y = x * 2; + if ( y >= 1 ) { + x = y - 1; + str += '1'; + if ( j === MAX_ITER ) { + j = i; // first '1' + } + } else { + x = y; + str += '0'; + } + // Stop when we have no more decimals to process or in the event we found a fraction which cannot be represented in a finite number of bits... + if ( y === 1 || i-j > MAX_BITS ) { + break; + } + } + return str; +} // end FUNCTION mult2() - for (ctr = 0; ctr < 8; ctr += 1) { - array[ctr] = nifti.Utils.getByteAt(data, start + ctr, littleEndian); - } - for (ctr = array.length - 1; ctr >= 0; ctr--) { - value = (value * 256) + array[ctr]; - } +// EXPORTS // - return value; -}; +module.exports = mult2; +/***/ }), -nifti.Utils.toArrayBuffer = function (buffer) { - var ab, view, i; +/***/ "./node_modules/math-floor/lib/index.js": +/*!**********************************************!*\ + !*** ./node_modules/math-floor/lib/index.js ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { - ab = new ArrayBuffer(buffer.length); - view = new Uint8Array(ab); - for (i = 0; i < buffer.length; i += 1) { - view[i] = buffer[i]; - } - return ab; -}; +"use strict"; +// EXPORTS // -nifti.Utils.isString = function (obj) { - return (typeof obj === "string" || obj instanceof String); -}; +module.exports = Math.floor; -nifti.Utils.formatNumber = function (num, shortFormat) { - var val = 0; +/***/ }), - if (nifti.Utils.isString(num)) { - val = Number(num); - } else { - val = num; - } +/***/ "./node_modules/nifti-reader-js/src/nifti.js": +/*!***************************************************!*\ + !*** ./node_modules/nifti-reader-js/src/nifti.js ***! + \***************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { - if (shortFormat) { - val = val.toPrecision(5); - } else { - val = val.toPrecision(7); - } +"use strict"; - return parseFloat(val); -}; +/*jslint browser: true, node: true */ +/*global require, module */ -// http://stackoverflow.com/questions/18638900/javascript-crc32 -nifti.Utils.makeCRCTable = function(){ - var c; - var crcTable = []; - for(var n =0; n < 256; n++){ - c = n; - for(var k =0; k < 8; k++){ - c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); - } - crcTable[n] = c; - } - return crcTable; -}; +/*** Imports ***/ +/** + * nifti + * @type {*|{}} + */ +var nifti = nifti || {}; +nifti.NIFTI1 = nifti.NIFTI1 || (( true) ? __webpack_require__(/*! ./nifti1.js */ "./node_modules/nifti-reader-js/src/nifti1.js") : undefined); +nifti.NIFTI2 = nifti.NIFTI2 || (( true) ? __webpack_require__(/*! ./nifti2.js */ "./node_modules/nifti-reader-js/src/nifti2.js") : undefined); +nifti.Utils = nifti.Utils || (( true) ? __webpack_require__(/*! ./utilities.js */ "./node_modules/nifti-reader-js/src/utilities.js") : undefined); +var pako = pako || (( true) ? __webpack_require__(/*! pako */ "./node_modules/pako/index.js") : undefined); -nifti.Utils.crc32 = function(dataView) { - var crcTable = nifti.Utils.crcTable || (nifti.Utils.crcTable = nifti.Utils.makeCRCTable()); - var crc = 0 ^ (-1); - for (var i = 0; i < dataView.byteLength; i++ ) { - crc = (crc >>> 8) ^ crcTable[(crc ^ dataView.getUint8(i)) & 0xFF]; - } - return (crc ^ (-1)) >>> 0; -}; +/*** Static Methods ***/ +/** + * Returns true if this data represents a NIFTI-1 header. + * @param {ArrayBuffer} data + * @returns {boolean} + */ +nifti.isNIFTI1 = function (data) { + var buf, mag1, mag2, mag3; + buf = new DataView(data); + mag1 = buf.getUint8(nifti.NIFTI1.MAGIC_NUMBER_LOCATION); + mag2 = buf.getUint8(nifti.NIFTI1.MAGIC_NUMBER_LOCATION + 1); + mag3 = buf.getUint8(nifti.NIFTI1.MAGIC_NUMBER_LOCATION + 2); -/*** Exports ***/ + return !!((mag1 === nifti.NIFTI1.MAGIC_NUMBER[0]) && (mag2 === nifti.NIFTI1.MAGIC_NUMBER[1]) && + (mag3 === nifti.NIFTI1.MAGIC_NUMBER[2])); +}; -var moduleType = typeof module; -if ((moduleType !== 'undefined') && module.exports) { - module.exports = nifti.Utils; -} +/** + * Returns true if this data represents a NIFTI-2 header. + * @param {ArrayBuffer} data + * @returns {boolean} + */ +nifti.isNIFTI2 = function (data) { + var buf, mag1, mag2, mag3; -/***/ }), + buf = new DataView(data); + mag1 = buf.getUint8(nifti.NIFTI2.MAGIC_NUMBER_LOCATION); + mag2 = buf.getUint8(nifti.NIFTI2.MAGIC_NUMBER_LOCATION + 1); + mag3 = buf.getUint8(nifti.NIFTI2.MAGIC_NUMBER_LOCATION + 2); -/***/ "./node_modules/node-libs-browser/mock/empty.js": -/*!******************************************************!*\ - !*** ./node_modules/node-libs-browser/mock/empty.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { + return !!((mag1 === nifti.NIFTI2.MAGIC_NUMBER[0]) && (mag2 === nifti.NIFTI2.MAGIC_NUMBER[1]) && + (mag3 === nifti.NIFTI2.MAGIC_NUMBER[2])); +}; -/***/ }), +/** + * Returns true if this data represents a NIFTI header. + * @param {ArrayBuffer} data + * @returns {boolean} + */ +nifti.isNIFTI = function (data) { + return (nifti.isNIFTI1(data) || nifti.isNIFTI2(data)); +}; -/***/ "./node_modules/node-libs-browser/node_modules/buffer/index.js": -/*!*********************************************************************!*\ - !*** ./node_modules/node-libs-browser/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 - * @license MIT - */ -/* eslint-disable no-proto */ +/** + * Returns true if this data is GZIP compressed. + * @param {ArrayBuffer} data + * @returns {boolean} + */ +nifti.isCompressed = function (data) { + var buf, magicCookie1, magicCookie2; + if (data) { + buf = new DataView(data); -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") + magicCookie1 = buf.getUint8(0); + magicCookie2 = buf.getUint8(1); -exports.Buffer = Buffer -exports.SlowBuffer = SlowBuffer -exports.INSPECT_MAX_BYTES = 50 + if (magicCookie1 === nifti.Utils.GUNZIP_MAGIC_COOKIE1) { + return true; + } -/** - * 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. + if (magicCookie2 === nifti.Utils.GUNZIP_MAGIC_COOKIE2) { + return true; + } + } - * 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() + return false; +}; -/* - * 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 -} +/** + * Returns decompressed data. + * @param {ArrayBuffer} data + * @returns {ArrayBuffer} + */ +nifti.decompress = function (data) { + return pako.inflate(data).buffer; +}; -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. + * Reads and returns the header object. + * @param {ArrayBuffer} data + * @returns {nifti.NIFTI1|nifti.NIFTI2|null} */ +nifti.readHeader = function (data) { + var header = null; -function Buffer (arg, encodingOrOffset, length) { - if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { - return new Buffer(arg, encodingOrOffset, length) - } + if (nifti.isCompressed(data)) { + data = nifti.decompress(data); + } - // 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' - ) + if (nifti.isNIFTI1(data)) { + header = new nifti.NIFTI1(); + } else if (nifti.isNIFTI2(data)) { + header = new nifti.NIFTI2(); } - return allocUnsafe(this, arg) - } - return from(this, arg, encodingOrOffset, length) -} -Buffer.poolSize = 8192 // not used by this implementation + if (header) { + header.readHeader(data); + } else { + console.error("That file does not appear to be NIFTI!"); + } -// TODO: Legacy, not needed anymore. Remove in next major version. -Buffer._augment = function (arr) { - arr.__proto__ = Buffer.prototype - return arr -} + return header; +}; -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) - } +/** + * Returns true if this header contains an extension. + * @param {nifti.NIFTI1|nifti.NIFTI2} header + * @returns {boolean} + */ +nifti.hasExtension = function (header) { + return (header.extensionFlag[0] != 0); +}; + - 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) -} + * Returns the image data. + * @param {nifti.NIFTI1|nifti.NIFTI2} header + * @param {ArrayBuffer} data + * @returns {ArrayBuffer} + */ +nifti.readImage = function (header, data) { + var imageOffset = header.vox_offset, + timeDim = 1, + statDim = 1; -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 - }) - } -} + if (header.dims[4]) { + timeDim = header.dims[4]; + } -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') - } -} + if (header.dims[5]) { + statDim = header.dims[5]; + } -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) -} + var imageSize = header.dims[1] * header.dims[2] * header.dims[3] * timeDim * statDim * (header.numBitsPerVoxel / 8); + return data.slice(imageOffset, imageOffset + imageSize); +}; -/** - * 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. + * Returns the extension data (including extension header). + * @param {nifti.NIFTI1|nifti.NIFTI2} header + * @param {ArrayBuffer} data + * @returns {ArrayBuffer} */ -Buffer.allocUnsafeSlow = function (size) { - return allocUnsafe(null, size) -} +nifti.readExtension = function (header, data) { + var loc = header.getExtensionLocation(), + size = header.extensionSize; -function fromString (that, string, encoding) { - if (typeof encoding !== 'string' || encoding === '') { - encoding = 'utf8' - } + return data.slice(loc, loc + size); +}; - 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) +/** + * Returns the extension data. + * @param {nifti.NIFTI1|nifti.NIFTI2} header + * @param {ArrayBuffer} data + * @returns {ArrayBuffer} + */ +nifti.readExtensionData = function (header, data) { + var loc = header.getExtensionLocation(), + size = header.extensionSize; - 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 data.slice(loc + 8, loc + size - 8); +}; - 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 +/*** Exports ***/ + +var moduleType = typeof module; +if ((moduleType !== 'undefined') && module.exports) { + module.exports = nifti; } -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') - } +/***/ "./node_modules/nifti-reader-js/src/nifti1.js": +/*!****************************************************!*\ + !*** ./node_modules/nifti-reader-js/src/nifti1.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { - 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) - } +"use strict"; - 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 -} +/*jslint browser: true, node: true */ +/*global */ -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 - } +/*** Imports ***/ - 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) - } +var nifti = nifti || {}; +nifti.Utils = nifti.Utils || (( true) ? __webpack_require__(/*! ./utilities.js */ "./node_modules/nifti-reader-js/src/utilities.js") : undefined); - 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 -} +/*** Constructor ***/ -function SlowBuffer (length) { - if (+length != length) { // eslint-disable-line eqeqeq - length = 0 - } - return Buffer.alloc(+length) -} +/** + * The NIFTI1 constructor. + * @constructor + * @property {boolean} littleEndian + * @property {number} dim_info + * @property {number[]} dims - image dimensions + * @property {number} intent_p1 + * @property {number} intent_p2 + * @property {number} intent_p3 + * @property {number} intent_code + * @property {number} datatypeCode + * @property {number} numBitsPerVoxel + * @property {number} slice_start + * @property {number} slice_end + * @property {number} slice_code + * @property {number[]} pixDims - voxel dimensions + * @property {number} vox_offset + * @property {number} scl_slope + * @property {number} scl_inter + * @property {number} xyzt_units + * @property {number} cal_max + * @property {number} cal_min + * @property {number} slice_duration + * @property {number} toffset + * @property {string} description + * @property {string} aux_file + * @property {string} intent_name + * @property {number} qform_code + * @property {number} sform_code + * @property {number} quatern_b + * @property {number} quatern_c + * @property {number} quatern_d + * @property {number} quatern_x + * @property {number} quatern_y + * @property {number} quatern_z + * @property {Array.>} affine + * @property {string} magic + * @property {boolean} isHDR - if hdr/img format + * @property {number[]} extensionFlag + * @property {number} extensionSize + * @property {number} extensionCode + * @type {Function} + */ +nifti.NIFTI1 = nifti.NIFTI1 || function () { + this.littleEndian = false; + this.dim_info = 0; + this.dims = []; + this.intent_p1 = 0; + this.intent_p2 = 0; + this.intent_p3 = 0; + this.intent_code = 0; + this.datatypeCode = 0; + this.numBitsPerVoxel = 0; + this.slice_start = 0; + this.slice_end = 0; + this.slice_code = 0; + this.pixDims = []; + this.vox_offset = 0; + this.scl_slope = 1; + this.scl_inter = 0; + this.xyzt_units = 0; + this.cal_max = 0; + this.cal_min = 0; + this.slice_duration = 0; + this.toffset = 0; + this.description = ""; + this.aux_file = ""; + this.intent_name = ""; + this.qform_code = 0; + this.sform_code = 0; + this.quatern_b = 0; + this.quatern_c = 0; + this.quatern_d = 0; + this.qoffset_x = 0; + this.qoffset_y = 0; + this.qoffset_z = 0; + this.affine = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]; + this.magic = 0; + this.isHDR = false; + this.extensionFlag = [0, 0, 0, 0]; + this.extensionSize = 0; + this.extensionCode = 0; +}; -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 +/*** Static Pseudo-constants ***/ - var x = a.length - var y = b.length +// datatype codes +nifti.NIFTI1.TYPE_NONE = 0; +nifti.NIFTI1.TYPE_BINARY = 1; +nifti.NIFTI1.TYPE_UINT8 = 2; +nifti.NIFTI1.TYPE_INT16 = 4; +nifti.NIFTI1.TYPE_INT32 = 8; +nifti.NIFTI1.TYPE_FLOAT32 = 16; +nifti.NIFTI1.TYPE_COMPLEX64 = 32; +nifti.NIFTI1.TYPE_FLOAT64 = 64; +nifti.NIFTI1.TYPE_RGB24 = 128; +nifti.NIFTI1.TYPE_INT8 = 256; +nifti.NIFTI1.TYPE_UINT16 = 512; +nifti.NIFTI1.TYPE_UINT32 = 768; +nifti.NIFTI1.TYPE_INT64 = 1024; +nifti.NIFTI1.TYPE_UINT64 = 1280; +nifti.NIFTI1.TYPE_FLOAT128 = 1536; +nifti.NIFTI1.TYPE_COMPLEX128 = 1792; +nifti.NIFTI1.TYPE_COMPLEX256 = 2048; - for (var i = 0, len = Math.min(x, y); i < len; ++i) { - if (a[i] !== b[i]) { - x = a[i] - y = b[i] - break - } - } +// transform codes +nifti.NIFTI1.XFORM_UNKNOWN = 0; +nifti.NIFTI1.XFORM_SCANNER_ANAT = 1; +nifti.NIFTI1.XFORM_ALIGNED_ANAT = 2; +nifti.NIFTI1.XFORM_TALAIRACH = 3; +nifti.NIFTI1.XFORM_MNI_152 = 4; - if (x < y) return -1 - if (y < x) return 1 - return 0 -} +// unit codes +nifti.NIFTI1.SPATIAL_UNITS_MASK = 0x07; +nifti.NIFTI1.TEMPORAL_UNITS_MASK = 0x38; +nifti.NIFTI1.UNITS_UNKNOWN = 0; +nifti.NIFTI1.UNITS_METER = 1; +nifti.NIFTI1.UNITS_MM = 2; +nifti.NIFTI1.UNITS_MICRON = 3; +nifti.NIFTI1.UNITS_SEC = 8; +nifti.NIFTI1.UNITS_MSEC = 16; +nifti.NIFTI1.UNITS_USEC = 24; +nifti.NIFTI1.UNITS_HZ = 32; +nifti.NIFTI1.UNITS_PPM = 40; +nifti.NIFTI1.UNITS_RADS = 48; -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 - } -} +// nifti1 codes +nifti.NIFTI1.MAGIC_COOKIE = 348; +nifti.NIFTI1.MAGIC_NUMBER_LOCATION = 344; +nifti.NIFTI1.MAGIC_NUMBER = [0x6E, 0x2B, 0x31]; // n+1 (.nii) +nifti.NIFTI1.MAGIC_NUMBER2 = [0x6E, 0x69, 0x31]; // ni1 (.hdr/.img) +nifti.NIFTI1.EXTENSION_HEADER_SIZE = 8; -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) - } +/*** Prototype Methods ***/ - var i - if (length === undefined) { - length = 0 - for (i = 0; i < list.length; ++i) { - length += list[i].length - } - } +/** + * Reads the header data. + * @param {ArrayBuffer} data + */ +nifti.NIFTI1.prototype.readHeader = function (data) { + var rawData = new DataView(data), + magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian), + ctr, + ctrOut, + ctrIn, + index; - 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') + if (magicCookieVal !== nifti.NIFTI1.MAGIC_COOKIE) { // try as little endian + this.littleEndian = true; + magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian); } - 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 - } + if (magicCookieVal !== nifti.NIFTI1.MAGIC_COOKIE) { + throw new Error("This does not appear to be a NIFTI file!"); + } - var len = string.length - if (len === 0) return 0 + this.dim_info = nifti.Utils.getByteAt(rawData, 39); - // 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 + for (ctr = 0; ctr < 8; ctr += 1) { + index = 40 + (ctr * 2); + this.dims[ctr] = nifti.Utils.getShortAt(rawData, index, this.littleEndian); } - } -} -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.intent_p1 = nifti.Utils.getFloatAt(rawData, 56, this.littleEndian); + this.intent_p2 = nifti.Utils.getFloatAt(rawData, 60, this.littleEndian); + this.intent_p3 = nifti.Utils.getFloatAt(rawData, 64, this.littleEndian); + this.intent_code = nifti.Utils.getShortAt(rawData, 68, this.littleEndian); - // 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 '' - } + this.datatypeCode = nifti.Utils.getShortAt(rawData, 70, this.littleEndian); + this.numBitsPerVoxel = nifti.Utils.getShortAt(rawData, 72, this.littleEndian); - if (end === undefined || end > this.length) { - end = this.length - } + this.slice_start = nifti.Utils.getShortAt(rawData, 74, this.littleEndian); - if (end <= 0) { - return '' - } + for (ctr = 0; ctr < 8; ctr += 1) { + index = 76 + (ctr * 4); + this.pixDims[ctr] = nifti.Utils.getFloatAt(rawData, index, this.littleEndian); + } - // Force coersion to uint32. This will also coerce falsey/NaN values to 0. - end >>>= 0 - start >>>= 0 + this.vox_offset = nifti.Utils.getFloatAt(rawData, 108, this.littleEndian); - if (end <= start) { - return '' - } + this.scl_slope = nifti.Utils.getFloatAt(rawData, 112, this.littleEndian); + this.scl_inter = nifti.Utils.getFloatAt(rawData, 116, this.littleEndian); - if (!encoding) encoding = 'utf8' + this.slice_end = nifti.Utils.getShortAt(rawData, 120, this.littleEndian); + this.slice_code = nifti.Utils.getByteAt(rawData, 122); - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end) + this.xyzt_units = nifti.Utils.getByteAt(rawData, 123); - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end) + this.cal_max = nifti.Utils.getFloatAt(rawData, 124, this.littleEndian); + this.cal_min = nifti.Utils.getFloatAt(rawData, 128, this.littleEndian); - case 'ascii': - return asciiSlice(this, start, end) + this.slice_duration = nifti.Utils.getFloatAt(rawData, 132, this.littleEndian); + this.toffset = nifti.Utils.getFloatAt(rawData, 136, this.littleEndian); - case 'latin1': - case 'binary': - return latin1Slice(this, start, end) + this.description = nifti.Utils.getStringAt(rawData, 148, 228); + this.aux_file = nifti.Utils.getStringAt(rawData, 228, 252); - case 'base64': - return base64Slice(this, start, end) + this.qform_code = nifti.Utils.getShortAt(rawData, 252, this.littleEndian); + this.sform_code = nifti.Utils.getShortAt(rawData, 254, this.littleEndian); - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end) + this.quatern_b = nifti.Utils.getFloatAt(rawData, 256, this.littleEndian); + this.quatern_c = nifti.Utils.getFloatAt(rawData, 260, this.littleEndian); + this.quatern_d = nifti.Utils.getFloatAt(rawData, 264, this.littleEndian); + this.qoffset_x = nifti.Utils.getFloatAt(rawData, 268, this.littleEndian); + this.qoffset_y = nifti.Utils.getFloatAt(rawData, 272, this.littleEndian); + this.qoffset_z = nifti.Utils.getFloatAt(rawData, 276, this.littleEndian); - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = (encoding + '').toLowerCase() - loweredCase = true + for (ctrOut = 0; ctrOut < 3; ctrOut += 1) { + for (ctrIn = 0; ctrIn < 4; ctrIn += 1) { + index = 280 + (((ctrOut * 4) + ctrIn) * 4); + this.affine[ctrOut][ctrIn] = nifti.Utils.getFloatAt(rawData, index, this.littleEndian); + } } - } -} -// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect -// Buffer instances. -Buffer.prototype._isBuffer = true + this.affine[3][0] = 0; + this.affine[3][1] = 0; + this.affine[3][2] = 0; + this.affine[3][3] = 1; -function swap (b, n, m) { - var i = b[n] - b[n] = b[m] - b[m] = i -} + this.intent_name = nifti.Utils.getStringAt(rawData, 328, 344); + this.magic = nifti.Utils.getStringAt(rawData, 344, 348); -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 -} + this.isHDR = (this.magic === nifti.NIFTI1.MAGIC_NUMBER2); -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 -} + if (rawData.byteLength > nifti.NIFTI1.MAGIC_COOKIE) { + this.extensionFlag[0] = nifti.Utils.getByteAt(rawData, 348); + this.extensionFlag[1] = nifti.Utils.getByteAt(rawData, 348 + 1); + this.extensionFlag[2] = nifti.Utils.getByteAt(rawData, 348 + 2); + this.extensionFlag[3] = nifti.Utils.getByteAt(rawData, 348 + 3); -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 -} + if (this.extensionFlag[0]) { + this.extensionSize = this.getExtensionSize(rawData); + this.extensionCode = this.getExtensionCode(rawData); + } + } +}; -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 -} +/** + * Returns a formatted string of header fields. + * @returns {string} + */ +nifti.NIFTI1.prototype.toFormattedString = function () { + var fmt = nifti.Utils.formatNumber, + string = ""; -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 '' -} + string += ("Dim Info = " + this.dim_info + "\n"); -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 + string += ("Image Dimensions (1-8): " + + this.dims[0] + ", " + + this.dims[1] + ", " + + this.dims[2] + ", " + + this.dims[3] + ", " + + this.dims[4] + ", " + + this.dims[5] + ", " + + this.dims[6] + ", " + + this.dims[7] + "\n"); - if (this === target) return 0 + string += ("Intent Parameters (1-3): " + + this.intent_p1 + ", " + + this.intent_p2 + ", " + + this.intent_p3) + "\n"; - var x = thisEnd - thisStart - var y = end - start - var len = Math.min(x, y) + string += ("Intent Code = " + this.intent_code + "\n"); + string += ("Datatype = " + this.datatypeCode + " (" + this.getDatatypeCodeString(this.datatypeCode) + ")\n"); + string += ("Bits Per Voxel = " + this.numBitsPerVoxel + "\n"); + string += ("Slice Start = " + this.slice_start + "\n"); + string += ("Voxel Dimensions (1-8): " + + fmt(this.pixDims[0]) + ", " + + fmt(this.pixDims[1]) + ", " + + fmt(this.pixDims[2]) + ", " + + fmt(this.pixDims[3]) + ", " + + fmt(this.pixDims[4]) + ", " + + fmt(this.pixDims[5]) + ", " + + fmt(this.pixDims[6]) + ", " + + fmt(this.pixDims[7]) + "\n"); - var thisCopy = this.slice(thisStart, thisEnd) - var targetCopy = target.slice(start, end) + string += ("Image Offset = " + this.vox_offset + "\n"); + string += ("Data Scale: Slope = " + fmt(this.scl_slope) + " Intercept = " + fmt(this.scl_inter) + "\n"); + string += ("Slice End = " + this.slice_end + "\n"); + string += ("Slice Code = " + this.slice_code + "\n"); + string += ("Units Code = " + this.xyzt_units + " (" + this.getUnitsCodeString(nifti.NIFTI1.SPATIAL_UNITS_MASK & this.xyzt_units) + ", " + this.getUnitsCodeString(nifti.NIFTI1.TEMPORAL_UNITS_MASK & this.xyzt_units) + ")\n"); + string += ("Display Range: Max = " + fmt(this.cal_max) + " Min = " + fmt(this.cal_min) + "\n"); + string += ("Slice Duration = " + this.slice_duration + "\n"); + string += ("Time Axis Shift = " + this.toffset + "\n"); + string += ("Description: \"" + this.description + "\"\n"); + string += ("Auxiliary File: \"" + this.aux_file + "\"\n"); + string += ("Q-Form Code = " + this.qform_code + " (" + this.getTransformCodeString(this.qform_code) + ")\n"); + string += ("S-Form Code = " + this.sform_code + " (" + this.getTransformCodeString(this.sform_code) + ")\n"); + string += ("Quaternion Parameters: " + + "b = " + fmt(this.quatern_b) + " " + + "c = " + fmt(this.quatern_c) + " " + + "d = " + fmt(this.quatern_d) + "\n"); - for (var i = 0; i < len; ++i) { - if (thisCopy[i] !== targetCopy[i]) { - x = thisCopy[i] - y = targetCopy[i] - break - } - } + string += ("Quaternion Offsets: " + + "x = " + this.qoffset_x + " " + + "y = " + this.qoffset_y + " " + + "z = " + this.qoffset_z + "\n"); - if (x < y) return -1 - if (y < x) return 1 - return 0 -} + string += ("S-Form Parameters X: " + + fmt(this.affine[0][0]) + ", " + + fmt(this.affine[0][1]) + ", " + + fmt(this.affine[0][2]) + ", " + + fmt(this.affine[0][3]) + "\n"); -// 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 + string += ("S-Form Parameters Y: " + + fmt(this.affine[1][0]) + ", " + + fmt(this.affine[1][1]) + ", " + + fmt(this.affine[1][2]) + ", " + + fmt(this.affine[1][3]) + "\n"); - // 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) - } + string += ("S-Form Parameters Z: " + + fmt(this.affine[2][0]) + ", " + + fmt(this.affine[2][1]) + ", " + + fmt(this.affine[2][2]) + ", " + + fmt(this.affine[2][3]) + "\n"); - // 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 - } + string += ("Intent Name: \"" + this.intent_name + "\"\n"); - // Normalize val - if (typeof val === 'string') { - val = Buffer.from(val, encoding) - } + if (this.extensionFlag[0]) { + string += ("Extension: Size = " + this.extensionSize + " Code = " + this.extensionCode + "\n"); - // 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 + return string; +}; - 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] +/** + * Returns a human-readable string of datatype. + * @param {number} code + * @returns {string} + */ +nifti.NIFTI1.prototype.getDatatypeCodeString = function (code) { + if (code === nifti.NIFTI1.TYPE_UINT8) { + return "1-Byte Unsigned Integer"; + } else if (code === nifti.NIFTI1.TYPE_INT16) { + return "2-Byte Signed Integer"; + } else if (code === nifti.NIFTI1.TYPE_INT32) { + return "4-Byte Signed Integer"; + } else if (code === nifti.NIFTI1.TYPE_FLOAT32) { + return "4-Byte Float"; + } else if (code === nifti.NIFTI1.TYPE_FLOAT64) { + return "8-Byte Float"; + } else if (code === nifti.NIFTI1.TYPE_RGB24) { + return "RGB"; + } else if (code === nifti.NIFTI1.TYPE_INT8) { + return "1-Byte Signed Integer"; + } else if (code === nifti.NIFTI1.TYPE_UINT16) { + return "2-Byte Unsigned Integer"; + } else if (code === nifti.NIFTI1.TYPE_UINT32) { + return "4-Byte Unsigned Integer"; + } else if (code === nifti.NIFTI1.TYPE_INT64) { + return "8-Byte Signed Integer"; + } else if (code === nifti.NIFTI1.TYPE_UINT64) { + return "8-Byte Unsigned Integer"; } 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 "Unknown"; } - } - - 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 +/** + * Returns a human-readable string of transform type. + * @param {number} code + * @returns {string} + */ +nifti.NIFTI1.prototype.getTransformCodeString = function (code) { + if (code === nifti.NIFTI1.XFORM_SCANNER_ANAT) { + return "Scanner"; + } else if (code === nifti.NIFTI1.XFORM_ALIGNED_ANAT) { + return "Aligned"; + } else if (code === nifti.NIFTI1.XFORM_TALAIRACH) { + return "Talairach"; + } else if (code === nifti.NIFTI1.XFORM_MNI_152) { + return "MNI"; + } else { + return "Unknown"; } - } - - // 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' +/** + * Returns a human-readable string of spatial and temporal units. + * @param {number} code + * @returns {string} + */ +nifti.NIFTI1.prototype.getUnitsCodeString = function (code) { + if (code === nifti.NIFTI1.UNITS_METER) { + return "Meters"; + } else if (code === nifti.NIFTI1.UNITS_MM) { + return "Millimeters"; + } else if (code === nifti.NIFTI1.UNITS_MICRON) { + return "Microns"; + } else if (code === nifti.NIFTI1.UNITS_SEC) { + return "Seconds"; + } else if (code === nifti.NIFTI1.UNITS_MSEC) { + return "Milliseconds"; + } else if (code === nifti.NIFTI1.UNITS_USEC) { + return "Microseconds"; + } else if (code === nifti.NIFTI1.UNITS_HZ) { + return "Hz"; + } else if (code === nifti.NIFTI1.UNITS_PPM) { + return "PPM"; + } else if (code === nifti.NIFTI1.UNITS_RADS) { + return "Rads"; } else { - encoding = length - length = undefined + return "Unknown"; } - // 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' +/** + * Returns the qform matrix. + * @returns {Array.>} + */ +nifti.NIFTI1.prototype.getQformMat = function () { + return this.convertNiftiQFormToNiftiSForm(this.quatern_b, this.quatern_c, this.quatern_d, this.qoffset_x, + this.qoffset_y, this.qoffset_z, this.pixDims[1], this.pixDims[2], this.pixDims[3], this.pixDims[0]); +}; - 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) +/** + * Converts qform to an affine. (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c) + * @param {number} qb + * @param {number} qc + * @param {number} qd + * @param {number} qx + * @param {number} qy + * @param {number} qz + * @param {number} dx + * @param {number} dy + * @param {number} dz + * @param {number} qfac + * @returns {Array.>} + */ +nifti.NIFTI1.prototype.convertNiftiQFormToNiftiSForm = function (qb, qc, qd, qx, qy, qz, dx, dy, dz, + qfac) { + var R = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], + a, + b = qb, + c = qc, + d = qd, + xd, + yd, + zd; - case 'latin1': - case 'binary': - return latin1Write(this, string, offset, length) + // last row is always [ 0 0 0 1 ] + R[3][0] = R[3][1] = R[3][2] = 0.0; + R[3][3] = 1.0; - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length) + // compute a parameter from b,c,d + a = 1.0 - (b * b + c * c + d * d); + if (a < 0.0000001) { /* special case */ - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length) + a = 1.0 / Math.sqrt(b * b + c * c + d * d); + b *= a; + c *= a; + d *= a; /* normalize (b,c,d) vector */ + a = 0.0; /* a = 0 ==> 180 degree rotation */ + } else { - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = ('' + encoding).toLowerCase() - loweredCase = true + a = Math.sqrt(a); /* angle = 2*arccos(a) */ } - } -} - -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 = [] + // load rotation matrix, including scaling factors for voxel sizes + xd = (dx > 0.0) ? dx : 1.0; /* make sure are positive */ + yd = (dy > 0.0) ? dy : 1.0; + zd = (dz > 0.0) ? dz : 1.0; - 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 (qfac < 0.0) { + zd = -zd; /* left handedness? */ + } - if (i + bytesPerSequence <= end) { - var secondByte, thirdByte, fourthByte, tempCodePoint + R[0][0] = (a * a + b * b - c * c - d * d) * xd; + R[0][1] = 2.0 * (b * c - a * d) * yd; + R[0][2] = 2.0 * (b * d + a * c) * zd; + R[1][0] = 2.0 * (b * c + a * d) * xd; + R[1][1] = (a * a + c * c - b * b - d * d) * yd; + R[1][2] = 2.0 * (c * d - a * b) * zd; + R[2][0] = 2.0 * (b * d - a * c) * xd; + R[2][1] = 2.0 * (c * d + a * b) * yd; + R[2][2] = (a * a + d * d - c * c - b * b) * zd; - 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] - } - } + // load offsets + R[0][3] = qx; + R[1][3] = qy; + R[2][3] = qz; - return this -} + return R; +}; -// 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 -} +/** + * Converts sform to an orientation string (e.g., XYZ+--). (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c) + * @param {Array.>} R + * @returns {string} + */ +nifti.NIFTI1.prototype.convertNiftiSFormToNEMA = function (R) { + var xi, xj, xk, yi, yj, yk, zi, zj, zk, val, detQ, detP, i, j, k, p, q, r, ibest, jbest, kbest, pbest, qbest, rbest, + M, vbest, Q, P, iChar, jChar, kChar, iSense, jSense, kSense; + k = 0; -function stringtrim (str) { - if (str.trim) return str.trim() - return str.replace(/^\s+|\s+$/g, '') -} + Q = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]; + P = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]; -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} + //if( icod == NULL || jcod == NULL || kcod == NULL ) return ; /* bad */ -function utf8ToBytes (string, units) { - units = units || Infinity - var codePoint - var length = string.length - var leadSurrogate = null - var bytes = [] + //*icod = *jcod = *kcod = 0 ; /* this.errorMessage returns, if sh*t happens */ - for (var i = 0; i < length; ++i) { - codePoint = string.charCodeAt(i) + /* load column vectors for each (i,j,k) direction from matrix */ - // 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 - } + /*-- i axis --*/ /*-- j axis --*/ /*-- k axis --*/ - // valid lead - leadSurrogate = codePoint + xi = R[0][0]; + xj = R[0][1]; + xk = R[0][2]; - continue - } + yi = R[1][0]; + yj = R[1][1]; + yk = R[1][2]; - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - leadSurrogate = codePoint - continue - } + zi = R[2][0]; + zj = R[2][1]; + zk = R[2][2]; - // 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) + /* normalize column vectors to get unit vectors along each ijk-axis */ + + /* normalize i axis */ + val = Math.sqrt(xi * xi + yi * yi + zi * zi); + if (val === 0.0) { /* stupid input */ + return null; } - leadSurrogate = null + xi /= val; + yi /= val; + zi /= val; - // 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 - ) + /* normalize j axis */ + val = Math.sqrt(xj * xj + yj * yj + zj * zj); + if (val === 0.0) { /* stupid input */ + return null; + } + + xj /= val; + yj /= val; + zj /= val; + + /* orthogonalize j axis to i axis, if needed */ + val = xi * xj + yi * yj + zi * zj; /* dot product between i and j */ + if (Math.abs(val) > 1.E-4) { + xj -= val * xi; + yj -= val * yi; + zj -= val * zi; + val = Math.sqrt(xj * xj + yj * yj + zj * zj); /* must renormalize */ + if (val === 0.0) { /* j was parallel to i? */ + return null; + } + xj /= val; + yj /= val; + zj /= val; + } + + /* normalize k axis; if it is zero, make it the cross product i x j */ + val = Math.sqrt(xk * xk + yk * yk + zk * zk); + if (val === 0.0) { + xk = yi * zj - zi * yj; + yk = zi * xj - zj * xi; + zk = xi * yj - yi * xj; } else { - throw new Error('Invalid code point') + xk /= val; + yk /= val; + zk /= val; } - } - return bytes -} + /* orthogonalize k to i */ + val = xi * xk + yi * yk + zi * zk; /* dot product between i and k */ + if (Math.abs(val) > 1.E-4) { + xk -= val * xi; + yk -= val * yi; + zk -= val * zi; + val = Math.sqrt(xk * xk + yk * yk + zk * zk); + if (val === 0.0) { /* bad */ + return null; + } + xk /= val; + yk /= val; + zk /= val; + } -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 -} + /* orthogonalize k to j */ + val = xj * xk + yj * yk + zj * zk; /* dot product between j and k */ + if (Math.abs(val) > 1.e-4) { + xk -= val * xj; + yk -= val * yj; + zk -= val * zj; + val = Math.sqrt(xk * xk + yk * yk + zk * zk); + if (val === 0.0) { /* bad */ + return null; + } + xk /= val; + yk /= val; + zk /= val; + } -function utf16leToBytes (str, units) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - if ((units -= 2) < 0) break + Q[0][0] = xi; + Q[0][1] = xj; + Q[0][2] = xk; + Q[1][0] = yi; + Q[1][1] = yj; + Q[1][2] = yk; + Q[2][0] = zi; + Q[2][1] = zj; + Q[2][2] = zk; - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } + /* at this point, Q is the rotation matrix from the (i,j,k) to (x,y,z) axes */ - return byteArray -} + detQ = this.nifti_mat33_determ(Q); + if (detQ === 0.0) { /* shouldn't happen unless user is a DUFIS */ + return null; + } -function base64ToBytes (str) { - return base64.toByteArray(base64clean(str)) -} + /* Build and test all possible +1/-1 coordinate permutation matrices P; + then find the P such that the rotation matrix M=PQ is closest to the + identity, in the sense of M having the smallest total rotation angle. */ -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 -} + /* Despite the formidable looking 6 nested loops, there are + only 3*3*3*2*2*2 = 216 passes, which will run very quickly. */ -function isnan (val) { - return val !== val // eslint-disable-line no-self-compare -} + vbest = -666.0; + ibest = pbest = qbest = rbest = 1; + jbest = 2; + kbest = 3; + + for (i = 1; i <= 3; i += 1) { /* i = column number to use for row #1 */ + for (j = 1; j <= 3; j += 1) { /* j = column number to use for row #2 */ + if (i !== j) { + for (k = 1; k <= 3; k += 1) { /* k = column number to use for row #3 */ + if (!(i === k || j === k)) { + P[0][0] = P[0][1] = P[0][2] = P[1][0] = P[1][1] = P[1][2] = P[2][0] = P[2][1] = P[2][2] = 0.0; + for (p = -1; p <= 1; p += 2) { /* p,q,r are -1 or +1 */ + for (q = -1; q <= 1; q += 2) { /* and go into rows #1,2,3 */ + for (r = -1; r <= 1; r += 2) { + P[0][i - 1] = p; + P[1][j - 1] = q; + P[2][k - 1] = r; + detP = this.nifti_mat33_determ(P); /* sign of permutation */ + if ((detP * detQ) > 0.0) { + M = this.nifti_mat33_mul(P, Q); -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) + /* angle of M rotation = 2.0*acos(0.5*sqrt(1.0+trace(M))) */ + /* we want largest trace(M) == smallest angle == M nearest to I */ -/***/ }), + val = M[0][0] + M[1][1] + M[2][2]; /* trace */ + if (val > vbest) { + vbest = val; + ibest = i; + jbest = j; + kbest = k; + pbest = p; + qbest = q; + rbest = r; + } + } /* doesn't match sign of Q */ + } + } + } + } + } + } + } + } -/***/ "./node_modules/node-libs-browser/node_modules/events/events.js": -/*!**********************************************************************!*\ - !*** ./node_modules/node-libs-browser/node_modules/events/events.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { + /* At this point ibest is 1 or 2 or 3; pbest is -1 or +1; etc. -"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. + The matrix P that corresponds is the best permutation approximation + to Q-inverse; that is, P (approximately) takes (x,y,z) coordinates + to the (i,j,k) axes. + For example, the first row of P (which contains pbest in column ibest) + determines the way the i axis points relative to the anatomical + (x,y,z) axes. If ibest is 2, then the i axis is along the y axis, + which is direction P2A (if pbest > 0) or A2P (if pbest < 0). + So, using ibest and pbest, we can assign the output code for + the i axis. Mutatis mutandis for the j and k axes, of course. */ -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); - } + iChar = jChar = kChar = iSense = jSense = kSense = 0; -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); - }; -} + switch (ibest * pbest) { + case 1: /*i = NIFTI_L2R*/ + iChar = 'X'; + iSense = '+'; + break; + case -1: /*i = NIFTI_R2L*/ + iChar = 'X'; + iSense = '-'; + break; + case 2: /*i = NIFTI_P2A*/ + iChar = 'Y'; + iSense = '+'; + break; + case -2: /*i = NIFTI_A2P*/ + iChar = 'Y'; + iSense = '-'; + break; + case 3: /*i = NIFTI_I2S*/ + iChar = 'Z'; + iSense = '+'; + break; + case -3: /*i = NIFTI_S2I*/ + iChar = 'Z'; + iSense = '-'; + break; + } -function ProcessEmitWarning(warning) { - if (console && console.warn) console.warn(warning); -} + switch (jbest * qbest) { + case 1: /*j = NIFTI_L2R*/ + jChar = 'X'; + jSense = '+'; + break; + case -1: /*j = NIFTI_R2L*/ + jChar = 'X'; + jSense = '-'; + break; + case 2: /*j = NIFTI_P2A*/ + jChar = 'Y'; + jSense = '+'; + break; + case -2: /*j = NIFTI_A2P*/ + jChar = 'Y'; + jSense = '-'; + break; + case 3: /*j = NIFTI_I2S*/ + jChar = 'Z'; + jSense = '+'; + break; + case -3: /*j = NIFTI_S2I*/ + jChar = 'Z'; + jSense = '-'; + break; + } -var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { - return value !== value; -} + switch (kbest * rbest) { + case 1: /*k = NIFTI_L2R*/ + kChar = 'X'; + kSense = '+'; + break; + case -1: /*k = NIFTI_R2L*/ + kChar = 'X'; + kSense = '-'; + break; + case 2: /*k = NIFTI_P2A*/ + kChar = 'Y'; + kSense = '+'; + break; + case -2: /*k = NIFTI_A2P*/ + kChar = 'Y'; + kSense = '-'; + break; + case 3: /*k = NIFTI_I2S*/ + kChar = 'Z'; + kSense = '+'; + break; + case -3: /*k = NIFTI_S2I*/ + kChar = 'Z'; + kSense = '-'; + break; + } -function EventEmitter() { - EventEmitter.init.call(this); -} -module.exports = EventEmitter; + return (iChar + jChar + kChar + iSense + jSense + kSense); +}; -// 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; +nifti.NIFTI1.prototype.nifti_mat33_mul = function (A, B) { + var C = [[0, 0, 0], [0, 0, 0], [0, 0, 0]], + i, + j; -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 + '.'); + for (i = 0; i < 3; i += 1) { + for (j = 0; j < 3; j += 1) { + C[i][j] = A[i][0] * B[0][j] + A[i][1] * B[1][j] + A[i][2] * B[2][j]; + } } - defaultMaxListeners = arg; - } -}); -EventEmitter.init = function() { + return C; +}; - 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; +nifti.NIFTI1.prototype.nifti_mat33_determ = function (R) { + var r11, r12, r13, r21, r22, r23, r31, r32, r33; + /* INPUT MATRIX: */ + r11 = R[0][0]; + r12 = R[0][1]; + r13 = R[0][2]; + r21 = R[1][0]; + r22 = R[1][1]; + r23 = R[1][2]; + r31 = R[2][0]; + r32 = R[2][1]; + r33 = R[2][2]; + + return (r11 * r22 * r33 - r11 * r32 * r23 - r21 * r12 * r33 + r21 * r32 * r13 + r31 * r12 * r23 - r31 * r22 * r13); }; -function $getMaxListeners(that) { - if (that._maxListeners === undefined) - return EventEmitter.defaultMaxListeners; - return that._maxListeners; -} -EventEmitter.prototype.getMaxListeners = function getMaxListeners() { - return $getMaxListeners(this); +/** + * Returns the byte index of the extension. + * @returns {number} + */ +nifti.NIFTI1.prototype.getExtensionLocation = function() { + return nifti.NIFTI1.MAGIC_COOKIE + 4; }; -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; +/** + * Returns the extension size. + * @param {DataView} data + * @returns {number} + */ +nifti.NIFTI1.prototype.getExtensionSize = function(data) { + return nifti.Utils.getIntAt(data, this.getExtensionLocation(), this.littleEndian); +}; - // 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; +/** + * Returns the extension code. + * @param {DataView} data + * @returns {number} + */ +nifti.NIFTI1.prototype.getExtensionCode = function(data) { + return nifti.Utils.getIntAt(data, this.getExtensionLocation() + 4, this.littleEndian); +}; - 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; +/*** Exports ***/ - if (typeof listener !== 'function') { - throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); - } +var moduleType = typeof module; +if ((moduleType !== 'undefined') && module.exports) { + module.exports = nifti.NIFTI1; +} - 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); - } +/***/ "./node_modules/nifti-reader-js/src/nifti2.js": +/*!****************************************************!*\ + !*** ./node_modules/nifti-reader-js/src/nifti2.js ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { - // 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); - } - } +"use strict"; + +/*jslint browser: true, node: true */ +/*global */ - return target; -} -EventEmitter.prototype.addListener = function addListener(type, listener) { - return _addListener(this, type, listener, false); -}; -EventEmitter.prototype.on = EventEmitter.prototype.addListener; +/*** Imports ***/ -EventEmitter.prototype.prependListener = - function prependListener(type, listener) { - return _addListener(this, type, listener, true); - }; +var nifti = nifti || {}; +nifti.Utils = nifti.Utils || (( true) ? __webpack_require__(/*! ./utilities.js */ "./node_modules/nifti-reader-js/src/utilities.js") : undefined); +nifti.NIFTI1 = nifti.NIFTI1 || (( true) ? __webpack_require__(/*! ./nifti1.js */ "./node_modules/nifti-reader-js/src/nifti1.js") : undefined); -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; -} +/*** Constructor ***/ -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; +/** + * The NIFTI2 constructor. + * @constructor + * @property {boolean} littleEndian + * @property {number} dim_info + * @property {number[]} dims - image dimensions + * @property {number} intent_p1 + * @property {number} intent_p2 + * @property {number} intent_p3 + * @property {number} intent_code + * @property {number} datatypeCode + * @property {number} numBitsPerVoxel + * @property {number} slice_start + * @property {number} slice_end + * @property {number} slice_code + * @property {number[]} pixDims - voxel dimensions + * @property {number} vox_offset + * @property {number} scl_slope + * @property {number} scl_inter + * @property {number} xyzt_units + * @property {number} cal_max + * @property {number} cal_min + * @property {number} slice_duration + * @property {number} toffset + * @property {string} description + * @property {string} aux_file + * @property {string} intent_name + * @property {number} qform_code + * @property {number} sform_code + * @property {number} quatern_b + * @property {number} quatern_c + * @property {number} quatern_d + * @property {number} quatern_x + * @property {number} quatern_y + * @property {number} quatern_z + * @property {Array.>} affine + * @property {string} magic + * @property {number[]} extensionFlag + * @type {Function} + */ +nifti.NIFTI2 = nifti.NIFTI2 || function () { + this.littleEndian = false; + this.dim_info = 0; + this.dims = []; + this.intent_p1 = 0; + this.intent_p2 = 0; + this.intent_p3 = 0; + this.intent_code = 0; + this.datatypeCode = 0; + this.numBitsPerVoxel = 0; + this.slice_start = 0; + this.slice_end = 0; + this.slice_code = 0; + this.pixDims = []; + this.vox_offset = 0; + this.scl_slope = 1; + this.scl_inter = 0; + this.xyzt_units = 0; + this.cal_max = 0; + this.cal_min = 0; + this.slice_duration = 0; + this.toffset = 0; + this.description = ""; + this.aux_file = ""; + this.intent_name = ""; + this.qform_code = 0; + this.sform_code = 0; + this.quatern_b = 0; + this.quatern_c = 0; + this.quatern_d = 0; + this.qoffset_x = 0; + this.qoffset_y = 0; + this.qoffset_z = 0; + this.affine = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]; + this.magic = 0; + this.extensionFlag = [0, 0, 0, 0]; }; -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; +/*** Static Pseudo-constants ***/ - 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; +nifti.NIFTI2.MAGIC_COOKIE = 540; +nifti.NIFTI2.MAGIC_NUMBER_LOCATION = 4; +nifti.NIFTI2.MAGIC_NUMBER = [0x6E, 0x2B, 0x32, 0, 0x0D, 0x0A, 0x1A, 0x0A]; // n+2\0 - 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); - } +/*** Prototype Methods ***/ - if (list.length === 1) - events[type] = list[0]; +/** + * Reads the header data. + * @param {ArrayBuffer} data + */ +nifti.NIFTI2.prototype.readHeader = function (data) { + var rawData = new DataView(data), + magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian), + ctr, + ctrOut, + ctrIn, + index, + array; - if (events.removeListener !== undefined) - this.emit('removeListener', type, originalListener || listener); - } + if (magicCookieVal !== nifti.NIFTI2.MAGIC_COOKIE) { // try as little endian + this.littleEndian = true; + magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian); + } - return this; - }; + if (magicCookieVal !== nifti.NIFTI2.MAGIC_COOKIE) { + throw new Error("This does not appear to be a NIFTI file!"); + } -EventEmitter.prototype.off = EventEmitter.prototype.removeListener; + this.datatypeCode = nifti.Utils.getShortAt(rawData, 12, this.littleEndian); + this.numBitsPerVoxel = nifti.Utils.getShortAt(rawData, 14, this.littleEndian); -EventEmitter.prototype.removeAllListeners = - function removeAllListeners(type) { - var listeners, events, i; + for (ctr = 0; ctr < 8; ctr += 1) { + index = 16 + (ctr * 8); + this.dims[ctr] = nifti.Utils.getLongAt(rawData, index, this.littleEndian); + } - events = this._events; - if (events === undefined) - return this; + this.intent_p1 = nifti.Utils.getDoubleAt(rawData, 80, this.littleEndian); + this.intent_p2 = nifti.Utils.getDoubleAt(rawData, 88, this.littleEndian); + this.intent_p3 = nifti.Utils.getDoubleAt(rawData, 96, this.littleEndian); - // 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; - } + for (ctr = 0; ctr < 8; ctr += 1) { + index = 104 + (ctr * 8); + this.pixDims[ctr] = nifti.Utils.getDoubleAt(rawData, index, this.littleEndian); + } - // 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; - } + this.vox_offset = nifti.Utils.getLongAt(rawData, 168, this.littleEndian); - listeners = events[type]; + this.scl_slope = nifti.Utils.getDoubleAt(rawData, 176, this.littleEndian); + this.scl_inter = nifti.Utils.getDoubleAt(rawData, 184, this.littleEndian); - 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]); - } - } + this.cal_max = nifti.Utils.getDoubleAt(rawData, 192, this.littleEndian); + this.cal_min = nifti.Utils.getDoubleAt(rawData, 200, this.littleEndian); - return this; - }; + this.slice_duration = nifti.Utils.getDoubleAt(rawData, 208, this.littleEndian); -function _listeners(target, type, unwrap) { - var events = target._events; + this.toffset = nifti.Utils.getDoubleAt(rawData, 216, this.littleEndian); - if (events === undefined) - return []; + this.slice_start = nifti.Utils.getLongAt(rawData, 224, this.littleEndian); + this.slice_end = nifti.Utils.getLongAt(rawData, 232, this.littleEndian); - var evlistener = events[type]; - if (evlistener === undefined) - return []; + this.description = nifti.Utils.getStringAt(rawData, 240, 240 + 80); + this.aux_file = nifti.Utils.getStringAt(rawData, 320, 320 + 24); - if (typeof evlistener === 'function') - return unwrap ? [evlistener.listener || evlistener] : [evlistener]; + this.qform_code = nifti.Utils.getIntAt(rawData, 344, this.littleEndian); + this.sform_code = nifti.Utils.getIntAt(rawData, 348, this.littleEndian); - return unwrap ? - unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); -} + this.quatern_b = nifti.Utils.getDoubleAt(rawData, 352, this.littleEndian); + this.quatern_c = nifti.Utils.getDoubleAt(rawData, 360, this.littleEndian); + this.quatern_d = nifti.Utils.getDoubleAt(rawData, 368, this.littleEndian); + this.qoffset_x = nifti.Utils.getDoubleAt(rawData, 376, this.littleEndian); + this.qoffset_y = nifti.Utils.getDoubleAt(rawData, 384, this.littleEndian); + this.qoffset_z = nifti.Utils.getDoubleAt(rawData, 392, this.littleEndian); -EventEmitter.prototype.listeners = function listeners(type) { - return _listeners(this, type, true); -}; + for (ctrOut = 0; ctrOut < 3; ctrOut += 1) { + for (ctrIn = 0; ctrIn < 4; ctrIn += 1) { + index = 400 + (((ctrOut * 4) + ctrIn) * 8); + this.affine[ctrOut][ctrIn] = nifti.Utils.getDoubleAt(rawData, index, this.littleEndian); + } + } -EventEmitter.prototype.rawListeners = function rawListeners(type) { - return _listeners(this, type, false); -}; + this.affine[3][0] = 0; + this.affine[3][1] = 0; + this.affine[3][2] = 0; + this.affine[3][3] = 1; -EventEmitter.listenerCount = function(emitter, type) { - if (typeof emitter.listenerCount === 'function') { - return emitter.listenerCount(type); - } else { - return listenerCount.call(emitter, type); - } -}; + this.slice_code = nifti.Utils.getIntAt(rawData, 496, this.littleEndian); + this.xyzt_units = nifti.Utils.getIntAt(rawData, 500, this.littleEndian); + this.intent_code = nifti.Utils.getIntAt(rawData, 504, this.littleEndian); + this.intent_name = nifti.Utils.getStringAt(rawData, 508, 508 + 16); -EventEmitter.prototype.listenerCount = listenerCount; -function listenerCount(type) { - var events = this._events; + this.dim_info = nifti.Utils.getByteAt(rawData, 524); - if (events !== undefined) { - var evlistener = events[type]; + if (rawData.byteLength > nifti.NIFTI2.MAGIC_COOKIE) { + this.extensionFlag[0] = nifti.Utils.getByteAt(rawData, 540); + this.extensionFlag[1] = nifti.Utils.getByteAt(rawData, 540 + 1); + this.extensionFlag[2] = nifti.Utils.getByteAt(rawData, 540 + 2); + this.extensionFlag[3] = nifti.Utils.getByteAt(rawData, 540 + 3); - if (typeof evlistener === 'function') { - return 1; - } else if (evlistener !== undefined) { - return evlistener.length; + if (this.extensionFlag[0]) { + this.extensionSize = this.getExtensionSize(rawData); + this.extensionCode = this.getExtensionCode(rawData); + } } - } - - 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; -} +/** + * Returns a formatted string of header fields. + * @returns {string} + */ +nifti.NIFTI2.prototype.toFormattedString = function () { + var fmt = nifti.Utils.formatNumber, + string = ""; + string += ("Datatype = " + + this.datatypeCode + " (" + this.getDatatypeCodeString(this.datatypeCode) + ")\n"); + string += ("Bits Per Voxel = " + " = " + this.numBitsPerVoxel + "\n"); + string += ("Image Dimensions" + " (1-8): " + + this.dims[0] + ", " + + this.dims[1] + ", " + + this.dims[2] + ", " + + this.dims[3] + ", " + + this.dims[4] + ", " + + this.dims[5] + ", " + + this.dims[6] + ", " + + this.dims[7] + "\n"); -/***/ }), + string += ("Intent Parameters (1-3): " + + this.intent_p1 + ", " + + this.intent_p2 + ", " + + this.intent_p3) + "\n"; -/***/ "./node_modules/node-libs-browser/node_modules/inherits/inherits_browser.js": -/*!**********************************************************************************!*\ - !*** ./node_modules/node-libs-browser/node_modules/inherits/inherits_browser.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { + string += ("Voxel Dimensions (1-8): " + + fmt(this.pixDims[0]) + ", " + + fmt(this.pixDims[1]) + ", " + + fmt(this.pixDims[2]) + ", " + + fmt(this.pixDims[3]) + ", " + + fmt(this.pixDims[4]) + ", " + + fmt(this.pixDims[5]) + ", " + + fmt(this.pixDims[6]) + ", " + + fmt(this.pixDims[7]) + "\n"); -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 - } -} + string += ("Image Offset = " + this.vox_offset + "\n"); + string += ("Data Scale: Slope = " + fmt(this.scl_slope) + " Intercept = " + fmt(this.scl_inter) + "\n"); + string += ("Display Range: Max = " + fmt(this.cal_max) + " Min = " + fmt(this.cal_min) + "\n"); + string += ("Slice Duration = " + this.slice_duration + "\n"); + string += ("Time Axis Shift = " + this.toffset + "\n"); + string += ("Slice Start = " + this.slice_start + "\n"); + string += ("Slice End = " + this.slice_end + "\n"); + string += ("Description: \"" + this.description + "\"\n"); + string += ("Auxiliary File: \"" + this.aux_file + "\"\n"); + string += ("Q-Form Code = " + this.qform_code + " (" + this.getTransformCodeString(this.qform_code) + ")\n"); + string += ("S-Form Code = " + this.sform_code + " (" + this.getTransformCodeString(this.sform_code) + ")\n"); + string += ("Quaternion Parameters: " + + "b = " + fmt(this.quatern_b) + " " + + "c = " + fmt(this.quatern_c) + " " + + "d = " + fmt(this.quatern_d) + "\n"); + string += ("Quaternion Offsets: " + + "x = " + this.qoffset_x + " " + + "y = " + this.qoffset_y + " " + + "z = " + this.qoffset_z + "\n"); -/***/ }), + string += ("S-Form Parameters X: " + + fmt(this.affine[0][0]) + ", " + + fmt(this.affine[0][1]) + ", " + + fmt(this.affine[0][2]) + ", " + + fmt(this.affine[0][3]) + "\n"); -/***/ "./node_modules/node-libs-browser/node_modules/util/support/isBufferBrowser.js": -/*!*************************************************************************************!*\ - !*** ./node_modules/node-libs-browser/node_modules/util/support/isBufferBrowser.js ***! - \*************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { + string += ("S-Form Parameters Y: " + + fmt(this.affine[1][0]) + ", " + + fmt(this.affine[1][1]) + ", " + + fmt(this.affine[1][2]) + ", " + + fmt(this.affine[1][3]) + "\n"); -module.exports = function isBuffer(arg) { - return arg && typeof arg === 'object' - && typeof arg.copy === 'function' - && typeof arg.fill === 'function' - && typeof arg.readUInt8 === 'function'; -} + string += ("S-Form Parameters Z: " + + fmt(this.affine[2][0]) + ", " + + fmt(this.affine[2][1]) + ", " + + fmt(this.affine[2][2]) + ", " + + fmt(this.affine[2][3]) + "\n"); -/***/ }), + string += ("Slice Code = " + this.slice_code + "\n"); + string += ("Units Code = " + this.xyzt_units + " (" + this.getUnitsCodeString(nifti.NIFTI1.SPATIAL_UNITS_MASK & this.xyzt_units) + ", " + this.getUnitsCodeString(nifti.NIFTI1.TEMPORAL_UNITS_MASK & this.xyzt_units) + ")\n"); + string += ("Intent Code = " + this.intent_code + "\n"); + string += ("Intent Name: \"" + this.intent_name + "\"\n"); -/***/ "./node_modules/node-libs-browser/node_modules/util/util.js": -/*!******************************************************************!*\ - !*** ./node_modules/node-libs-browser/node_modules/util/util.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { + string += ("Dim Info = " + this.dim_info + "\n"); -/* WEBPACK VAR INJECTION */(function(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. + return string; +}; -var getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || - function getOwnPropertyDescriptors(obj) { - var keys = Object.keys(obj); - var descriptors = {}; - for (var i = 0; i < keys.length; i++) { - descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]); - } - return descriptors; - }; -var formatRegExp = /%[sdj%]/g; -exports.format = function(f) { - if (!isString(f)) { - var objects = []; - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - return objects.join(' '); - } - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function(x) { - if (x === '%%') return '%'; - if (i >= len) return x; - switch (x) { - case '%s': return String(args[i++]); - case '%d': return Number(args[i++]); - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - default: - return x; - } - }); - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - return str; +/** + * Returns the byte index of the extension. + * @returns {number} + */ +nifti.NIFTI2.prototype.getExtensionLocation = function() { + return nifti.NIFTI2.MAGIC_COOKIE + 4; }; -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - if (typeof process !== 'undefined' && process.noDeprecation === true) { - return fn; - } - // Allow for deprecating things in the process of starting up. - if (typeof process === 'undefined') { - return function() { - return exports.deprecate(fn, msg).apply(this, arguments); - }; - } +/** + * Returns the extension size. + * @param {DataView} data + * @returns {number} + */ +nifti.NIFTI2.prototype.getExtensionSize = nifti.NIFTI1.prototype.getExtensionSize; - var warned = false; - function deprecated() { - if (!warned) { - if (process.throwDeprecation) { - throw new Error(msg); - } else if (process.traceDeprecation) { - console.trace(msg); - } else { - console.error(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - return deprecated; -}; +/** + * Returns the extension code. + * @param {DataView} data + * @returns {number} + */ +nifti.NIFTI2.prototype.getExtensionCode = nifti.NIFTI1.prototype.getExtensionCode; -var debugs = {}; -var debugEnviron; -exports.debuglog = function(set) { - if (isUndefined(debugEnviron)) - debugEnviron = process.env.NODE_DEBUG || ''; - set = set.toUpperCase(); - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = process.pid; - debugs[set] = function() { - var msg = exports.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; -}; /** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. + * Returns a human-readable string of datatype. + * @param {number} code + * @returns {string} */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); - } - // set default options - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); -} -exports.inspect = inspect; +nifti.NIFTI2.prototype.getDatatypeCodeString = nifti.NIFTI1.prototype.getDatatypeCodeString; -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -inspect.colors = { - 'bold' : [1, 22], - 'italic' : [3, 23], - 'underline' : [4, 24], - 'inverse' : [7, 27], - 'white' : [37, 39], - 'grey' : [90, 39], - 'black' : [30, 39], - 'blue' : [34, 39], - 'cyan' : [36, 39], - 'green' : [32, 39], - 'magenta' : [35, 39], - 'red' : [31, 39], - 'yellow' : [33, 39] -}; -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' -}; +/** + * Returns a human-readable string of transform type. + * @param {number} code + * @returns {string} + */ +nifti.NIFTI2.prototype.getTransformCodeString = nifti.NIFTI1.prototype.getTransformCodeString; + + + +/** + * Returns a human-readable string of spatial and temporal units. + * @param {number} code + * @returns {string} + */ +nifti.NIFTI2.prototype.getUnitsCodeString = nifti.NIFTI1.prototype.getUnitsCodeString; + -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; +/** + * Returns the qform matrix. + * @returns {Array.>} + */ +nifti.NIFTI2.prototype.getQformMat = nifti.NIFTI1.prototype.getQformMat; - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + inspect.colors[style][1] + 'm'; - } else { - return str; - } -} -function stylizeNoColor(str, styleType) { - return str; -} +/** + * Converts qform to an affine. (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c) + * @param {number} qb + * @param {number} qc + * @param {number} qd + * @param {number} qx + * @param {number} qy + * @param {number} qz + * @param {number} dx + * @param {number} dy + * @param {number} dz + * @param {number} qfac + * @returns {Array.>} + */ +nifti.NIFTI2.prototype.convertNiftiQFormToNiftiSForm = nifti.NIFTI1.prototype.convertNiftiQFormToNiftiSForm; -function arrayToHash(array) { - var hash = {}; - array.forEach(function(val, idx) { - hash[val] = true; - }); +/** + * Converts sform to an orientation string (e.g., XYZ+--). (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c) + * @param {Array.>} R + * @returns {string} + */ +nifti.NIFTI2.prototype.convertNiftiSFormToNEMA = nifti.NIFTI1.prototype.convertNiftiSFormToNEMA; - return hash; -} -function formatValue(ctx, value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; - } +nifti.NIFTI2.prototype.nifti_mat33_mul = nifti.NIFTI1.prototype.nifti_mat33_mul; - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } +nifti.NIFTI2.prototype.nifti_mat33_determ = nifti.NIFTI1.prototype.nifti_mat33_determ; - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - // Some type of object without properties can be shortcutted. - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - if (isError(value)) { - return formatError(value); - } - } - var base = '', array = false, braces = ['{', '}']; +/*** Exports ***/ - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } +var moduleType = typeof module; +if ((moduleType !== 'undefined') && module.exports) { + module.exports = nifti.NIFTI2; +} - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } +/***/ }), - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } +/***/ "./node_modules/nifti-reader-js/src/utilities.js": +/*!*******************************************************!*\ + !*** ./node_modules/nifti-reader-js/src/utilities.js ***! + \*******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { - // Make error with message first say the error - if (isError(value)) { - base = ' ' + formatError(value); - } +"use strict"; - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } +/*jslint browser: true, node: true */ +/*global require, module */ - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } - ctx.seen.push(value); - var output; - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); - } else { - output = keys.map(function(key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); - } +/*** Imports ***/ - ctx.seen.pop(); +var nifti = nifti || {}; +nifti.Utils = nifti.Utils || {}; - return reduceToSingleString(output, base, braces); -} -function formatPrimitive(ctx, value) { - if (isUndefined(value)) - return ctx.stylize('undefined', 'undefined'); - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); - } - if (isNumber(value)) - return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) - return ctx.stylize('' + value, 'boolean'); - // For some reason typeof null is "object", so special case here. - if (isNull(value)) - return ctx.stylize('null', 'null'); -} +/*** Static Pseudo-constants ***/ +nifti.Utils.crcTable = null; +nifti.Utils.GUNZIP_MAGIC_COOKIE1 = 31; +nifti.Utils.GUNZIP_MAGIC_COOKIE2 = 139; -function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; -} -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - String(i), true)); - } else { - output.push(''); - } - } - keys.forEach(function(key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - key, true)); - } - }); - return output; -} +/*** Static methods ***/ +nifti.Utils.getStringAt = function (data, start, end) { + var str = "", ctr, ch; -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); - } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); - } - } - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); - } - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n').substr(2); - } else { - str = '\n' + str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n'); + for (ctr = start; ctr < end; ctr += 1) { + ch = data.getUint8(ctr); + + if (ch !== 0) { + str += String.fromCharCode(ch); } - } - } else { - str = ctx.stylize('[Circular]', 'special'); - } - } - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); } - } - return name + ': ' + str; -} + return str; +}; -function reduceToSingleString(output, base, braces) { - var numLinesEst = 0; - var length = output.reduce(function(prev, cur) { - numLinesEst++; - if (cur.indexOf('\n') >= 0) numLinesEst++; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); - if (length > 60) { - return braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - } +nifti.Utils.getByteAt = function (data, start) { + return data.getInt8(start); +}; - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; -} -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; +nifti.Utils.getShortAt = function (data, start, littleEndian) { + return data.getInt16(start, littleEndian); +}; -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; +nifti.Utils.getIntAt = function (data, start, littleEndian) { + return data.getInt32(start, littleEndian); +}; -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; +nifti.Utils.getFloatAt = function (data, start, littleEndian) { + return data.getFloat32(start, littleEndian); +}; -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; +nifti.Utils.getDoubleAt = function (data, start, littleEndian) { + return data.getFloat64(start, littleEndian); +}; -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; +nifti.Utils.getLongAt = function (data, start, littleEndian) { + var ctr, array = [], value = 0; -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; + for (ctr = 0; ctr < 8; ctr += 1) { + array[ctr] = nifti.Utils.getByteAt(data, start + ctr, littleEndian); + } -exports.isBuffer = __webpack_require__(/*! ./support/isBuffer */ "./node_modules/node-libs-browser/node_modules/util/support/isBufferBrowser.js"); + for (ctr = array.length - 1; ctr >= 0; ctr--) { + value = (value * 256) + array[ctr]; + } -function objectToString(o) { - return Object.prototype.toString.call(o); -} + return value; +}; -function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); -} +nifti.Utils.toArrayBuffer = function (buffer) { + var ab, view, i; -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; + ab = new ArrayBuffer(buffer.length); + view = new Uint8Array(ab); + for (i = 0; i < buffer.length; i += 1) { + view[i] = buffer[i]; + } + return ab; +}; -// 26 Feb 16:19:34 -function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), - pad(d.getMinutes()), - pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); -} -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +nifti.Utils.isString = function (obj) { + return (typeof obj === "string" || obj instanceof String); }; -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = __webpack_require__(/*! inherits */ "./node_modules/node-libs-browser/node_modules/inherits/inherits_browser.js"); +nifti.Utils.formatNumber = function (num, shortFormat) { + var val = 0; -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - if (!add || !isObject(add)) return origin; + if (nifti.Utils.isString(num)) { + val = Number(num); + } else { + val = num; + } - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin; -}; + if (shortFormat) { + val = val.toPrecision(5); + } else { + val = val.toPrecision(7); + } -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} + return parseFloat(val); +}; -var kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined; -exports.promisify = function promisify(original) { - if (typeof original !== 'function') - throw new TypeError('The "original" argument must be of type Function'); - if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) { - var fn = original[kCustomPromisifiedSymbol]; - if (typeof fn !== 'function') { - throw new TypeError('The "util.promisify.custom" argument must be of type Function'); +// http://stackoverflow.com/questions/18638900/javascript-crc32 +nifti.Utils.makeCRCTable = function(){ + var c; + var crcTable = []; + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + crcTable[n] = c; } - Object.defineProperty(fn, kCustomPromisifiedSymbol, { - value: fn, enumerable: false, writable: false, configurable: true - }); - return fn; - } + return crcTable; +}; - function fn() { - var promiseResolve, promiseReject; - var promise = new Promise(function (resolve, reject) { - promiseResolve = resolve; - promiseReject = reject; - }); - var args = []; - for (var i = 0; i < arguments.length; i++) { - args.push(arguments[i]); - } - args.push(function (err, value) { - if (err) { - promiseReject(err); - } else { - promiseResolve(value); - } - }); - try { - original.apply(this, args); - } catch (err) { - promiseReject(err); +nifti.Utils.crc32 = function(dataView) { + var crcTable = nifti.Utils.crcTable || (nifti.Utils.crcTable = nifti.Utils.makeCRCTable()); + var crc = 0 ^ (-1); + + for (var i = 0; i < dataView.byteLength; i++ ) { + crc = (crc >>> 8) ^ crcTable[(crc ^ dataView.getUint8(i)) & 0xFF]; } - return promise; - } + return (crc ^ (-1)) >>> 0; +}; - Object.setPrototypeOf(fn, Object.getPrototypeOf(original)); - if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, { - value: fn, enumerable: false, writable: false, configurable: true - }); - return Object.defineProperties( - fn, - getOwnPropertyDescriptors(original) - ); -} -exports.promisify.custom = kCustomPromisifiedSymbol +/*** Exports ***/ -function callbackifyOnRejected(reason, cb) { - // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M). - // Because `null` is a special error value in callbacks which means "no error - // occurred", we error-wrap so the callback consumer can distinguish between - // "the promise rejected with null" or "the promise fulfilled with undefined". - if (!reason) { - var newReason = new Error('Promise was rejected with a falsy value'); - newReason.reason = reason; - reason = newReason; - } - return cb(reason); +var moduleType = typeof module; +if ((moduleType !== 'undefined') && module.exports) { + module.exports = nifti.Utils; } -function callbackify(original) { - if (typeof original !== 'function') { - throw new TypeError('The "original" argument must be of type Function'); - } - // We DO NOT return the promise as it gives the user a false sense that - // the promise is actually somehow related to the callback's execution - // and that the callback throwing will reject the promise. - function callbackified() { - var args = []; - for (var i = 0; i < arguments.length; i++) { - args.push(arguments[i]); - } +/***/ }), - var maybeCb = args.pop(); - if (typeof maybeCb !== 'function') { - throw new TypeError('The last argument must be of type Function'); - } - var self = this; - var cb = function() { - return maybeCb.apply(self, arguments); - }; - // In true node style we process the callback on `nextTick` with all the - // implications (stack, `uncaughtException`, `async_hooks`) - original.apply(this, args) - .then(function(ret) { process.nextTick(cb, null, ret) }, - function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) }); - } +/***/ "./node_modules/node-libs-browser/mock/empty.js": +/*!******************************************************!*\ + !*** ./node_modules/node-libs-browser/mock/empty.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { - Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original)); - Object.defineProperties(callbackified, - getOwnPropertyDescriptors(original)); - return callbackified; -} -exports.callbackify = callbackify; -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../process/browser.js */ "./node_modules/process/browser.js"))) /***/ }), @@ -14209,108 +13315,6 @@ function serializeToTextBuffer(data) { } -/***/ }), - -/***/ "./node_modules/object-assign/index.js": -/*!*********************************************!*\ - !*** ./node_modules/object-assign/index.js ***! - \*********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - - -/* eslint-disable no-unused-vars */ -var getOwnPropertySymbols = Object.getOwnPropertySymbols; -var hasOwnProperty = Object.prototype.hasOwnProperty; -var propIsEnumerable = Object.prototype.propertyIsEnumerable; - -function toObject(val) { - if (val === null || val === undefined) { - throw new TypeError('Object.assign cannot be called with null or undefined'); - } - - return Object(val); -} - -function shouldUseNative() { - try { - if (!Object.assign) { - return false; - } - - // Detect buggy property enumeration order in older V8 versions. - - // https://bugs.chromium.org/p/v8/issues/detail?id=4118 - var test1 = new String('abc'); // eslint-disable-line no-new-wrappers - test1[5] = 'de'; - if (Object.getOwnPropertyNames(test1)[0] === '5') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test2 = {}; - for (var i = 0; i < 10; i++) { - test2['_' + String.fromCharCode(i)] = i; - } - var order2 = Object.getOwnPropertyNames(test2).map(function (n) { - return test2[n]; - }); - if (order2.join('') !== '0123456789') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test3 = {}; - 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { - test3[letter] = letter; - }); - if (Object.keys(Object.assign({}, test3)).join('') !== - 'abcdefghijklmnopqrst') { - return false; - } - - return true; - } catch (err) { - // We don't expect any of the above to throw, but better to be safe. - return false; - } -} - -module.exports = shouldUseNative() ? Object.assign : function (target, source) { - var from; - var to = toObject(target); - var symbols; - - for (var s = 1; s < arguments.length; s++) { - from = Object(arguments[s]); - - for (var key in from) { - if (hasOwnProperty.call(from, key)) { - to[key] = from[key]; - } - } - - if (getOwnPropertySymbols) { - symbols = getOwnPropertySymbols(from); - for (var i = 0; i < symbols.length; i++) { - if (propIsEnumerable.call(from, symbols[i])) { - to[symbols[i]] = from[symbols[i]]; - } - } - } - } - - return to; -}; - - /***/ }), /***/ "./node_modules/pako/index.js": @@ -21077,10 +20081,7 @@ module.exports = ZStream; /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { -/* WEBPACK VAR INJECTION */(function(process) {// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1, -// backported and transplited with Babel, with backwards-compat fixes - -// Copyright Joyent, Inc. and other Node contributors. +/* WEBPACK VAR INJECTION */(function(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 @@ -21131,6 +20132,14 @@ function normalizeArray(parts, allowAboveRoot) { return parts; } +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); +}; + // path.resolve([from ...], to) // posix version exports.resolve = function() { @@ -21246,120 +20255,37 @@ exports.relative = function(from, to) { exports.sep = '/'; exports.delimiter = ':'; -exports.dirname = function (path) { - if (typeof path !== 'string') path = path + ''; - if (path.length === 0) return '.'; - var code = path.charCodeAt(0); - var hasRoot = code === 47 /*/*/; - var end = -1; - var matchedSlash = true; - for (var i = path.length - 1; i >= 1; --i) { - code = path.charCodeAt(i); - if (code === 47 /*/*/) { - if (!matchedSlash) { - end = i; - break; - } - } else { - // We saw the first non-path separator - matchedSlash = false; - } - } +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; - if (end === -1) return hasRoot ? '/' : '.'; - if (hasRoot && end === 1) { - // return '//'; - // Backwards-compat fix: - return '/'; + if (!root && !dir) { + // No dirname whatsoever + return '.'; } - return path.slice(0, end); -}; - -function basename(path) { - if (typeof path !== 'string') path = path + ''; - - var start = 0; - var end = -1; - var matchedSlash = true; - var i; - for (i = path.length - 1; i >= 0; --i) { - if (path.charCodeAt(i) === 47 /*/*/) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - start = i + 1; - break; - } - } else if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // path component - matchedSlash = false; - end = i + 1; - } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); } - if (end === -1) return ''; - return path.slice(start, end); -} + return root + dir; +}; -// Uses a mixed approach for backwards-compatibility, as ext behavior changed -// in new Node.js versions, so only basename() above is backported here -exports.basename = function (path, ext) { - var f = basename(path); + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? if (ext && f.substr(-1 * ext.length) === ext) { f = f.substr(0, f.length - ext.length); } return f; }; -exports.extname = function (path) { - if (typeof path !== 'string') path = path + ''; - var startDot = -1; - var startPart = 0; - var end = -1; - var matchedSlash = true; - // Track the state of characters (if any) we see before our first dot and - // after any path separator we find - var preDotState = 0; - for (var i = path.length - 1; i >= 0; --i) { - var code = path.charCodeAt(i); - if (code === 47 /*/*/) { - // If we reached a path separator that was not part of a set of path - // separators at the end of the string, stop now - if (!matchedSlash) { - startPart = i + 1; - break; - } - continue; - } - if (end === -1) { - // We saw the first non-path separator, mark this as the end of our - // extension - matchedSlash = false; - end = i + 1; - } - if (code === 46 /*.*/) { - // If this is our first dot, mark it as the start of our extension - if (startDot === -1) - startDot = i; - else if (preDotState !== 1) - preDotState = 1; - } else if (startDot !== -1) { - // We saw a non-dot and non-path separator before our dot, so we should - // have a good chance at having a non-empty extension - preDotState = -1; - } - } - - if (startDot === -1 || end === -1 || - // We saw a non-dot character immediately before the dot - preDotState === 0 || - // The (right-most) trimmed path component is exactly '..' - preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { - return ''; - } - return path.slice(startDot, end); + +exports.extname = function(path) { + return splitPath(path)[3]; }; function filter (xs, f) { @@ -21583,10 +20509,10 @@ process.umask = function() { return 0; }; /*!*****************************************!*\ !*** ./node_modules/three/package.json ***! \*****************************************/ -/*! exports provided: _from, _id, _inBundle, _integrity, _location, _phantomChildren, _requested, _requiredBy, _resolved, _shasum, _spec, _where, author, bugs, bundleDependencies, deprecated, description, devDependencies, directories, eslintConfig, files, homepage, jsnext:main, jspm, keywords, license, main, module, name, repository, scripts, types, version, default */ +/*! exports provided: name, version, description, main, repository, jsnext:main, module, files, directories, eslintConfig, scripts, keywords, author, license, bugs, homepage, devDependencies, jspm, default */ /***/ (function(module) { -module.exports = JSON.parse("{\"_from\":\"three@latest\",\"_id\":\"three@0.106.2\",\"_inBundle\":false,\"_integrity\":\"sha512-4Tlx43uoxnIaZFW2Bzkd1rXsatvVHEWAZJy8LuE+s6Q8c66ogNnhfq1bHiBKPAnXP230LD11H/ScIZc2LZMviA==\",\"_location\":\"/three\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"tag\",\"registry\":true,\"raw\":\"three@latest\",\"name\":\"three\",\"escapedName\":\"three\",\"rawSpec\":\"latest\",\"saveSpec\":null,\"fetchSpec\":\"latest\"},\"_requiredBy\":[\"/\"],\"_resolved\":\"https://registry.npmjs.org/three/-/three-0.106.2.tgz\",\"_shasum\":\"6752d304c470e4df230944ecd45325e7bf79e1f8\",\"_spec\":\"three@latest\",\"_where\":\"D:\\\\Repos\\\\Github\\\\bass\\\\ami.js\",\"author\":{\"name\":\"mrdoob\"},\"bugs\":{\"url\":\"https://github.com/mrdoob/three.js/issues\"},\"bundleDependencies\":false,\"deprecated\":false,\"description\":\"JavaScript 3D library\",\"devDependencies\":{\"@typescript-eslint/eslint-plugin\":\"^1.11.0\",\"@typescript-eslint/parser\":\"^1.11.0\",\"concurrently\":\"^4.1.1\",\"eslint\":\"^6.0.1\",\"eslint-config-mdcs\":\"^4.2.3\",\"eslint-plugin-html\":\"^6.0.0\",\"failonlyreporter\":\"^1.0.0\",\"google-closure-compiler\":\"20190618.0.0\",\"http-server\":\"^0.11.1\",\"qunit\":\"^2.9.2\",\"rollup\":\"^1.16.2\",\"typescript\":\"^3.5.2\"},\"directories\":{\"doc\":\"docs\",\"example\":\"examples\",\"test\":\"test\"},\"eslintConfig\":{\"parser\":\"@typescript-eslint/parser\",\"extends\":\"mdcs\",\"plugins\":[\"html\",\"@typescript-eslint\"],\"rules\":{\"@typescript-eslint/no-unused-vars\":1,\"@typescript-eslint/indent\":[\"error\",\"tab\",{\"SwitchCase\":1}]}},\"files\":[\"build/three.js\",\"build/three.min.js\",\"build/three.module.js\",\"examples/js\",\"examples/jsm\",\"examples/fonts\",\"LICENSE\",\"package.json\",\"README.md\",\"src\"],\"homepage\":\"https://threejs.org/\",\"jsnext:main\":\"build/three.module.js\",\"jspm\":{\"files\":[\"package.json\",\"LICENSE\",\"README.md\",\"build/three.js\",\"build/three.min.js\",\"build/three.module.js\"],\"directories\":{}},\"keywords\":[\"three\",\"three.js\",\"3d\",\"webgl\"],\"license\":\"MIT\",\"main\":\"build/three.js\",\"module\":\"build/three.module.js\",\"name\":\"three\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/mrdoob/three.js.git\"},\"scripts\":{\"build\":\"rollup -c\",\"build-closure\":\"rollup -c && google-closure-compiler --warning_level=VERBOSE --jscomp_off=globalThis --jscomp_off=checkTypes --externs utils/build/externs.js --language_in=ECMASCRIPT5_STRICT --js build/three.js --js_output_file build/three.min.js\",\"build-examples\":\"rollup -c rollup-examples.config.js\",\"build-test\":\"rollup -c test/rollup.unit.config.js\",\"dev\":\"concurrently --names \\\"ROLLUP,HTTP\\\" -c \\\"bgBlue.bold,bgGreen.bold\\\" \\\"rollup -c -w -m inline\\\" \\\"http-server -c-1 -p 8080\\\"\",\"dev-test\":\"concurrently --names \\\"ROLLUP,ROLLUPTEST,HTTP\\\" -c \\\"bgBlue.bold,bgRed.bold,bgGreen.bold\\\" \\\"rollup -c -w -m inline\\\" \\\"rollup -c test/rollup.unit.config.js -w -m inline\\\" \\\"http-server -p 8080\\\"\",\"lint\":\"eslint src --ext js --ext ts\",\"start\":\"npm run dev\",\"test\":\"npm run build-test && qunit -r failonlyreporter test/unit/three.source.unit.js\",\"travis\":\"npm run lint && npm test\"},\"types\":\"src/Three.d.ts\",\"version\":\"0.106.2\"}"); +module.exports = {"name":"three","version":"0.99.0","description":"JavaScript 3D library","main":"build/three.js","repository":"mrdoob/three.js","jsnext:main":"build/three.module.js","module":"build/three.module.js","files":["package.json","LICENSE","README.md","build/three.js","build/three.min.js","build/three.module.js","src","examples/js","examples/fonts"],"directories":{"doc":"docs","example":"examples","test":"test"},"eslintConfig":{"extends":"mdcs","plugins":["html"]},"scripts":{"build":"rollup -c","build-test":"rollup -c test/rollup.unit.config.js","build-closure":"rollup -c && java -jar node_modules/google-closure-compiler-java/compiler.jar --warning_level=VERBOSE --jscomp_off=globalThis --jscomp_off=checkTypes --externs utils/build/externs.js --language_in=ECMASCRIPT5_STRICT --js build/three.js --js_output_file build/three.min.js","dev":"concurrently --names \"ROLLUP,HTTP\" -c \"bgBlue.bold,bgGreen.bold\" \"rollup -c -w -m inline\" \"http-server -c-1 -p 8080\"","dev-test":"concurrently --names \"ROLLUP,ROLLUPTEST,HTTP\" -c \"bgBlue.bold,bgRed.bold,bgGreen.bold\" \"rollup -c -w -m inline\" \"rollup -c test/rollup.unit.config.js -w -m inline\" \"http-server -p 8080\"","start":"npm run dev","lint":"eslint src","test":"npm run build-test && qunit test/unit/three.source.unit.js","travis":"npm run lint && npm test","editor":"electron ./editor/main.js"},"keywords":["three","three.js","3d","webgl"],"author":"mrdoob","license":"MIT","bugs":{"url":"https://github.com/mrdoob/three.js/issues"},"homepage":"https://threejs.org/","devDependencies":{"concurrently":"^4.0.1","electron":"^3.0.8","eslint":"^5.9.0","eslint-config-mdcs":"^4.2.3","eslint-plugin-html":"^5.0.0","google-closure-compiler":"20181028.0.1","http-server":"^0.11.1","qunit":"^2.8.0","rollup":"^0.67.1"},"jspm":{"files":["package.json","LICENSE","README.md","build/three.js","build/three.min.js","build/three.module.js"],"directories":{}}}; /***/ }), @@ -21742,7 +20668,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBADepthPacking", function() { return RGBADepthPacking; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TangentSpaceNormalMap", function() { return TangentSpaceNormalMap; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObjectSpaceNormalMap", function() { return ObjectSpaceNormalMap; }); -var REVISION = '106'; +var REVISION = '99'; var MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 }; var CullFaceNone = 0; var CullFaceBack = 1; @@ -21982,13 +20908,11 @@ Object.assign( Raycaster.prototype, { this.ray.origin.setFromMatrixPosition( camera.matrixWorld ); this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize(); - this._camera = camera; } else if ( ( camera && camera.isOrthographicCamera ) ) { this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ); - this._camera = camera; } else { @@ -22052,6 +20976,8 @@ Object.assign( Raycaster.prototype, { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Box3", function() { return Box3; }); /* harmony import */ var _Vector3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Vector3.js */ "./node_modules/three/src/math/Vector3.js"); +/* harmony import */ var _Sphere_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Sphere.js */ "./node_modules/three/src/math/Sphere.js"); + /** @@ -22576,8 +21502,8 @@ Object.assign( Box3.prototype, { if ( target === undefined ) { - console.error( 'THREE.Box3: .getBoundingSphere() target is now required' ); - //target = new Sphere(); // removed to avoid cyclic dependency + console.warn( 'THREE.Box3: .getBoundingSphere() target is now required' ); + target = new _Sphere_js__WEBPACK_IMPORTED_MODULE_1__["Sphere"](); } @@ -23370,23 +22296,13 @@ Object.assign( Matrix4.prototype, { }, - setPosition: function ( x, y, z ) { + setPosition: function ( v ) { var te = this.elements; - if ( x.isVector3 ) { - - te[ 12 ] = x.x; - te[ 13 ] = x.y; - te[ 14 ] = x.z; - - } else { - - te[ 12 ] = x; - te[ 13 ] = y; - te[ 14 ] = z; - - } + te[ 12 ] = v.x; + te[ 13 ] = v.y; + te[ 14 ] = v.z; return this; @@ -23611,27 +22527,27 @@ Object.assign( Matrix4.prototype, { var sx = scale.x, sy = scale.y, sz = scale.z; - te[ 0 ] = ( 1 - ( yy + zz ) ) * sx; - te[ 1 ] = ( xy + wz ) * sx; - te[ 2 ] = ( xz - wy ) * sx; - te[ 3 ] = 0; + te[ 0 ] = ( 1 - ( yy + zz ) ) * sx; + te[ 1 ] = ( xy + wz ) * sx; + te[ 2 ] = ( xz - wy ) * sx; + te[ 3 ] = 0; - te[ 4 ] = ( xy - wz ) * sy; - te[ 5 ] = ( 1 - ( xx + zz ) ) * sy; - te[ 6 ] = ( yz + wx ) * sy; - te[ 7 ] = 0; + te[ 4 ] = ( xy - wz ) * sy; + te[ 5 ] = ( 1 - ( xx + zz ) ) * sy; + te[ 6 ] = ( yz + wx ) * sy; + te[ 7 ] = 0; - te[ 8 ] = ( xz + wy ) * sz; - te[ 9 ] = ( yz - wx ) * sz; - te[ 10 ] = ( 1 - ( xx + yy ) ) * sz; - te[ 11 ] = 0; + te[ 8 ] = ( xz + wy ) * sz; + te[ 9 ] = ( yz - wx ) * sz; + te[ 10 ] = ( 1 - ( xx + yy ) ) * sz; + te[ 11 ] = 0; - te[ 12 ] = position.x; - te[ 13 ] = position.y; - te[ 14 ] = position.z; - te[ 15 ] = 1; + te[ 12 ] = position.x; + te[ 13 ] = position.y; + te[ 14 ] = position.z; + te[ 15 ] = 1; - return this; + return this; }, @@ -23812,6 +22728,7 @@ Object.assign( Matrix4.prototype, { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Quaternion", function() { return Quaternion; }); /* harmony import */ var _Math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Math.js */ "./node_modules/three/src/math/Math.js"); +/* harmony import */ var _Vector3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Vector3.js */ "./node_modules/three/src/math/Vector3.js"); /** * @author mikael emtinger / http://gomo.se/ * @author alteredq / http://alteredqualia.com/ @@ -23821,6 +22738,7 @@ __webpack_require__.r(__webpack_exports__); + function Quaternion( x, y, z, w ) { this._x = x || 0; @@ -23915,7 +22833,7 @@ Object.defineProperties( Quaternion.prototype, { set: function ( value ) { this._x = value; - this._onChangeCallback(); + this.onChangeCallback(); } @@ -23932,7 +22850,7 @@ Object.defineProperties( Quaternion.prototype, { set: function ( value ) { this._y = value; - this._onChangeCallback(); + this.onChangeCallback(); } @@ -23949,7 +22867,7 @@ Object.defineProperties( Quaternion.prototype, { set: function ( value ) { this._z = value; - this._onChangeCallback(); + this.onChangeCallback(); } @@ -23966,7 +22884,7 @@ Object.defineProperties( Quaternion.prototype, { set: function ( value ) { this._w = value; - this._onChangeCallback(); + this.onChangeCallback(); } @@ -23985,7 +22903,7 @@ Object.assign( Quaternion.prototype, { this._z = z; this._w = w; - this._onChangeCallback(); + this.onChangeCallback(); return this; @@ -24004,7 +22922,7 @@ Object.assign( Quaternion.prototype, { this._z = quaternion.z; this._w = quaternion.w; - this._onChangeCallback(); + this.onChangeCallback(); return this; @@ -24079,7 +22997,7 @@ Object.assign( Quaternion.prototype, { } - if ( update !== false ) this._onChangeCallback(); + if ( update !== false ) this.onChangeCallback(); return this; @@ -24098,7 +23016,7 @@ Object.assign( Quaternion.prototype, { this._z = axis.z * s; this._w = Math.cos( halfAngle ); - this._onChangeCallback(); + this.onChangeCallback(); return this; @@ -24157,54 +23075,57 @@ Object.assign( Quaternion.prototype, { } - this._onChangeCallback(); + this.onChangeCallback(); return this; }, - setFromUnitVectors: function ( vFrom, vTo ) { + setFromUnitVectors: function () { // assumes direction vectors vFrom and vTo are normalized + var v1 = new _Vector3_js__WEBPACK_IMPORTED_MODULE_1__["Vector3"](); + var r; + var EPS = 0.000001; - var r = vFrom.dot( vTo ) + 1; + return function setFromUnitVectors( vFrom, vTo ) { - if ( r < EPS ) { + if ( v1 === undefined ) v1 = new _Vector3_js__WEBPACK_IMPORTED_MODULE_1__["Vector3"](); - r = 0; + r = vFrom.dot( vTo ) + 1; - if ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) { + if ( r < EPS ) { - this._x = - vFrom.y; - this._y = vFrom.x; - this._z = 0; - this._w = r; + r = 0; - } else { + if ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) { - this._x = 0; - this._y = - vFrom.z; - this._z = vFrom.y; - this._w = r; + v1.set( - vFrom.y, vFrom.x, 0 ); - } + } else { - } else { + v1.set( 0, - vFrom.z, vFrom.y ); + + } + + } else { + + v1.crossVectors( vFrom, vTo ); - // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3 + } - this._x = vFrom.y * vTo.z - vFrom.z * vTo.y; - this._y = vFrom.z * vTo.x - vFrom.x * vTo.z; - this._z = vFrom.x * vTo.y - vFrom.y * vTo.x; + this._x = v1.x; + this._y = v1.y; + this._z = v1.z; this._w = r; - } + return this.normalize(); - return this.normalize(); + }; - }, + }(), angleTo: function ( q ) { @@ -24240,7 +23161,7 @@ Object.assign( Quaternion.prototype, { this._y *= - 1; this._z *= - 1; - this._onChangeCallback(); + this.onChangeCallback(); return this; @@ -24286,7 +23207,7 @@ Object.assign( Quaternion.prototype, { } - this._onChangeCallback(); + this.onChangeCallback(); return this; @@ -24323,7 +23244,7 @@ Object.assign( Quaternion.prototype, { this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; - this._onChangeCallback(); + this.onChangeCallback(); return this; @@ -24376,10 +23297,7 @@ Object.assign( Quaternion.prototype, { this._y = s * y + t * this._y; this._z = s * z + t * this._z; - this.normalize(); - this._onChangeCallback(); - - return this; + return this.normalize(); } @@ -24393,7 +23311,7 @@ Object.assign( Quaternion.prototype, { this._y = ( y * ratioA + this._y * ratioB ); this._z = ( z * ratioA + this._z * ratioB ); - this._onChangeCallback(); + this.onChangeCallback(); return this; @@ -24414,7 +23332,7 @@ Object.assign( Quaternion.prototype, { this._z = array[ offset + 2 ]; this._w = array[ offset + 3 ]; - this._onChangeCallback(); + this.onChangeCallback(); return this; @@ -24434,15 +23352,15 @@ Object.assign( Quaternion.prototype, { }, - _onChange: function ( callback ) { + onChange: function ( callback ) { - this._onChangeCallback = callback; + this.onChangeCallback = callback; return this; }, - _onChangeCallback: function () {} + onChangeCallback: function () {} } ); @@ -25011,6 +23929,202 @@ Object.assign( Ray.prototype, { +/***/ }), + +/***/ "./node_modules/three/src/math/Sphere.js": +/*!***********************************************!*\ + !*** ./node_modules/three/src/math/Sphere.js ***! + \***********************************************/ +/*! exports provided: Sphere */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Sphere", function() { return Sphere; }); +/* harmony import */ var _Box3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Box3.js */ "./node_modules/three/src/math/Box3.js"); +/* harmony import */ var _Vector3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Vector3.js */ "./node_modules/three/src/math/Vector3.js"); + + + +/** + * @author bhouston / http://clara.io + * @author mrdoob / http://mrdoob.com/ + */ + +function Sphere( center, radius ) { + + this.center = ( center !== undefined ) ? center : new _Vector3_js__WEBPACK_IMPORTED_MODULE_1__["Vector3"](); + this.radius = ( radius !== undefined ) ? radius : 0; + +} + +Object.assign( Sphere.prototype, { + + set: function ( center, radius ) { + + this.center.copy( center ); + this.radius = radius; + + return this; + + }, + + setFromPoints: function () { + + var box = new _Box3_js__WEBPACK_IMPORTED_MODULE_0__["Box3"](); + + return function setFromPoints( points, optionalCenter ) { + + var center = this.center; + + if ( optionalCenter !== undefined ) { + + center.copy( optionalCenter ); + + } else { + + box.setFromPoints( points ).getCenter( center ); + + } + + var maxRadiusSq = 0; + + for ( var i = 0, il = points.length; i < il; i ++ ) { + + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) ); + + } + + this.radius = Math.sqrt( maxRadiusSq ); + + return this; + + }; + + }(), + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( sphere ) { + + this.center.copy( sphere.center ); + this.radius = sphere.radius; + + return this; + + }, + + empty: function () { + + return ( this.radius <= 0 ); + + }, + + containsPoint: function ( point ) { + + return ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) ); + + }, + + distanceToPoint: function ( point ) { + + return ( point.distanceTo( this.center ) - this.radius ); + + }, + + intersectsSphere: function ( sphere ) { + + var radiusSum = this.radius + sphere.radius; + + return sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum ); + + }, + + intersectsBox: function ( box ) { + + return box.intersectsSphere( this ); + + }, + + intersectsPlane: function ( plane ) { + + return Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius; + + }, + + clampPoint: function ( point, target ) { + + var deltaLengthSq = this.center.distanceToSquared( point ); + + if ( target === undefined ) { + + console.warn( 'THREE.Sphere: .clampPoint() target is now required' ); + target = new _Vector3_js__WEBPACK_IMPORTED_MODULE_1__["Vector3"](); + + } + + target.copy( point ); + + if ( deltaLengthSq > ( this.radius * this.radius ) ) { + + target.sub( this.center ).normalize(); + target.multiplyScalar( this.radius ).add( this.center ); + + } + + return target; + + }, + + getBoundingBox: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Sphere: .getBoundingBox() target is now required' ); + target = new _Box3_js__WEBPACK_IMPORTED_MODULE_0__["Box3"](); + + } + + target.set( this.center, this.center ); + target.expandByScalar( this.radius ); + + return target; + + }, + + applyMatrix4: function ( matrix ) { + + this.center.applyMatrix4( matrix ); + this.radius = this.radius * matrix.getMaxScaleOnAxis(); + + return this; + + }, + + translate: function ( offset ) { + + this.center.add( offset ); + + return this; + + }, + + equals: function ( sphere ) { + + return sphere.center.equals( this.center ) && ( sphere.radius === this.radius ); + + } + +} ); + + + + + /***/ }), /***/ "./node_modules/three/src/math/Triangle.js": @@ -25151,23 +24265,6 @@ Object.assign( Triangle, { }; - }(), - - isFrontFacing: function () { - - var v0 = new _Vector3_js__WEBPACK_IMPORTED_MODULE_0__["Vector3"](); - var v1 = new _Vector3_js__WEBPACK_IMPORTED_MODULE_0__["Vector3"](); - - return function isFrontFacing( a, b, c, direction ) { - - v0.subVectors( c, b ); - v1.subVectors( a, b ); - - // strictly front facing - return ( v0.cross( v1 ).dot( direction ) < 0 ) ? true : false; - - }; - }() } ); @@ -25264,21 +24361,15 @@ Object.assign( Triangle.prototype, { }, - getUV: function ( point, uv1, uv2, uv3, target ) { - - return Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target ); - - }, - containsPoint: function ( point ) { return Triangle.containsPoint( point, this.a, this.b, this.c ); }, - isFrontFacing: function ( direction ) { + getUV: function ( point, uv1, uv2, uv3, result ) { - return Triangle.isFrontFacing( this.a, this.b, this.c, direction ); + return Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, result ); }, @@ -25690,14 +24781,21 @@ Object.assign( Vector2.prototype, { }, - clampScalar: function ( minVal, maxVal ) { + clampScalar: function () { - this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); - this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); + var min = new Vector2(); + var max = new Vector2(); - return this; + return function clampScalar( minVal, maxVal ) { - }, + min.set( minVal, minVal ); + max.set( maxVal, maxVal ); + + return this.clamp( min, max ); + + }; + + }(), clampLength: function ( min, max ) { @@ -25917,7 +25015,9 @@ Object.assign( Vector2.prototype, { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vector3", function() { return Vector3; }); /* harmony import */ var _Math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Math.js */ "./node_modules/three/src/math/Math.js"); -/* harmony import */ var _Quaternion_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Quaternion.js */ "./node_modules/three/src/math/Quaternion.js"); +/* harmony import */ var _Matrix4_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Matrix4.js */ "./node_modules/three/src/math/Matrix4.js"); +/* harmony import */ var _Quaternion_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Quaternion.js */ "./node_modules/three/src/math/Quaternion.js"); + @@ -26153,7 +25253,7 @@ Object.assign( Vector3.prototype, { applyEuler: function () { - var quaternion = new _Quaternion_js__WEBPACK_IMPORTED_MODULE_1__["Quaternion"](); + var quaternion = new _Quaternion_js__WEBPACK_IMPORTED_MODULE_2__["Quaternion"](); return function applyEuler( euler ) { @@ -26171,7 +25271,7 @@ Object.assign( Vector3.prototype, { applyAxisAngle: function () { - var quaternion = new _Quaternion_js__WEBPACK_IMPORTED_MODULE_1__["Quaternion"](); + var quaternion = new _Quaternion_js__WEBPACK_IMPORTED_MODULE_2__["Quaternion"](); return function applyAxisAngle( axis, angle ) { @@ -26237,11 +25337,17 @@ Object.assign( Vector3.prototype, { }, - unproject: function ( camera ) { + unproject: function () { - return this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld ); + var matrix = new _Matrix4_js__WEBPACK_IMPORTED_MODULE_1__["Matrix4"](); - }, + return function unproject( camera ) { + + return this.applyMatrix4( matrix.getInverse( camera.projectionMatrix ) ).applyMatrix4( camera.matrixWorld ); + + }; + + }(), transformDirection: function ( m ) { @@ -26307,15 +25413,21 @@ Object.assign( Vector3.prototype, { }, - clampScalar: function ( minVal, maxVal ) { + clampScalar: function () { - this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); - this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); - this.z = Math.max( minVal, Math.min( maxVal, this.z ) ); + var min = new Vector3(); + var max = new Vector3(); - return this; + return function clampScalar( minVal, maxVal ) { - }, + min.set( minVal, minVal, minVal ); + max.set( maxVal, maxVal, maxVal ); + + return this.clamp( min, max ); + + }; + + }(), clampLength: function ( min, max ) { @@ -26510,136 +25622,750 @@ Object.assign( Vector3.prototype, { distanceToSquared: function ( v ) { - var dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; + var dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; + + return dx * dx + dy * dy + dz * dz; + + }, + + manhattanDistanceTo: function ( v ) { + + return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z ); + + }, + + setFromSpherical: function ( s ) { + + return this.setFromSphericalCoords( s.radius, s.phi, s.theta ); + + }, + + setFromSphericalCoords: function ( radius, phi, theta ) { + + var sinPhiRadius = Math.sin( phi ) * radius; + + this.x = sinPhiRadius * Math.sin( theta ); + this.y = Math.cos( phi ) * radius; + this.z = sinPhiRadius * Math.cos( theta ); + + return this; + + }, + + setFromCylindrical: function ( c ) { + + return this.setFromCylindricalCoords( c.radius, c.theta, c.y ); + + }, + + setFromCylindricalCoords: function ( radius, theta, y ) { + + this.x = radius * Math.sin( theta ); + this.y = y; + this.z = radius * Math.cos( theta ); + + return this; + + }, + + setFromMatrixPosition: function ( m ) { + + var e = m.elements; + + this.x = e[ 12 ]; + this.y = e[ 13 ]; + this.z = e[ 14 ]; + + return this; + + }, + + setFromMatrixScale: function ( m ) { + + var sx = this.setFromMatrixColumn( m, 0 ).length(); + var sy = this.setFromMatrixColumn( m, 1 ).length(); + var sz = this.setFromMatrixColumn( m, 2 ).length(); + + this.x = sx; + this.y = sy; + this.z = sz; + + return this; + + }, + + setFromMatrixColumn: function ( m, index ) { + + return this.fromArray( m.elements, index * 4 ); + + }, + + equals: function ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + this.z = array[ offset + 2 ]; + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + array[ offset + 2 ] = this.z; + + return array; + + }, + + fromBufferAttribute: function ( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + this.z = attribute.getZ( index ); + + return this; + + } + +} ); + + + + + +/***/ }), + +/***/ "./node_modules/util/support/isBufferBrowser.js": +/*!******************************************************!*\ + !*** ./node_modules/util/support/isBufferBrowser.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} + +/***/ }), + +/***/ "./node_modules/util/util.js": +/*!***********************************!*\ + !*** ./node_modules/util/util.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* 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. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); - return dx * dx + dy * dy + dz * dz; + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } - }, + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } - manhattanDistanceTo: function ( v ) { + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } - return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z ); + var base = '', array = false, braces = ['{', '}']; - }, + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } - setFromSpherical: function ( s ) { + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } - return this.setFromSphericalCoords( s.radius, s.phi, s.theta ); + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } - }, + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } - setFromSphericalCoords: function ( radius, phi, theta ) { + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } - var sinPhiRadius = Math.sin( phi ) * radius; + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } - this.x = sinPhiRadius * Math.sin( theta ); - this.y = Math.cos( phi ) * radius; - this.z = sinPhiRadius * Math.cos( theta ); + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } - return this; + ctx.seen.push(value); - }, + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } - setFromCylindrical: function ( c ) { + ctx.seen.pop(); - return this.setFromCylindricalCoords( c.radius, c.theta, c.y ); + return reduceToSingleString(output, base, braces); +} - }, - setFromCylindricalCoords: function ( radius, theta, y ) { +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} - this.x = radius * Math.sin( theta ); - this.y = y; - this.z = radius * Math.cos( theta ); - return this; +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} - }, - setFromMatrixPosition: function ( m ) { +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} - var e = m.elements; - this.x = e[ 12 ]; - this.y = e[ 13 ]; - this.z = e[ 14 ]; +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } - return this; + return name + ': ' + str; +} - }, - setFromMatrixScale: function ( m ) { +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); - var sx = this.setFromMatrixColumn( m, 0 ).length(); - var sy = this.setFromMatrixColumn( m, 1 ).length(); - var sz = this.setFromMatrixColumn( m, 2 ).length(); + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } - this.x = sx; - this.y = sy; - this.z = sz; + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} - return this; - }, +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; - setFromMatrixColumn: function ( m, index ) { +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; - return this.fromArray( m.elements, index * 4 ); +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; - }, +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; - equals: function ( v ) { +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; - return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) ); +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; - }, +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; - fromArray: function ( array, offset ) { +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; - if ( offset === undefined ) offset = 0; +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; - this.x = array[ offset ]; - this.y = array[ offset + 1 ]; - this.z = array[ offset + 2 ]; +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; - return this; +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; - }, +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; - toArray: function ( array, offset ) { +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; - if ( array === undefined ) array = []; - if ( offset === undefined ) offset = 0; +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; - array[ offset ] = this.x; - array[ offset + 1 ] = this.y; - array[ offset + 2 ] = this.z; +exports.isBuffer = __webpack_require__(/*! ./support/isBuffer */ "./node_modules/util/support/isBufferBrowser.js"); - return array; +function objectToString(o) { + return Object.prototype.toString.call(o); +} - }, - fromBufferAttribute: function ( attribute, index, offset ) { +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} - if ( offset !== undefined ) { - console.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' ); +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; - } +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} - this.x = attribute.getX( index ); - this.y = attribute.getY( index ); - this.z = attribute.getZ( index ); - return this; +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; - } -} ); +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"); +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} +/* 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"))) /***/ }), @@ -27143,7 +26869,7 @@ module.exports = g; /*! exports provided: name, version, main, keywords, author, license, repository, config, lint-staged, prettier, sideEffects, dependencies, scripts, devDependencies, engines, default */ /***/ (function(module) { -module.exports = JSON.parse("{\"name\":\"ami.js\",\"version\":\"0.32.1\",\"main\":\"build/ami.js\",\"keywords\":[\"ami\",\"ami.js\",\"three.js\",\"webgl\",\"dicom\",\"nifti\",\"awesome\",\"medical\",\"imaging\",\"xtk\",\"nrrd\",\"vtk\",\"stl\",\"trk\"],\"author\":{\"name\":\"Nicolas Rannou\",\"email\":\"nicolas@eunate.ch\",\"url\":\"https://eunate.ch\"},\"license\":\"Apache-2.0\",\"repository\":{\"type\":\"git\",\"url\":\"https://fnndsc.github.io/ami\"},\"config\":{\"gaKey\":\"UA-39303022-3\",\"babel\":\"--module-bind js=babel-loader --colors --display-error-details\"},\"lint-staged\":{\"{{src/**,examples/**, lessons/**}/,}.{js,jsx,json,css,ts,tsx}\":[\"prettier --write\",\"git add\"]},\"prettier\":{\"printWidth\":100,\"singleQuote\":true,\"trailingComma\":\"es5\",\"overrides\":[{\"files\":\"*.css\",\"options\":{\"useTabs\":false,\"tabWidth\":2}}]},\"sideEffects\":false,\"dependencies\":{\"OpenJPEG.js\":\"joedrago/openjpeg#master\",\"cornerstone-core\":\"^2.3.0\",\"dicom-parser\":\"^1.8.3\",\"image-JPEG2000\":\"ReflexionMed/image-JPEG2000#master\",\"jpeg-lossless-decoder-js\":\"1.2.3\",\"math-float32-to-binary-string\":\"^1.0.0\",\"nifti-reader-js\":\"v0.5.3\",\"nrrd-js\":\"^0.2.1\",\"pako\":\"1.0.1\",\"three\":\"latest\"},\"scripts\":{\"precommit\":\"lint-staged\",\"tslint-check\":\"tslint-config-prettier-check ./tslint.json\",\"check-codestyle\":\"prettier-check 'src/**/*.{js,jsx,json,css,ts,tsx}'\",\"fix-all-code-style\":\"prettier --write '{{src/**,examples/**, lessons/**}/,}*.{js,jsx,json,css,ts,tsx}'\",\"build:ami\":\"webpack --config webpack.config.build.js --display-error-details\",\"build:ami:prod\":\"cross-env NODE_ENV=production yarn build:ami\",\"build:clean\":\"rimraf -rf build/*\",\"build:clean:hot\":\"rimraf -rf build/*.hot-update.*\",\"dev:ami\":\"webpack --config webpack.config.build.js --hot --watch --colors\",\"dist:ami\":\"yarn build:clean && yarn build:ami && yarn build:ami:prod && yarn doc\",\"dist:examples\":\"node ./scripts/buildDist.js && node ./scripts/router.js examples deploy\",\"dist:clean\":\"rimraf -rf dist/*\",\"analyze:ami\":\"cross-env NODE_WEBPACK_ANALYZE=true yarn build:ami\",\"analyze:ami:prod\":\"cross-env NODE_WEBPACK_ANALYZE=true yarn build:ami:prod\",\"clean\":\"yarn build:clean && yarn dist:clean\",\"example\":\"node ./scripts/router.js examples\",\"gen:index:examples\":\"node ./scripts/genIndexFiles.js examples\",\"gen:index:examples:ga\":\"cross-env NODE_GA=true node ./scripts/genIndexFiles.js examples\",\"test\":\"karma start\",\"testExamples\":\"yarn dist:clean && yarn dist:examples\",\"doc\":\"jsdoc -p -r -R README.md -c jsdoc.json -d dist/doc src\",\"ami\":\"yarn dist:ami && yarn test\",\"deploy\":\"yarn dist:clean && yarn build:clean && yarn dist:ami && yarn dist:examples && gh-pages -d dist\"},\"devDependencies\":{\"@types/jasmine\":\"^3.3.2\",\"@types/node\":\"^10.11.3\",\"@types/three\":\"^0.93.13\",\"babel-cli\":\"latest\",\"babel-core\":\"^6.26.0\",\"babel-loader\":\"^7.1.2\",\"babel-preset-env\":\"^1.6.0\",\"babel-runtime\":\"^6.26.0\",\"compression-webpack-plugin\":\"^1.0.1\",\"cross-env\":\"^3.2.3\",\"gh-pages\":\"^1.2.0\",\"husky\":\"^1.1.3\",\"jasmine-core\":\"^2.99.1\",\"jsdoc\":\"jsdoc3/jsdoc#master\",\"karma\":\"^2.0.5\",\"karma-chrome-launcher\":\"^2.2.0\",\"karma-jasmine\":\"^1.1.2\",\"karma-sinon\":\"^1.0.5\",\"karma-spec-reporter\":\"^0.0.32\",\"karma-webpack\":\"3.0.0\",\"lint-staged\":\"^8.0.4\",\"live-server\":\"^1.1.0\",\"node-pre-gyp\":\"^0.10.0\",\"prettier\":\"^1.15.1\",\"prettier-check\":\"^2.0.0\",\"puppeteer\":\"^1.6.1\",\"rimraf\":\"^2.6.1\",\"rollup-plugin-node-builtins\":\"^2.1.2\",\"shelljs\":\"^0.8.2\",\"sinon\":\"^2.0.0\",\"ts-loader\":\"^5.2.1\",\"tslint\":\"^5.11.0\",\"tslint-config-prettier\":\"^1.15.0\",\"tslint-loader\":\"^3.6.0\",\"typescript\":\"^3.1.1\",\"uglifyjs-webpack-plugin\":\"^1.2.7\",\"webpack\":\"^4.16.3\",\"webpack-bundle-analyzer\":\"^2.9.0\",\"webpack-cli\":\"^3.1.0\",\"webpack-dev-server\":\"^3.1.5\",\"webpack-watch-livereload-plugin\":\"^0.0.1\"},\"engines\":{\"node\":\">=6.9.0\"}}"); +module.exports = {"name":"ami.js","version":"0.32.1","main":"build/ami.js","keywords":["ami","ami.js","three.js","webgl","dicom","nifti","awesome","medical","imaging","xtk","nrrd","vtk","stl","trk"],"author":{"name":"Nicolas Rannou","email":"nicolas@eunate.ch","url":"https://eunate.ch"},"license":"Apache-2.0","repository":{"type":"git","url":"https://fnndsc.github.io/ami"},"config":{"gaKey":"UA-39303022-3","babel":"--module-bind js=babel-loader --colors --display-error-details"},"lint-staged":{"{{src/**,examples/**, lessons/**}/,}.{js,jsx,json,css,ts,tsx}":["prettier --write","git add"]},"prettier":{"printWidth":100,"singleQuote":true,"trailingComma":"es5","overrides":[{"files":"*.css","options":{"useTabs":false,"tabWidth":2}}]},"sideEffects":false,"dependencies":{"OpenJPEG.js":"joedrago/openjpeg#master","cornerstone-core":"^2.3.0","dicom-parser":"^1.8.3","image-JPEG2000":"ReflexionMed/image-JPEG2000#master","jpeg-lossless-decoder-js":"1.2.3","math-float32-to-binary-string":"^1.0.0","nifti-reader-js":"v0.5.3","nrrd-js":"^0.2.1","pako":"1.0.1","three":"latest"},"scripts":{"precommit":"lint-staged","tslint-check":"tslint-config-prettier-check ./tslint.json","check-codestyle":"prettier-check 'src/**/*.{js,jsx,json,css,ts,tsx}'","fix-all-code-style":"prettier --write '{{src/**,examples/**, lessons/**}/,}*.{js,jsx,json,css,ts,tsx}'","build:ami":"webpack --config webpack.config.build.js --display-error-details","build:ami:prod":"cross-env NODE_ENV=production yarn build:ami","build:clean":"rimraf -rf build/*","build:clean:hot":"rimraf -rf build/*.hot-update.*","dev:ami":"webpack --config webpack.config.build.js --hot --watch --colors","dist:ami":"yarn build:clean && yarn build:ami && yarn build:ami:prod && yarn doc","dist:examples":"node ./scripts/buildDist.js && node ./scripts/router.js examples deploy","dist:clean":"rimraf -rf dist/*","analyze:ami":"cross-env NODE_WEBPACK_ANALYZE=true yarn build:ami","analyze:ami:prod":"cross-env NODE_WEBPACK_ANALYZE=true yarn build:ami:prod","clean":"yarn build:clean && yarn dist:clean","example":"node ./scripts/router.js examples","gen:index:examples":"node ./scripts/genIndexFiles.js examples","gen:index:examples:ga":"cross-env NODE_GA=true node ./scripts/genIndexFiles.js examples","test":"karma start","testExamples":"yarn dist:clean && yarn dist:examples","doc":"jsdoc -p -r -R README.md -c jsdoc.json -d dist/doc src","ami":"yarn dist:ami && yarn test","deploy":"yarn dist:clean && yarn build:clean && yarn dist:ami && yarn dist:examples && gh-pages -d dist"},"devDependencies":{"@types/jasmine":"^3.3.2","@types/node":"^10.11.3","@types/three":"^0.93.13","babel-cli":"latest","babel-core":"^6.26.0","babel-loader":"^7.1.2","babel-preset-env":"^1.6.0","babel-runtime":"^6.26.0","compression-webpack-plugin":"^1.0.1","cross-env":"^3.2.3","gh-pages":"^1.2.0","husky":"^1.1.3","jasmine-core":"^2.99.1","jsdoc":"jsdoc3/jsdoc#master","karma":"^2.0.5","karma-chrome-launcher":"^2.2.0","karma-jasmine":"^1.1.2","karma-sinon":"^1.0.5","karma-spec-reporter":"^0.0.32","karma-webpack":"3.0.0","lint-staged":"^8.0.4","live-server":"^1.1.0","node-pre-gyp":"^0.10.0","prettier":"^1.15.1","prettier-check":"^2.0.0","puppeteer":"^1.6.1","rimraf":"^2.6.1","rollup-plugin-node-builtins":"^2.1.2","shelljs":"^0.8.2","sinon":"^2.0.0","ts-loader":"^5.2.1","tslint":"^5.11.0","tslint-config-prettier":"^1.15.0","tslint-loader":"^3.6.0","typescript":"^3.1.1","uglifyjs-webpack-plugin":"^1.2.7","webpack":"^4.16.3","webpack-bundle-analyzer":"^2.9.0","webpack-cli":"^3.1.0","webpack-dev-server":"^3.1.5","webpack-watch-livereload-plugin":"^0.0.1"},"engines":{"node":">=6.9.0"}}; /***/ }), @@ -27210,6 +26936,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "camerasOrthographic", function() { return camerasOrthographic; }); /* harmony import */ var _core_core_intersections__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/core.intersections */ "./src/core/core.intersections.js"); /* harmony import */ var _core_core_validators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/core.validators */ "./src/core/core.validators.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + @@ -27224,51 +26958,59 @@ __webpack_require__.r(__webpack_exports__); * @module cameras/orthographic */ -const camerasOrthographic = (three = window.THREE) => { +var camerasOrthographic = function camerasOrthographic() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.OrthographicCamera === undefined) { return null; } - const Constructor = three.OrthographicCamera; - return class extends Constructor { - constructor(left, right, top, bottom, near, far) { - super(left, right, top, bottom, near, far); + var Constructor = three.OrthographicCamera; + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(left, right, top, bottom, near, far) { + _classCallCheck(this, _class); - this._front = null; - this._back = null; + var _this = _possibleConstructorReturn(this, _Constructor.call(this, left, right, top, bottom, near, far)); - this._directions = [new three.Vector3(1, 0, 0), new three.Vector3(0, 1, 0), new three.Vector3(0, 0, 1)]; + _this._front = null; + _this._back = null; - this._directionsLabel = ['A', 'P', // TOP/BOTTOM + _this._directions = [new three.Vector3(1, 0, 0), new three.Vector3(0, 1, 0), new three.Vector3(0, 0, 1)]; + + _this._directionsLabel = ['A', 'P', // TOP/BOTTOM 'L', 'R', // LEFT/RIGHT 'I', 'S']; - this._orientation = 'default'; - this._convention = 'radio'; - this._stackOrientation = 0; + _this._orientation = 'default'; + _this._convention = 'radio'; + _this._stackOrientation = 0; - this._right = null; - this._up = null; - this._direction = null; + _this._right = null; + _this._up = null; + _this._direction = null; - this._controls = null; - this._box = null; - this._canvas = { + _this._controls = null; + _this._box = null; + _this._canvas = { width: null, height: null }; - this._fromFront = true; - this._angle = 0; + _this._fromFront = true; + _this._angle = 0; + return _this; } /** * Initialize orthographic camera variables */ - init(xCosine, yCosine, zCosine, controls, box, canvas) { + + + _class.prototype.init = function init(xCosine, yCosine, zCosine, controls, box, canvas) { // DEPRECATION NOTICE - window.console.warn(`cameras.orthographic.init(...) is deprecated. - Use .cosines, .controls, .box and .canvas instead.`); + window.console.warn('cameras.orthographic.init(...) is deprecated.\n Use .cosines, .controls, .box and .canvas instead.'); // if (!(_core_core_validators__WEBPACK_IMPORTED_MODULE_1__["default"].vector3(xCosine) && _core_core_validators__WEBPACK_IMPORTED_MODULE_1__["default"].vector3(yCosine) && _core_core_validators__WEBPACK_IMPORTED_MODULE_1__["default"].vector3(zCosine) && _core_core_validators__WEBPACK_IMPORTED_MODULE_1__["default"].box(box) && controls)) { @@ -27284,12 +27026,12 @@ const camerasOrthographic = (three = window.THREE) => { this._box = box; this._canvas = canvas; - let ray = { + var ray = { position: this._box.center, direction: this._direction }; - let intersections = this._orderIntersections(_core_core_intersections__WEBPACK_IMPORTED_MODULE_0__["default"].rayBox(ray, this._box), this._direction); + var intersections = this._orderIntersections(_core_core_intersections__WEBPACK_IMPORTED_MODULE_0__["default"].rayBox(ray, this._box), this._direction); this._front = intersections[0]; this._back = intersections[1]; @@ -27299,9 +27041,9 @@ const camerasOrthographic = (three = window.THREE) => { this._updatePositionAndTarget(this._front, this._back); this._updateMatrices(); this._updateDirections(); - } + }; - update() { + _class.prototype.update = function update() { // http://www.grahamwideman.com/gw/brain/orientation/orientterms.htm // do magics depending on orientation and convention // also needs a default mode @@ -27331,12 +27073,12 @@ const camerasOrthographic = (three = window.THREE) => { this._up = this._directions[1]; this._direction = this._directions[2]; } else { - let leftIndex = this.leftDirection(); - let leftDirection = this._directions[leftIndex]; - let posteriorIndex = this.posteriorDirection(); - let posteriorDirection = this._directions[posteriorIndex]; - let superiorIndex = this.superiorDirection(); - let superiorDirection = this._directions[superiorIndex]; + var leftIndex = this.leftDirection(); + var leftDirection = this._directions[leftIndex]; + var posteriorIndex = this.posteriorDirection(); + var posteriorDirection = this._directions[posteriorIndex]; + var superiorIndex = this.superiorDirection(); + var superiorDirection = this._directions[superiorIndex]; if (this._convention === 'radio') { switch (this._orientation) { @@ -27393,8 +27135,7 @@ const camerasOrthographic = (three = window.THREE) => { break; default: - window.console.warn(`"${this._orientation}" orientation is not valid. - (choices: axial, coronal, sagittal)`); + window.console.warn('"' + this._orientation + '" orientation is not valid.\n (choices: axial, coronal, sagittal)'); break; } } else if (this._convention === 'neuro') { @@ -27452,22 +27193,21 @@ const camerasOrthographic = (three = window.THREE) => { break; default: - window.console.warn(`"${this._orientation}" orientation is not valid. - (choices: axial, coronal, sagittal)`); + window.console.warn('"' + this._orientation + '" orientation is not valid.\n (choices: axial, coronal, sagittal)'); break; } } else { - window.console.warn(`${this._convention} is not valid (choices: radio, neuro)`); + window.console.warn(this._convention + ' is not valid (choices: radio, neuro)'); } } // that is what determines left/right - let ray = { + var ray = { position: this._box.center, direction: this._direction }; - let intersections = this._orderIntersections(_core_core_intersections__WEBPACK_IMPORTED_MODULE_0__["default"].rayBox(ray, this._box), this._direction); + var intersections = this._orderIntersections(_core_core_intersections__WEBPACK_IMPORTED_MODULE_0__["default"].rayBox(ray, this._box), this._direction); this._front = intersections[0]; this._back = intersections[1]; @@ -27477,19 +27217,19 @@ const camerasOrthographic = (three = window.THREE) => { this._updatePositionAndTarget(this._front, this._back); this._updateMatrices(); this._updateDirections(); - } + }; - leftDirection() { + _class.prototype.leftDirection = function leftDirection() { return this._findMaxIndex(this._directions, 0); - } + }; - posteriorDirection() { + _class.prototype.posteriorDirection = function posteriorDirection() { return this._findMaxIndex(this._directions, 1); - } + }; - superiorDirection() { + _class.prototype.superiorDirection = function superiorDirection() { return this._findMaxIndex(this._directions, 2); - } + }; /** * Invert rows in the current slice. @@ -27497,24 +27237,28 @@ const camerasOrthographic = (three = window.THREE) => { * * Flip the "up" vector * * Look at the slice from the other side */ - invertRows() { + + + _class.prototype.invertRows = function invertRows() { // flip "up" vector // we flip up first because invertColumns update projectio matrices this.up.multiplyScalar(-1); this.invertColumns(); this._updateDirections(); - } + }; /** * Invert rows in the current slice. * Inverting rows in 1 step: * * Look at the slice from the other side */ - invertColumns() { + + + _class.prototype.invertColumns = function invertColumns() { this.center(); // rotate 180 degrees around the up vector... - let oppositePosition = this._oppositePosition(this.position); + var oppositePosition = this._oppositePosition(this.position); // update posistion and target // clone is needed because this.position is overwritten in method @@ -27526,14 +27270,16 @@ const camerasOrthographic = (three = window.THREE) => { this._angle = 360 - this._angle; this._updateDirections(); - } + }; /** * Center slice in the camera FOV. * It also updates the controllers properly. * We can center a camera from the front or from the back. */ - center() { + + + _class.prototype.center = function center() { if (this._fromFront) { this._updatePositionAndTarget(this._front, this._back); } else { @@ -27542,16 +27288,20 @@ const camerasOrthographic = (three = window.THREE) => { this._updateMatrices(); this._updateDirections(); - } + }; /** * Pi/2 rotation around the zCosine axis. * Clock-wise rotation from the user point of view. */ - rotate(angle = null) { + + + _class.prototype.rotate = function rotate() { + var angle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + this.center(); - let rotationToApply = 90; + var rotationToApply = 90; if (angle === null) { rotationToApply *= -1; this._angle += 90; @@ -27563,18 +27313,23 @@ const camerasOrthographic = (three = window.THREE) => { this._angle %= 360; // Rotate the up vector around the "zCosine" - let rotation = new three.Matrix4().makeRotationAxis(this._direction, rotationToApply * Math.PI / 180); + var rotation = new three.Matrix4().makeRotationAxis(this._direction, rotationToApply * Math.PI / 180); this.up.applyMatrix4(rotation); this._updateMatrices(); this._updateDirections(); - } + }; // dimensions[0] // width // dimensions[1] // height // direction= 0 width, 1 height, 2 best // factor - fitBox(direction = 0, factor = 1.5) { + + + _class.prototype.fitBox = function fitBox() { + var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var factor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.5; + // // if (!(dimensions && dimensions.length >= 2)) { // window.console.log('Invalid dimensions container.'); @@ -27584,7 +27339,7 @@ const camerasOrthographic = (three = window.THREE) => { // } // - let zoom = 1; + var zoom = 1; // update zoom switch (direction) { @@ -27608,10 +27363,10 @@ const camerasOrthographic = (three = window.THREE) => { this.zoom = zoom; this.center(); - } + }; - _adjustTopDirection(horizontalDirection, verticalDirection) { - const vMaxIndex = this._getMaxIndex(verticalDirection); + _class.prototype._adjustTopDirection = function _adjustTopDirection(horizontalDirection, verticalDirection) { + var vMaxIndex = this._getMaxIndex(verticalDirection); // should handle vMax index === 0 if (vMaxIndex === 2 && verticalDirection.getComponent(vMaxIndex) < 0 || vMaxIndex === 1 && verticalDirection.getComponent(vMaxIndex) > 0 || vMaxIndex === 0 && verticalDirection.getComponent(vMaxIndex) > 0) { @@ -27619,12 +27374,12 @@ const camerasOrthographic = (three = window.THREE) => { } return verticalDirection; - } + }; - _getMaxIndex(vector) { + _class.prototype._getMaxIndex = function _getMaxIndex(vector) { // init with X value - let maxValue = Math.abs(vector.x); - let index = 0; + var maxValue = Math.abs(vector.x); + var index = 0; if (Math.abs(vector.y) > maxValue) { maxValue = Math.abs(vector.y); @@ -27636,40 +27391,40 @@ const camerasOrthographic = (three = window.THREE) => { } return index; - } + }; - _findMaxIndex(directions, target) { + _class.prototype._findMaxIndex = function _findMaxIndex(directions, target) { // get index of the most superior direction - let maxIndices = this._getMaxIndices(directions); + var maxIndices = this._getMaxIndices(directions); - for (let i = 0; i < maxIndices.length; i++) { + for (var i = 0; i < maxIndices.length; i++) { if (maxIndices[i] === target) { return i; } } - } + }; - _getMaxIndices(directions) { - let indices = []; + _class.prototype._getMaxIndices = function _getMaxIndices(directions) { + var indices = []; indices.push(this._getMaxIndex(directions[0])); indices.push(this._getMaxIndex(directions[1])); indices.push(this._getMaxIndex(directions[2])); return indices; - } + }; - _orderIntersections(intersections, direction) { - const ordered = intersections[0].dot(direction) < intersections[1].dot(direction); + _class.prototype._orderIntersections = function _orderIntersections(intersections, direction) { + var ordered = intersections[0].dot(direction) < intersections[1].dot(direction); if (!ordered) { return [intersections[1], intersections[0]]; } return intersections; - } + }; - _updateCanvas() { - let camFactor = 2; + _class.prototype._updateCanvas = function _updateCanvas() { + var camFactor = 2; this.left = -this._canvas.width / camFactor; this.right = this._canvas.width / camFactor; this.top = this._canvas.height / camFactor; @@ -27677,22 +27432,22 @@ const camerasOrthographic = (three = window.THREE) => { this._updateMatrices(); this.controls.handleResize(); - } + }; - _oppositePosition(position) { - let oppositePosition = position.clone(); + _class.prototype._oppositePosition = function _oppositePosition(position) { + var oppositePosition = position.clone(); // center world postion around box center oppositePosition.sub(this._box.center); // rotate - let rotation = new three.Matrix4().makeRotationAxis(this.up, Math.PI); + var rotation = new three.Matrix4().makeRotationAxis(this.up, Math.PI); oppositePosition.applyMatrix4(rotation); // translate back to world position oppositePosition.add(this._box.center); return oppositePosition; - } + }; - _computeZoom(dimension, direction) { + _class.prototype._computeZoom = function _computeZoom(dimension, direction) { if (!(dimension && dimension > 0)) { window.console.log('Invalid dimension provided.'); window.console.log(dimension); @@ -27700,12 +27455,12 @@ const camerasOrthographic = (three = window.THREE) => { } // ray - let ray = { + var ray = { position: this._box.center.clone(), direction: direction }; - let intersections = _core_core_intersections__WEBPACK_IMPORTED_MODULE_0__["default"].rayBox(ray, this._box); + var intersections = _core_core_intersections__WEBPACK_IMPORTED_MODULE_0__["default"].rayBox(ray, this._box); if (intersections.length < 2) { window.console.log('Can not adjust the camera ( < 2 intersections).'); window.console.log(ray); @@ -27714,37 +27469,37 @@ const camerasOrthographic = (three = window.THREE) => { } return dimension / intersections[0].distanceTo(intersections[1]); - } + }; - _updatePositionAndTarget(position, target) { + _class.prototype._updatePositionAndTarget = function _updatePositionAndTarget(position, target) { // position this.position.set(position.x, position.y, position.z); // targets this.lookAt(target.x, target.y, target.z); this._controls.target.set(target.x, target.y, target.z); - } + }; - _updateMatrices() { + _class.prototype._updateMatrices = function _updateMatrices() { this._controls.update(); // THEN camera this.updateProjectionMatrix(); this.updateMatrixWorld(); - } + }; - _updateLabels() { + _class.prototype._updateLabels = function _updateLabels() { this._directionsLabel = [this._vector2Label(this._up), this._vector2Label(this._up.clone().negate()), this._vector2Label(this._right), this._vector2Label(this._right.clone().negate()), this._vector2Label(this._direction), this._vector2Label(this._direction.clone().negate())]; - } + }; - _vector2Label(direction) { - const index = this._getMaxIndex(direction); + _class.prototype._vector2Label = function _vector2Label(direction) { + var index = this._getMaxIndex(direction); // set vector max value to 1 - const scaledDirection = direction.clone().divideScalar(Math.abs(direction.getComponent(index))); - const delta = 0.2; - let label = ''; + var scaledDirection = direction.clone().divideScalar(Math.abs(direction.getComponent(index))); + var delta = 0.2; + var label = ''; // loop through components of the vector - for (let i = 0; i < 3; i++) { + for (var i = 0; i < 3; i++) { if (i === 0) { if (scaledDirection.getComponent(i) + delta >= 1) { label += 'L'; @@ -27771,15 +27526,15 @@ const camerasOrthographic = (three = window.THREE) => { } return label; - } + }; - _updateDirections() { + _class.prototype._updateDirections = function _updateDirections() { // up is correct this._up = this.up.clone(); // direction - let pLocal = new three.Vector3(0, 0, -1); - let pWorld = pLocal.applyMatrix4(this.matrixWorld); + var pLocal = new three.Vector3(0, 0, -1); + var pWorld = pLocal.applyMatrix4(this.matrixWorld); this._direction = pWorld.sub(this.position).normalize(); // right @@ -27787,110 +27542,114 @@ const camerasOrthographic = (three = window.THREE) => { // update labels accordingly this._updateLabels(); - } - - set controls(controls) { - this._controls = controls; - } - - get controls() { - return this._controls; - } - - set box(box) { - this._box = box; - } - - get box() { - return this._box; - } - - set canvas(canvas) { - this._canvas = canvas; - this._updateCanvas(); - } - - get canvas() { - return this._canvas; - } - - set angle(angle) { - this.rotate(angle); - } - - get angle() { - return this._angle; - } - - set directions(directions) { - this._directions = directions; - } - - get directions() { - return this._directions; - } - - set convention(convention) { - this._convention = convention; - } - - get convention() { - return this._convention; - } - - set orientation(orientation) { - this._orientation = orientation; - } - - get orientation() { - return this._orientation; - } - - set directionsLabel(directionsLabel) { - this._directionsLabel = directionsLabel; - } - - get directionsLabel() { - return this._directionsLabel; - } - - set stackOrientation(stackOrientation) { - this._stackOrientation = stackOrientation; - - if (this._stackOrientation === 0) { - this._orientation = 'default'; - } else { - const maxIndex = this._getMaxIndex(this._directions[(this._stackOrientation + 2) % 3]); + }; - if (maxIndex === 0) { - this._orientation = 'sagittal'; - } else if (maxIndex === 1) { - this._orientation = 'coronal'; - } else if (maxIndex === 2) { - this._orientation = 'axial'; - } + _createClass(_class, [{ + key: 'controls', + set: function set(controls) { + this._controls = controls; + }, + get: function get() { + return this._controls; } - } + }, { + key: 'box', + set: function set(box) { + this._box = box; + }, + get: function get() { + return this._box; + } + }, { + key: 'canvas', + set: function set(canvas) { + this._canvas = canvas; + this._updateCanvas(); + }, + get: function get() { + return this._canvas; + } + }, { + key: 'angle', + set: function set(angle) { + this.rotate(angle); + }, + get: function get() { + return this._angle; + } + }, { + key: 'directions', + set: function set(directions) { + this._directions = directions; + }, + get: function get() { + return this._directions; + } + }, { + key: 'convention', + set: function set(convention) { + this._convention = convention; + }, + get: function get() { + return this._convention; + } + }, { + key: 'orientation', + set: function set(orientation) { + this._orientation = orientation; + }, + get: function get() { + return this._orientation; + } + }, { + key: 'directionsLabel', + set: function set(directionsLabel) { + this._directionsLabel = directionsLabel; + }, + get: function get() { + return this._directionsLabel; + } + }, { + key: 'stackOrientation', + set: function set(stackOrientation) { + this._stackOrientation = stackOrientation; - get stackOrientation() { - // - if (this._orientation === 'default') { - this._stackOrientation = 0; - } else { - let maxIndex = this._getMaxIndex(this._direction); + if (this._stackOrientation === 0) { + this._orientation = 'default'; + } else { + var maxIndex = this._getMaxIndex(this._directions[(this._stackOrientation + 2) % 3]); - if (maxIndex === this._getMaxIndex(this._directions[2])) { + if (maxIndex === 0) { + this._orientation = 'sagittal'; + } else if (maxIndex === 1) { + this._orientation = 'coronal'; + } else if (maxIndex === 2) { + this._orientation = 'axial'; + } + } + }, + get: function get() { + // + if (this._orientation === 'default') { this._stackOrientation = 0; - } else if (maxIndex === this._getMaxIndex(this._directions[0])) { - this._stackOrientation = 1; - } else if (maxIndex === this._getMaxIndex(this._directions[1])) { - this._stackOrientation = 2; + } else { + var maxIndex = this._getMaxIndex(this._direction); + + if (maxIndex === this._getMaxIndex(this._directions[2])) { + this._stackOrientation = 0; + } else if (maxIndex === this._getMaxIndex(this._directions[0])) { + this._stackOrientation = 1; + } else if (maxIndex === this._getMaxIndex(this._directions[1])) { + this._stackOrientation = 2; + } } + + return this._stackOrientation; } + }]); - return this._stackOrientation; - } - }; + return _class; + }(Constructor); }; // export factory @@ -27959,977 +27718,979 @@ __webpack_require__.r(__webpack_exports__); // adapted from https://github.com/mrdoob/three.js/blob/dev/examples/jsm/controls/OrbitControls.js -const orbit = (three = window.THREE) => { - if (three === undefined || three.EventDispatcher === undefined) { - return null; - } +var orbit = function orbit() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + + if (three === undefined || three.EventDispatcher === undefined) { + return null; + } - var OrbitControls = function (object, domElement) { + var OrbitControls = function OrbitControls(object, domElement) { - this.object = object; + this.object = object; - this.domElement = domElement !== undefined ? domElement : document; + this.domElement = domElement !== undefined ? domElement : document; - // Set to false to disable this control - this.enabled = true; + // Set to false to disable this control + this.enabled = true; - // Set to prevent default event - this.preventDefault = true; + // Set to prevent default event + this.preventDefault = true; - // "target" sets the location of focus, where the object orbits around - this.target = new three.Vector3(); + // "target" sets the location of focus, where the object orbits around + this.target = new three.Vector3(); - // How far you can dolly in and out ( PerspectiveCamera only ) - this.minDistance = 0; - this.maxDistance = Infinity; + // How far you can dolly in and out ( PerspectiveCamera only ) + this.minDistance = 0; + this.maxDistance = Infinity; - // How far you can zoom in and out ( OrthographicCamera only ) - this.minZoom = 0; - this.maxZoom = Infinity; + // How far you can zoom in and out ( OrthographicCamera only ) + this.minZoom = 0; + this.maxZoom = Infinity; - // How far you can orbit vertically, upper and lower limits. - // Range is 0 to Math.PI radians. - this.minPolarAngle = 0; // radians - this.maxPolarAngle = Math.PI; // radians + // How far you can orbit vertically, upper and lower limits. + // Range is 0 to Math.PI radians. + this.minPolarAngle = 0; // radians + this.maxPolarAngle = Math.PI; // radians - // How far you can orbit horizontally, upper and lower limits. - // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ]. - this.minAzimuthAngle = -Infinity; // radians - this.maxAzimuthAngle = Infinity; // radians + // How far you can orbit horizontally, upper and lower limits. + // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ]. + this.minAzimuthAngle = -Infinity; // radians + this.maxAzimuthAngle = Infinity; // radians - // Set to true to enable damping (inertia) - // If damping is enabled, you must call controls.update() in your animation loop - this.enableDamping = false; - this.dampingFactor = 0.25; + // Set to true to enable damping (inertia) + // If damping is enabled, you must call controls.update() in your animation loop + this.enableDamping = false; + this.dampingFactor = 0.25; - // This option actually enables dollying in and out; left as "zoom" for backwards compatibility. - // Set to false to disable zooming - this.enableZoom = true; - this.zoomSpeed = 1.0; + // This option actually enables dollying in and out; left as "zoom" for backwards compatibility. + // Set to false to disable zooming + this.enableZoom = true; + this.zoomSpeed = 1.0; - // Set to false to disable rotating - this.enableRotate = true; - this.rotateSpeed = 1.0; + // Set to false to disable rotating + this.enableRotate = true; + this.rotateSpeed = 1.0; - // Set to false to disable panning - this.enablePan = true; - this.panSpeed = 1.0; - this.screenSpacePanning = false; // if true, pan in screen-space - this.keyPanSpeed = 7.0; // pixels moved per arrow key push + // Set to false to disable panning + this.enablePan = true; + this.panSpeed = 1.0; + this.screenSpacePanning = false; // if true, pan in screen-space + this.keyPanSpeed = 7.0; // pixels moved per arrow key push - // Set to true to automatically rotate around the target - // If auto-rotate is enabled, you must call controls.update() in your animation loop - this.autoRotate = false; - this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60 + // Set to true to automatically rotate around the target + // If auto-rotate is enabled, you must call controls.update() in your animation loop + this.autoRotate = false; + this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60 - // Set to false to disable use of the keys - this.enableKeys = true; + // Set to false to disable use of the keys + this.enableKeys = true; - // The four arrow keys - this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }; + // The four arrow keys + this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }; - // Mouse buttons - this.mouseButtons = { LEFT: three.MOUSE.LEFT, MIDDLE: three.MOUSE.MIDDLE, RIGHT: three.MOUSE.RIGHT }; + // Mouse buttons + this.mouseButtons = { LEFT: three.MOUSE.LEFT, MIDDLE: three.MOUSE.MIDDLE, RIGHT: three.MOUSE.RIGHT }; - // for reset - this.target0 = this.target.clone(); - this.position0 = this.object.position.clone(); - this.zoom0 = this.object.zoom; + // for reset + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.zoom0 = this.object.zoom; - // - // public methods - // + // + // public methods + // - this.getPolarAngle = function () { + this.getPolarAngle = function () { - return spherical.phi; - }; + return spherical.phi; + }; - this.getAzimuthalAngle = function () { + this.getAzimuthalAngle = function () { - return spherical.theta; - }; + return spherical.theta; + }; - this.saveState = function () { + this.saveState = function () { - scope.target0.copy(scope.target); - scope.position0.copy(scope.object.position); - scope.zoom0 = scope.object.zoom; - }; + scope.target0.copy(scope.target); + scope.position0.copy(scope.object.position); + scope.zoom0 = scope.object.zoom; + }; - this.reset = function () { + this.reset = function () { - scope.target.copy(scope.target0); - scope.object.position.copy(scope.position0); - scope.object.zoom = scope.zoom0; + scope.target.copy(scope.target0); + scope.object.position.copy(scope.position0); + scope.object.zoom = scope.zoom0; - scope.object.updateProjectionMatrix(); - scope.dispatchEvent(changeEvent); + scope.object.updateProjectionMatrix(); + scope.dispatchEvent(changeEvent); - scope.update(); + scope.update(); - state = STATE.NONE; - }; + state = STATE.NONE; + }; - // this method is there to match the Trackball API - this.handleResize = function () {}; + // this method is there to match the Trackball API + this.handleResize = function () {}; - // this method is exposed, but perhaps it would be better if we can make it private... - this.update = function () { + // this method is exposed, but perhaps it would be better if we can make it private... + this.update = function () { - var offset = new three.Vector3(); + var offset = new three.Vector3(); - // so camera.up is the orbit axis - var quat = new three.Quaternion().setFromUnitVectors(object.up, new three.Vector3(0, 1, 0)); - var quatInverse = quat.clone().inverse(); + // so camera.up is the orbit axis + var quat = new three.Quaternion().setFromUnitVectors(object.up, new three.Vector3(0, 1, 0)); + var quatInverse = quat.clone().inverse(); - var lastPosition = new three.Vector3(); - var lastQuaternion = new three.Quaternion(); + var lastPosition = new three.Vector3(); + var lastQuaternion = new three.Quaternion(); - return function update() { + return function update() { - var position = scope.object.position; + var position = scope.object.position; - offset.copy(position).sub(scope.target); + offset.copy(position).sub(scope.target); - // rotate offset to "y-axis-is-up" space - offset.applyQuaternion(quat); + // rotate offset to "y-axis-is-up" space + offset.applyQuaternion(quat); - // angle from z-axis around y-axis - spherical.setFromVector3(offset); + // angle from z-axis around y-axis + spherical.setFromVector3(offset); - if (scope.autoRotate && state === STATE.NONE) { + if (scope.autoRotate && state === STATE.NONE) { - rotateLeft(getAutoRotationAngle()); - } + rotateLeft(getAutoRotationAngle()); + } - spherical.theta += sphericalDelta.theta; - spherical.phi += sphericalDelta.phi; + spherical.theta += sphericalDelta.theta; + spherical.phi += sphericalDelta.phi; - // restrict theta to be between desired limits - spherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta)); + // restrict theta to be between desired limits + spherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta)); - // restrict phi to be between desired limits - spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi)); + // restrict phi to be between desired limits + spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi)); - spherical.makeSafe(); + spherical.makeSafe(); - spherical.radius *= scale; + spherical.radius *= scale; - // restrict radius to be between desired limits - spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius)); + // restrict radius to be between desired limits + spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius)); - // move target to panned location - scope.target.add(panOffset); + // move target to panned location + scope.target.add(panOffset); - offset.setFromSpherical(spherical); + offset.setFromSpherical(spherical); - // rotate offset back to "camera-up-vector-is-up" space - offset.applyQuaternion(quatInverse); + // rotate offset back to "camera-up-vector-is-up" space + offset.applyQuaternion(quatInverse); - position.copy(scope.target).add(offset); + position.copy(scope.target).add(offset); - scope.object.lookAt(scope.target); + scope.object.lookAt(scope.target); - if (scope.enableDamping === true) { + if (scope.enableDamping === true) { - sphericalDelta.theta *= 1 - scope.dampingFactor; - sphericalDelta.phi *= 1 - scope.dampingFactor; + sphericalDelta.theta *= 1 - scope.dampingFactor; + sphericalDelta.phi *= 1 - scope.dampingFactor; - panOffset.multiplyScalar(1 - scope.dampingFactor); - } else { + panOffset.multiplyScalar(1 - scope.dampingFactor); + } else { - sphericalDelta.set(0, 0, 0); + sphericalDelta.set(0, 0, 0); - panOffset.set(0, 0, 0); - } + panOffset.set(0, 0, 0); + } - scale = 1; + scale = 1; - // update condition is: - // min(camera displacement, camera rotation in radians)^2 > EPS - // using small-angle approximation cos(x/2) = 1 - x^2 / 8 + // update condition is: + // min(camera displacement, camera rotation in radians)^2 > EPS + // using small-angle approximation cos(x/2) = 1 - x^2 / 8 - if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) { + if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) { - scope.dispatchEvent(changeEvent); + scope.dispatchEvent(changeEvent); - lastPosition.copy(scope.object.position); - lastQuaternion.copy(scope.object.quaternion); - zoomChanged = false; + lastPosition.copy(scope.object.position); + lastQuaternion.copy(scope.object.quaternion); + zoomChanged = false; - return true; - } + return true; + } - return false; - }; - }(); + return false; + }; + }(); - this.dispose = function () { + this.dispose = function () { - scope.domElement.removeEventListener('contextmenu', onContextMenu, false); - scope.domElement.removeEventListener('mousedown', onMouseDown, false); - scope.domElement.removeEventListener('wheel', onMouseWheel, false); + scope.domElement.removeEventListener('contextmenu', onContextMenu, false); + scope.domElement.removeEventListener('mousedown', onMouseDown, false); + scope.domElement.removeEventListener('wheel', onMouseWheel, false); - scope.domElement.removeEventListener('touchstart', onTouchStart, false); - scope.domElement.removeEventListener('touchend', onTouchEnd, false); - scope.domElement.removeEventListener('touchmove', onTouchMove, false); + scope.domElement.removeEventListener('touchstart', onTouchStart, false); + scope.domElement.removeEventListener('touchend', onTouchEnd, false); + scope.domElement.removeEventListener('touchmove', onTouchMove, false); - document.removeEventListener('mousemove', onMouseMove, false); - document.removeEventListener('mouseup', onMouseUp, false); + document.removeEventListener('mousemove', onMouseMove, false); + document.removeEventListener('mouseup', onMouseUp, false); - window.removeEventListener('keydown', onKeyDown, false); + window.removeEventListener('keydown', onKeyDown, false); - //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here? - }; + //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here? + }; - // - // internals - // + // + // internals + // - var scope = this; + var scope = this; - var changeEvent = { type: 'change' }; - var startEvent = { type: 'start' }; - var endEvent = { type: 'end' }; + var changeEvent = { type: 'change' }; + var startEvent = { type: 'start' }; + var endEvent = { type: 'end' }; - var STATE = { NONE: -1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY_PAN: 4 }; + var STATE = { NONE: -1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY_PAN: 4 }; - var state = STATE.NONE; + var state = STATE.NONE; - var EPS = 0.000001; + var EPS = 0.000001; - // current position in spherical coordinates - var spherical = new three.Spherical(); - var sphericalDelta = new three.Spherical(); + // current position in spherical coordinates + var spherical = new three.Spherical(); + var sphericalDelta = new three.Spherical(); - var scale = 1; - var panOffset = new three.Vector3(); - var zoomChanged = false; + var scale = 1; + var panOffset = new three.Vector3(); + var zoomChanged = false; - var rotateStart = new three.Vector2(); - var rotateEnd = new three.Vector2(); - var rotateDelta = new three.Vector2(); + var rotateStart = new three.Vector2(); + var rotateEnd = new three.Vector2(); + var rotateDelta = new three.Vector2(); - var panStart = new three.Vector2(); - var panEnd = new three.Vector2(); - var panDelta = new three.Vector2(); + var panStart = new three.Vector2(); + var panEnd = new three.Vector2(); + var panDelta = new three.Vector2(); - var dollyStart = new three.Vector2(); - var dollyEnd = new three.Vector2(); - var dollyDelta = new three.Vector2(); + var dollyStart = new three.Vector2(); + var dollyEnd = new three.Vector2(); + var dollyDelta = new three.Vector2(); - function getAutoRotationAngle() { + function getAutoRotationAngle() { - return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; - } + return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; + } - function getZoomScale() { + function getZoomScale() { - return Math.pow(0.95, scope.zoomSpeed); - } + return Math.pow(0.95, scope.zoomSpeed); + } - function rotateLeft(angle) { + function rotateLeft(angle) { - sphericalDelta.theta -= angle; - } + sphericalDelta.theta -= angle; + } - function rotateUp(angle) { + function rotateUp(angle) { - sphericalDelta.phi -= angle; - } + sphericalDelta.phi -= angle; + } - var panLeft = function () { + var panLeft = function () { - var v = new three.Vector3(); + var v = new three.Vector3(); - return function panLeft(distance, objectMatrix) { + return function panLeft(distance, objectMatrix) { - v.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix - v.multiplyScalar(-distance); + v.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix + v.multiplyScalar(-distance); - panOffset.add(v); - }; - }(); + panOffset.add(v); + }; + }(); - var panUp = function () { + var panUp = function () { - var v = new three.Vector3(); + var v = new three.Vector3(); - return function panUp(distance, objectMatrix) { + return function panUp(distance, objectMatrix) { - if (scope.screenSpacePanning === true) { + if (scope.screenSpacePanning === true) { - v.setFromMatrixColumn(objectMatrix, 1); - } else { + v.setFromMatrixColumn(objectMatrix, 1); + } else { - v.setFromMatrixColumn(objectMatrix, 0); - v.crossVectors(scope.object.up, v); - } + v.setFromMatrixColumn(objectMatrix, 0); + v.crossVectors(scope.object.up, v); + } - v.multiplyScalar(distance); + v.multiplyScalar(distance); - panOffset.add(v); - }; - }(); + panOffset.add(v); + }; + }(); - // deltaX and deltaY are in pixels; right and down are positive - var pan = function () { + // deltaX and deltaY are in pixels; right and down are positive + var pan = function () { - var offset = new three.Vector3(); + var offset = new three.Vector3(); - return function pan(deltaX, deltaY) { + return function pan(deltaX, deltaY) { - var element = scope.domElement === document ? scope.domElement.body : scope.domElement; + var element = scope.domElement === document ? scope.domElement.body : scope.domElement; - if (scope.object.isPerspectiveCamera) { + if (scope.object.isPerspectiveCamera) { - // perspective - var position = scope.object.position; - offset.copy(position).sub(scope.target); - var targetDistance = offset.length(); + // perspective + var position = scope.object.position; + offset.copy(position).sub(scope.target); + var targetDistance = offset.length(); - // half of the fov is center to top of screen - targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180.0); + // half of the fov is center to top of screen + targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180.0); - // we use only clientHeight here so aspect ratio does not distort speed - panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix); - panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix); - } else if (scope.object.isOrthographicCamera) { + // we use only clientHeight here so aspect ratio does not distort speed + panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix); + panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix); + } else if (scope.object.isOrthographicCamera) { - // orthographic - panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix); - panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix); - } else { + // orthographic + panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix); + panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix); + } else { - // camera neither orthographic nor perspective - console.warn('WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.'); - scope.enablePan = false; - } - }; - }(); + // camera neither orthographic nor perspective + console.warn('WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.'); + scope.enablePan = false; + } + }; + }(); - function dollyIn(dollyScale) { + function dollyIn(dollyScale) { - if (scope.object.isPerspectiveCamera) { + if (scope.object.isPerspectiveCamera) { - scale /= dollyScale; - } else if (scope.object.isOrthographicCamera) { + scale /= dollyScale; + } else if (scope.object.isOrthographicCamera) { - scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale)); - scope.object.updateProjectionMatrix(); - zoomChanged = true; - } else { + scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale)); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + } else { - console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.'); - scope.enableZoom = false; - } - } + console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.'); + scope.enableZoom = false; + } + } - function dollyOut(dollyScale) { + function dollyOut(dollyScale) { - if (scope.object.isPerspectiveCamera) { + if (scope.object.isPerspectiveCamera) { - scale *= dollyScale; - } else if (scope.object.isOrthographicCamera) { + scale *= dollyScale; + } else if (scope.object.isOrthographicCamera) { - scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale)); - scope.object.updateProjectionMatrix(); - zoomChanged = true; - } else { + scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale)); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + } else { - console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.'); - scope.enableZoom = false; - } - } + console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.'); + scope.enableZoom = false; + } + } - // - // event callbacks - update the object state - // + // + // event callbacks - update the object state + // - function handleMouseDownRotate(event) { + function handleMouseDownRotate(event) { - //console.log( 'handleMouseDownRotate' ); + //console.log( 'handleMouseDownRotate' ); - rotateStart.set(event.clientX, event.clientY); - } + rotateStart.set(event.clientX, event.clientY); + } - function handleMouseDownDolly(event) { + function handleMouseDownDolly(event) { - //console.log( 'handleMouseDownDolly' ); + //console.log( 'handleMouseDownDolly' ); - dollyStart.set(event.clientX, event.clientY); - } + dollyStart.set(event.clientX, event.clientY); + } - function handleMouseDownPan(event) { + function handleMouseDownPan(event) { - //console.log( 'handleMouseDownPan' ); + //console.log( 'handleMouseDownPan' ); - panStart.set(event.clientX, event.clientY); - } + panStart.set(event.clientX, event.clientY); + } - function handleMouseMoveRotate(event) { + function handleMouseMoveRotate(event) { - //console.log( 'handleMouseMoveRotate' ); + //console.log( 'handleMouseMoveRotate' ); - rotateEnd.set(event.clientX, event.clientY); + rotateEnd.set(event.clientX, event.clientY); - rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); + rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); - var element = scope.domElement === document ? scope.domElement.body : scope.domElement; + var element = scope.domElement === document ? scope.domElement.body : scope.domElement; - rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height + rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height - rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); + rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); - rotateStart.copy(rotateEnd); + rotateStart.copy(rotateEnd); - scope.update(); - } + scope.update(); + } - function handleMouseMoveDolly(event) { + function handleMouseMoveDolly(event) { - //console.log( 'handleMouseMoveDolly' ); + //console.log( 'handleMouseMoveDolly' ); - dollyEnd.set(event.clientX, event.clientY); + dollyEnd.set(event.clientX, event.clientY); - dollyDelta.subVectors(dollyEnd, dollyStart); + dollyDelta.subVectors(dollyEnd, dollyStart); - if (dollyDelta.y > 0) { + if (dollyDelta.y > 0) { - dollyIn(getZoomScale()); - } else if (dollyDelta.y < 0) { + dollyIn(getZoomScale()); + } else if (dollyDelta.y < 0) { - dollyOut(getZoomScale()); - } + dollyOut(getZoomScale()); + } - dollyStart.copy(dollyEnd); + dollyStart.copy(dollyEnd); - scope.update(); - } + scope.update(); + } - function handleMouseMovePan(event) { + function handleMouseMovePan(event) { - //console.log( 'handleMouseMovePan' ); + //console.log( 'handleMouseMovePan' ); - panEnd.set(event.clientX, event.clientY); + panEnd.set(event.clientX, event.clientY); - panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); + panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); - pan(panDelta.x, panDelta.y); + pan(panDelta.x, panDelta.y); - panStart.copy(panEnd); + panStart.copy(panEnd); - scope.update(); - } + scope.update(); + } - function handleMouseUp(event) { + function handleMouseUp(event) { - // console.log( 'handleMouseUp' ); + // console.log( 'handleMouseUp' ); - } + } - function handleMouseWheel(event) { + function handleMouseWheel(event) { - // console.log( 'handleMouseWheel' ); + // console.log( 'handleMouseWheel' ); - if (event.deltaY < 0) { + if (event.deltaY < 0) { - dollyOut(getZoomScale()); - } else if (event.deltaY > 0) { + dollyOut(getZoomScale()); + } else if (event.deltaY > 0) { - dollyIn(getZoomScale()); - } + dollyIn(getZoomScale()); + } - scope.update(); - } + scope.update(); + } - function handleKeyDown(event) { + function handleKeyDown(event) { - //console.log( 'handleKeyDown' ); + //console.log( 'handleKeyDown' ); - switch (event.keyCode) { + switch (event.keyCode) { - case scope.keys.UP: - pan(0, scope.keyPanSpeed); - scope.update(); - break; + case scope.keys.UP: + pan(0, scope.keyPanSpeed); + scope.update(); + break; - case scope.keys.BOTTOM: - pan(0, -scope.keyPanSpeed); - scope.update(); - break; + case scope.keys.BOTTOM: + pan(0, -scope.keyPanSpeed); + scope.update(); + break; - case scope.keys.LEFT: - pan(scope.keyPanSpeed, 0); - scope.update(); - break; + case scope.keys.LEFT: + pan(scope.keyPanSpeed, 0); + scope.update(); + break; - case scope.keys.RIGHT: - pan(-scope.keyPanSpeed, 0); - scope.update(); - break; + case scope.keys.RIGHT: + pan(-scope.keyPanSpeed, 0); + scope.update(); + break; - } - } + } + } - function handleTouchStartRotate(event) { + function handleTouchStartRotate(event) { - //console.log( 'handleTouchStartRotate' ); + //console.log( 'handleTouchStartRotate' ); - rotateStart.set(event.touches[0].pageX, event.touches[0].pageY); - } + rotateStart.set(event.touches[0].pageX, event.touches[0].pageY); + } - function handleTouchStartDollyPan(event) { + function handleTouchStartDollyPan(event) { - //console.log( 'handleTouchStartDollyPan' ); + //console.log( 'handleTouchStartDollyPan' ); - if (scope.enableZoom) { + if (scope.enableZoom) { - var dx = event.touches[0].pageX - event.touches[1].pageX; - var dy = event.touches[0].pageY - event.touches[1].pageY; + var dx = event.touches[0].pageX - event.touches[1].pageX; + var dy = event.touches[0].pageY - event.touches[1].pageY; - var distance = Math.sqrt(dx * dx + dy * dy); + var distance = Math.sqrt(dx * dx + dy * dy); - dollyStart.set(0, distance); - } + dollyStart.set(0, distance); + } - if (scope.enablePan) { + if (scope.enablePan) { - var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); - var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); + var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); + var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); - panStart.set(x, y); - } - } + panStart.set(x, y); + } + } - function handleTouchMoveRotate(event) { + function handleTouchMoveRotate(event) { - //console.log( 'handleTouchMoveRotate' ); + //console.log( 'handleTouchMoveRotate' ); - rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY); + rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY); - rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); + rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); - var element = scope.domElement === document ? scope.domElement.body : scope.domElement; + var element = scope.domElement === document ? scope.domElement.body : scope.domElement; - rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height + rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height - rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); + rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); - rotateStart.copy(rotateEnd); + rotateStart.copy(rotateEnd); - scope.update(); - } + scope.update(); + } - function handleTouchMoveDollyPan(event) { + function handleTouchMoveDollyPan(event) { - //console.log( 'handleTouchMoveDollyPan' ); + //console.log( 'handleTouchMoveDollyPan' ); - if (scope.enableZoom) { + if (scope.enableZoom) { - var dx = event.touches[0].pageX - event.touches[1].pageX; - var dy = event.touches[0].pageY - event.touches[1].pageY; + var dx = event.touches[0].pageX - event.touches[1].pageX; + var dy = event.touches[0].pageY - event.touches[1].pageY; - var distance = Math.sqrt(dx * dx + dy * dy); + var distance = Math.sqrt(dx * dx + dy * dy); - dollyEnd.set(0, distance); + dollyEnd.set(0, distance); - dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed)); + dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed)); - dollyIn(dollyDelta.y); + dollyIn(dollyDelta.y); - dollyStart.copy(dollyEnd); - } + dollyStart.copy(dollyEnd); + } - if (scope.enablePan) { + if (scope.enablePan) { - var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); - var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); + var x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX); + var y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY); - panEnd.set(x, y); + panEnd.set(x, y); - panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); + panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); - pan(panDelta.x, panDelta.y); + pan(panDelta.x, panDelta.y); - panStart.copy(panEnd); - } + panStart.copy(panEnd); + } - scope.update(); - } + scope.update(); + } - function handleTouchEnd(event) {} + function handleTouchEnd(event) {} - //console.log( 'handleTouchEnd' ); + //console.log( 'handleTouchEnd' ); - // - // event handlers - FSM: listen for events and reset state - // + // + // event handlers - FSM: listen for events and reset state + // - function onMouseDown(event) { + function onMouseDown(event) { - if (scope.enabled === false) return; + if (scope.enabled === false) return; - if (scope.preventDefault === true) event.preventDefault(); + if (scope.preventDefault === true) event.preventDefault(); - switch (event.button) { + switch (event.button) { - case scope.mouseButtons.LEFT: + case scope.mouseButtons.LEFT: - if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (event.ctrlKey || event.metaKey || event.shiftKey) { - if (scope.enablePan === false) return; + if (scope.enablePan === false) return; - handleMouseDownPan(event); + handleMouseDownPan(event); - state = STATE.PAN; - } else { + state = STATE.PAN; + } else { - if (scope.enableRotate === false) return; + if (scope.enableRotate === false) return; - handleMouseDownRotate(event); + handleMouseDownRotate(event); - state = STATE.ROTATE; - } + state = STATE.ROTATE; + } - break; + break; - case scope.mouseButtons.MIDDLE: + case scope.mouseButtons.MIDDLE: - if (scope.enableZoom === false) return; + if (scope.enableZoom === false) return; - handleMouseDownDolly(event); + handleMouseDownDolly(event); - state = STATE.DOLLY; + state = STATE.DOLLY; - break; + break; - case scope.mouseButtons.RIGHT: + case scope.mouseButtons.RIGHT: - if (scope.enablePan === false) return; + if (scope.enablePan === false) return; - handleMouseDownPan(event); + handleMouseDownPan(event); - state = STATE.PAN; + state = STATE.PAN; - break; + break; - } + } - if (state !== STATE.NONE) { + if (state !== STATE.NONE) { - document.addEventListener('mousemove', onMouseMove, false); - document.addEventListener('mouseup', onMouseUp, false); + document.addEventListener('mousemove', onMouseMove, false); + document.addEventListener('mouseup', onMouseUp, false); - scope.dispatchEvent(startEvent); - } - } + scope.dispatchEvent(startEvent); + } + } - function onMouseMove(event) { + function onMouseMove(event) { - if (scope.enabled === false) return; + if (scope.enabled === false) return; - if (scope.preventDefault === true) event.preventDefault(); + if (scope.preventDefault === true) event.preventDefault(); - switch (state) { + switch (state) { - case STATE.ROTATE: + case STATE.ROTATE: - if (scope.enableRotate === false) return; + if (scope.enableRotate === false) return; - handleMouseMoveRotate(event); + handleMouseMoveRotate(event); - break; + break; - case STATE.DOLLY: + case STATE.DOLLY: - if (scope.enableZoom === false) return; + if (scope.enableZoom === false) return; - handleMouseMoveDolly(event); + handleMouseMoveDolly(event); - break; + break; - case STATE.PAN: + case STATE.PAN: - if (scope.enablePan === false) return; + if (scope.enablePan === false) return; - handleMouseMovePan(event); + handleMouseMovePan(event); - break; + break; - } - } + } + } - function onMouseUp(event) { + function onMouseUp(event) { - if (scope.enabled === false) return; + if (scope.enabled === false) return; - handleMouseUp(event); + handleMouseUp(event); - document.removeEventListener('mousemove', onMouseMove, false); - document.removeEventListener('mouseup', onMouseUp, false); + document.removeEventListener('mousemove', onMouseMove, false); + document.removeEventListener('mouseup', onMouseUp, false); - scope.dispatchEvent(endEvent); + scope.dispatchEvent(endEvent); - state = STATE.NONE; - } + state = STATE.NONE; + } - function onMouseWheel(event) { + function onMouseWheel(event) { - if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE && state !== STATE.ROTATE) return; + if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE && state !== STATE.ROTATE) return; - if (scope.preventDefault === true) { - event.preventDefault(); - event.stopPropagation(); - } + if (scope.preventDefault === true) { + event.preventDefault(); + event.stopPropagation(); + } - scope.dispatchEvent(startEvent); + scope.dispatchEvent(startEvent); - handleMouseWheel(event); + handleMouseWheel(event); - scope.dispatchEvent(endEvent); - } + scope.dispatchEvent(endEvent); + } - function onKeyDown(event) { + function onKeyDown(event) { - if (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false) return; + if (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false) return; - handleKeyDown(event); - } + handleKeyDown(event); + } - function onTouchStart(event) { + function onTouchStart(event) { - if (scope.enabled === false) return; + if (scope.enabled === false) return; - if (scope.preventDefault === true) event.preventDefault(); + if (scope.preventDefault === true) event.preventDefault(); - switch (event.touches.length) { + switch (event.touches.length) { - case 1: - // one-fingered touch: rotate + case 1: + // one-fingered touch: rotate - if (scope.enableRotate === false) return; + if (scope.enableRotate === false) return; - handleTouchStartRotate(event); + handleTouchStartRotate(event); - state = STATE.TOUCH_ROTATE; + state = STATE.TOUCH_ROTATE; - break; + break; - case 2: - // two-fingered touch: dolly-pan + case 2: + // two-fingered touch: dolly-pan - if (scope.enableZoom === false && scope.enablePan === false) return; + if (scope.enableZoom === false && scope.enablePan === false) return; - handleTouchStartDollyPan(event); + handleTouchStartDollyPan(event); - state = STATE.TOUCH_DOLLY_PAN; + state = STATE.TOUCH_DOLLY_PAN; - break; + break; - default: + default: - state = STATE.NONE; + state = STATE.NONE; - } + } - if (state !== STATE.NONE) { + if (state !== STATE.NONE) { - scope.dispatchEvent(startEvent); - } - } + scope.dispatchEvent(startEvent); + } + } - function onTouchMove(event) { + function onTouchMove(event) { - if (scope.enabled === false) return; + if (scope.enabled === false) return; - if (scope.preventDefault === true) { - event.preventDefault(); - event.stopPropagation(); - } + if (scope.preventDefault === true) { + event.preventDefault(); + event.stopPropagation(); + } - switch (event.touches.length) { + switch (event.touches.length) { - case 1: - // one-fingered touch: rotate + case 1: + // one-fingered touch: rotate - if (scope.enableRotate === false) return; - if (state !== STATE.TOUCH_ROTATE) return; // is this needed? + if (scope.enableRotate === false) return; + if (state !== STATE.TOUCH_ROTATE) return; // is this needed? - handleTouchMoveRotate(event); + handleTouchMoveRotate(event); - break; + break; - case 2: - // two-fingered touch: dolly-pan + case 2: + // two-fingered touch: dolly-pan - if (scope.enableZoom === false && scope.enablePan === false) return; - if (state !== STATE.TOUCH_DOLLY_PAN) return; // is this needed? + if (scope.enableZoom === false && scope.enablePan === false) return; + if (state !== STATE.TOUCH_DOLLY_PAN) return; // is this needed? - handleTouchMoveDollyPan(event); + handleTouchMoveDollyPan(event); - break; + break; - default: + default: - state = STATE.NONE; + state = STATE.NONE; - } - } + } + } - function onTouchEnd(event) { + function onTouchEnd(event) { - if (scope.enabled === false) return; + if (scope.enabled === false) return; - handleTouchEnd(event); + handleTouchEnd(event); - scope.dispatchEvent(endEvent); + scope.dispatchEvent(endEvent); - state = STATE.NONE; - } + state = STATE.NONE; + } - function onContextMenu(event) { + function onContextMenu(event) { - if (scope.enabled === false) return; + if (scope.enabled === false) return; - if (scope.preventDefault === true) event.preventDefault(); - } + if (scope.preventDefault === true) event.preventDefault(); + } - // + // - scope.domElement.addEventListener('contextmenu', onContextMenu, false); + scope.domElement.addEventListener('contextmenu', onContextMenu, false); - scope.domElement.addEventListener('mousedown', onMouseDown, false); - scope.domElement.addEventListener('wheel', onMouseWheel, false); + scope.domElement.addEventListener('mousedown', onMouseDown, false); + scope.domElement.addEventListener('wheel', onMouseWheel, false); - scope.domElement.addEventListener('touchstart', onTouchStart, false); - scope.domElement.addEventListener('touchend', onTouchEnd, false); - scope.domElement.addEventListener('touchmove', onTouchMove, false); + scope.domElement.addEventListener('touchstart', onTouchStart, false); + scope.domElement.addEventListener('touchend', onTouchEnd, false); + scope.domElement.addEventListener('touchmove', onTouchMove, false); - window.addEventListener('keydown', onKeyDown, false); + window.addEventListener('keydown', onKeyDown, false); - // force an update at start + // force an update at start - this.update(); - }; + this.update(); + }; - OrbitControls.prototype = Object.create(three.EventDispatcher.prototype); - OrbitControls.prototype.constructor = OrbitControls; + OrbitControls.prototype = Object.create(three.EventDispatcher.prototype); + OrbitControls.prototype.constructor = OrbitControls; - Object.defineProperties(OrbitControls.prototype, { + Object.defineProperties(OrbitControls.prototype, { - center: { + center: { - get: function () { + get: function get() { - console.warn('THREE.OrbitControls: .center has been renamed to .target'); - return this.target; - } + console.warn('THREE.OrbitControls: .center has been renamed to .target'); + return this.target; + } - }, + }, - // backward compatibility + // backward compatibility - noZoom: { + noZoom: { - get: function () { + get: function get() { - console.warn('THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.'); - return !this.enableZoom; - }, + console.warn('THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.'); + return !this.enableZoom; + }, - set: function (value) { + set: function set(value) { - console.warn('THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.'); - this.enableZoom = !value; - } + console.warn('THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.'); + this.enableZoom = !value; + } - }, + }, - noRotate: { + noRotate: { - get: function () { + get: function get() { - console.warn('THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.'); - return !this.enableRotate; - }, + console.warn('THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.'); + return !this.enableRotate; + }, - set: function (value) { + set: function set(value) { - console.warn('THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.'); - this.enableRotate = !value; - } + console.warn('THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.'); + this.enableRotate = !value; + } - }, + }, - noPan: { + noPan: { - get: function () { + get: function get() { - console.warn('THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.'); - return !this.enablePan; - }, + console.warn('THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.'); + return !this.enablePan; + }, - set: function (value) { + set: function set(value) { - console.warn('THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.'); - this.enablePan = !value; - } + console.warn('THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.'); + this.enablePan = !value; + } - }, + }, - noKeys: { + noKeys: { - get: function () { + get: function get() { - console.warn('THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.'); - return !this.enableKeys; - }, + console.warn('THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.'); + return !this.enableKeys; + }, - set: function (value) { + set: function set(value) { - console.warn('THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.'); - this.enableKeys = !value; - } + console.warn('THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.'); + this.enableKeys = !value; + } - }, + }, - staticMoving: { + staticMoving: { - get: function () { + get: function get() { - console.warn('THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.'); - return !this.enableDamping; - }, + console.warn('THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.'); + return !this.enableDamping; + }, - set: function (value) { + set: function set(value) { - console.warn('THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.'); - this.enableDamping = !value; - } + console.warn('THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.'); + this.enableDamping = !value; + } - }, + }, - dynamicDampingFactor: { + dynamicDampingFactor: { - get: function () { + get: function get() { - console.warn('THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.'); - return this.dampingFactor; - }, + console.warn('THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.'); + return this.dampingFactor; + }, - set: function (value) { + set: function set(value) { - console.warn('THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.'); - this.dampingFactor = value; - } + console.warn('THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.'); + this.dampingFactor = value; + } - } + } - }); + }); - return OrbitControls; + return OrbitControls; }; @@ -28947,6 +28708,12 @@ const orbit = (three = window.THREE) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "trackball", function() { return trackball; }); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Original authors from THREEJS repo * @author Eberhard Graether / http://egraether.com/ @@ -28955,18 +28722,24 @@ __webpack_require__.r(__webpack_exports__); * @author Luca Antiga / http://lantiga.github.io */ -const trackball = (three = window.THREE) => { +var trackball = function trackball() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.EventDispatcher === undefined) { return null; } - const Constructor = three.EventDispatcher; - return class extends Constructor { - constructor(object, domElement) { - super(); + var Constructor = three.EventDispatcher; + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(object, domElement) { + _classCallCheck(this, _class); + + var _this2 = _possibleConstructorReturn(this, _Constructor.call(this)); - let _this = this; - let STATE = { + var _this = _this2; + var STATE = { NONE: -1, ROTATE: 0, ZOOM: 1, @@ -28977,43 +28750,43 @@ const trackball = (three = window.THREE) => { CUSTOM: 99 }; - this.object = object; - this.domElement = domElement !== undefined ? domElement : document; + _this2.object = object; + _this2.domElement = domElement !== undefined ? domElement : document; // API - this.enabled = true; + _this2.enabled = true; - this.screen = { left: 0, top: 0, width: 0, height: 0 }; + _this2.screen = { left: 0, top: 0, width: 0, height: 0 }; - this.rotateSpeed = 1.0; - this.zoomSpeed = 1.2; - this.panSpeed = 0.3; + _this2.rotateSpeed = 1.0; + _this2.zoomSpeed = 1.2; + _this2.panSpeed = 0.3; - this.noRotate = false; - this.noZoom = false; - this.noPan = false; - this.noCustom = false; + _this2.noRotate = false; + _this2.noZoom = false; + _this2.noPan = false; + _this2.noCustom = false; - this.forceState = -1; + _this2.forceState = -1; - this.staticMoving = false; - this.dynamicDampingFactor = 0.2; + _this2.staticMoving = false; + _this2.dynamicDampingFactor = 0.2; - this.minDistance = 0; - this.maxDistance = Infinity; + _this2.minDistance = 0; + _this2.maxDistance = Infinity; - this.keys = [65 /* A*/, 83 /* S*/, 68]; + _this2.keys = [65 /* A*/, 83 /* S*/, 68]; // internals - this.target = new three.Vector3(); + _this2.target = new three.Vector3(); - let EPS = 0.000001; + var EPS = 0.000001; - let lastPosition = new three.Vector3(); + var lastPosition = new three.Vector3(); - let _state = STATE.NONE, + var _state = STATE.NONE, _prevState = STATE.NONE, _eye = new three.Vector3(), _movePrev = new three.Vector2(), @@ -29031,28 +28804,28 @@ const trackball = (three = window.THREE) => { // for reset - this.target0 = this.target.clone(); - this.position0 = this.object.position.clone(); - this.up0 = this.object.up.clone(); + _this2.target0 = _this2.target.clone(); + _this2.position0 = _this2.object.position.clone(); + _this2.up0 = _this2.object.up.clone(); // events - let changeEvent = { type: 'change' }; - let startEvent = { type: 'start' }; - let endEvent = { type: 'end' }; + var changeEvent = { type: 'change' }; + var startEvent = { type: 'start' }; + var endEvent = { type: 'end' }; // methods - this.handleResize = function () { + _this2.handleResize = function () { if (this.domElement === document) { this.screen.left = 0; this.screen.top = 0; this.screen.width = window.innerWidth; this.screen.height = window.innerHeight; } else { - let box = this.domElement.getBoundingClientRect(); + var box = this.domElement.getBoundingClientRect(); // adjustments come from similar code in the jquery offset() function - let d = this.domElement.ownerDocument.documentElement; + var d = this.domElement.ownerDocument.documentElement; this.screen.left = box.left + window.pageXOffset - d.clientLeft; this.screen.top = box.top + window.pageYOffset - d.clientTop; this.screen.width = box.width; @@ -29060,14 +28833,14 @@ const trackball = (three = window.THREE) => { } }; - this.handleEvent = function (event) { + _this2.handleEvent = function (event) { if (typeof this[event.type] == 'function') { this[event.type](event); } }; - let getMouseOnScreen = function () { - let vector = new three.Vector2(); + var getMouseOnScreen = function () { + var vector = new three.Vector2(); return function (pageX, pageY) { vector.set((pageX - _this.screen.left) / _this.screen.width, (pageY - _this.screen.top) / _this.screen.height); @@ -29076,8 +28849,8 @@ const trackball = (three = window.THREE) => { }; }(); - let getMouseOnCircle = function () { - let vector = new three.Vector2(); + var getMouseOnCircle = function () { + var vector = new three.Vector2(); return function (pageX, pageY) { vector.set((pageX - _this.screen.width * 0.5 - _this.screen.left) / (_this.screen.width * 0.5), (_this.screen.height + 2 * (_this.screen.top - pageY)) / _this.screen.width // screen.width intentional @@ -29087,14 +28860,14 @@ const trackball = (three = window.THREE) => { }; }(); - this.rotateCamera = function () { - let axis = new three.Vector3(), + _this2.rotateCamera = function () { + var axis = new three.Vector3(), quaternion = new three.Quaternion(), eyeDirection = new three.Vector3(), objectUpDirection = new three.Vector3(), objectSidewaysDirection = new three.Vector3(), moveDirection = new three.Vector3(), - angle; + angle = void 0; return function () { moveDirection.set(_moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0); @@ -29134,8 +28907,8 @@ const trackball = (three = window.THREE) => { }; }(); - this.zoomCamera = function () { - let factor; + _this2.zoomCamera = function () { + var factor = void 0; if (_state === STATE.TOUCH_ZOOM) { factor = _touchZoomDistanceStart / _touchZoomDistanceEnd; @@ -29156,8 +28929,8 @@ const trackball = (three = window.THREE) => { } }; - this.panCamera = function () { - let mouseChange = new three.Vector2(), + _this2.panCamera = function () { + var mouseChange = new three.Vector2(), objectUp = new three.Vector3(), pan = new three.Vector3(); @@ -29182,7 +28955,7 @@ const trackball = (three = window.THREE) => { }; }(); - this.checkDistances = function () { + _this2.checkDistances = function () { if (!_this.noZoom || !_this.noPan) { if (_eye.lengthSq() > _this.maxDistance * _this.maxDistance) { _this.object.position.addVectors(_this.target, _eye.setLength(_this.maxDistance)); @@ -29194,7 +28967,7 @@ const trackball = (three = window.THREE) => { } }; - this.update = function () { + _this2.update = function () { _eye.subVectors(_this.object.position, _this.target); if (!_this.noRotate) { @@ -29226,7 +28999,7 @@ const trackball = (three = window.THREE) => { } }; - this.reset = function () { + _this2.reset = function () { _state = STATE.NONE; _prevState = STATE.NONE; @@ -29243,13 +29016,13 @@ const trackball = (three = window.THREE) => { lastPosition.copy(_this.object.position); }; - this.setState = function (targetState) { + _this2.setState = function (targetState) { _this.forceState = targetState; _prevState = targetState; _state = targetState; }; - this.custom = function (customStart, customEnd) {}; + _this2.custom = function (customStart, customEnd) {}; // listeners @@ -29591,7 +29364,7 @@ const trackball = (three = window.THREE) => { event.preventDefault(); } - this.dispose = function () { + _this2.dispose = function () { this.domElement.removeEventListener('contextmenu', contextmenu, false); this.domElement.removeEventListener('mousedown', mousedown, false); this.domElement.removeEventListener('wheel', mousewheel, false); @@ -29604,23 +29377,26 @@ const trackball = (three = window.THREE) => { window.removeEventListener('keyup', keyup, false); }; - this.domElement.addEventListener('contextmenu', contextmenu, false); - this.domElement.addEventListener('mousedown', mousedown, false); - this.domElement.addEventListener('wheel', mousewheel, false); + _this2.domElement.addEventListener('contextmenu', contextmenu, false); + _this2.domElement.addEventListener('mousedown', mousedown, false); + _this2.domElement.addEventListener('wheel', mousewheel, false); - this.domElement.addEventListener('touchstart', touchstart, false); - this.domElement.addEventListener('touchend', touchend, false); - this.domElement.addEventListener('touchmove', touchmove, false); + _this2.domElement.addEventListener('touchstart', touchstart, false); + _this2.domElement.addEventListener('touchend', touchend, false); + _this2.domElement.addEventListener('touchmove', touchmove, false); window.addEventListener('keydown', keydown, false); window.addEventListener('keyup', keyup, false); - this.handleResize(); + _this2.handleResize(); // force an update at start - this.update(); + _this2.update(); + return _this2; } - }; + + return _class; + }(Constructor); }; // export factory @@ -29640,6 +29416,12 @@ const trackball = (three = window.THREE) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "trackballOrtho", function() { return trackballOrtho; }); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * @author Eberhard Graether / http://egraether.com/ * @author Mark Lundin / http://mark-lundin.com @@ -29647,57 +29429,65 @@ __webpack_require__.r(__webpack_exports__); * @author Max Smolens / https://github.com/msmolens */ -const trackballOrtho = (three = window.THREE) => { +var trackballOrtho = function trackballOrtho() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.EventDispatcher === undefined) { return null; } - const Constructor = three.EventDispatcher; - return class extends Constructor { - constructor(object, domElement, state = { - NONE: -1, - ROTATE: 1, - ZOOM: 2, - PAN: 0, - SCROLL: 4, - TOUCH_ROTATE: 4, - TOUCH_ZOOM_PAN: 5 - }) { - super(); + var Constructor = three.EventDispatcher; + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(object, domElement) { + var state = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { + NONE: -1, + ROTATE: 1, + ZOOM: 2, + PAN: 0, + SCROLL: 4, + TOUCH_ROTATE: 4, + TOUCH_ZOOM_PAN: 5 + }; + + _classCallCheck(this, _class); - let _this = this; - let STATE = state; + var _this2 = _possibleConstructorReturn(this, _Constructor.call(this)); - this.object = object; - this.domElement = domElement !== undefined ? domElement : document; + var _this = _this2; + var STATE = state; + + _this2.object = object; + _this2.domElement = domElement !== undefined ? domElement : document; // API - this.enabled = true; + _this2.enabled = true; - this.screen = { left: 0, top: 0, width: 0, height: 0 }; + _this2.screen = { left: 0, top: 0, width: 0, height: 0 }; - this.radius = 0; + _this2.radius = 0; - this.zoomSpeed = 1.2; + _this2.zoomSpeed = 1.2; - this.noZoom = false; - this.noPan = false; + _this2.noZoom = false; + _this2.noPan = false; - this.staticMoving = false; - this.dynamicDampingFactor = 0.2; + _this2.staticMoving = false; + _this2.dynamicDampingFactor = 0.2; - this.keys = [65 /* A*/, 83 /* S*/, 68]; + _this2.keys = [65 /* A*/, 83 /* S*/, 68]; // internals - this.target = new three.Vector3(); + _this2.target = new three.Vector3(); - let EPS = 0.000001; + var EPS = 0.000001; - let _changed = true; + var _changed = true; - let _state = STATE.NONE, + var _state = STATE.NONE, _prevState = STATE.NONE, _eye = new three.Vector3(), _zoomStart = new three.Vector2(), @@ -29711,33 +29501,33 @@ const trackballOrtho = (three = window.THREE) => { // for reset - this.target0 = this.target.clone(); - this.position0 = this.object.position.clone(); - this.up0 = this.object.up.clone(); + _this2.target0 = _this2.target.clone(); + _this2.position0 = _this2.object.position.clone(); + _this2.up0 = _this2.object.up.clone(); - this.left0 = this.object.left; - this.right0 = this.object.right; - this.top0 = this.object.top; - this.bottom0 = this.object.bottom; + _this2.left0 = _this2.object.left; + _this2.right0 = _this2.object.right; + _this2.top0 = _this2.object.top; + _this2.bottom0 = _this2.object.bottom; // events - let changeEvent = { type: 'change' }; - let startEvent = { type: 'start' }; - let endEvent = { type: 'end' }; + var changeEvent = { type: 'change' }; + var startEvent = { type: 'start' }; + var endEvent = { type: 'end' }; // methods - this.handleResize = function () { + _this2.handleResize = function () { if (this.domElement === document) { this.screen.left = 0; this.screen.top = 0; this.screen.width = window.innerWidth; this.screen.height = window.innerHeight; } else { - let box = this.domElement.getBoundingClientRect(); + var box = this.domElement.getBoundingClientRect(); // adjustments come from similar code in the jquery offset() function - let d = this.domElement.ownerDocument.documentElement; + var d = this.domElement.ownerDocument.documentElement; this.screen.left = box.left + window.pageXOffset - d.clientLeft; this.screen.top = box.top + window.pageYOffset - d.clientTop; this.screen.width = box.width; @@ -29752,14 +29542,14 @@ const trackballOrtho = (three = window.THREE) => { this.bottom0 = this.object.bottom; }; - this.handleEvent = function (event) { + _this2.handleEvent = function (event) { if (typeof this[event.type] == 'function') { this[event.type](event); } }; - let getMouseOnScreen = function () { - let vector = new three.Vector2(); + var getMouseOnScreen = function () { + var vector = new three.Vector2(); return function getMouseOnScreen(pageX, pageY) { vector.set((pageX - _this.screen.left) / _this.screen.width, (pageY - _this.screen.top) / _this.screen.height); @@ -29768,7 +29558,7 @@ const trackballOrtho = (three = window.THREE) => { }; }(); - this.zoomCamera = function () { + _this2.zoomCamera = function () { if (_state === STATE.TOUCH_ZOOM_PAN) { var factor = _touchZoomDistanceEnd / _touchZoomDistanceStart; _touchZoomDistanceStart = _touchZoomDistanceEnd; @@ -29793,8 +29583,8 @@ const trackballOrtho = (three = window.THREE) => { } }; - this.panCamera = function () { - let mouseChange = new three.Vector2(), + _this2.panCamera = function () { + var mouseChange = new three.Vector2(), objectUp = new three.Vector3(), pan = new three.Vector3(); @@ -29803,8 +29593,8 @@ const trackballOrtho = (three = window.THREE) => { if (mouseChange.lengthSq()) { // Scale movement to keep clicked/dragged position under cursor - let scale_x = (_this.object.right - _this.object.left) / _this.object.zoom; - let scale_y = (_this.object.top - _this.object.bottom) / _this.object.zoom; + var scale_x = (_this.object.right - _this.object.left) / _this.object.zoom; + var scale_y = (_this.object.top - _this.object.bottom) / _this.object.zoom; mouseChange.x *= scale_x; mouseChange.y *= scale_y; @@ -29825,7 +29615,7 @@ const trackballOrtho = (three = window.THREE) => { }; }(); - this.update = function () { + _this2.update = function () { _eye.subVectors(_this.object.position, _this.target); if (!_this.noZoom) { @@ -29851,7 +29641,7 @@ const trackballOrtho = (three = window.THREE) => { } }; - this.reset = function () { + _this2.reset = function () { _state = STATE.NONE; _prevState = STATE.NONE; @@ -30050,7 +29840,7 @@ const trackballOrtho = (three = window.THREE) => { event.preventDefault(); } - this.dispose = function () { + _this2.dispose = function () { this.domElement.removeEventListener('contextmenu', contextmenu, false); this.domElement.removeEventListener('mousedown', mousedown, false); this.domElement.removeEventListener('wheel', mousewheel, false); @@ -30063,23 +29853,26 @@ const trackballOrtho = (three = window.THREE) => { window.removeEventListener('keyup', keyup, false); }; - this.domElement.addEventListener('contextmenu', contextmenu, false); - this.domElement.addEventListener('mousedown', mousedown, false); - this.domElement.addEventListener('wheel', mousewheel, false); + _this2.domElement.addEventListener('contextmenu', contextmenu, false); + _this2.domElement.addEventListener('mousedown', mousedown, false); + _this2.domElement.addEventListener('wheel', mousewheel, false); - this.domElement.addEventListener('touchstart', touchstart, false); - this.domElement.addEventListener('touchend', touchend, false); - this.domElement.addEventListener('touchmove', touchmove, false); + _this2.domElement.addEventListener('touchstart', touchstart, false); + _this2.domElement.addEventListener('touchend', touchend, false); + _this2.domElement.addEventListener('touchmove', touchmove, false); window.addEventListener('keydown', keydown, false); window.addEventListener('keyup', keyup, false); - this.handleResize(); + _this2.handleResize(); // force an update at start - this.update(); + _this2.update(); + return _this2; } - }; + + return _class; + }(Constructor); }; // export factory @@ -30227,11 +30020,12 @@ exports.default = Colors; "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Intersections; }); /* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core.utils */ "./src/core/core.utils.js"); /* harmony import */ var _core_validators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./core.validators */ "./src/core/core.validators.js"); /* harmony import */ var three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! three/src/math/Matrix4 */ "./node_modules/three/src/math/Matrix4.js"); /* harmony import */ var three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! three/src/math/Vector3 */ "./node_modules/three/src/math/Vector3.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + @@ -30244,7 +30038,11 @@ __webpack_require__.r(__webpack_exports__); * @module core/intersections */ -class Intersections { +var Intersections = function () { + function Intersections() { + _classCallCheck(this, Intersections); + } + /** * Compute intersection between oriented bounding box and a plane. * @@ -30296,7 +30094,7 @@ class Intersections { * //Returns false if invalid input? * */ - static aabbPlane(aabb, plane) { + Intersections.aabbPlane = function aabbPlane(aabb, plane) { // // obb = { halfDimensions, orientation, center, toAABB } // plane = { position, direction } @@ -30331,7 +30129,7 @@ class Intersections { // 2- Test Edges/ IJK Plane intersections // 3- Return intersection Edge/ IJK Plane if it touches the Oriented BBox - let intersections = []; + var intersections = []; if (!(this.validateAabb(aabb) && this.validatePlane(plane))) { window.console.log('Invalid aabb or plane provided.'); @@ -30339,17 +30137,17 @@ class Intersections { } // invert space matrix - let fromAABB = new three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_2__["Matrix4"](); + var fromAABB = new three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_2__["Matrix4"](); fromAABB.getInverse(aabb.toAABB); - let t1 = plane.direction.clone().applyMatrix4(aabb.toAABB); - let t0 = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](0, 0, 0).applyMatrix4(aabb.toAABB); + var t1 = plane.direction.clone().applyMatrix4(aabb.toAABB); + var t0 = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](0, 0, 0).applyMatrix4(aabb.toAABB); - let planeAABB = this.posdir(plane.position.clone().applyMatrix4(aabb.toAABB), new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](t1.x - t0.x, t1.y - t0.y, t1.z - t0.z).normalize()); + var planeAABB = this.posdir(plane.position.clone().applyMatrix4(aabb.toAABB), new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](t1.x - t0.x, t1.y - t0.y, t1.z - t0.z).normalize()); - let bbox = _core_utils__WEBPACK_IMPORTED_MODULE_0__["default"].bbox(aabb.center, aabb.halfDimensions); + var bbox = _core_utils__WEBPACK_IMPORTED_MODULE_0__["default"].bbox(aabb.center, aabb.halfDimensions); - let orientation = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](1, 0, 0), new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](0, 1, 0), new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](0, 0, 1)); + var orientation = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](1, 0, 0), new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](0, 1, 0), new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](0, 0, 1)); // 12 edges (i.e. ray)/plane intersection tests // RAYS STARTING FROM THE FIRST CORNER (0, 0, 0) @@ -30362,7 +30160,7 @@ class Intersections { // .' // + - let ray = this.posdir(new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](aabb.center.x - aabb.halfDimensions.x, aabb.center.y - aabb.halfDimensions.y, aabb.center.z - aabb.halfDimensions.z), orientation.x); + var ray = this.posdir(new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](aabb.center.x - aabb.halfDimensions.x, aabb.center.y - aabb.halfDimensions.y, aabb.center.z - aabb.halfDimensions.z), orientation.x); this.rayPlaneInBBox(ray, planeAABB, bbox, intersections); ray.direction = orientation.y; @@ -30382,7 +30180,7 @@ class Intersections { // + // - let ray2 = this.posdir(new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](aabb.center.x + aabb.halfDimensions.x, aabb.center.y + aabb.halfDimensions.y, aabb.center.z + aabb.halfDimensions.z), orientation.x); + var ray2 = this.posdir(new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](aabb.center.x + aabb.halfDimensions.x, aabb.center.y + aabb.halfDimensions.y, aabb.center.z + aabb.halfDimensions.z), orientation.x); this.rayPlaneInBBox(ray2, planeAABB, bbox, intersections); ray2.direction = orientation.y; @@ -30401,7 +30199,7 @@ class Intersections { // .' // +' - let ray3 = this.posdir(new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](aabb.center.x + aabb.halfDimensions.x, aabb.center.y - aabb.halfDimensions.y, aabb.center.z - aabb.halfDimensions.z), orientation.y); + var ray3 = this.posdir(new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](aabb.center.x + aabb.halfDimensions.x, aabb.center.y - aabb.halfDimensions.y, aabb.center.z - aabb.halfDimensions.z), orientation.y); this.rayPlaneInBBox(ray3, planeAABB, bbox, intersections); ray3.direction = orientation.z; @@ -30417,7 +30215,7 @@ class Intersections { // // - let ray4 = this.posdir(new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](aabb.center.x - aabb.halfDimensions.x, aabb.center.y + aabb.halfDimensions.y, aabb.center.z - aabb.halfDimensions.z), orientation.x); + var ray4 = this.posdir(new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](aabb.center.x - aabb.halfDimensions.x, aabb.center.y + aabb.halfDimensions.y, aabb.center.z - aabb.halfDimensions.z), orientation.x); this.rayPlaneInBBox(ray4, planeAABB, bbox, intersections); ray4.direction = orientation.z; @@ -30433,7 +30231,7 @@ class Intersections { // | // +-------+ - let ray5 = this.posdir(new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](aabb.center.x - aabb.halfDimensions.x, aabb.center.y - aabb.halfDimensions.y, aabb.center.z + aabb.halfDimensions.z), orientation.x); + var ray5 = this.posdir(new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](aabb.center.x - aabb.halfDimensions.x, aabb.center.y - aabb.halfDimensions.y, aabb.center.z + aabb.halfDimensions.z), orientation.x); this.rayPlaneInBBox(ray5, planeAABB, bbox, intersections); ray5.direction = orientation.y; @@ -30447,7 +30245,7 @@ class Intersections { }); return intersections; - } + }; /** * Compute intersection between a ray and a plane. @@ -30464,7 +30262,9 @@ class Intersections { * * @returns {Vector3|null} Intersection between ray and plane or null. */ - static rayPlane(ray, plane) { + + + Intersections.rayPlane = function rayPlane(ray, plane) { // ray: {position, direction} // plane: {position, direction} @@ -30499,15 +30299,15 @@ class Intersections { // 2- find t // 3- replace t in Px, Py and Pz to get the coordinate of the intersection // - let t = (plane.direction.x * (plane.position.x - ray.position.x) + plane.direction.y * (plane.position.y - ray.position.y) + plane.direction.z * (plane.position.z - ray.position.z)) / (plane.direction.x * ray.direction.x + plane.direction.y * ray.direction.y + plane.direction.z * ray.direction.z); + var t = (plane.direction.x * (plane.position.x - ray.position.x) + plane.direction.y * (plane.position.y - ray.position.y) + plane.direction.z * (plane.position.z - ray.position.z)) / (plane.direction.x * ray.direction.x + plane.direction.y * ray.direction.y + plane.direction.z * ray.direction.z); - let intersection = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](ray.position.x + t * ray.direction.x, ray.position.y + t * ray.direction.y, ray.position.z + t * ray.direction.z); + var intersection = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](ray.position.x + t * ray.direction.x, ray.position.y + t * ray.direction.y, ray.position.z + t * ray.direction.z); return intersection; } return null; - } + }; /** * Compute intersection between a ray and a box @@ -30515,19 +30315,21 @@ class Intersections { * @param {Object} box * @return {Array} */ - static rayBox(ray, box) { + + + Intersections.rayBox = function rayBox(ray, box) { // should also do the space transforms here // ray: {position, direction} // box: {halfDimensions, center} - let intersections = []; + var intersections = []; - let bbox = _core_utils__WEBPACK_IMPORTED_MODULE_0__["default"].bbox(box.center, box.halfDimensions); + var bbox = _core_utils__WEBPACK_IMPORTED_MODULE_0__["default"].bbox(box.center, box.halfDimensions); // window.console.log(bbox); // X min - let plane = this.posdir(new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](bbox.min.x, box.center.y, box.center.z), new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](-1, 0, 0)); + var plane = this.posdir(new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](bbox.min.x, box.center.y, box.center.z), new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_3__["Vector3"](-1, 0, 0)); this.rayPlaneInBBox(ray, plane, bbox, intersections); // X max @@ -30551,7 +30353,7 @@ class Intersections { this.rayPlaneInBBox(ray, plane, bbox, intersections); return intersections; - } + }; /** * Intersection between ray and a plane that are in a box. @@ -30560,21 +30362,25 @@ class Intersections { * @param {*} bbox * @param {*} intersections */ - static rayPlaneInBBox(ray, planeAABB, bbox, intersections) { - let intersection = this.rayPlane(ray, planeAABB); + + + Intersections.rayPlaneInBBox = function rayPlaneInBBox(ray, planeAABB, bbox, intersections) { + var intersection = this.rayPlane(ray, planeAABB); // window.console.log(intersection); if (intersection && this.inBBox(intersection, bbox)) { if (!intersections.find(this.findIntersection(intersection))) { intersections.push(intersection); } } - } + }; /** * Find intersection in array * @param {*} myintersection */ - static findIntersection(myintersection) { + + + Intersections.findIntersection = function findIntersection(myintersection) { return function found(element, index, array) { if (myintersection.x === element.x && myintersection.y === element.y && myintersection.z === element.z) { return true; @@ -30582,7 +30388,7 @@ class Intersections { return false; }; - } + }; /** * Is point in box. @@ -30590,20 +30396,22 @@ class Intersections { * @param {Object} bbox * @return {Boolean} */ - static inBBox(point, bbox) { + + + Intersections.inBBox = function inBBox(point, bbox) { // - let epsilon = 0.0001; + var epsilon = 0.0001; if (point && point.x >= bbox.min.x - epsilon && point.y >= bbox.min.y - epsilon && point.z >= bbox.min.z - epsilon && point.x <= bbox.max.x + epsilon && point.y <= bbox.max.y + epsilon && point.z <= bbox.max.z + epsilon) { return true; } return false; - } + }; - static posdir(position, direction) { - return { position, direction }; - } + Intersections.posdir = function posdir(position, direction) { + return { position: position, direction: direction }; + }; - static validatePlane(plane) { + Intersections.validatePlane = function validatePlane(plane) { // if (plane === null) { window.console.log('Invalid plane.'); @@ -30627,9 +30435,9 @@ class Intersections { } return true; - } + }; - static validateAabb(aabb) { + Intersections.validateAabb = function validateAabb(aabb) { // if (aabb === null) { window.console.log('Invalid aabb.'); @@ -30659,8 +30467,12 @@ class Intersections { } return true; - } -} + }; + + return Intersections; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (Intersections); /***/ }), @@ -30703,13 +30515,16 @@ __webpack_require__.r(__webpack_exports__); "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CoreUtils; }); /* harmony import */ var _core_validators__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core.validators */ "./src/core/core.validators.js"); /* harmony import */ var three_src_math_Box3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three/src/math/Box3 */ "./node_modules/three/src/math/Box3.js"); /* harmony import */ var three_src_core_Raycaster__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! three/src/core/Raycaster */ "./node_modules/three/src/core/Raycaster.js"); /* harmony import */ var three_src_math_Triangle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! three/src/math/Triangle */ "./node_modules/three/src/math/Triangle.js"); /* harmony import */ var three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! three/src/math/Matrix4 */ "./node_modules/three/src/math/Matrix4.js"); /* harmony import */ var three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! three/src/math/Vector3 */ "./node_modules/three/src/math/Vector3.js"); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + @@ -30723,7 +30538,12 @@ __webpack_require__.r(__webpack_exports__); * * @module core/utils */ -class CoreUtils { + +var CoreUtils = function () { + function CoreUtils() { + _classCallCheck(this, CoreUtils); + } + /** * Generate a bouding box object. * @param {Vector3} center - Center of the box. @@ -30744,7 +30564,7 @@ class CoreUtils { * VJS.Core.Utils.bbox(new Vector3(), new Matrix4()); * */ - static bbox(center, halfDimensions) { + CoreUtils.bbox = function bbox(center, halfDimensions) { // make sure we have valid inputs if (!(_core_validators__WEBPACK_IMPORTED_MODULE_0__["default"].vector3(center) && _core_validators__WEBPACK_IMPORTED_MODULE_0__["default"].vector3(halfDimensions))) { console.log('Invalid center or plane halfDimensions.'); @@ -30759,39 +30579,45 @@ class CoreUtils { } // min/max bound - let min = center.clone().sub(halfDimensions); - let max = center.clone().add(halfDimensions); + var min = center.clone().sub(halfDimensions); + var max = center.clone().add(halfDimensions); return { - min, - max + min: min, + max: max }; - } + }; /** * Find min/max values in an array * @param {Array} data * @return {Array} */ - static minMax(data = []) { - let minMax = [65535, -32768]; - let numPixels = data.length; - for (let index = 0; index < numPixels; index++) { - let spv = data[index]; + + CoreUtils.minMax = function minMax() { + var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + + var minMax = [65535, -32768]; + var numPixels = data.length; + + for (var index = 0; index < numPixels; index++) { + var spv = data[index]; minMax[0] = Math.min(minMax[0], spv); minMax[1] = Math.max(minMax[1], spv); } return minMax; - } + }; /** * Check HTMLElement * @param {HTMLElement} obj * @return {boolean} */ - static isElement(obj) { + + + CoreUtils.isElement = function isElement(obj) { try { // Using W3 DOM2 (works for FF, Opera and Chrom) return obj instanceof HTMLElement; @@ -30799,18 +30625,20 @@ class CoreUtils { // Browsers not supporting W3 DOM2 don't have HTMLElement and // an exception is thrown and we end up here. Testing some // properties that all elements have. (works on IE7) - return typeof obj === 'object' && obj.nodeType === 1 && typeof obj.style === 'object' && typeof obj.ownerDocument === 'object'; + return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj.nodeType === 1 && _typeof(obj.style) === 'object' && _typeof(obj.ownerDocument) === 'object'; } - } + }; /** * Check string * @param {String} str * @return {Boolean} */ - static isString(str) { + + + CoreUtils.isString = function isString(str) { return typeof str === 'string' || str instanceof String; - } + }; /** * Parse url and find out the extension of the exam file. @@ -30826,9 +30654,11 @@ class CoreUtils { * * @return {Object} */ - static parseUrl(url) { - const parsedUrl = new URL(url, 'http://fix.me'); - const data = { + + + CoreUtils.parseUrl = function parseUrl(url) { + var parsedUrl = new URL(url, 'http://fix.me'); + var data = { filename: parsedUrl.searchParams.get('filename'), extension: '', pathname: parsedUrl.pathname, @@ -30840,11 +30670,11 @@ class CoreUtils { } // find extension - const splittedName = data.filename.split('.'); + var splittedName = data.filename.split('.'); data.extension = splittedName.length > 1 ? splittedName.pop() : 'dicom'; - const skipExt = ['asp', 'aspx', 'go', 'gs', 'hs', 'jsp', 'js', 'php', 'pl', 'py', 'rb', 'htm', 'html']; + var skipExt = ['asp', 'aspx', 'go', 'gs', 'hs', 'jsp', 'js', 'php', 'pl', 'py', 'rb', 'htm', 'html']; if (!isNaN(data.extension) || skipExt.indexOf(data.extension) !== -1 || data.query && data.query.includes('contentType=application%2Fdicom')) { data.extension = 'dicom'; @@ -30852,7 +30682,7 @@ class CoreUtils { console.log('url data', data); return data; - } + }; /** * Compute IJK to LPS tranform. @@ -30867,13 +30697,17 @@ class CoreUtils { * * @return {*} */ - static ijk2LPS(xCos, yCos, zCos, spacing, origin, registrationMatrix = new three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_4__["Matrix4"]()) { - const ijk2LPS = new three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_4__["Matrix4"](); + + + CoreUtils.ijk2LPS = function ijk2LPS(xCos, yCos, zCos, spacing, origin) { + var registrationMatrix = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : new three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_4__["Matrix4"](); + + var ijk2LPS = new three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_4__["Matrix4"](); ijk2LPS.set(xCos.x * spacing.y, yCos.x * spacing.x, zCos.x * spacing.z, origin.x, xCos.y * spacing.y, yCos.y * spacing.x, zCos.y * spacing.z, origin.y, xCos.z * spacing.y, yCos.z * spacing.x, zCos.z * spacing.z, origin.z, 0, 0, 0, 1); ijk2LPS.premultiply(registrationMatrix); return ijk2LPS; - } + }; /** * Compute AABB to LPS transform. @@ -30886,12 +30720,14 @@ class CoreUtils { * * @return {*} */ - static aabb2LPS(xCos, yCos, zCos, origin) { - const aabb2LPS = new three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_4__["Matrix4"](); + + + CoreUtils.aabb2LPS = function aabb2LPS(xCos, yCos, zCos, origin) { + var aabb2LPS = new three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_4__["Matrix4"](); aabb2LPS.set(xCos.x, yCos.x, zCos.x, origin.x, xCos.y, yCos.y, zCos.y, origin.y, xCos.z, yCos.z, zCos.z, origin.z, 0, 0, 0, 1); return aabb2LPS; - } + }; /** * Transform coordinates from world coordinate to data @@ -30901,19 +30737,21 @@ class CoreUtils { * * @return {*} */ - static worldToData(lps2IJK, worldCoordinates) { - let dataCoordinate = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_5__["Vector3"]().copy(worldCoordinates).applyMatrix4(lps2IJK); + + + CoreUtils.worldToData = function worldToData(lps2IJK, worldCoordinates) { + var dataCoordinate = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_5__["Vector3"]().copy(worldCoordinates).applyMatrix4(lps2IJK); // same rounding in the shaders dataCoordinate.addScalar(0.5).floor(); return dataCoordinate; - } + }; - static value(stack, coordinate) { + CoreUtils.value = function value(stack, coordinate) { window.console.warn('value is deprecated, please use getPixelData instead'); this.getPixelData(stack, coordinate); - } + }; /** * Get voxel value @@ -30922,13 +30760,15 @@ class CoreUtils { * @param {Vector3} coordinate * @return {*} */ - static getPixelData(stack, coordinate) { + + + CoreUtils.getPixelData = function getPixelData(stack, coordinate) { if (coordinate.z >= 0 && coordinate.z < stack._frame.length) { return stack._frame[coordinate.z].getPixelData(coordinate.x, coordinate.y); } else { return null; } - } + }; /** * Set voxel value @@ -30938,13 +30778,15 @@ class CoreUtils { * @param {Number} value * @return {*} */ - static setPixelData(stack, coordinate, value) { + + + CoreUtils.setPixelData = function setPixelData(stack, coordinate, value) { if (coordinate.z >= 0 && coordinate.z < stack._frame.length) { stack._frame[coordinate.z].setPixelData(coordinate.x, coordinate.y, value); } else { return null; } - } + }; /** * Apply slope/intercept to a value @@ -30955,9 +30797,11 @@ class CoreUtils { * * @return {*} */ - static rescaleSlopeIntercept(value, slope, intercept) { + + + CoreUtils.rescaleSlopeIntercept = function rescaleSlopeIntercept(value, slope, intercept) { return value * slope + intercept; - } + }; /** * @@ -30967,9 +30811,11 @@ class CoreUtils { * * @returns {Vector3} Center of mass from given points. */ - static centerOfMass(points) { - let centerOfMass = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_5__["Vector3"](0, 0, 0); - for (let i = 0; i < points.length; i++) { + + + CoreUtils.centerOfMass = function centerOfMass(points) { + var centerOfMass = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_5__["Vector3"](0, 0, 0); + for (var i = 0; i < points.length; i++) { centerOfMass.x += points[i].x; centerOfMass.y += points[i].y; centerOfMass.z += points[i].z; @@ -30977,7 +30823,7 @@ class CoreUtils { centerOfMass.divideScalar(points.length); return centerOfMass; - } + }; /** * @@ -30990,25 +30836,27 @@ class CoreUtils { * * @returns {Array} Set of object representing the ordered points. */ - static orderIntersections(points, direction) { - let reference = this.centerOfMass(points); + + + CoreUtils.orderIntersections = function orderIntersections(points, direction) { + var reference = this.centerOfMass(points); // direction from first point to reference - let referenceDirection = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_5__["Vector3"](points[0].x - reference.x, points[0].y - reference.y, points[0].z - reference.z).normalize(); + var referenceDirection = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_5__["Vector3"](points[0].x - reference.x, points[0].y - reference.y, points[0].z - reference.z).normalize(); - let base = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_5__["Vector3"](0, 0, 0).crossVectors(referenceDirection, direction).normalize(); + var base = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_5__["Vector3"](0, 0, 0).crossVectors(referenceDirection, direction).normalize(); - let orderedpoints = []; + var orderedpoints = []; // other lines // if inter, return location + angle - for (let j = 0; j < points.length; j++) { - let point = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_5__["Vector3"](points[j].x, points[j].y, points[j].z); + for (var j = 0; j < points.length; j++) { + var point = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_5__["Vector3"](points[j].x, points[j].y, points[j].z); point.direction = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_5__["Vector3"](points[j].x - reference.x, points[j].y - reference.y, points[j].z - reference.z).normalize(); - let x = referenceDirection.dot(point.direction); - let y = base.dot(point.direction); - point.xy = { x, y }; + var x = referenceDirection.dot(point.direction); + var y = base.dot(point.direction); + point.xy = { x: x, y: y }; - let theta = Math.atan2(y, x) * (180 / Math.PI); + var theta = Math.atan2(y, x) * (180 / Math.PI); point.angle = theta; orderedpoints.push(point); @@ -31018,16 +30866,16 @@ class CoreUtils { return a.angle - b.angle; }); - let noDups = [orderedpoints[0]]; - let epsilon = 0.0001; - for (let i = 1; i < orderedpoints.length; i++) { + var noDups = [orderedpoints[0]]; + var epsilon = 0.0001; + for (var i = 1; i < orderedpoints.length; i++) { if (Math.abs(orderedpoints[i - 1].angle - orderedpoints[i].angle) > epsilon) { noDups.push(orderedpoints[i]); } } return noDups; - } + }; /** * Get min, max, mean and sd of voxel values behind the mesh @@ -31038,29 +30886,36 @@ class CoreUtils { * * @return {Object|null} */ - static getRoI(mesh, camera, stack) { + + + CoreUtils.getRoI = function getRoI(mesh, camera, stack) { mesh.geometry.computeBoundingBox(); - const bbox = new three_src_math_Box3__WEBPACK_IMPORTED_MODULE_1__["Box3"]().setFromObject(mesh); - const min = bbox.min.clone().project(camera); - const max = bbox.max.clone().project(camera); - const offsetWidth = camera.controls.domElement.offsetWidth; - const offsetHeight = camera.controls.domElement.offsetHeight; - const rayCaster = new three_src_core_Raycaster__WEBPACK_IMPORTED_MODULE_2__["Raycaster"](); - const values = []; + var bbox = new three_src_math_Box3__WEBPACK_IMPORTED_MODULE_1__["Box3"]().setFromObject(mesh); + var min = bbox.min.clone().project(camera); + var max = bbox.max.clone().project(camera); + var offsetWidth = camera.controls.domElement.offsetWidth; + var offsetHeight = camera.controls.domElement.offsetHeight; + var rayCaster = new three_src_core_Raycaster__WEBPACK_IMPORTED_MODULE_2__["Raycaster"](); + var values = []; min.x = Math.round((min.x + 1) * offsetWidth / 2); min.y = Math.round((-min.y + 1) * offsetHeight / 2); max.x = Math.round((max.x + 1) * offsetWidth / 2); max.y = Math.round((-max.y + 1) * offsetHeight / 2); - [min.x, max.x] = [Math.min(min.x, max.x), Math.max(min.x, max.x)]; - [min.y, max.y] = [Math.min(min.y, max.y), Math.max(min.y, max.y)]; + var _ref = [Math.min(min.x, max.x), Math.max(min.x, max.x)]; + min.x = _ref[0]; + max.x = _ref[1]; + var _ref2 = [Math.min(min.y, max.y), Math.max(min.y, max.y)]; + min.y = _ref2[0]; + max.y = _ref2[1]; - let intersect = []; - let value = null; - for (let x = min.x; x <= max.x; x++) { - for (let y = min.y; y <= max.y; y++) { + var intersect = []; + var value = null; + + for (var x = min.x; x <= max.x; x++) { + for (var y = min.y; y <= max.y; y++) { rayCaster.setFromCamera({ x: x / offsetWidth * 2 - 1, y: -(y / offsetHeight) * 2 + 1 @@ -31084,15 +30939,23 @@ class CoreUtils { return null; } - const avg = values.reduce((sum, val) => sum + val) / values.length; + var avg = values.reduce(function (sum, val) { + return sum + val; + }) / values.length; return { - min: values.reduce((prev, val) => prev < val ? prev : val), - max: values.reduce((prev, val) => prev > val ? prev : val), + min: values.reduce(function (prev, val) { + return prev < val ? prev : val; + }), + max: values.reduce(function (prev, val) { + return prev > val ? prev : val; + }), mean: avg, - sd: Math.sqrt(values.reduce((sum, val) => sum + Math.pow(val - avg, 2), 0) / values.length) + sd: Math.sqrt(values.reduce(function (sum, val) { + return sum + Math.pow(val - avg, 2); + }, 0) / values.length) }; - } + }; /** * Calculate shape area (sum of triangle polygons area). @@ -31102,34 +30965,36 @@ class CoreUtils { * * @returns {Number} */ - static getGeometryArea(geometry) { + + + CoreUtils.getGeometryArea = function getGeometryArea(geometry) { if (geometry.faces.length < 1) { return 0.0; } - let area = 0.0; - let vertices = geometry.vertices; + var area = 0.0; + var vertices = geometry.vertices; geometry.faces.forEach(function (elem) { area += new three_src_math_Triangle__WEBPACK_IMPORTED_MODULE_3__["Triangle"](vertices[elem.a], vertices[elem.b], vertices[elem.c]).getArea(); }); return area; - } + }; - static stringToNumber(numberAsString) { - let number = Number(numberAsString); + CoreUtils.stringToNumber = function stringToNumber(numberAsString) { + var number = Number(numberAsString); // returns true is number is NaN if (number !== number) { - const dots = (numberAsString.match(/\./g) || []).length; - const commas = (numberAsString.match(/\,/g) || []).length; + var dots = (numberAsString.match(/\./g) || []).length; + var commas = (numberAsString.match(/\,/g) || []).length; if (commas === 1 && dots < 2) { // convert 1,45 to 1.45 // convert 1,456.78 to 1456.78 - const replaceBy = dots === 0 ? '.' : ''; - const stringWithoutComma = numberAsString.replace(/,/g, replaceBy); + var replaceBy = dots === 0 ? '.' : ''; + var stringWithoutComma = numberAsString.replace(/,/g, replaceBy); number = Number(stringWithoutComma); } @@ -31137,14 +31002,18 @@ class CoreUtils { // weird stuff happenning // should throw an error instead of setting value to 1.0 if (number !== number) { - console.error(`String could not be converted to number (${numberAsString}). Setting value to "1.0".`); + console.error('String could not be converted to number (' + numberAsString + '). Setting value to "1.0".'); number = 1.0; } } return number; - } -} + }; + + return CoreUtils; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (CoreUtils); /***/ }), @@ -31157,7 +31026,8 @@ class CoreUtils { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Validators; }); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * Validate basic structures. * @@ -31171,33 +31041,39 @@ __webpack_require__.r(__webpack_exports__); * @module core/validators */ -class Validators { +var Validators = function () { + function Validators() { + _classCallCheck(this, Validators); + } + /** * Validates a matrix as a THREEJS.Matrix4 * link * @param {Object} objectToTest - The object to be tested. * @return {boolean} True if valid Matrix4, false if NOT. */ - static matrix4(objectToTest) { + Validators.matrix4 = function matrix4(objectToTest) { if (!(objectToTest !== null && typeof objectToTest !== 'undefined' && objectToTest.hasOwnProperty('elements') && objectToTest.elements.length === 16 && typeof objectToTest.identity === 'function' && typeof objectToTest.copy === 'function' && typeof objectToTest.determinant === 'function')) { return false; } return true; - } + }; /** * Validates a vector as a THREEJS.Vector3 * @param {Object} objectToTest - The object to be tested. * @return {boolean} True if valid Vector3, false if NOT. */ - static vector3(objectToTest) { + + + Validators.vector3 = function vector3(objectToTest) { if (!(objectToTest !== null && typeof objectToTest !== 'undefined' && objectToTest.hasOwnProperty('x') && objectToTest.hasOwnProperty('y') && objectToTest.hasOwnProperty('z') && !objectToTest.hasOwnProperty('w'))) { return false; } return true; - } + }; /** * Validates a box. @@ -31212,13 +31088,15 @@ class Validators { * @param {Object} objectToTest - The object to be tested. * @return {boolean} True if valid box, false if NOT. */ - static box(objectToTest) { + + + Validators.box = function box(objectToTest) { if (!(objectToTest !== null && typeof objectToTest !== 'undefined' && objectToTest.hasOwnProperty('center') && this.vector3(objectToTest.center) && objectToTest.hasOwnProperty('halfDimensions') && this.vector3(objectToTest.halfDimensions) && objectToTest.halfDimensions.x >= 0 && objectToTest.halfDimensions.y >= 0 && objectToTest.halfDimensions.z >= 0)) { return false; } return true; - } + }; /** * Validates a ray. @@ -31233,14 +31111,20 @@ class Validators { * @param {Object} objectToTest - The object to be tested. * @return {boolean} True if valid ray, false if NOT. */ - static ray(objectToTest) { + + + Validators.ray = function ray(objectToTest) { if (!(objectToTest !== null && typeof objectToTest !== 'undefined' && objectToTest.hasOwnProperty('position') && this.vector3(objectToTest.position) && objectToTest.hasOwnProperty('direction') && this.vector3(objectToTest.direction))) { return false; } return true; - } -} + }; + + return Validators; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (Validators); /***/ }), @@ -31271,42 +31155,42 @@ function decodeRLE(imageFrame, pixelData) { } function decode8(imageFrame, pixelData) { - const frameData = pixelData; - const frameSize = imageFrame.rows * imageFrame.columns; - const outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel); - const header = new DataView(frameData.buffer, frameData.byteOffset); - const data = new Int8Array(frameData.buffer, frameData.byteOffset); - const out = new Int8Array(outFrame); + var frameData = pixelData; + var frameSize = imageFrame.rows * imageFrame.columns; + var outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel); + var header = new DataView(frameData.buffer, frameData.byteOffset); + var data = new Int8Array(frameData.buffer, frameData.byteOffset); + var out = new Int8Array(outFrame); - let outIndex = 0; - const numSegments = header.getInt32(0, true); + var outIndex = 0; + var numSegments = header.getInt32(0, true); - for (let s = 0; s < numSegments; ++s) { + for (var s = 0; s < numSegments; ++s) { outIndex = s; - let inIndex = header.getInt32((s + 1) * 4, true); - let maxIndex = header.getInt32((s + 2) * 4, true); + var inIndex = header.getInt32((s + 1) * 4, true); + var maxIndex = header.getInt32((s + 2) * 4, true); if (maxIndex === 0) { maxIndex = frameData.length; } - const endOfSegment = frameSize * numSegments; + var endOfSegment = frameSize * numSegments; while (inIndex < maxIndex) { - const n = data[inIndex++]; + var n = data[inIndex++]; if (n >= 0 && n <= 127) { // copy n bytes - for (let i = 0; i < n + 1 && outIndex < endOfSegment; ++i) { + for (var i = 0; i < n + 1 && outIndex < endOfSegment; ++i) { out[outIndex] = data[inIndex++]; outIndex += imageFrame.samplesPerPixel; } } else if (n <= -1 && n >= -127) { - const value = data[inIndex++]; + var value = data[inIndex++]; // run of n bytes - for (let j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) { + for (var j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) { out[outIndex] = value; outIndex += imageFrame.samplesPerPixel; } @@ -31320,42 +31204,42 @@ function decode8(imageFrame, pixelData) { } function decode8Planar(imageFrame, pixelData) { - const frameData = pixelData; - const frameSize = imageFrame.rows * imageFrame.columns; - const outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel); - const header = new DataView(frameData.buffer, frameData.byteOffset); - const data = new Int8Array(frameData.buffer, frameData.byteOffset); - const out = new Int8Array(outFrame); + var frameData = pixelData; + var frameSize = imageFrame.rows * imageFrame.columns; + var outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel); + var header = new DataView(frameData.buffer, frameData.byteOffset); + var data = new Int8Array(frameData.buffer, frameData.byteOffset); + var out = new Int8Array(outFrame); - let outIndex = 0; - const numSegments = header.getInt32(0, true); + var outIndex = 0; + var numSegments = header.getInt32(0, true); - for (let s = 0; s < numSegments; ++s) { + for (var s = 0; s < numSegments; ++s) { outIndex = s * frameSize; - let inIndex = header.getInt32((s + 1) * 4, true); - let maxIndex = header.getInt32((s + 2) * 4, true); + var inIndex = header.getInt32((s + 1) * 4, true); + var maxIndex = header.getInt32((s + 2) * 4, true); if (maxIndex === 0) { maxIndex = frameData.length; } - const endOfSegment = frameSize * numSegments; + var endOfSegment = frameSize * numSegments; while (inIndex < maxIndex) { - const n = data[inIndex++]; + var n = data[inIndex++]; if (n >= 0 && n <= 127) { // copy n bytes - for (let i = 0; i < n + 1 && outIndex < endOfSegment; ++i) { + for (var i = 0; i < n + 1 && outIndex < endOfSegment; ++i) { out[outIndex] = data[inIndex++]; outIndex++; } } else if (n <= -1 && n >= -127) { - const value = data[inIndex++]; + var value = data[inIndex++]; // run of n bytes - for (let j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) { + for (var j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) { out[outIndex] = value; outIndex++; } @@ -31369,41 +31253,41 @@ function decode8Planar(imageFrame, pixelData) { } function decode16(imageFrame, pixelData) { - const frameData = pixelData; - const frameSize = imageFrame.rows * imageFrame.columns; + var frameData = pixelData; + var frameSize = imageFrame.rows * imageFrame.columns; - const outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel * 2); + var outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel * 2); - const header = new DataView(frameData.buffer, frameData.byteOffset); - const data = new Int8Array(frameData.buffer, frameData.byteOffset); + var header = new DataView(frameData.buffer, frameData.byteOffset); + var data = new Int8Array(frameData.buffer, frameData.byteOffset); - const out = new Int8Array(outFrame); + var out = new Int8Array(outFrame); - const numSegments = header.getInt32(0, true); + var numSegments = header.getInt32(0, true); - for (let s = 0; s < numSegments; ++s) { - let outIndex = 0; - const highByte = s === 0 ? 1 : 0; + for (var s = 0; s < numSegments; ++s) { + var outIndex = 0; + var highByte = s === 0 ? 1 : 0; - let inIndex = header.getInt32((s + 1) * 4, true); - let maxIndex = header.getInt32((s + 2) * 4, true); + var inIndex = header.getInt32((s + 1) * 4, true); + var maxIndex = header.getInt32((s + 2) * 4, true); if (maxIndex === 0) { maxIndex = frameData.length; } while (inIndex < maxIndex) { - const n = data[inIndex++]; + var n = data[inIndex++]; if (n >= 0 && n <= 127) { - for (let i = 0; i < n + 1 && outIndex < frameSize; ++i) { + for (var i = 0; i < n + 1 && outIndex < frameSize; ++i) { out[outIndex * 2 + highByte] = data[inIndex++]; outIndex++; } } else if (n <= -1 && n >= -127) { - const value = data[inIndex++]; + var value = data[inIndex++]; - for (let j = 0; j < -n + 1 && outIndex < frameSize; ++j) { + for (var j = 0; j < -n + 1 && outIndex < frameSize; ++j) { out[outIndex * 2 + highByte] = value; outIndex++; } @@ -31420,7 +31304,7 @@ function decode16(imageFrame, pixelData) { return imageFrame; } -const RLEDecoder = decodeRLE; +var RLEDecoder = decodeRLE; /***/ }), @@ -31462,6 +31346,12 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "geometriesSlice", function() { return geometriesSlice; }); /* harmony import */ var _core_core_intersections__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/core.intersections */ "./src/core/core.intersections.js"); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ @@ -31506,30 +31396,38 @@ __webpack_require__.r(__webpack_exports__); * scene.add(slice); */ -const geometriesSlice = (three = window.THREE) => { +var geometriesSlice = function geometriesSlice() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.ShapeBufferGeometry === undefined) { return null; } - const Constructor = three.ShapeBufferGeometry; - return class extends Constructor { - constructor(halfDimensions, center, position, direction, toAABB = new three.Matrix4()) { + var Constructor = three.ShapeBufferGeometry; + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(halfDimensions, center, position, direction) { + var toAABB = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : new three.Matrix4(); + + _classCallCheck(this, _class); + // // prepare data for the shape! // - let aabb = { - halfDimensions, - center, - toAABB + var aabb = { + halfDimensions: halfDimensions, + center: center, + toAABB: toAABB }; - let plane = { - position, - direction + var plane = { + position: position, + direction: direction }; // BOOM! - let intersections = _core_core_intersections__WEBPACK_IMPORTED_MODULE_0__["default"].aabbPlane(aabb, plane); + var intersections = _core_core_intersections__WEBPACK_IMPORTED_MODULE_0__["default"].aabbPlane(aabb, plane); // can not exist before calling the constructor if (intersections.length < 3) { @@ -31539,22 +31437,22 @@ const geometriesSlice = (three = window.THREE) => { window.console.log('Plane'); window.console.log(plane); window.console.log('exiting...'); - const err = new Error('geometries.slice has less than 3 intersections, can not create a valid geometry.'); + var err = new Error('geometries.slice has less than 3 intersections, can not create a valid geometry.'); throw err; } - let points = _core_core_utils__WEBPACK_IMPORTED_MODULE_1__["default"].orderIntersections(intersections, direction); + var points = _core_core_utils__WEBPACK_IMPORTED_MODULE_1__["default"].orderIntersections(intersections, direction); // create the shape - let shape = new three.Shape(); + var shape = new three.Shape(); // move to first point! shape.moveTo(points[0].xy.x, points[0].xy.y); // loop through all points! - const positions = new Float32Array(points.length * 3); + var positions = new Float32Array(points.length * 3); positions.set(points[0].toArray(), 0); - for (let i = 1; i < points.length; i++) { + for (var i = 1; i < points.length; i++) { // project each on plane! positions.set(points[i].toArray(), i * 3); @@ -31567,14 +31465,19 @@ const geometriesSlice = (three = window.THREE) => { // // Generate Slice Buffer Geometry from Shape Buffer Geomtry // bewcause it does triangulation for us! - super(shape); - this.type = 'SliceBufferGeometry'; + + var _this = _possibleConstructorReturn(this, _Constructor.call(this, shape)); + + _this.type = 'SliceBufferGeometry'; // update real position of each vertex! (not in 2d) - this.addAttribute('position', new three.Float32BufferAttribute(positions, 3)); - this.vertices = points; // legacy code to compute normals int he SliceHelper + _this.addAttribute('position', new three.Float32BufferAttribute(positions, 3)); + _this.vertices = points; // legacy code to compute normals int he SliceHelper + return _this; } - }; + + return _class; + }(Constructor); }; // export factory @@ -31594,29 +31497,44 @@ const geometriesSlice = (three = window.THREE) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "geometriesVoxel", function() { return geometriesVoxel; }); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * * @module geometries/voxel */ -const geometriesVoxel = (three = window.THREE) => { +var geometriesVoxel = function geometriesVoxel() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.BoxGeometry === undefined) { return null; } - const Constructor = three.BoxGeometry; - return class extends Constructor { - constructor(dataPosition) { - super(1, 1, 1); + var Constructor = three.BoxGeometry; + return function (_Constructor) { + _inherits(_class, _Constructor); - this._location = dataPosition; + function _class(dataPosition) { + _classCallCheck(this, _class); - this.applyMatrix(new three.Matrix4().makeTranslation(this._location.x, this._location.y, this._location.z)); + var _this = _possibleConstructorReturn(this, _Constructor.call(this, 1, 1, 1)); - this.verticesNeedUpdate = true; + _this._location = dataPosition; + + _this.applyMatrix(new three.Matrix4().makeTranslation(_this._location.x, _this._location.y, _this._location.z)); + + _this.verticesNeedUpdate = true; + return _this; } - resetVertices() { + _class.prototype.resetVertices = function resetVertices() { this.vertices[0].set(0.5, 0.5, 0.5); this.vertices[1].set(0.5, 0.5, -0.5); this.vertices[2].set(0.5, -0.5, 0.5); @@ -31625,30 +31543,34 @@ const geometriesVoxel = (three = window.THREE) => { this.vertices[5].set(-0.5, 0.5, 0.5); this.vertices[6].set(-0.5, -0.5, -0.5); this.vertices[7].set(-0.5, -0.5, 0.5); - } + }; - set location(location) { - this._location = location; + _createClass(_class, [{ + key: "location", + set: function set(location) { + this._location = location; - // update vertices from location - this.vertices[0].set(+0.5, +0.5, +0.5); - this.vertices[1].set(+0.5, +0.5, -0.5); - this.vertices[2].set(+0.5, -0.5, +0.5); - this.vertices[3].set(+0.5, -0.5, -0.5); - this.vertices[4].set(-0.5, +0.5, -0.5); - this.vertices[5].set(-0.5, +0.5, +0.5); - this.vertices[6].set(-0.5, -0.5, -0.5); - this.vertices[7].set(-0.5, -0.5, +0.5); + // update vertices from location + this.vertices[0].set(+0.5, +0.5, +0.5); + this.vertices[1].set(+0.5, +0.5, -0.5); + this.vertices[2].set(+0.5, -0.5, +0.5); + this.vertices[3].set(+0.5, -0.5, -0.5); + this.vertices[4].set(-0.5, +0.5, -0.5); + this.vertices[5].set(-0.5, +0.5, +0.5); + this.vertices[6].set(-0.5, -0.5, -0.5); + this.vertices[7].set(-0.5, -0.5, +0.5); - this.applyMatrix(new three.Matrix4().makeTranslation(this._location.x, this._location.y, this._location.z)); + this.applyMatrix(new three.Matrix4().makeTranslation(this._location.x, this._location.y, this._location.z)); - this.verticesNeedUpdate = true; - } + this.verticesNeedUpdate = true; + }, + get: function get() { + return this._location; + } + }]); - get location() { - return this._location; - } - }; + return _class; + }(Constructor); }; // export factory @@ -31668,64 +31590,49 @@ const geometriesVoxel = (three = window.THREE) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helpersBorder", function() { return helpersBorder; }); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * @module helpers/border */ -const helpersBorder = (three = window.THREE) => { +var helpersBorder = function helpersBorder() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = three.Object3D; - return class extends Constructor { - constructor(helpersSlice) { - // - super(); + var Constructor = three.Object3D; + return function (_Constructor) { + _inherits(_class, _Constructor); - this._helpersSlice = helpersSlice; + function _class(helpersSlice) { + _classCallCheck(this, _class); - this._visible = true; - this._color = 0xff0000; - this._material = null; - this._geometry = null; - this._mesh = null; + var _this = _possibleConstructorReturn(this, _Constructor.call(this)); + // - this._create(); - } - set helpersSlice(helpersSlice) { - this._helpersSlice = helpersSlice; - this._update(); - } + _this._helpersSlice = helpersSlice; - get helpersSlice() { - return this._helpersSlice; - } + _this._visible = true; + _this._color = 0xff0000; + _this._material = null; + _this._geometry = null; + _this._mesh = null; - set visible(visible) { - this._visible = visible; - if (this._mesh) { - this._mesh.visible = this._visible; - } + _this._create(); + return _this; } - get visible() { - return this._visible; - } - - set color(color) { - this._color = color; - if (this._material) { - this._material.color.set(this._color); - } - } - - get color() { - return this._color; - } - - _create() { + _class.prototype._create = function _create() { if (!this._material) { this._material = new three.LineBasicMaterial({ color: this._color, @@ -31740,8 +31647,8 @@ const helpersBorder = (three = window.THREE) => { this._geometry = new three.BufferGeometry(); // set vertices positions - const nbOfVertices = this._helpersSlice.geometry.vertices.length; - const positions = new Float32Array((nbOfVertices + 1) * 3); + var nbOfVertices = this._helpersSlice.geometry.vertices.length; + var positions = new Float32Array((nbOfVertices + 1) * 3); positions.set(this._helpersSlice.geometry.attributes.position.array, 0); positions.set(this._helpersSlice.geometry.vertices[0].toArray(), nbOfVertices * 3); this._geometry.addAttribute('position', new three.Float32BufferAttribute(positions, 3)); @@ -31754,9 +31661,9 @@ const helpersBorder = (three = window.THREE) => { // and add it! this.add(this._mesh); - } + }; - _update() { + _class.prototype._update = function _update() { // update slice if (this._mesh) { this.remove(this._mesh); @@ -31765,17 +31672,52 @@ const helpersBorder = (three = window.THREE) => { } this._create(); - } + }; - dispose() { + _class.prototype.dispose = function dispose() { this._mesh.material.dispose(); this._mesh.material = null; this._geometry.dispose(); this._geometry = null; this._material.dispose(); this._material = null; - } - }; + }; + + _createClass(_class, [{ + key: 'helpersSlice', + set: function set(helpersSlice) { + this._helpersSlice = helpersSlice; + this._update(); + }, + get: function get() { + return this._helpersSlice; + } + }, { + key: 'visible', + set: function set(visible) { + this._visible = visible; + if (this._mesh) { + this._mesh.visible = this._visible; + } + }, + get: function get() { + return this._visible; + } + }, { + key: 'color', + set: function set(color) { + this._color = color; + if (this._material) { + this._material.color.set(this._color); + } + }, + get: function get() { + return this._color; + } + }]); + + return _class; + }(Constructor); }; // export factory @@ -31795,66 +31737,62 @@ const helpersBorder = (three = window.THREE) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helpersBoundingBox", function() { return helpersBoundingBox; }); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * @module helpers/boundingbox */ -const helpersBoundingBox = (three = window.THREE) => { +var helpersBoundingBox = function helpersBoundingBox() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = three.Object3D; - return class extends Constructor { - constructor(stack) { - // - super(); + var Constructor = three.Object3D; + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(stack) { + _classCallCheck(this, _class); // private vars - this._stack = stack; - this._visible = true; - this._color = 0xffffff; - this._material = null; - this._geometry = null; - this._mesh = null; - this._meshStack = null; + var _this = _possibleConstructorReturn(this, _Constructor.call(this)); + // - // create object - this._create(); - } - // getters/setters - set visible(visible) { - this._visible = visible; - if (this._mesh) { - this._mesh.visible = this._visible; - } - } + _this._stack = stack; + _this._visible = true; + _this._color = 0xffffff; + _this._material = null; + _this._geometry = null; + _this._mesh = null; + _this._meshStack = null; - get visible() { - return this._visible; + // create object + _this._create(); + return _this; } - set color(color) { - this._color = color; - if (this._material) { - this._material.color.set(this._color); - } - } + // getters/setters - get color() { - return this._color; - } // private methods - _create() { + _class.prototype._create = function _create() { // Convenience vars - const dimensions = this._stack.dimensionsIJK; - const halfDimensions = this._stack.halfDimensionsIJK; - const offset = new three.Vector3(-0.5, -0.5, -0.5); + var dimensions = this._stack.dimensionsIJK; + var halfDimensions = this._stack.halfDimensionsIJK; + var offset = new three.Vector3(-0.5, -0.5, -0.5); // Geometry - const geometry = new three.BoxGeometry(dimensions.x, dimensions.y, dimensions.z); + var geometry = new three.BoxGeometry(dimensions.x, dimensions.y, dimensions.z); geometry.applyMatrix(new three.Matrix4().makeTranslation(halfDimensions.x + offset.x, halfDimensions.y + offset.y, halfDimensions.z + offset.z)); this._geometry = geometry; @@ -31863,7 +31801,7 @@ const helpersBoundingBox = (three = window.THREE) => { wireframe: true }); - const mesh = new three.Mesh(this._geometry, null); + var mesh = new three.Mesh(this._geometry, null); mesh.applyMatrix(this._stack.ijk2LPS); mesh.visible = this._visible; this._meshStack = mesh; @@ -31872,9 +31810,9 @@ const helpersBoundingBox = (three = window.THREE) => { this._material = this._mesh.material; this.add(this._mesh); - } + }; - _update() { + _class.prototype._update = function _update() { if (this._mesh) { this.remove(this._mesh); this._mesh.geometry.dispose(); @@ -31885,17 +31823,43 @@ const helpersBoundingBox = (three = window.THREE) => { } this._create(); - } + }; - dispose() { + _class.prototype.dispose = function dispose() { this._mesh.material.dispose(); this._mesh.material = null; this._geometry.dispose(); this._geometry = null; this._material.dispose(); this._material = null; - } - }; + }; + + _createClass(_class, [{ + key: "visible", + set: function set(visible) { + this._visible = visible; + if (this._mesh) { + this._mesh.visible = this._visible; + } + }, + get: function get() { + return this._visible; + } + }, { + key: "color", + set: function set(color) { + this._color = color; + if (this._material) { + this._material.color.set(this._color); + } + }, + get: function get() { + return this._color; + } + }]); + + return _class; + }(Constructor); }; // export factory @@ -31918,6 +31882,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _shaders_shaders_contour_uniform__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shaders/shaders.contour.uniform */ "./src/shaders/shaders.contour.uniform.js"); /* harmony import */ var _shaders_shaders_contour_vertex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shaders/shaders.contour.vertex */ "./src/shaders/shaders.contour.vertex.js"); /* harmony import */ var _shaders_shaders_contour_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shaders/shaders.contour.fragment */ "./src/shaders/shaders.contour.fragment.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ @@ -31926,40 +31898,48 @@ __webpack_require__.r(__webpack_exports__); /** * @module helpers/contour */ -const helpersContour = (three = window.THREE) => { +var helpersContour = function helpersContour() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = three.Object3D; - return class extends Constructor { - constructor(stack, geometry, texture) { + var Constructor = three.Object3D; + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(stack, geometry, texture) { + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this)); // - super(); - this._stack = stack; - this._textureToFilter = texture; - this._contourWidth = 1; - this._contourOpacity = 1; - this._canvasWidth = 0; - this._canvasHeight = 0; - this._shadersFragment = _shaders_shaders_contour_fragment__WEBPACK_IMPORTED_MODULE_2__["default"]; - this._shadersVertex = _shaders_shaders_contour_vertex__WEBPACK_IMPORTED_MODULE_1__["default"]; - this._uniforms = _shaders_shaders_contour_uniform__WEBPACK_IMPORTED_MODULE_0__["default"].uniforms(); - this._material = null; - this._geometry = geometry; - this._create(); + _this._stack = stack; + _this._textureToFilter = texture; + _this._contourWidth = 1; + _this._contourOpacity = 1; + _this._canvasWidth = 0; + _this._canvasHeight = 0; + _this._shadersFragment = _shaders_shaders_contour_fragment__WEBPACK_IMPORTED_MODULE_2__["default"]; + _this._shadersVertex = _shaders_shaders_contour_vertex__WEBPACK_IMPORTED_MODULE_1__["default"]; + _this._uniforms = _shaders_shaders_contour_uniform__WEBPACK_IMPORTED_MODULE_0__["default"].uniforms(); + _this._material = null; + _this._geometry = geometry; + + _this._create(); + return _this; } - _create() { + _class.prototype._create = function _create() { this._prepareMaterial(); this._mesh = new three.Mesh(this._geometry, this._material); this._mesh.applyMatrix(this._stack._ijk2LPS); this.add(this._mesh); - } + }; - _prepareMaterial() { + _class.prototype._prepareMaterial = function _prepareMaterial() { if (!this._material) { // contour default width this._uniforms.uWidth.value = this._contourWidth; @@ -31970,8 +31950,8 @@ const helpersContour = (three = window.THREE) => { this._uniforms.uCanvasHeight.value = this._canvasHeight; // generate material - let fs = new _shaders_shaders_contour_fragment__WEBPACK_IMPORTED_MODULE_2__["default"](this._uniforms); - let vs = new _shaders_shaders_contour_vertex__WEBPACK_IMPORTED_MODULE_1__["default"](); + var fs = new _shaders_shaders_contour_fragment__WEBPACK_IMPORTED_MODULE_2__["default"](this._uniforms); + var vs = new _shaders_shaders_contour_vertex__WEBPACK_IMPORTED_MODULE_1__["default"](); this._material = new three.ShaderMaterial({ side: three.DoubleSide, uniforms: this._uniforms, @@ -31980,9 +31960,9 @@ const helpersContour = (three = window.THREE) => { transparent: true }); } - } + }; - update() { + _class.prototype.update = function update() { if (this._mesh) { this.remove(this._mesh); this._mesh.geometry.dispose(); @@ -31991,9 +31971,9 @@ const helpersContour = (three = window.THREE) => { } this._create(); - } + }; - dispose() { + _class.prototype.dispose = function dispose() { // if (this._textureToFilter !== null) { this._textureToFilter.dispose(); @@ -32022,74 +32002,78 @@ const helpersContour = (three = window.THREE) => { this._material = null; this._stack = null; - } - - get geometry() { - return this._geometry; - } - - set geometry(geometry) { - if (this._mesh) { - this.remove(this._mesh); - this._mesh.geometry.dispose(); - this._mesh.geometry = null; - this._mesh = null; - - this._geometry.dispose(); - this._geometry = null; - } - - this._geometry = geometry; - - this._create(); - } - - get textureToFilter() { - return this._textureToFilter; - } - - set textureToFilter(texture) { - this._textureToFilter = texture; - this._uniforms.uTextureFilled.value = texture; - this._material.needsUpdate = true; - } - - get contourOpacity() { - return this._contourOpacity; - } - - set contourOpacity(contourOpacity) { - this._contourOpacity = contourOpacity; - this._uniforms.uOpacity.value = this._contourOpacity; - } - - get contourWidth() { - return this._contourWidth; - } + }; - set contourWidth(contourWidth) { - this._contourWidth = contourWidth; - this._uniforms.uWidth.value = this._contourWidth; - } + _createClass(_class, [{ + key: 'geometry', + get: function get() { + return this._geometry; + }, + set: function set(geometry) { + if (this._mesh) { + this.remove(this._mesh); + this._mesh.geometry.dispose(); + this._mesh.geometry = null; + this._mesh = null; - get canvasWidth() { - return this._canvasWidth; - } + this._geometry.dispose(); + this._geometry = null; + } - set canvasWidth(canvasWidth) { - this._canvasWidth = canvasWidth; - this._uniforms.uCanvasWidth.value = this._canvasWidth; - } + this._geometry = geometry; - get canvasHeight() { - return this._canvasHeight; - } + this._create(); + } + }, { + key: 'textureToFilter', + get: function get() { + return this._textureToFilter; + }, + set: function set(texture) { + this._textureToFilter = texture; + this._uniforms.uTextureFilled.value = texture; + this._material.needsUpdate = true; + } + }, { + key: 'contourOpacity', + get: function get() { + return this._contourOpacity; + }, + set: function set(contourOpacity) { + this._contourOpacity = contourOpacity; + this._uniforms.uOpacity.value = this._contourOpacity; + } + }, { + key: 'contourWidth', + get: function get() { + return this._contourWidth; + }, + set: function set(contourWidth) { + this._contourWidth = contourWidth; + this._uniforms.uWidth.value = this._contourWidth; + } + }, { + key: 'canvasWidth', + get: function get() { + return this._canvasWidth; + }, + set: function set(canvasWidth) { + this._canvasWidth = canvasWidth; + this._uniforms.uCanvasWidth.value = this._canvasWidth; + } + }, { + key: 'canvasHeight', + get: function get() { + return this._canvasHeight; + }, + set: function set(canvasHeight) { + this._canvasHeight = canvasHeight; + this._uniforms.uCanvasHeight.value = this._canvasHeight; + } + }]); - set canvasHeight(canvasHeight) { - this._canvasHeight = canvasHeight; - this._uniforms.uCanvasHeight.value = this._canvasHeight; - } - }; + return _class; + }(Constructor); }; // export factory @@ -32186,6 +32170,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _shaders_shaders_localizer_uniform__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shaders/shaders.localizer.uniform */ "./src/shaders/shaders.localizer.uniform.js"); /* harmony import */ var _shaders_shaders_localizer_vertex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shaders/shaders.localizer.vertex */ "./src/shaders/shaders.localizer.vertex.js"); /* harmony import */ var _shaders_shaders_localizer_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shaders/shaders.localizer.fragment */ "./src/shaders/shaders.localizer.fragment.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ @@ -32194,44 +32186,52 @@ __webpack_require__.r(__webpack_exports__); /** * @module helpers/localizer */ -const helpersLocalizer = (three = window.THREE) => { +var helpersLocalizer = function helpersLocalizer() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = three.Object3D; - return class extends Constructor { - constructor(stack, geometry, referencePlane) { + var Constructor = three.Object3D; + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(stack, geometry, referencePlane) { + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this)); // - super(); - this._stack = stack; - this._referencePlane = referencePlane; - this._plane1 = null; - this._color1 = null; - this._plane2 = null; - this._color2 = null; - this._plane3 = null; - this._color3 = null; - this._canvasWidth = 0; - this._canvasHeight = 0; - this._shadersFragment = _shaders_shaders_localizer_fragment__WEBPACK_IMPORTED_MODULE_2__["default"]; - this._shadersVertex = _shaders_shaders_localizer_vertex__WEBPACK_IMPORTED_MODULE_1__["default"]; - this._uniforms = _shaders_shaders_localizer_uniform__WEBPACK_IMPORTED_MODULE_0__["default"].uniforms(); - this._material = null; - this._geometry = geometry; - this._create(); + _this._stack = stack; + _this._referencePlane = referencePlane; + _this._plane1 = null; + _this._color1 = null; + _this._plane2 = null; + _this._color2 = null; + _this._plane3 = null; + _this._color3 = null; + _this._canvasWidth = 0; + _this._canvasHeight = 0; + _this._shadersFragment = _shaders_shaders_localizer_fragment__WEBPACK_IMPORTED_MODULE_2__["default"]; + _this._shadersVertex = _shaders_shaders_localizer_vertex__WEBPACK_IMPORTED_MODULE_1__["default"]; + _this._uniforms = _shaders_shaders_localizer_uniform__WEBPACK_IMPORTED_MODULE_0__["default"].uniforms(); + _this._material = null; + _this._geometry = geometry; + + _this._create(); + return _this; } - _create() { + _class.prototype._create = function _create() { this._prepareMaterial(); this._mesh = new three.Mesh(this._geometry, this._material); this._mesh.applyMatrix(this._stack._ijk2LPS); this.add(this._mesh); - } + }; - _prepareMaterial() { + _class.prototype._prepareMaterial = function _prepareMaterial() { if (!this._material) { // reference plane this._uniforms.uSlice.value = this._referencePlane; @@ -32257,8 +32257,8 @@ const helpersLocalizer = (three = window.THREE) => { this._uniforms.uCanvasHeight.value = this._canvasHeight; // generate material - let fs = new _shaders_shaders_localizer_fragment__WEBPACK_IMPORTED_MODULE_2__["default"](this._uniforms); - let vs = new _shaders_shaders_localizer_vertex__WEBPACK_IMPORTED_MODULE_1__["default"](); + var fs = new _shaders_shaders_localizer_fragment__WEBPACK_IMPORTED_MODULE_2__["default"](this._uniforms); + var vs = new _shaders_shaders_localizer_vertex__WEBPACK_IMPORTED_MODULE_1__["default"](); this._material = new three.ShaderMaterial({ side: three.DoubleSide, uniforms: this._uniforms, @@ -32267,9 +32267,9 @@ const helpersLocalizer = (three = window.THREE) => { }); this._material.transparent = true; } - } + }; - update() { + _class.prototype.update = function update() { if (this._mesh) { this.remove(this._mesh); this._mesh.geometry.dispose(); @@ -32278,9 +32278,9 @@ const helpersLocalizer = (three = window.THREE) => { } this._create(); - } + }; - dispose() { + _class.prototype.dispose = function dispose() { // this._referencePlane = null; this._plane1 = null; @@ -32312,109 +32312,113 @@ const helpersLocalizer = (three = window.THREE) => { this._material = null; this._stack = null; - } - - get geometry() { - return this._geometry; - } - - set geometry(geometry) { - if (this._mesh) { - this.remove(this._mesh); - this._mesh.geometry.dispose(); - this._mesh.geometry = null; - this._mesh = null; - - this._geometry.dispose(); - this._geometry = null; - } - - this._geometry = geometry; - - this._create(); - } - - get referencePlane() { - return this._referencePlane; - } - - set referencePlane(referencePlane) { - this._referencePlane = referencePlane; - this._uniforms.uSlice.value = this._referencePlane; - } - - get plane1() { - return this._plane1; - } - - set plane1(plane1) { - this._plane1 = plane1; - this._uniforms.uPlane1.value = this._plane1; - } - - get color1() { - return this._color1; - } - - set color1(color1) { - this._color1 = color1; - this._uniforms.uPlaneColor1.value = this._color1; - } - - get plane2() { - return this._plane2; - } - - set plane2(plane2) { - this._plane2 = plane2; - this._uniforms.uPlane2.value = this._plane2; - } - - get color2() { - return this._color2; - } - - set color2(color2) { - this._color2 = color2; - this._uniforms.uPlaneColor2.value = this._color2; - } - - get plane3() { - return this._plane3; - } - - set plane3(plane3) { - this._plane3 = plane3; - this._uniforms.uPlane3.value = this._plane3; - } - - get color3() { - return this._color3; - } + }; - set color3(color3) { - this._color3 = color3; - this._uniforms.uPlaneColor3.value = this._color3; - } + _createClass(_class, [{ + key: 'geometry', + get: function get() { + return this._geometry; + }, + set: function set(geometry) { + if (this._mesh) { + this.remove(this._mesh); + this._mesh.geometry.dispose(); + this._mesh.geometry = null; + this._mesh = null; - get canvasWidth() { - return this._canvasWidth; - } + this._geometry.dispose(); + this._geometry = null; + } - set canvasWidth(canvasWidth) { - this._canvasWidth = canvasWidth; - this._uniforms.uCanvasWidth.value = this._canvasWidth; - } + this._geometry = geometry; - get canvasHeight() { - return this._canvasHeight; - } + this._create(); + } + }, { + key: 'referencePlane', + get: function get() { + return this._referencePlane; + }, + set: function set(referencePlane) { + this._referencePlane = referencePlane; + this._uniforms.uSlice.value = this._referencePlane; + } + }, { + key: 'plane1', + get: function get() { + return this._plane1; + }, + set: function set(plane1) { + this._plane1 = plane1; + this._uniforms.uPlane1.value = this._plane1; + } + }, { + key: 'color1', + get: function get() { + return this._color1; + }, + set: function set(color1) { + this._color1 = color1; + this._uniforms.uPlaneColor1.value = this._color1; + } + }, { + key: 'plane2', + get: function get() { + return this._plane2; + }, + set: function set(plane2) { + this._plane2 = plane2; + this._uniforms.uPlane2.value = this._plane2; + } + }, { + key: 'color2', + get: function get() { + return this._color2; + }, + set: function set(color2) { + this._color2 = color2; + this._uniforms.uPlaneColor2.value = this._color2; + } + }, { + key: 'plane3', + get: function get() { + return this._plane3; + }, + set: function set(plane3) { + this._plane3 = plane3; + this._uniforms.uPlane3.value = this._plane3; + } + }, { + key: 'color3', + get: function get() { + return this._color3; + }, + set: function set(color3) { + this._color3 = color3; + this._uniforms.uPlaneColor3.value = this._color3; + } + }, { + key: 'canvasWidth', + get: function get() { + return this._canvasWidth; + }, + set: function set(canvasWidth) { + this._canvasWidth = canvasWidth; + this._uniforms.uCanvasWidth.value = this._canvasWidth; + } + }, { + key: 'canvasHeight', + get: function get() { + return this._canvasHeight; + }, + set: function set(canvasHeight) { + this._canvasHeight = canvasHeight; + this._uniforms.uCanvasHeight.value = this._canvasHeight; + } + }]); - set canvasHeight(canvasHeight) { - this._canvasHeight = canvasHeight; - this._uniforms.uCanvasHeight.value = this._canvasHeight; - } - }; + return _class; + }(Constructor); }; @@ -32433,42 +32437,68 @@ const helpersLocalizer = (three = window.THREE) => { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helpersLut", function() { return helpersLut; }); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * @module helpers/lut */ -const helpersLut = (three = window.THREE) => { +var helpersLut = function helpersLut() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = three.Object3D; - return class extends Constructor { - constructor(domTarget, lut = 'default', lutO = 'linear', color = [[0, 0, 0, 0], [1, 1, 1, 1]], opacity = [[0, 0], [1, 1]], discrete = false) { + var Constructor = three.Object3D; + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(domTarget) { + var lut = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default'; + var lutO = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'linear'; + var color = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [[0, 0, 0, 0], [1, 1, 1, 1]]; + + var _this$_luts, _this$_lutsO; + + var opacity = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [[0, 0], [1, 1]]; + var discrete = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; + + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this)); // min/max (0-1 or real intensities) // show/hide // horizontal/vertical - super(); + + if (_core_core_utils__WEBPACK_IMPORTED_MODULE_0__["default"].isString(domTarget)) { - this._dom = document.getElementById(domTarget); + _this._dom = document.getElementById(domTarget); } else { - this._dom = domTarget; + _this._dom = domTarget; } - this._discrete = discrete; - this._color = color; - this._lut = lut; - this._luts = { [lut]: color }; + _this._discrete = discrete; + _this._color = color; + _this._lut = lut; + _this._luts = (_this$_luts = {}, _this$_luts[lut] = color, _this$_luts); - this._opacity = opacity; - this._lutO = lutO; - this._lutsO = { [lutO]: opacity }; + _this._opacity = opacity; + _this._lutO = lutO; + _this._lutsO = (_this$_lutsO = {}, _this$_lutsO[lutO] = opacity, _this$_lutsO); - this.initCanvas(); - this.paintCanvas(); + _this.initCanvas(); + _this.paintCanvas(); + return _this; } - initCanvas() { + _class.prototype.initCanvas = function initCanvas() { // container this._canvasContainer = this.initCanvasContainer(this._dom); // background @@ -32477,34 +32507,34 @@ const helpersLut = (three = window.THREE) => { // foreground this._canvas = this.createCanvas(); this._canvasContainer.appendChild(this._canvas); - } + }; - initCanvasContainer(dom) { - let canvasContainer = dom; + _class.prototype.initCanvasContainer = function initCanvasContainer(dom) { + var canvasContainer = dom; canvasContainer.style.border = '1px solid #F9F9F9'; return canvasContainer; - } + }; - createCanvas() { - let canvas = document.createElement('canvas'); + _class.prototype.createCanvas = function createCanvas() { + var canvas = document.createElement('canvas'); canvas.height = 1; canvas.width = 256; canvas.style.width = '256px'; canvas.style.height = '16px'; return canvas; - } + }; - paintCanvas() { + _class.prototype.paintCanvas = function paintCanvas() { // setup context - let ctx = this._canvas.getContext('2d'); + var ctx = this._canvas.getContext('2d'); ctx.clearRect(0, 0, this._canvas.width, this._canvas.height); ctx.globalCompositeOperation = 'source-over'; // apply color if (!this._discrete) { - let color = ctx.createLinearGradient(0, 0, this._canvas.width, 0); - for (let i = 0; i < this._color.length; i++) { - color.addColorStop(this._color[i][0], `rgba( ${Math.round(this._color[i][1] * 255)}, ${Math.round(this._color[i][2] * 255)}, ${Math.round(this._color[i][3] * 255)}, 1)`); + var color = ctx.createLinearGradient(0, 0, this._canvas.width, 0); + for (var i = 0; i < this._color.length; i++) { + color.addColorStop(this._color[i][0], 'rgba( ' + Math.round(this._color[i][1] * 255) + ', ' + Math.round(this._color[i][2] * 255) + ', ' + Math.round(this._color[i][3] * 255) + ', 1)'); } ctx.fillStyle = color; @@ -32514,116 +32544,62 @@ const helpersLut = (three = window.THREE) => { ctx.globalCompositeOperation = 'destination-in'; // apply opacity - let opacity = ctx.createLinearGradient(0, 0, this._canvas.width, 0); - for (let i = 0; i < this._opacity.length; i++) { - opacity.addColorStop(this._opacity[i][0], 'rgba(255, 255, 255, ' + this._opacity[i][1] + ')'); + var opacity = ctx.createLinearGradient(0, 0, this._canvas.width, 0); + for (var _i = 0; _i < this._opacity.length; _i++) { + opacity.addColorStop(this._opacity[_i][0], 'rgba(255, 255, 255, ' + this._opacity[_i][1] + ')'); } ctx.fillStyle = opacity; ctx.fillRect(0, 0, this._canvas.width, this._canvas.height); } else { ctx.lineWidth = 2 * this._canvas.height; - for (let i = 0; i < this._color.length; i++) { - let currentPos = this._color[i][0]; - let nextPos = 1; - if (i < this._color.length - 1) { - nextPos = this._color[i + 1][0]; + for (var _i2 = 0; _i2 < this._color.length; _i2++) { + var currentPos = this._color[_i2][0]; + var nextPos = 1; + if (_i2 < this._color.length - 1) { + nextPos = this._color[_i2 + 1][0]; } - let previousPos = 0; - if (i > 0) { - previousPos = this._color[i - 1][0]; + var previousPos = 0; + if (_i2 > 0) { + previousPos = this._color[_i2 - 1][0]; } - let from = previousPos + (currentPos - previousPos) / 2; - let to = currentPos + (nextPos - currentPos) / 2; - let color = this._color[i]; - let opacity = this._opacity[i] ? this._opacity[i][1] : 1; + var from = previousPos + (currentPos - previousPos) / 2; + var to = currentPos + (nextPos - currentPos) / 2; + var _color = this._color[_i2]; + var _opacity = this._opacity[_i2] ? this._opacity[_i2][1] : 1; ctx.beginPath(); - ctx.strokeStyle = `rgba( ${Math.round(color[1] * 255)}, ${Math.round(color[2] * 255)}, ${Math.round(color[3] * 255)}, ${opacity})`; + ctx.strokeStyle = 'rgba( ' + Math.round(_color[1] * 255) + ', ' + Math.round(_color[2] * 255) + ', ' + Math.round(_color[3] * 255) + ', ' + _opacity + ')'; ctx.moveTo(from * this._canvas.width, 0); ctx.lineTo(to * this._canvas.width, 0); ctx.stroke(); ctx.closePath(); } } - } - - get texture() { - let texture = new three.Texture(this._canvas); - texture.mapping = three.UVMapping; - texture.wrapS = texture.wrapT = three.ClampToEdgeWrapping; - texture.magFilter = texture.minFilter = three.NearestFilter; - texture.premultiplyAlpha = true; - texture.needsUpdate = true; - return texture; - } - - set lut(targetLUT) { - this._color = this._luts[targetLUT]; - this._lut = targetLUT; - - this.paintCanvas(); - } - - get lut() { - return this._lut; - } - - set luts(newLuts) { - this._luts = newLuts; - } - - get luts() { - return this._luts; - } - - set lutO(targetLUTO) { - this._opacity = this._lutsO[targetLUTO]; - this._lutO = targetLUTO; - - this.paintCanvas(); - } - - get lutO() { - return this._lutO; - } - - set lutsO(newLutsO) { - this._lutsO = newLutsO; - } - - get lutsO() { - return this._lutsO; - } - - set discrete(discrete) { - this._discrete = discrete; - - this.paintCanvas(); - } + }; - get discrete() { - return this._discrete; - } + _class.prototype.lutsAvailable = function lutsAvailable() { + var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'color'; - lutsAvailable(type = 'color') { - let available = []; - let luts = this._luts; + var available = []; + var luts = this._luts; if (type !== 'color') { luts = this._lutsO; } - for (let i in luts) { + for (var i in luts) { available.push(i); } return available; - } + }; // add luts to class' lut (so a user can add its own as well) - static presetLuts() { + + + _class.presetLuts = function presetLuts() { return { default: [[0, 0, 0, 0], [1, 1, 1, 1]], spectrum: [[0, 0, 0, 0], [0.1, 0, 0, 1], [0.33, 0, 1, 1], [0.5, 0, 1, 0], [0.66, 1, 1, 0], [0.9, 1, 0, 0], [1, 1, 1, 1]], @@ -32636,9 +32612,9 @@ const helpersLut = (three = window.THREE) => { random: [[0, 0, 0, 0], [0.27, 0.18, 0.18, 0.18], [0.41, 1, 1, 1], [0.7, 1, 0, 0], [1, 1, 1, 1]], muscle_bone: [[0, 0, 0, 0], [0.00392156862745098, 0.00784313725490196, 0, 0], [0.00784313725490196, 0.0196078431372549, 0, 0], [0.011764705882352941, 0.03137254901960784, 0, 0], [0.01568627450980392, 0.0392156862745098, 0, 0.00392156862745098], [0.0196078431372549, 0.050980392156862744, 0.00392156862745098, 0.00392156862745098], [0.023529411764705882, 0.06274509803921569, 0.00392156862745098, 0.00392156862745098], [0.027450980392156862, 0.07058823529411765, 0.00392156862745098, 0.00784313725490196], [0.03137254901960784, 0.08235294117647059, 0.00392156862745098, 0.00784313725490196], [0.03529411764705882, 0.09411764705882353, 0.00784313725490196, 0.00784313725490196], [0.0392156862745098, 0.10196078431372549, 0.00784313725490196, 0.00784313725490196], [0.043137254901960784, 0.11372549019607843, 0.00784313725490196, 0.011764705882352941], [0.047058823529411764, 0.12549019607843137, 0.00784313725490196, 0.011764705882352941], [0.050980392156862744, 0.13333333333333333, 0.011764705882352941, 0.011764705882352941], [0.054901960784313725, 0.1450980392156863, 0.011764705882352941, 0.01568627450980392], [0.058823529411764705, 0.1568627450980392, 0.011764705882352941, 0.01568627450980392], [0.06274509803921569, 0.16470588235294117, 0.011764705882352941, 0.01568627450980392], [0.06666666666666667, 0.17647058823529413, 0.011764705882352941, 0.0196078431372549], [0.07058823529411765, 0.18823529411764706, 0.01568627450980392, 0.0196078431372549], [0.07450980392156863, 0.2, 0.01568627450980392, 0.0196078431372549], [0.0784313725490196, 0.20784313725490197, 0.01568627450980392, 0.0196078431372549], [0.08235294117647059, 0.2196078431372549, 0.01568627450980392, 0.023529411764705882], [0.08627450980392157, 0.23137254901960785, 0.0196078431372549, 0.023529411764705882], [0.09019607843137255, 0.23921568627450981, 0.0196078431372549, 0.023529411764705882], [0.09411764705882353, 0.25098039215686274, 0.0196078431372549, 0.027450980392156862], [0.09803921568627451, 0.2627450980392157, 0.0196078431372549, 0.027450980392156862], [0.10196078431372549, 0.27058823529411763, 0.023529411764705882, 0.027450980392156862], [0.10588235294117647, 0.2823529411764706, 0.023529411764705882, 0.027450980392156862], [0.10980392156862745, 0.29411764705882354, 0.023529411764705882, 0.03137254901960784], [0.11372549019607843, 0.30196078431372547, 0.023529411764705882, 0.03137254901960784], [0.11764705882352941, 0.3137254901960784, 0.023529411764705882, 0.03137254901960784], [0.12156862745098039, 0.3254901960784314, 0.027450980392156862, 0.03529411764705882], [0.12549019607843137, 0.3333333333333333, 0.027450980392156862, 0.03529411764705882], [0.12941176470588237, 0.34509803921568627, 0.027450980392156862, 0.03529411764705882], [0.13333333333333333, 0.3568627450980392, 0.027450980392156862, 0.0392156862745098], [0.13725490196078433, 0.36470588235294116, 0.03137254901960784, 0.0392156862745098], [0.1411764705882353, 0.3764705882352941, 0.03137254901960784, 0.0392156862745098], [0.1450980392156863, 0.38823529411764707, 0.03137254901960784, 0.0392156862745098], [0.14901960784313725, 0.4, 0.03137254901960784, 0.043137254901960784], [0.15294117647058825, 0.40784313725490196, 0.03529411764705882, 0.043137254901960784], [0.1568627450980392, 0.4196078431372549, 0.03529411764705882, 0.043137254901960784], [0.1607843137254902, 0.43137254901960786, 0.03529411764705882, 0.047058823529411764], [0.16470588235294117, 0.4392156862745098, 0.03529411764705882, 0.047058823529411764], [0.16862745098039217, 0.45098039215686275, 0.03529411764705882, 0.047058823529411764], [0.17254901960784313, 0.4627450980392157, 0.0392156862745098, 0.047058823529411764], [0.17647058823529413, 0.47058823529411764, 0.0392156862745098, 0.050980392156862744], [0.1803921568627451, 0.4823529411764706, 0.0392156862745098, 0.050980392156862744], [0.1843137254901961, 0.49411764705882355, 0.0392156862745098, 0.050980392156862744], [0.18823529411764706, 0.5019607843137255, 0.043137254901960784, 0.054901960784313725], [0.19215686274509805, 0.5137254901960784, 0.043137254901960784, 0.054901960784313725], [0.19607843137254902, 0.5254901960784314, 0.043137254901960784, 0.054901960784313725], [0.2, 0.5333333333333333, 0.043137254901960784, 0.058823529411764705], [0.20392156862745098, 0.5450980392156862, 0.047058823529411764, 0.058823529411764705], [0.20784313725490197, 0.5568627450980392, 0.047058823529411764, 0.058823529411764705], [0.21176470588235294, 0.5647058823529412, 0.047058823529411764, 0.058823529411764705], [0.21568627450980393, 0.5764705882352941, 0.047058823529411764, 0.06274509803921569], [0.2196078431372549, 0.5882352941176471, 0.047058823529411764, 0.06274509803921569], [0.2235294117647059, 0.6, 0.050980392156862744, 0.06274509803921569], [0.22745098039215686, 0.6078431372549019, 0.050980392156862744, 0.06666666666666667], [0.23137254901960785, 0.6196078431372549, 0.050980392156862744, 0.06666666666666667], [0.23529411764705882, 0.6313725490196078, 0.050980392156862744, 0.06666666666666667], [0.23921568627450981, 0.6392156862745098, 0.054901960784313725, 0.06666666666666667], [0.24313725490196078, 0.6509803921568628, 0.054901960784313725, 0.07058823529411765], [0.24705882352941178, 0.6627450980392157, 0.054901960784313725, 0.07058823529411765], [0.25098039215686274, 0.6705882352941176, 0.054901960784313725, 0.07058823529411765], [0.2549019607843137, 0.6823529411764706, 0.058823529411764705, 0.07450980392156863], [0.25882352941176473, 0.6941176470588235, 0.058823529411764705, 0.07450980392156863], [0.2627450980392157, 0.7019607843137254, 0.058823529411764705, 0.07450980392156863], [0.26666666666666666, 0.7137254901960784, 0.058823529411764705, 0.0784313725490196], [0.27058823529411763, 0.7254901960784313, 0.058823529411764705, 0.0784313725490196], [0.27450980392156865, 0.7333333333333333, 0.06274509803921569, 0.0784313725490196], [0.2784313725490196, 0.7450980392156863, 0.06274509803921569, 0.0784313725490196], [0.2823529411764706, 0.7568627450980392, 0.06274509803921569, 0.08235294117647059], [0.28627450980392155, 0.7647058823529411, 0.06274509803921569, 0.08235294117647059], [0.2901960784313726, 0.7764705882352941, 0.06666666666666667, 0.08235294117647059], [0.29411764705882354, 0.788235294117647, 0.06666666666666667, 0.08627450980392157], [0.2980392156862745, 0.8, 0.06666666666666667, 0.08627450980392157], [0.30196078431372547, 0.807843137254902, 0.06666666666666667, 0.08627450980392157], [0.3058823529411765, 0.8196078431372549, 0.07058823529411765, 0.08627450980392157], [0.30980392156862746, 0.8313725490196079, 0.07058823529411765, 0.09019607843137255], [0.3137254901960784, 0.8392156862745098, 0.07058823529411765, 0.09019607843137255], [0.3176470588235294, 0.8509803921568627, 0.07058823529411765, 0.09019607843137255], [0.3215686274509804, 0.8627450980392157, 0.07058823529411765, 0.09411764705882353], [0.3254901960784314, 0.8705882352941177, 0.07450980392156863, 0.09411764705882353], [0.32941176470588235, 0.8823529411764706, 0.07450980392156863, 0.09411764705882353], [0.3333333333333333, 0.8941176470588236, 0.07450980392156863, 0.09803921568627451], [0.33725490196078434, 0.9019607843137255, 0.07450980392156863, 0.09803921568627451], [0.3411764705882353, 0.9137254901960784, 0.0784313725490196, 0.09803921568627451], [0.34509803921568627, 0.9254901960784314, 0.0784313725490196, 0.09803921568627451], [0.34901960784313724, 0.9333333333333333, 0.0784313725490196, 0.10196078431372549], [0.35294117647058826, 0.9450980392156862, 0.0784313725490196, 0.10196078431372549], [0.3568627450980392, 0.9568627450980393, 0.08235294117647059, 0.10196078431372549], [0.3607843137254902, 0.9647058823529412, 0.08235294117647059, 0.10588235294117647], [0.36470588235294116, 0.9764705882352941, 0.08235294117647059, 0.10588235294117647], [0.3686274509803922, 0.9882352941176471, 0.08235294117647059, 0.10588235294117647], [0.37254901960784315, 1, 0.08235294117647059, 0.10588235294117647], [0.3764705882352941, 1, 0.09411764705882353, 0.10588235294117647], [0.3803921568627451, 1, 0.10588235294117647, 0.10588235294117647], [0.3843137254901961, 1, 0.11764705882352941, 0.10196078431372549], [0.38823529411764707, 1, 0.12941176470588237, 0.10196078431372549], [0.39215686274509803, 1, 0.1411764705882353, 0.10196078431372549], [0.396078431372549, 1, 0.15294117647058825, 0.09803921568627451], [0.4, 1, 0.16470588235294117, 0.09803921568627451], [0.403921568627451, 1, 0.17647058823529413, 0.09803921568627451], [0.40784313725490196, 1, 0.18823529411764706, 0.09411764705882353], [0.4117647058823529, 1, 0.2, 0.09411764705882353], [0.41568627450980394, 1, 0.21176470588235294, 0.09411764705882353], [0.4196078431372549, 1, 0.2235294117647059, 0.09019607843137255], [0.4235294117647059, 1, 0.23529411764705882, 0.09019607843137255], [0.42745098039215684, 1, 0.24705882352941178, 0.08627450980392157], [0.43137254901960786, 1, 0.25882352941176473, 0.08627450980392157], [0.43529411764705883, 1, 0.27058823529411763, 0.08627450980392157], [0.4392156862745098, 1, 0.2823529411764706, 0.08235294117647059], [0.44313725490196076, 1, 0.29411764705882354, 0.08235294117647059], [0.4470588235294118, 1, 0.3058823529411765, 0.08235294117647059], [0.45098039215686275, 1, 0.3176470588235294, 0.0784313725490196], [0.4549019607843137, 1, 0.32941176470588235, 0.0784313725490196], [0.4588235294117647, 1, 0.3411764705882353, 0.0784313725490196], [0.4627450980392157, 1, 0.35294117647058826, 0.07450980392156863], [0.4666666666666667, 1, 0.36470588235294116, 0.07450980392156863], [0.47058823529411764, 1, 0.3764705882352941, 0.07450980392156863], [0.4745098039215686, 1, 0.38823529411764707, 0.07058823529411765], [0.47843137254901963, 1, 0.4, 0.07058823529411765], [0.4823529411764706, 1, 0.4117647058823529, 0.07058823529411765], [0.48627450980392156, 1, 0.4235294117647059, 0.06666666666666667], [0.49019607843137253, 1, 0.43529411764705883, 0.06666666666666667], [0.49411764705882355, 1, 0.4470588235294118, 0.06274509803921569], [0.4980392156862745, 1, 0.4588235294117647, 0.06274509803921569], [0.5019607843137255, 1, 0.47058823529411764, 0.06274509803921569], [0.5058823529411764, 1, 0.4823529411764706, 0.058823529411764705], [0.5098039215686274, 1, 0.49411764705882355, 0.058823529411764705], [0.5137254901960784, 1, 0.5058823529411764, 0.058823529411764705], [0.5176470588235295, 1, 0.5137254901960784, 0.054901960784313725], [0.5215686274509804, 1, 0.5254901960784314, 0.054901960784313725], [0.5254901960784314, 1, 0.5372549019607843, 0.054901960784313725], [0.5294117647058824, 1, 0.5490196078431373, 0.050980392156862744], [0.5333333333333333, 1, 0.5607843137254902, 0.050980392156862744], [0.5372549019607843, 1, 0.5725490196078431, 0.050980392156862744], [0.5411764705882353, 1, 0.5843137254901961, 0.047058823529411764], [0.5450980392156862, 1, 0.596078431372549, 0.047058823529411764], [0.5490196078431373, 1, 0.6078431372549019, 0.043137254901960784], [0.5529411764705883, 1, 0.6196078431372549, 0.043137254901960784], [0.5568627450980392, 1, 0.6313725490196078, 0.043137254901960784], [0.5607843137254902, 1, 0.6431372549019608, 0.0392156862745098], [0.5647058823529412, 1, 0.6549019607843137, 0.0392156862745098], [0.5686274509803921, 1, 0.6666666666666666, 0.0392156862745098], [0.5725490196078431, 1, 0.6784313725490196, 0.03529411764705882], [0.5764705882352941, 1, 0.6901960784313725, 0.03529411764705882], [0.5803921568627451, 1, 0.6941176470588235, 0.0392156862745098], [0.5843137254901961, 1, 0.7019607843137254, 0.0392156862745098], [0.5882352941176471, 1, 0.7058823529411765, 0.043137254901960784], [0.592156862745098, 1, 0.7098039215686275, 0.043137254901960784], [0.596078431372549, 1, 0.7137254901960784, 0.047058823529411764], [0.6, 1, 0.7176470588235294, 0.047058823529411764], [0.6039215686274509, 1, 0.7254901960784313, 0.050980392156862744], [0.6078431372549019, 1, 0.7294117647058823, 0.050980392156862744], [0.611764705882353, 1, 0.7333333333333333, 0.054901960784313725], [0.615686274509804, 1, 0.7372549019607844, 0.058823529411764705], [0.6196078431372549, 1, 0.7411764705882353, 0.058823529411764705], [0.6235294117647059, 1, 0.7490196078431373, 0.06274509803921569], [0.6274509803921569, 1, 0.7529411764705882, 0.06274509803921569], [0.6313725490196078, 1, 0.7568627450980392, 0.06666666666666667], [0.6352941176470588, 1, 0.7607843137254902, 0.06666666666666667], [0.6392156862745098, 1, 0.7647058823529411, 0.07058823529411765], [0.6431372549019608, 1, 0.7725490196078432, 0.07058823529411765], [0.6470588235294118, 1, 0.7764705882352941, 0.07450980392156863], [0.6509803921568628, 1, 0.7803921568627451, 0.07450980392156863], [0.6549019607843137, 1, 0.7843137254901961, 0.0784313725490196], [0.6588235294117647, 1, 0.788235294117647, 0.08235294117647059], [0.6627450980392157, 1, 0.796078431372549, 0.08235294117647059], [0.6666666666666666, 1, 0.8, 0.08627450980392157], [0.6705882352941176, 1, 0.803921568627451, 0.08627450980392157], [0.6745098039215687, 1, 0.807843137254902, 0.09019607843137255], [0.6784313725490196, 1, 0.8117647058823529, 0.09019607843137255], [0.6823529411764706, 1, 0.8196078431372549, 0.09411764705882353], [0.6862745098039216, 1, 0.8235294117647058, 0.09411764705882353], [0.6901960784313725, 1, 0.8274509803921568, 0.09803921568627451], [0.6941176470588235, 1, 0.8313725490196079, 0.10196078431372549], [0.6980392156862745, 1, 0.8352941176470589, 0.10196078431372549], [0.7019607843137254, 1, 0.8431372549019608, 0.10588235294117647], [0.7058823529411765, 1, 0.8470588235294118, 0.10588235294117647], [0.7098039215686275, 1, 0.8509803921568627, 0.10980392156862745], [0.7137254901960784, 1, 0.8549019607843137, 0.10980392156862745], [0.7176470588235294, 1, 0.8627450980392157, 0.11372549019607843], [0.7215686274509804, 1, 0.8666666666666667, 0.11372549019607843], [0.7254901960784313, 1, 0.8705882352941177, 0.11764705882352941], [0.7294117647058823, 1, 0.8745098039215686, 0.12156862745098039], [0.7333333333333333, 1, 0.8784313725490196, 0.12156862745098039], [0.7372549019607844, 1, 0.8862745098039215, 0.12549019607843137], [0.7411764705882353, 1, 0.8901960784313725, 0.12549019607843137], [0.7450980392156863, 1, 0.8941176470588236, 0.12941176470588237], [0.7490196078431373, 1, 0.8980392156862745, 0.12941176470588237], [0.7529411764705882, 1, 0.9019607843137255, 0.13333333333333333], [0.7568627450980392, 1, 0.9098039215686274, 0.13333333333333333], [0.7607843137254902, 1, 0.9137254901960784, 0.13725490196078433], [0.7647058823529411, 1, 0.9176470588235294, 0.1411764705882353], [0.7686274509803922, 1, 0.9215686274509803, 0.1411764705882353], [0.7725490196078432, 1, 0.9254901960784314, 0.1450980392156863], [0.7764705882352941, 1, 0.9333333333333333, 0.1450980392156863], [0.7803921568627451, 1, 0.9372549019607843, 0.14901960784313725], [0.7843137254901961, 1, 0.9411764705882353, 0.14901960784313725], [0.788235294117647, 1, 0.9450980392156862, 0.15294117647058825], [0.792156862745098, 1, 0.9450980392156862, 0.16862745098039217], [0.796078431372549, 1, 0.9490196078431372, 0.1843137254901961], [0.8, 1, 0.9490196078431372, 0.2], [0.803921568627451, 1, 0.9490196078431372, 0.21568627450980393], [0.807843137254902, 1, 0.9490196078431372, 0.22745098039215686], [0.8117647058823529, 1, 0.9529411764705882, 0.24313725490196078], [0.8156862745098039, 1, 0.9529411764705882, 0.25882352941176473], [0.8196078431372549, 1, 0.9529411764705882, 0.27450980392156865], [0.8235294117647058, 1, 0.9529411764705882, 0.2901960784313726], [0.8274509803921568, 1, 0.9568627450980393, 0.3058823529411765], [0.8313725490196079, 1, 0.9568627450980393, 0.3215686274509804], [0.8352941176470589, 1, 0.9568627450980393, 0.33725490196078434], [0.8392156862745098, 1, 0.9568627450980393, 0.35294117647058826], [0.8431372549019608, 1, 0.9607843137254902, 0.3686274509803922], [0.8470588235294118, 1, 0.9607843137254902, 0.3843137254901961], [0.8509803921568627, 1, 0.9607843137254902, 0.4], [0.8549019607843137, 1, 0.9607843137254902, 0.4117647058823529], [0.8588235294117647, 1, 0.9647058823529412, 0.42745098039215684], [0.8627450980392157, 1, 0.9647058823529412, 0.44313725490196076], [0.8666666666666667, 1, 0.9647058823529412, 0.4588235294117647], [0.8705882352941177, 1, 0.9647058823529412, 0.4745098039215686], [0.8745098039215686, 1, 0.9686274509803922, 0.49019607843137253], [0.8784313725490196, 1, 0.9686274509803922, 0.5058823529411764], [0.8823529411764706, 1, 0.9686274509803922, 0.5215686274509804], [0.8862745098039215, 1, 0.9686274509803922, 0.5372549019607843], [0.8901960784313725, 1, 0.9725490196078431, 0.5529411764705883], [0.8941176470588236, 1, 0.9725490196078431, 0.5686274509803921], [0.8980392156862745, 1, 0.9725490196078431, 0.5843137254901961], [0.9019607843137255, 1, 0.9725490196078431, 0.6], [0.9058823529411765, 1, 0.9725490196078431, 0.611764705882353], [0.9098039215686274, 1, 0.9764705882352941, 0.6274509803921569], [0.9137254901960784, 1, 0.9764705882352941, 0.6431372549019608], [0.9176470588235294, 1, 0.9764705882352941, 0.6588235294117647], [0.9215686274509803, 1, 0.9764705882352941, 0.6745098039215687], [0.9254901960784314, 1, 0.9803921568627451, 0.6901960784313725], [0.9294117647058824, 1, 0.9803921568627451, 0.7058823529411765], [0.9333333333333333, 1, 0.9803921568627451, 0.7215686274509804], [0.9372549019607843, 1, 0.9803921568627451, 0.7372549019607844], [0.9411764705882353, 1, 0.984313725490196, 0.7529411764705882], [0.9450980392156862, 1, 0.984313725490196, 0.7686274509803922], [0.9490196078431372, 1, 0.984313725490196, 0.7843137254901961], [0.9529411764705882, 1, 0.984313725490196, 0.8], [0.9568627450980393, 1, 0.9882352941176471, 0.8117647058823529], [0.9607843137254902, 1, 0.9882352941176471, 0.8274509803921568], [0.9647058823529412, 1, 0.9882352941176471, 0.8431372549019608], [0.9686274509803922, 1, 0.9882352941176471, 0.8588235294117647], [0.9725490196078431, 1, 0.9921568627450981, 0.8745098039215686], [0.9764705882352941, 1, 0.9921568627450981, 0.8901960784313725], [0.9803921568627451, 1, 0.9921568627450981, 0.9058823529411765], [0.984313725490196, 1, 0.9921568627450981, 0.9215686274509803], [0.9882352941176471, 1, 0.996078431372549, 0.9372549019607843], [0.9921568627450981, 1, 0.996078431372549, 0.9529411764705882], [0.996078431372549, 1, 0.996078431372549, 0.9686274509803922], [1, 1, 0.996078431372549, 0.984313725490196]] }; - } + }; - static presetLutsO() { + _class.presetLutsO = function presetLutsO() { return { linear: [[0, 0], [1, 1]], lowpass: [[0, 0.8], [0.2, 0.6], [0.3, 0.1], [1, 0]], @@ -32648,8 +32624,71 @@ const helpersLut = (three = window.THREE) => { random: [[0, 0], [0.38, 0], [0.55, 1], [0.72, 1], [1, 0.05]], linear_full: [[0, 0], [0.00392156862745098, 0.00392156862745098], [0.00784313725490196, 0.00784313725490196], [0.011764705882352941, 0.011764705882352941], [0.01568627450980392, 0.01568627450980392], [0.0196078431372549, 0.0196078431372549], [0.023529411764705882, 0.023529411764705882], [0.027450980392156862, 0.027450980392156862], [0.03137254901960784, 0.03137254901960784], [0.03529411764705882, 0.03529411764705882], [0.0392156862745098, 0.0392156862745098], [0.043137254901960784, 0.043137254901960784], [0.047058823529411764, 0.047058823529411764], [0.050980392156862744, 0.050980392156862744], [0.054901960784313725, 0.054901960784313725], [0.058823529411764705, 0.058823529411764705], [0.06274509803921569, 0.06274509803921569], [0.06666666666666667, 0.06666666666666667], [0.07058823529411765, 0.07058823529411765], [0.07450980392156863, 0.07450980392156863], [0.0784313725490196, 0.0784313725490196], [0.08235294117647059, 0.08235294117647059], [0.08627450980392157, 0.08627450980392157], [0.09019607843137255, 0.09019607843137255], [0.09411764705882353, 0.09411764705882353], [0.09803921568627451, 0.09803921568627451], [0.10196078431372549, 0.10196078431372549], [0.10588235294117647, 0.10588235294117647], [0.10980392156862745, 0.10980392156862745], [0.11372549019607843, 0.11372549019607843], [0.11764705882352941, 0.11764705882352941], [0.12156862745098039, 0.12156862745098039], [0.12549019607843137, 0.12549019607843137], [0.12941176470588237, 0.12941176470588237], [0.13333333333333333, 0.13333333333333333], [0.13725490196078433, 0.13725490196078433], [0.1411764705882353, 0.1411764705882353], [0.1450980392156863, 0.1450980392156863], [0.14901960784313725, 0.14901960784313725], [0.15294117647058825, 0.15294117647058825], [0.1568627450980392, 0.1568627450980392], [0.1607843137254902, 0.1607843137254902], [0.16470588235294117, 0.16470588235294117], [0.16862745098039217, 0.16862745098039217], [0.17254901960784313, 0.17254901960784313], [0.17647058823529413, 0.17647058823529413], [0.1803921568627451, 0.1803921568627451], [0.1843137254901961, 0.1843137254901961], [0.18823529411764706, 0.18823529411764706], [0.19215686274509805, 0.19215686274509805], [0.19607843137254902, 0.19607843137254902], [0.2, 0.2], [0.20392156862745098, 0.20392156862745098], [0.20784313725490197, 0.20784313725490197], [0.21176470588235294, 0.21176470588235294], [0.21568627450980393, 0.21568627450980393], [0.2196078431372549, 0.2196078431372549], [0.2235294117647059, 0.2235294117647059], [0.22745098039215686, 0.22745098039215686], [0.23137254901960785, 0.23137254901960785], [0.23529411764705882, 0.23529411764705882], [0.23921568627450981, 0.23921568627450981], [0.24313725490196078, 0.24313725490196078], [0.24705882352941178, 0.24705882352941178], [0.25098039215686274, 0.25098039215686274], [0.2549019607843137, 0.2549019607843137], [0.25882352941176473, 0.25882352941176473], [0.2627450980392157, 0.2627450980392157], [0.26666666666666666, 0.26666666666666666], [0.27058823529411763, 0.27058823529411763], [0.27450980392156865, 0.27450980392156865], [0.2784313725490196, 0.2784313725490196], [0.2823529411764706, 0.2823529411764706], [0.28627450980392155, 0.28627450980392155], [0.2901960784313726, 0.2901960784313726], [0.29411764705882354, 0.29411764705882354], [0.2980392156862745, 0.2980392156862745], [0.30196078431372547, 0.30196078431372547], [0.3058823529411765, 0.3058823529411765], [0.30980392156862746, 0.30980392156862746], [0.3137254901960784, 0.3137254901960784], [0.3176470588235294, 0.3176470588235294], [0.3215686274509804, 0.3215686274509804], [0.3254901960784314, 0.3254901960784314], [0.32941176470588235, 0.32941176470588235], [0.3333333333333333, 0.3333333333333333], [0.33725490196078434, 0.33725490196078434], [0.3411764705882353, 0.3411764705882353], [0.34509803921568627, 0.34509803921568627], [0.34901960784313724, 0.34901960784313724], [0.35294117647058826, 0.35294117647058826], [0.3568627450980392, 0.3568627450980392], [0.3607843137254902, 0.3607843137254902], [0.36470588235294116, 0.36470588235294116], [0.3686274509803922, 0.3686274509803922], [0.37254901960784315, 0.37254901960784315], [0.3764705882352941, 0.3764705882352941], [0.3803921568627451, 0.3803921568627451], [0.3843137254901961, 0.3843137254901961], [0.38823529411764707, 0.38823529411764707], [0.39215686274509803, 0.39215686274509803], [0.396078431372549, 0.396078431372549], [0.4, 0.4], [0.403921568627451, 0.403921568627451], [0.40784313725490196, 0.40784313725490196], [0.4117647058823529, 0.4117647058823529], [0.41568627450980394, 0.41568627450980394], [0.4196078431372549, 0.4196078431372549], [0.4235294117647059, 0.4235294117647059], [0.42745098039215684, 0.42745098039215684], [0.43137254901960786, 0.43137254901960786], [0.43529411764705883, 0.43529411764705883], [0.4392156862745098, 0.4392156862745098], [0.44313725490196076, 0.44313725490196076], [0.4470588235294118, 0.4470588235294118], [0.45098039215686275, 0.45098039215686275], [0.4549019607843137, 0.4549019607843137], [0.4588235294117647, 0.4588235294117647], [0.4627450980392157, 0.4627450980392157], [0.4666666666666667, 0.4666666666666667], [0.47058823529411764, 0.47058823529411764], [0.4745098039215686, 0.4745098039215686], [0.47843137254901963, 0.47843137254901963], [0.4823529411764706, 0.4823529411764706], [0.48627450980392156, 0.48627450980392156], [0.49019607843137253, 0.49019607843137253], [0.49411764705882355, 0.49411764705882355], [0.4980392156862745, 0.4980392156862745], [0.5019607843137255, 0.5019607843137255], [0.5058823529411764, 0.5058823529411764], [0.5098039215686274, 0.5098039215686274], [0.5137254901960784, 0.5137254901960784], [0.5176470588235295, 0.5176470588235295], [0.5215686274509804, 0.5215686274509804], [0.5254901960784314, 0.5254901960784314], [0.5294117647058824, 0.5294117647058824], [0.5333333333333333, 0.5333333333333333], [0.5372549019607843, 0.5372549019607843], [0.5411764705882353, 0.5411764705882353], [0.5450980392156862, 0.5450980392156862], [0.5490196078431373, 0.5490196078431373], [0.5529411764705883, 0.5529411764705883], [0.5568627450980392, 0.5568627450980392], [0.5607843137254902, 0.5607843137254902], [0.5647058823529412, 0.5647058823529412], [0.5686274509803921, 0.5686274509803921], [0.5725490196078431, 0.5725490196078431], [0.5764705882352941, 0.5764705882352941], [0.5803921568627451, 0.5803921568627451], [0.5843137254901961, 0.5843137254901961], [0.5882352941176471, 0.5882352941176471], [0.592156862745098, 0.592156862745098], [0.596078431372549, 0.596078431372549], [0.6, 0.6], [0.6039215686274509, 0.6039215686274509], [0.6078431372549019, 0.6078431372549019], [0.611764705882353, 0.611764705882353], [0.615686274509804, 0.615686274509804], [0.6196078431372549, 0.6196078431372549], [0.6235294117647059, 0.6235294117647059], [0.6274509803921569, 0.6274509803921569], [0.6313725490196078, 0.6313725490196078], [0.6352941176470588, 0.6352941176470588], [0.6392156862745098, 0.6392156862745098], [0.6431372549019608, 0.6431372549019608], [0.6470588235294118, 0.6470588235294118], [0.6509803921568628, 0.6509803921568628], [0.6549019607843137, 0.6549019607843137], [0.6588235294117647, 0.6588235294117647], [0.6627450980392157, 0.6627450980392157], [0.6666666666666666, 0.6666666666666666], [0.6705882352941176, 0.6705882352941176], [0.6745098039215687, 0.6745098039215687], [0.6784313725490196, 0.6784313725490196], [0.6823529411764706, 0.6823529411764706], [0.6862745098039216, 0.6862745098039216], [0.6901960784313725, 0.6901960784313725], [0.6941176470588235, 0.6941176470588235], [0.6980392156862745, 0.6980392156862745], [0.7019607843137254, 0.7019607843137254], [0.7058823529411765, 0.7058823529411765], [0.7098039215686275, 0.7098039215686275], [0.7137254901960784, 0.7137254901960784], [0.7176470588235294, 0.7176470588235294], [0.7215686274509804, 0.7215686274509804], [0.7254901960784313, 0.7254901960784313], [0.7294117647058823, 0.7294117647058823], [0.7333333333333333, 0.7333333333333333], [0.7372549019607844, 0.7372549019607844], [0.7411764705882353, 0.7411764705882353], [0.7450980392156863, 0.7450980392156863], [0.7490196078431373, 0.7490196078431373], [0.7529411764705882, 0.7529411764705882], [0.7568627450980392, 0.7568627450980392], [0.7607843137254902, 0.7607843137254902], [0.7647058823529411, 0.7647058823529411], [0.7686274509803922, 0.7686274509803922], [0.7725490196078432, 0.7725490196078432], [0.7764705882352941, 0.7764705882352941], [0.7803921568627451, 0.7803921568627451], [0.7843137254901961, 0.7843137254901961], [0.788235294117647, 0.788235294117647], [0.792156862745098, 0.792156862745098], [0.796078431372549, 0.796078431372549], [0.8, 0.8], [0.803921568627451, 0.803921568627451], [0.807843137254902, 0.807843137254902], [0.8117647058823529, 0.8117647058823529], [0.8156862745098039, 0.8156862745098039], [0.8196078431372549, 0.8196078431372549], [0.8235294117647058, 0.8235294117647058], [0.8274509803921568, 0.8274509803921568], [0.8313725490196079, 0.8313725490196079], [0.8352941176470589, 0.8352941176470589], [0.8392156862745098, 0.8392156862745098], [0.8431372549019608, 0.8431372549019608], [0.8470588235294118, 0.8470588235294118], [0.8509803921568627, 0.8509803921568627], [0.8549019607843137, 0.8549019607843137], [0.8588235294117647, 0.8588235294117647], [0.8627450980392157, 0.8627450980392157], [0.8666666666666667, 0.8666666666666667], [0.8705882352941177, 0.8705882352941177], [0.8745098039215686, 0.8745098039215686], [0.8784313725490196, 0.8784313725490196], [0.8823529411764706, 0.8823529411764706], [0.8862745098039215, 0.8862745098039215], [0.8901960784313725, 0.8901960784313725], [0.8941176470588236, 0.8941176470588236], [0.8980392156862745, 0.8980392156862745], [0.9019607843137255, 0.9019607843137255], [0.9058823529411765, 0.9058823529411765], [0.9098039215686274, 0.9098039215686274], [0.9137254901960784, 0.9137254901960784], [0.9176470588235294, 0.9176470588235294], [0.9215686274509803, 0.9215686274509803], [0.9254901960784314, 0.9254901960784314], [0.9294117647058824, 0.9294117647058824], [0.9333333333333333, 0.9333333333333333], [0.9372549019607843, 0.9372549019607843], [0.9411764705882353, 0.9411764705882353], [0.9450980392156862, 0.9450980392156862], [0.9490196078431372, 0.9490196078431372], [0.9529411764705882, 0.9529411764705882], [0.9568627450980393, 0.9568627450980393], [0.9607843137254902, 0.9607843137254902], [0.9647058823529412, 0.9647058823529412], [0.9686274509803922, 0.9686274509803922], [0.9725490196078431, 0.9725490196078431], [0.9764705882352941, 0.9764705882352941], [0.9803921568627451, 0.9803921568627451], [0.984313725490196, 0.984313725490196], [0.9882352941176471, 0.9882352941176471], [0.9921568627450981, 0.9921568627450981], [0.996078431372549, 0.996078431372549], [1, 1]] }; - } - }; + }; + + _createClass(_class, [{ + key: 'texture', + get: function get() { + var texture = new three.Texture(this._canvas); + texture.mapping = three.UVMapping; + texture.wrapS = texture.wrapT = three.ClampToEdgeWrapping; + texture.magFilter = texture.minFilter = three.NearestFilter; + texture.premultiplyAlpha = true; + texture.needsUpdate = true; + return texture; + } + }, { + key: 'lut', + set: function set(targetLUT) { + this._color = this._luts[targetLUT]; + this._lut = targetLUT; + + this.paintCanvas(); + }, + get: function get() { + return this._lut; + } + }, { + key: 'luts', + set: function set(newLuts) { + this._luts = newLuts; + }, + get: function get() { + return this._luts; + } + }, { + key: 'lutO', + set: function set(targetLUTO) { + this._opacity = this._lutsO[targetLUTO]; + this._lutO = targetLUTO; + + this.paintCanvas(); + }, + get: function get() { + return this._lutO; + } + }, { + key: 'lutsO', + set: function set(newLutsO) { + this._lutsO = newLutsO; + }, + get: function get() { + return this._lutsO; + } + }, { + key: 'discrete', + set: function set(discrete) { + this._discrete = discrete; + + this.paintCanvas(); + }, + get: function get() { + return this._discrete; + } + }]); + + return _class; + }(Constructor); }; @@ -32667,57 +32706,75 @@ const helpersLut = (three = window.THREE) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helpersMaterialMixin", function() { return helpersMaterialMixin; }); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Helpers material mixin. * * @module helpers/material/mixin */ -const helpersMaterialMixin = (three = window.THREE) => { +var helpersMaterialMixin = function helpersMaterialMixin() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = three.Object3D; - return class extends Constructor { - _createMaterial(extraOptions) { + var Constructor = three.Object3D; + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class() { + _classCallCheck(this, _class); + + return _possibleConstructorReturn(this, _Constructor.apply(this, arguments)); + } + + _class.prototype._createMaterial = function _createMaterial(extraOptions) { // generate shaders on-demand! - let fs = new this._shadersFragment(this._uniforms); - let vs = new this._shadersVertex(); + var fs = new this._shadersFragment(this._uniforms); + var vs = new this._shadersVertex(); // material - let globalOptions = { + var globalOptions = { uniforms: this._uniforms, vertexShader: vs.compute(), fragmentShader: fs.compute() }; - let options = Object.assign(extraOptions, globalOptions); + var options = Object.assign(extraOptions, globalOptions); this._material = new three.ShaderMaterial(options); this._material.needsUpdate = true; - } + }; - _updateMaterial() { + _class.prototype._updateMaterial = function _updateMaterial() { // generate shaders on-demand! - let fs = new this._shadersFragment(this._uniforms); - let vs = new this._shadersVertex(); + var fs = new this._shadersFragment(this._uniforms); + var vs = new this._shadersVertex(); this._material.vertexShader = vs.compute(); this._material.fragmentShader = fs.compute(); this._material.needsUpdate = true; - } + }; - _prepareTexture() { + _class.prototype._prepareTexture = function _prepareTexture() { this._textures = []; - for (let m = 0; m < this._stack._rawData.length; m++) { - let tex = new three.DataTexture(this._stack.rawData[m], this._stack.textureSize, this._stack.textureSize, this._stack.textureType, three.UnsignedByteType, three.UVMapping, three.ClampToEdgeWrapping, three.ClampToEdgeWrapping, three.NearestFilter, three.NearestFilter); + for (var m = 0; m < this._stack._rawData.length; m++) { + var tex = new three.DataTexture(this._stack.rawData[m], this._stack.textureSize, this._stack.textureSize, this._stack.textureType, three.UnsignedByteType, three.UVMapping, three.ClampToEdgeWrapping, three.ClampToEdgeWrapping, three.NearestFilter, three.NearestFilter); tex.needsUpdate = true; tex.flipY = true; this._textures.push(tex); } - } - }; + }; + + return _class; + }(Constructor); }; @@ -32734,8 +32791,9 @@ const helpersMaterialMixin = (three = window.THREE) => { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return HelpersProgressBarEventBased; }); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** @@ -32749,8 +32807,10 @@ __webpack_require__.r(__webpack_exports__); * const pb = new HelpersProgressBarEventBased(loader, domContainer); */ -class HelpersProgressBarEventBased { - constructor(emitter, domTarget) { +var HelpersProgressBarEventBased = function () { + function HelpersProgressBarEventBased(emitter, domTarget) { + _classCallCheck(this, HelpersProgressBarEventBased); + if (!emitter || !this._isFunction(emitter.emit)) { window.console.error('please give the this._emitter instance'); return; @@ -32773,23 +32833,23 @@ class HelpersProgressBarEventBased { this.totalFile = 0; } - _isFunction(fn) { + HelpersProgressBarEventBased.prototype._isFunction = function _isFunction(fn) { return Object.prototype.toString.call(fn) === '[object Function]'; - } + }; - initEventListenner() { - const self = this; + HelpersProgressBarEventBased.prototype.initEventListenner = function initEventListenner() { + var self = this; this._emitter.on('load-start', function (event) { - const totalFiles = event.files.length; + var totalFiles = event.files.length; self.totalFile = totalFiles; self._domTotalFile.innerHTML = totalFiles; }); this._emitter.on('fetch-start', function (event) { - const fetchLi = document.createElement('li'); + var fetchLi = document.createElement('li'); - const fileTag = document.createElement('div'); + var fileTag = document.createElement('div'); fileTag.innerHTML = 'file: ' + event.file; fileTag.style.color = '#ffffff'; fetchLi.append(fileTag); @@ -32799,7 +32859,7 @@ class HelpersProgressBarEventBased { fetchLi.style.marginBottom = '7px'; fetchLi.style.border = '1px solid #ffffff;'; fetchLi.style.width = '60%'; - const fetchprogress = document.createElement('div'); + var fetchprogress = document.createElement('div'); fetchprogress.id = 'file-fetch-' + event.file; fetchprogress.style.width = '0%'; fetchLi.append(fetchprogress); @@ -32807,16 +32867,16 @@ class HelpersProgressBarEventBased { }); this._emitter.on('fetch-progress', function (event) { - const id = 'file-fetch-' + event.file; - const fileFetchDom = document.getElementById(id); + var id = 'file-fetch-' + event.file; + var fileFetchDom = document.getElementById(id); fileFetchDom.style.width = event.loaded / event.total * 100 + '%'; fileFetchDom.style.border = '1px solid red'; }); this._emitter.on('fetch-success', function (event) { // show result - const liParent = document.getElementById('file-' + event.file); - const result = document.createElement('div'); + var liParent = document.getElementById('file-' + event.file); + var result = document.createElement('div'); result.id = 'file-result-' + event.file; result.innerHTML = 'fetch-success'; result.style.color = '#ffffff'; @@ -32840,16 +32900,16 @@ class HelpersProgressBarEventBased { }); this._emitter.on('parse-start', function (event) { - const liParent = document.getElementById('file-' + event.file); - const parseprogress = document.createElement('div'); + var liParent = document.getElementById('file-' + event.file); + var parseprogress = document.createElement('div'); parseprogress.id = 'file-parse-' + event.file; parseprogress.style.width = '0%'; liParent.append(parseprogress); }); this._emitter.on('parsing', function (event) { - const id = 'file-parse-' + event.file; - const fileParseDom = document.getElementById(id); + var id = 'file-parse-' + event.file; + var fileParseDom = document.getElementById(id); fileParseDom.style.width = event.parsed / event.total * 100 + '%'; fileParseDom.style.border = '1px solid yellow'; }); @@ -32859,31 +32919,18 @@ class HelpersProgressBarEventBased { self._domCurrentFile.innerHTML = self.loaded; self._domCurrentProgress.style.width = self.loaded / self.totalFile * 100 + '%'; // show result - const liParent = document.getElementById('file-' + event.file); - const result = document.createElement('div'); + var liParent = document.getElementById('file-' + event.file); + var result = document.createElement('div'); result.id = 'file-result-' + event.file; result.innerHTML = 'parse-success'; result.style.color = '#ffffff'; liParent.append(result); }); - } + }; - initContainerDom() { - const containerDom = ` -
-
- -
-
-
-
-
    -
-
`; - const wrap = document.createElement('div'); + HelpersProgressBarEventBased.prototype.initContainerDom = function initContainerDom() { + var containerDom = '\n
\n
\n \n
\n
\n
\n
\n
    \n
\n
'; + var wrap = document.createElement('div'); wrap.innerHTML = containerDom; this._dom.append(wrap); // dom interface @@ -32891,8 +32938,12 @@ class HelpersProgressBarEventBased { this._domTotalFile = document.getElementById('total-file'); this._domProcessList = document.getElementById('process-list'); this._domCurrentProgress = document.getElementById('current-progress'); - } -} + }; + + return HelpersProgressBarEventBased; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (HelpersProgressBarEventBased); /***/ }), @@ -32905,13 +32956,18 @@ class HelpersProgressBarEventBased { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return HelpersProgressBar; }); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * @module helpers/progressBar */ -class HelpersProgressBar { - constructor(container) { +var HelpersProgressBar = function () { + function HelpersProgressBar(container) { + _classCallCheck(this, HelpersProgressBar); + this._container = container; this._modes = { load: { @@ -32934,22 +32990,22 @@ class HelpersProgressBar { this.init(); } - free() { - let progressContainers = this._container.getElementsByClassName('progress container'); + HelpersProgressBar.prototype.free = function free() { + var progressContainers = this._container.getElementsByClassName('progress container'); if (progressContainers.length > 0) { progressContainers[0].parentNode.removeChild(progressContainers[0]); } progressContainers = null; // stop rendering loop window.cancelAnimationFrame(this.requestAnimationFrameID); - } + }; - init() { - let progressContainer = this._domContainer(); + HelpersProgressBar.prototype.init = function init() { + var progressContainer = this._domContainer(); - for (let mode in this._modes) { + for (var mode in this._modes) { if (this._modes.hasOwnProperty(mode)) { - let bar = this._domBar(this._modes[mode]); + var bar = this._domBar(this._modes[mode]); progressContainer.appendChild(bar); bar = null; } @@ -32960,10 +33016,14 @@ class HelpersProgressBar { // start rendering loop this.updateUI(); - } + }; // url can be used in child class to show overall progress bar - update(value, total, mode, url = '') { + + + HelpersProgressBar.prototype.update = function update(value, total, mode) { + var url = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; + this._mode = mode; this._value = value; // depending on CDN, total return to XHTTPRequest can be 0. @@ -32974,30 +33034,32 @@ class HelpersProgressBar { } else { this._total = total; } - } + }; - updateUI() { - this.requestAnimationFrameID = requestAnimationFrame(() => { - this.updateUI(); + HelpersProgressBar.prototype.updateUI = function updateUI() { + var _this = this; + + this.requestAnimationFrameID = requestAnimationFrame(function () { + _this.updateUI(); }); if (!(this._modes.hasOwnProperty(this._mode) && this._modes[this._mode].hasOwnProperty('name') && this._modes[this._mode].hasOwnProperty('color'))) { return false; } - const progress = Math.round(this._value / this._total * 100); - const color = this._modes[this._mode].color; + var progress = Math.round(this._value / this._total * 100); + var color = this._modes[this._mode].color; - let progressBar = this._container.getElementsByClassName('progress ' + this._modes[this._mode].name); + var progressBar = this._container.getElementsByClassName('progress ' + this._modes[this._mode].name); if (progressBar.length > 0) { progressBar[0].style.borderColor = color; progressBar[0].style.width = progress + '%'; } progressBar = null; - } + }; - _domContainer() { - let container = document.createElement('div'); + HelpersProgressBar.prototype._domContainer = function _domContainer() { + var container = document.createElement('div'); // class it container.classList.add('progress'); @@ -33012,9 +33074,9 @@ class HelpersProgressBar { container.style.zIndex = '1'; return container; - } + }; - _domBar(mode) { + HelpersProgressBar.prototype._domBar = function _domBar(mode) { if (!(mode.hasOwnProperty('name') && mode.hasOwnProperty('color'))) { window.console.log('Invalid mode provided.'); window.console.log(mode); @@ -33022,7 +33084,7 @@ class HelpersProgressBar { return false; } - let bar = document.createElement('div'); + var bar = document.createElement('div'); // class it bar.classList.add(mode.name); @@ -33033,16 +33095,22 @@ class HelpersProgressBar { bar.style.width = '0%'; return bar; - } + }; - set totalFiles(totalFiles) { - this._totalFiles = totalFiles; - } + _createClass(HelpersProgressBar, [{ + key: 'totalFiles', + set: function set(totalFiles) { + this._totalFiles = totalFiles; + }, + get: function get() { + return this._totalFiles; + } + }]); - get totalFiles() { - return this._totalFiles; - } -} + return HelpersProgressBar; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (HelpersProgressBar); /***/ }), @@ -33055,17 +33123,24 @@ class HelpersProgressBar { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return HelpersSegmentationLut; }); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + -let defaultSegmentation = { +var defaultSegmentation = { 0: { color: [0, 0, 0], opacity: 0, label: 'background' }, 1: { color: [255, 0, 0], opacity: 1, label: 'white matter' } }; -class HelpersSegmentationLut { - constructor(domTarget, segmentation = defaultSegmentation) { +var HelpersSegmentationLut = function () { + function HelpersSegmentationLut(domTarget) { + var segmentation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultSegmentation; + + _classCallCheck(this, HelpersSegmentationLut); + if (_core_core_utils__WEBPACK_IMPORTED_MODULE_0__["default"].isString(domTarget)) { this._dom = document.getElementById(domTarget); } else { @@ -33085,7 +33160,7 @@ class HelpersSegmentationLut { this.paintCanvas(); } - initCanvas() { + HelpersSegmentationLut.prototype.initCanvas = function initCanvas() { // container this._canvasContainer = this.initCanvasContainer(this._dom); // background @@ -33094,68 +33169,77 @@ class HelpersSegmentationLut { // foreground this._canvas = this.createCanvas(); this._canvasContainer.appendChild(this._canvas); - } + }; - initCanvasContainer(dom) { - let canvasContainer = dom; + HelpersSegmentationLut.prototype.initCanvasContainer = function initCanvasContainer(dom) { + var canvasContainer = dom; canvasContainer.style.width = '256 px'; canvasContainer.style.height = '128 px'; canvasContainer.style.border = '1px solid #F9F9F9'; return canvasContainer; - } + }; - createCanvas() { - let canvas = document.createElement('canvas'); + HelpersSegmentationLut.prototype.createCanvas = function createCanvas() { + var canvas = document.createElement('canvas'); canvas.height = 128; canvas.width = 256; return canvas; - } + }; - paintCanvas() { + HelpersSegmentationLut.prototype.paintCanvas = function paintCanvas() { // setup context - let ctx = this._canvas.getContext('2d'); + var ctx = this._canvas.getContext('2d'); ctx.clearRect(0, 0, this._canvas.width, this._canvas.height); ctx.globalCompositeOperation = 'source-over'; ctx.lineWidth = 1; - for (let i in this._segmentation) { + for (var i in this._segmentation) { // i is the label number and specifies the coordinates inside the canvas - let xCoord = i % this._canvas.width; - let yCoord = Math.floor(i / this._canvas.width); - let opacity = typeof this._segmentation[i]['opacity'] != 'undefined' ? this._segmentation[i]['opacity'] : 1; - let color = this._segmentation[i]['color']; + var xCoord = i % this._canvas.width; + var yCoord = Math.floor(i / this._canvas.width); + var opacity = typeof this._segmentation[i]['opacity'] != 'undefined' ? this._segmentation[i]['opacity'] : 1; + var color = this._segmentation[i]['color']; - ctx.fillStyle = `rgba( ${Math.round(color[0])}, ${Math.round(color[1])}, ${Math.round(color[2])}, ${opacity})`; + ctx.fillStyle = 'rgba( ' + Math.round(color[0]) + ', ' + Math.round(color[1]) + ', ' + Math.round(color[2]) + ', ' + opacity + ')'; ctx.fillRect(xCoord, yCoord, 1, 1); } - } + }; - get texture() { - let texture = new THREE.Texture(this._canvas); - texture.mapping = THREE.UVMapping; - texture.wrapS = texture.wrapT = THREE.ClampToEdgeWrapping; - texture.magFilter = texture.minFilter = THREE.NearestFilter; - texture.premultiplyAlpha = true; - texture.needsUpdate = true; + _createClass(HelpersSegmentationLut, [{ + key: 'texture', + get: function get() { + var texture = new THREE.Texture(this._canvas); + texture.mapping = THREE.UVMapping; + texture.wrapS = texture.wrapT = THREE.ClampToEdgeWrapping; + texture.magFilter = texture.minFilter = THREE.NearestFilter; + texture.premultiplyAlpha = true; + texture.needsUpdate = true; - return texture; - } + return texture; + } - /** - * Set and get the segmentation object - * (you can create it or get it from the presets file) - * - * @param {*} segmentation - */ - set segmentation(segmentation) { - this._segmentation = segmentation; - this.paintCanvas(); - } + /** + * Set and get the segmentation object + * (you can create it or get it from the presets file) + * + * @param {*} segmentation + */ - get segmentation() { - return this._segmentation; - } -} + }, { + key: 'segmentation', + set: function set(segmentation) { + this._segmentation = segmentation; + this.paintCanvas(); + }, + get: function get() { + return this._segmentation; + } + }]); + + return HelpersSegmentationLut; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (HelpersSegmentationLut); /***/ }), @@ -33174,6 +33258,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _shaders_shaders_data_vertex__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shaders/shaders.data.vertex */ "./src/shaders/shaders.data.vertex.js"); /* harmony import */ var _shaders_shaders_data_fragment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shaders/shaders.data.fragment */ "./src/shaders/shaders.data.fragment.js"); /* harmony import */ var _helpers_helpers_material_mixin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../helpers/helpers.material.mixin */ "./src/helpers/helpers.material.mixin.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ @@ -33186,315 +33278,90 @@ __webpack_require__.r(__webpack_exports__); * @module helpers/slice */ -const helpersSlice = (three = window.THREE) => { +var helpersSlice = function helpersSlice() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_helpers_helpers_material_mixin__WEBPACK_IMPORTED_MODULE_4__["helpersMaterialMixin"])(three); - return class extends Constructor { - constructor(stack, index = 0, position = new three.Vector3(0, 0, 0), direction = new three.Vector3(0, 0, 1), aabbSpace = 'IJK') { - // - super(); + var Constructor = Object(_helpers_helpers_material_mixin__WEBPACK_IMPORTED_MODULE_4__["helpersMaterialMixin"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(stack) { + var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var position = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new three.Vector3(0, 0, 0); + var direction = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new three.Vector3(0, 0, 1); + var aabbSpace = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'IJK'; + + _classCallCheck(this, _class); // private vars - this._stack = stack; + var _this = _possibleConstructorReturn(this, _Constructor.call(this)); + // + + + _this._stack = stack; // image settings // index only used to grab window/level and intercept/slope - this._invert = this._stack.invert; + _this._invert = _this._stack.invert; - this._lut = 'none'; - this._lutTexture = null; + _this._lut = 'none'; + _this._lutTexture = null; // if auto === true, get from index // else from stack which holds the default values - this._intensityAuto = true; - this._interpolation = 1; // default to trilinear interpolation + _this._intensityAuto = true; + _this._interpolation = 1; // default to trilinear interpolation // starts at 0 - this._index = index; - this._windowWidth = null; - this._windowCenter = null; - this._opacity = 1; - this._rescaleSlope = null; - this._rescaleIntercept = null; - this._spacing = 1; - this._thickness = 0; - this._thicknessMethod = 0; // default to MIP (Maximum Intensity Projection); 1 - Mean; 2 - MinIP + _this._index = index; + _this._windowWidth = null; + _this._windowCenter = null; + _this._opacity = 1; + _this._rescaleSlope = null; + _this._rescaleIntercept = null; + _this._spacing = 1; + _this._thickness = 0; + _this._thicknessMethod = 0; // default to MIP (Maximum Intensity Projection); 1 - Mean; 2 - MinIP // threshold - this._lowerThreshold = null; - this._upperThreshold = null; + _this._lowerThreshold = null; + _this._upperThreshold = null; - this._canvasWidth = 0; - this._canvasHeight = 0; - this._borderColor = null; + _this._canvasWidth = 0; + _this._canvasHeight = 0; + _this._borderColor = null; // Object3D settings // shape - this._planePosition = position; - this._planeDirection = direction; + _this._planePosition = position; + _this._planeDirection = direction; // change aaBBSpace changes the box dimensions // also changes the transform // there is also a switch to move back mesh to LPS space automatically - this._aaBBspace = aabbSpace; // or LPS -> different transforms, esp for the geometry/mesh - this._material = null; - this._textures = []; - this._shadersFragment = _shaders_shaders_data_fragment__WEBPACK_IMPORTED_MODULE_3__["default"]; - this._shadersVertex = _shaders_shaders_data_vertex__WEBPACK_IMPORTED_MODULE_2__["default"]; - this._uniforms = _shaders_shaders_data_uniform__WEBPACK_IMPORTED_MODULE_1__["default"].uniforms(); - this._geometry = null; - this._mesh = null; - this._visible = true; + _this._aaBBspace = aabbSpace; // or LPS -> different transforms, esp for the geometry/mesh + _this._material = null; + _this._textures = []; + _this._shadersFragment = _shaders_shaders_data_fragment__WEBPACK_IMPORTED_MODULE_3__["default"]; + _this._shadersVertex = _shaders_shaders_data_vertex__WEBPACK_IMPORTED_MODULE_2__["default"]; + _this._uniforms = _shaders_shaders_data_uniform__WEBPACK_IMPORTED_MODULE_1__["default"].uniforms(); + _this._geometry = null; + _this._mesh = null; + _this._visible = true; // update dimensions, center, etc. // depending on aaBBSpace - this._init(); + _this._init(); // update object - this._create(); + _this._create(); + return _this; } // getters/setters - get stack() { - return this._stack; - } - - set stack(stack) { - this._stack = stack; - } - - get spacing() { - return this._spacing; - } - - set spacing(spacing) { - this._spacing = spacing; - this._uniforms.uSpacing.value = this._spacing; - } - - get thickness() { - return this._thickness; - } - - set thickness(thickness) { - this._thickness = thickness; - this._uniforms.uThickness.value = this._thickness; - } - - get thicknessMethod() { - return this._thicknessMethod; - } - - set thicknessMethod(thicknessMethod) { - this._thicknessMethod = thicknessMethod; - this._uniforms.uThicknessMethod.value = this._thicknessMethod; - } - get windowWidth() { - return this._windowWidth; - } - - set windowWidth(windowWidth) { - this._windowWidth = windowWidth; - this.updateIntensitySettingsUniforms(); - } - - get windowCenter() { - return this._windowCenter; - } - - set windowCenter(windowCenter) { - this._windowCenter = windowCenter; - this.updateIntensitySettingsUniforms(); - } - - get opacity() { - return this._opacity; - } - - set opacity(opacity) { - this._opacity = opacity; - this.updateIntensitySettingsUniforms(); - } - - // adding thresholding method - get upperThreshold() { - return this._upperThreshold; - } - - set upperThreshold(upperThreshold) { - this._upperThreshold = upperThreshold; - this.updateIntensitySettingsUniforms(); - } - - get lowerThreshold() { - return this._lowerThreshold; - } - - set lowerThreshold(lowerThreshold) { - this._lowerThreshold = lowerThreshold; - this.updateIntensitySettingsUniforms(); - } - get rescaleSlope() { - return this._rescaleSlope; - } - - set rescaleSlope(rescaleSlope) { - this._rescaleSlope = rescaleSlope; - this.updateIntensitySettingsUniforms(); - } - - get rescaleIntercept() { - return this._rescaleIntercept; - } - - set rescaleIntercept(rescaleIntercept) { - this._rescaleIntercept = rescaleIntercept; - this.updateIntensitySettingsUniforms(); - } - - get invert() { - return this._invert; - } - - set invert(invert) { - this._invert = invert; - this.updateIntensitySettingsUniforms(); - } - - get lut() { - return this._lut; - } - - set lut(lut) { - this._lut = lut; - } - - get lutTexture() { - return this._lutTexture; - } - - set lutTexture(lutTexture) { - this._lutTexture = lutTexture; - this.updateIntensitySettingsUniforms(); - } - - get intensityAuto() { - return this._intensityAuto; - } - - set intensityAuto(intensityAuto) { - this._intensityAuto = intensityAuto; - this.updateIntensitySettings(); - this.updateIntensitySettingsUniforms(); - } - - get interpolation() { - return this._interpolation; - } - - set interpolation(interpolation) { - this._interpolation = interpolation; - this.updateIntensitySettingsUniforms(); - this._updateMaterial(); - } - - get index() { - return this._index; - } - - set index(index) { - this._index = index; - this._update(); - } - - set planePosition(position) { - this._planePosition = position; - this._update(); - } - - get planePosition() { - return this._planePosition; - } - - set planeDirection(direction) { - this._planeDirection = direction; - this._update(); - } - - get planeDirection() { - return this._planeDirection; - } - - set halfDimensions(halfDimensions) { - this._halfDimensions = halfDimensions; - } - - get halfDimensions() { - return this._halfDimensions; - } - - set center(center) { - this._center = center; - } - - get center() { - return this._center; - } - - set aabbSpace(aabbSpace) { - this._aaBBspace = aabbSpace; - this._init(); - } - - get aabbSpace() { - return this._aaBBspace; - } - - set mesh(mesh) { - this._mesh = mesh; - } - - get mesh() { - return this._mesh; - } - - set geometry(geometry) { - this._geometry = geometry; - } - - get geometry() { - return this._geometry; - } - - set canvasWidth(canvasWidth) { - this._canvasWidth = canvasWidth; - this._uniforms.uCanvasWidth.value = this._canvasWidth; - } - - get canvasWidth() { - return this._canvasWidth; - } - - set canvasHeight(canvasHeight) { - this._canvasHeight = canvasHeight; - this._uniforms.uCanvasHeight.value = this._canvasHeight; - } - - get canvasHeight() { - return this._canvasHeight; - } - - set borderColor(borderColor) { - this._borderColor = borderColor; - this._uniforms.uBorderColor.value = new three.Color(borderColor); - } - - get borderColor() { - return this._borderColor; - } - - _init() { + _class.prototype._init = function _init() { if (!this._stack || !this._stack._prepared || !this._stack._packed) { return; } @@ -33505,22 +33372,24 @@ const helpersSlice = (three = window.THREE) => { this._toAABB = new three.Matrix4(); } else { // LPS - let aaBBox = this._stack.AABBox(); + var aaBBox = this._stack.AABBox(); this._halfDimensions = aaBBox.clone().multiplyScalar(0.5); this._center = this._stack.centerAABBox(); this._toAABB = this._stack.lps2AABB; } - } + }; // private methods - _create() { + + + _class.prototype._create = function _create() { if (!this._stack || !this._stack.prepared || !this._stack.packed) { return; } // Convenience vars try { - const SliceGeometryContructor = Object(_geometries_geometries_slice__WEBPACK_IMPORTED_MODULE_0__["geometriesSlice"])(three); + var SliceGeometryContructor = Object(_geometries_geometries_slice__WEBPACK_IMPORTED_MODULE_0__["geometriesSlice"])(three); this._geometry = new SliceGeometryContructor(this._halfDimensions, this._center, this._planePosition, this._planeDirection, this._toAABB); } catch (e) { window.console.log(e); @@ -33570,9 +33439,9 @@ const helpersSlice = (three = window.THREE) => { // and add it! this.add(this._mesh); - } + }; - updateIntensitySettings() { + _class.prototype.updateIntensitySettings = function updateIntensitySettings() { // if auto, get from frame index if (this._intensityAuto) { this.updateIntensitySetting('windowCenter'); @@ -33605,12 +33474,12 @@ const helpersSlice = (three = window.THREE) => { if (this._lowerThreshold === null) { this._lowerThreshold = this._stack._minMax[0]; } - } + }; - updateIntensitySettingsUniforms() { + _class.prototype.updateIntensitySettingsUniforms = function updateIntensitySettingsUniforms() { // compensate for the offset to only pass > 0 values to shaders // models > models.stack.js : _packTo8Bits - let offset = 0; + var offset = 0; if (this._stack._minMax[0] < 0) { offset -= this._stack._minMax[0]; } @@ -33638,17 +33507,17 @@ const helpersSlice = (three = window.THREE) => { this._uniforms.uLut.value = 1; this._uniforms.uTextureLUT.value = this._lutTexture; } - } + }; - updateIntensitySetting(setting) { + _class.prototype.updateIntensitySetting = function updateIntensitySetting(setting) { if (this._stack.frame[this._index] && this._stack.frame[this._index][setting]) { this['_' + setting] = this._stack.frame[this._index][setting]; } else { this['_' + setting] = this._stack[setting]; } - } + }; - _update() { + _class.prototype._update = function _update() { // update slice if (this._mesh) { this.remove(this._mesh); @@ -33661,11 +33530,11 @@ const helpersSlice = (three = window.THREE) => { } this._create(); - } + }; - dispose() { + _class.prototype.dispose = function dispose() { // Release memory - for (let j = 0; j < this._textures.length; j++) { + for (var j = 0; j < this._textures.length; j++) { this._textures[j].dispose(); this._textures[j] = null; } @@ -33692,26 +33561,272 @@ const helpersSlice = (three = window.THREE) => { this._material = null; this._stack = null; - } + }; - cartesianEquation() { + _class.prototype.cartesianEquation = function cartesianEquation() { // Make sure we have a geometry if (!this._geometry || !this._geometry.vertices || this._geometry.vertices.length < 3) { return new three.Vector4(); } - let vertices = this._geometry.vertices; - let dataToWorld = this._stack.ijk2LPS; - let p1 = new three.Vector3(vertices[0].x, vertices[0].y, vertices[0].z).applyMatrix4(dataToWorld); - let p2 = new three.Vector3(vertices[1].x, vertices[1].y, vertices[1].z).applyMatrix4(dataToWorld); - let p3 = new three.Vector3(vertices[2].x, vertices[2].y, vertices[2].z).applyMatrix4(dataToWorld); - let v1 = new three.Vector3(); - let v2 = new three.Vector3(); - let normal = v1.subVectors(p3, p2).cross(v2.subVectors(p1, p2)).normalize(); + var vertices = this._geometry.vertices; + var dataToWorld = this._stack.ijk2LPS; + var p1 = new three.Vector3(vertices[0].x, vertices[0].y, vertices[0].z).applyMatrix4(dataToWorld); + var p2 = new three.Vector3(vertices[1].x, vertices[1].y, vertices[1].z).applyMatrix4(dataToWorld); + var p3 = new three.Vector3(vertices[2].x, vertices[2].y, vertices[2].z).applyMatrix4(dataToWorld); + var v1 = new three.Vector3(); + var v2 = new three.Vector3(); + var normal = v1.subVectors(p3, p2).cross(v2.subVectors(p1, p2)).normalize(); return new three.Vector4(normal.x, normal.y, normal.z, -normal.dot(p1)); - } - }; + }; + + _createClass(_class, [{ + key: 'stack', + get: function get() { + return this._stack; + }, + set: function set(stack) { + this._stack = stack; + } + }, { + key: 'spacing', + get: function get() { + return this._spacing; + }, + set: function set(spacing) { + this._spacing = spacing; + this._uniforms.uSpacing.value = this._spacing; + } + }, { + key: 'thickness', + get: function get() { + return this._thickness; + }, + set: function set(thickness) { + this._thickness = thickness; + this._uniforms.uThickness.value = this._thickness; + } + }, { + key: 'thicknessMethod', + get: function get() { + return this._thicknessMethod; + }, + set: function set(thicknessMethod) { + this._thicknessMethod = thicknessMethod; + this._uniforms.uThicknessMethod.value = this._thicknessMethod; + } + }, { + key: 'windowWidth', + get: function get() { + return this._windowWidth; + }, + set: function set(windowWidth) { + this._windowWidth = windowWidth; + this.updateIntensitySettingsUniforms(); + } + }, { + key: 'windowCenter', + get: function get() { + return this._windowCenter; + }, + set: function set(windowCenter) { + this._windowCenter = windowCenter; + this.updateIntensitySettingsUniforms(); + } + }, { + key: 'opacity', + get: function get() { + return this._opacity; + }, + set: function set(opacity) { + this._opacity = opacity; + this.updateIntensitySettingsUniforms(); + } + + // adding thresholding method + + }, { + key: 'upperThreshold', + get: function get() { + return this._upperThreshold; + }, + set: function set(upperThreshold) { + this._upperThreshold = upperThreshold; + this.updateIntensitySettingsUniforms(); + } + }, { + key: 'lowerThreshold', + get: function get() { + return this._lowerThreshold; + }, + set: function set(lowerThreshold) { + this._lowerThreshold = lowerThreshold; + this.updateIntensitySettingsUniforms(); + } + }, { + key: 'rescaleSlope', + get: function get() { + return this._rescaleSlope; + }, + set: function set(rescaleSlope) { + this._rescaleSlope = rescaleSlope; + this.updateIntensitySettingsUniforms(); + } + }, { + key: 'rescaleIntercept', + get: function get() { + return this._rescaleIntercept; + }, + set: function set(rescaleIntercept) { + this._rescaleIntercept = rescaleIntercept; + this.updateIntensitySettingsUniforms(); + } + }, { + key: 'invert', + get: function get() { + return this._invert; + }, + set: function set(invert) { + this._invert = invert; + this.updateIntensitySettingsUniforms(); + } + }, { + key: 'lut', + get: function get() { + return this._lut; + }, + set: function set(lut) { + this._lut = lut; + } + }, { + key: 'lutTexture', + get: function get() { + return this._lutTexture; + }, + set: function set(lutTexture) { + this._lutTexture = lutTexture; + this.updateIntensitySettingsUniforms(); + } + }, { + key: 'intensityAuto', + get: function get() { + return this._intensityAuto; + }, + set: function set(intensityAuto) { + this._intensityAuto = intensityAuto; + this.updateIntensitySettings(); + this.updateIntensitySettingsUniforms(); + } + }, { + key: 'interpolation', + get: function get() { + return this._interpolation; + }, + set: function set(interpolation) { + this._interpolation = interpolation; + this.updateIntensitySettingsUniforms(); + this._updateMaterial(); + } + }, { + key: 'index', + get: function get() { + return this._index; + }, + set: function set(index) { + this._index = index; + this._update(); + } + }, { + key: 'planePosition', + set: function set(position) { + this._planePosition = position; + this._update(); + }, + get: function get() { + return this._planePosition; + } + }, { + key: 'planeDirection', + set: function set(direction) { + this._planeDirection = direction; + this._update(); + }, + get: function get() { + return this._planeDirection; + } + }, { + key: 'halfDimensions', + set: function set(halfDimensions) { + this._halfDimensions = halfDimensions; + }, + get: function get() { + return this._halfDimensions; + } + }, { + key: 'center', + set: function set(center) { + this._center = center; + }, + get: function get() { + return this._center; + } + }, { + key: 'aabbSpace', + set: function set(aabbSpace) { + this._aaBBspace = aabbSpace; + this._init(); + }, + get: function get() { + return this._aaBBspace; + } + }, { + key: 'mesh', + set: function set(mesh) { + this._mesh = mesh; + }, + get: function get() { + return this._mesh; + } + }, { + key: 'geometry', + set: function set(geometry) { + this._geometry = geometry; + }, + get: function get() { + return this._geometry; + } + }, { + key: 'canvasWidth', + set: function set(canvasWidth) { + this._canvasWidth = canvasWidth; + this._uniforms.uCanvasWidth.value = this._canvasWidth; + }, + get: function get() { + return this._canvasWidth; + } + }, { + key: 'canvasHeight', + set: function set(canvasHeight) { + this._canvasHeight = canvasHeight; + this._uniforms.uCanvasHeight.value = this._canvasHeight; + }, + get: function get() { + return this._canvasHeight; + } + }, { + key: 'borderColor', + set: function set(borderColor) { + this._borderColor = borderColor; + this._uniforms.uBorderColor.value = new three.Color(borderColor); + }, + get: function get() { + return this._borderColor; + } + }]); + + return _class; + }(Constructor); }; @@ -33732,6 +33847,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _helpers_helpers_border__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers/helpers.border */ "./src/helpers/helpers.border.js"); /* harmony import */ var _helpers_helpers_boundingbox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/helpers.boundingbox */ "./src/helpers/helpers.boundingbox.js"); /* harmony import */ var _helpers_helpers_slice__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers/helpers.slice */ "./src/helpers/helpers.slice.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ @@ -33768,209 +33891,53 @@ __webpack_require__.r(__webpack_exports__); * * @module helpers/stack */ -const helpersStack = (three = window.THREE) => { +var helpersStack = function helpersStack() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = three.Object3D; - return class extends Constructor { - constructor(stack) { - // - super(); - - this._stack = stack; - this._bBox = null; - this._slice = null; - this._border = null; - this._dummy = null; - - this._orientation = 0; - this._index = 0; - - this._uniforms = null; - this._autoWindowLevel = false; - this._outOfBounds = false; - this._orientationMaxIndex = 0; - this._orientationSpacing = 0; - - this._canvasWidth = 0; - this._canvasHeight = 0; - this._borderColor = null; - - this._create(); - } - - /** - * Get stack. - * - * @type {ModelsStack} - */ - get stack() { - return this._stack; - } - - /** - * Set stack. - * - * @type {ModelsStack} - */ - set stack(stack) { - this._stack = stack; - } - - /** - * Get bounding box helper. - * - * @type {HelpersBoundingBox} - */ - get bbox() { - return this._bBox; - } - - /** - * Get slice helper. - * - * @type {HelpersSlice} - */ - get slice() { - return this._slice; - } - - /** - * Get border helper. - * - * @type {HelpersSlice} - */ - get border() { - return this._border; - } - - /** - * Set/get current slice index.
- * Sets outOfBounds flag to know if target index is in/out stack bounding box.
- *
- * Internally updates the sliceHelper index and position. Also updates the - * borderHelper with the updated sliceHelper. - * - * @type {number} - */ - get index() { - return this._index; - } - - set index(index) { - this._index = index; - - // update the slice - this._slice.index = index; - let halfDimensions = this._stack.halfDimensionsIJK; - this._slice.planePosition = this._prepareSlicePosition(halfDimensions, this._index); - - // also update the border - this._border.helpersSlice = this._slice; - - // update ourOfBounds flag - this._isIndexOutOfBounds(); - } - - /** - * Set/get current slice orientation.
- * Values:
- * - 0: acquisition direction (slice normal is z_cosine)
- * - 1: next direction (slice normal is x_cosine)
- * - 2: next direction (slice normal is y_cosine)
- * - n: set orientation to 0
- *
- * Internally updates the sliceHelper direction. Also updates the - * borderHelper with the updated sliceHelper. - * - * @type {number} - */ - set orientation(orientation) { - this._orientation = orientation; - this._computeOrientationMaxIndex(); + var Constructor = three.Object3D; + return function (_Constructor) { + _inherits(_class, _Constructor); - this._computeOrientationSpacing(); - this._slice.spacing = Math.abs(this._orientationSpacing); - this._slice.thickness = this._slice.spacing; + function _class(stack) { + _classCallCheck(this, _class); - this._slice.planeDirection = this._prepareDirection(this._orientation); + var _this = _possibleConstructorReturn(this, _Constructor.call(this)); + // - // also update the border - this._border.helpersSlice = this._slice; - } - get orientation() { - return this._orientation; - } + _this._stack = stack; + _this._bBox = null; + _this._slice = null; + _this._border = null; + _this._dummy = null; - /** - * Set/get the outOfBound flag. - * - * @type {boolean} - */ - set outOfBounds(outOfBounds) { - this._outOfBounds = outOfBounds; - } + _this._orientation = 0; + _this._index = 0; - get outOfBounds() { - return this._outOfBounds; - } + _this._uniforms = null; + _this._autoWindowLevel = false; + _this._outOfBounds = false; + _this._orientationMaxIndex = 0; + _this._orientationSpacing = 0; - /** - * Set/get the orientationMaxIndex. - * - * @type {number} - */ - set orientationMaxIndex(orientationMaxIndex) { - this._orientationMaxIndex = orientationMaxIndex; - } + _this._canvasWidth = 0; + _this._canvasHeight = 0; + _this._borderColor = null; - get orientationMaxIndex() { - return this._orientationMaxIndex; + _this._create(); + return _this; } /** - * Set/get the orientationSpacing. + * Get stack. * - * @type {number} + * @type {ModelsStack} */ - set orientationSpacing(orientationSpacing) { - this._orientationSpacing = orientationSpacing; - } - - get orientationSpacing() { - return this._orientationSpacing; - } - - set canvasWidth(canvasWidth) { - this._canvasWidth = canvasWidth; - this._slice.canvasWidth = this._canvasWidth; - } - - get canvasWidth() { - return this._canvasWidth; - } - set canvasHeight(canvasHeight) { - this._canvasHeight = canvasHeight; - this._slice.canvasHeight = this._canvasHeight; - } - - get canvasHeight() { - return this._canvasHeight; - } - - set borderColor(borderColor) { - this._borderColor = borderColor; - this._border.color = borderColor; - this._slice.borderColor = this._borderColor; - } - - get borderColor() { - return this._borderColor; - } // // PRIVATE METHODS @@ -33982,7 +33949,7 @@ const helpersStack = (three = window.THREE) => { * * @private */ - _create() { + _class.prototype._create = function _create() { if (this._stack) { // prepare sthe stack internals this._prepareStack(); @@ -33995,10 +33962,10 @@ const helpersStack = (three = window.THREE) => { } else { window.console.log('no stack to be prepared...'); } - } + }; - _computeOrientationSpacing() { - let spacing = this._stack._spacing; + _class.prototype._computeOrientationSpacing = function _computeOrientationSpacing() { + var spacing = this._stack._spacing; switch (this._orientation) { case 0: this._orientationSpacing = spacing.z; @@ -34013,10 +33980,10 @@ const helpersStack = (three = window.THREE) => { this._orientationSpacing = 0; break; } - } + }; - _computeOrientationMaxIndex() { - let dimensionsIJK = this._stack.dimensionsIJK; + _class.prototype._computeOrientationMaxIndex = function _computeOrientationMaxIndex() { + var dimensionsIJK = this._stack.dimensionsIJK; this._orientationMaxIndex = 0; switch (this._orientation) { case 0: @@ -34032,21 +33999,23 @@ const helpersStack = (three = window.THREE) => { // do nothing! break; } - } + }; /** * Given orientation, check if index is in/out of bounds. * * @private */ - _isIndexOutOfBounds() { + + + _class.prototype._isIndexOutOfBounds = function _isIndexOutOfBounds() { this._computeOrientationMaxIndex(); if (this._index >= this._orientationMaxIndex || this._index < 0) { this._outOfBounds = true; } else { this._outOfBounds = false; } - } + }; /** * Prepare a stack for visualization. (image to world transform, frames order, @@ -34054,7 +34023,9 @@ const helpersStack = (three = window.THREE) => { * * @private */ - _prepareStack() { + + + _class.prototype._prepareStack = function _prepareStack() { // make sure there is something, if not throw an error // compute image to workd transform, order frames, etc. if (!this._stack.prepared) { @@ -34065,7 +34036,7 @@ const helpersStack = (three = window.THREE) => { if (!this._stack.packed) { this._stack.pack(); } - } + }; /** * Setup bounding box helper given prepared stack and add bounding box helper @@ -34073,11 +34044,13 @@ const helpersStack = (three = window.THREE) => { * * @private */ - _prepareBBox() { - const HelpersBoundingBoxConstructor = Object(_helpers_helpers_boundingbox__WEBPACK_IMPORTED_MODULE_1__["helpersBoundingBox"])(three); + + + _class.prototype._prepareBBox = function _prepareBBox() { + var HelpersBoundingBoxConstructor = Object(_helpers_helpers_boundingbox__WEBPACK_IMPORTED_MODULE_1__["helpersBoundingBox"])(three); this._bBox = new HelpersBoundingBoxConstructor(this._stack); this.add(this._bBox); - } + }; /** * Setup border helper given slice helper and add border helper @@ -34085,11 +34058,13 @@ const helpersStack = (three = window.THREE) => { * * @private */ - _prepareBorder() { - const HelpersBorderContructor = Object(_helpers_helpers_border__WEBPACK_IMPORTED_MODULE_0__["helpersBorder"])(three); + + + _class.prototype._prepareBorder = function _prepareBorder() { + var HelpersBorderContructor = Object(_helpers_helpers_border__WEBPACK_IMPORTED_MODULE_0__["helpersBorder"])(three); this._border = new HelpersBorderContructor(this._slice); this.add(this._border); - } + }; /** * Setup slice helper given prepared stack helper and add slice helper @@ -34097,19 +34072,21 @@ const helpersStack = (three = window.THREE) => { * * @private */ - _prepareSlice() { - let halfDimensionsIJK = this._stack.halfDimensionsIJK; + + + _class.prototype._prepareSlice = function _prepareSlice() { + var halfDimensionsIJK = this._stack.halfDimensionsIJK; // compute initial index given orientation this._index = this._prepareSliceIndex(halfDimensionsIJK); // compute initial position given orientation and index - let position = this._prepareSlicePosition(halfDimensionsIJK, this._index); + var position = this._prepareSlicePosition(halfDimensionsIJK, this._index); // compute initial direction orientation - let direction = this._prepareDirection(this._orientation); + var direction = this._prepareDirection(this._orientation); - const SliceHelperConstructor = Object(_helpers_helpers_slice__WEBPACK_IMPORTED_MODULE_2__["helpersSlice"])(three); + var SliceHelperConstructor = Object(_helpers_helpers_slice__WEBPACK_IMPORTED_MODULE_2__["helpersSlice"])(three); this._slice = new SliceHelperConstructor(this._stack, this._index, position, direction); this.add(this._slice); - } + }; /** * Compute slice index depending on orientation. @@ -34120,8 +34097,10 @@ const helpersStack = (three = window.THREE) => { * * @private */ - _prepareSliceIndex(indices) { - let index = 0; + + + _class.prototype._prepareSliceIndex = function _prepareSliceIndex(indices) { + var index = 0; switch (this._orientation) { case 0: index = Math.floor(indices.z); @@ -34137,7 +34116,7 @@ const helpersStack = (three = window.THREE) => { break; } return index; - } + }; /** * Compute slice position depending on orientation. @@ -34150,8 +34129,10 @@ const helpersStack = (three = window.THREE) => { * * @private */ - _prepareSlicePosition(rPosition, index) { - let position = new three.Vector3(0, 0, 0); + + + _class.prototype._prepareSlicePosition = function _prepareSlicePosition(rPosition, index) { + var position = new three.Vector3(0, 0, 0); switch (this._orientation) { case 0: position = new three.Vector3(Math.floor(rPosition.x), Math.floor(rPosition.y), index); @@ -34167,7 +34148,7 @@ const helpersStack = (three = window.THREE) => { break; } return position; - } + }; /** * Compute slice direction depending on orientation. @@ -34178,8 +34159,10 @@ const helpersStack = (three = window.THREE) => { * * @private */ - _prepareDirection(orientation) { - let direction = new three.Vector3(0, 0, 1); + + + _class.prototype._prepareDirection = function _prepareDirection(orientation) { + var direction = new three.Vector3(0, 0, 1); switch (orientation) { case 0: direction = new three.Vector3(0, 0, 1); @@ -34196,14 +34179,16 @@ const helpersStack = (three = window.THREE) => { } return direction; - } + }; /** * Release the stack helper memory including the slice memory. * * @public */ - dispose() { + + + _class.prototype.dispose = function dispose() { this.remove(this._slice); this._slice.dispose(); this._slice = null; @@ -34211,8 +34196,199 @@ const helpersStack = (three = window.THREE) => { this._bBox = null; this._border.dispose(); this._border = null; - } - }; + }; + + _createClass(_class, [{ + key: 'stack', + get: function get() { + return this._stack; + } + + /** + * Set stack. + * + * @type {ModelsStack} + */ + , + set: function set(stack) { + this._stack = stack; + } + + /** + * Get bounding box helper. + * + * @type {HelpersBoundingBox} + */ + + }, { + key: 'bbox', + get: function get() { + return this._bBox; + } + + /** + * Get slice helper. + * + * @type {HelpersSlice} + */ + + }, { + key: 'slice', + get: function get() { + return this._slice; + } + + /** + * Get border helper. + * + * @type {HelpersSlice} + */ + + }, { + key: 'border', + get: function get() { + return this._border; + } + + /** + * Set/get current slice index.
+ * Sets outOfBounds flag to know if target index is in/out stack bounding box.
+ *
+ * Internally updates the sliceHelper index and position. Also updates the + * borderHelper with the updated sliceHelper. + * + * @type {number} + */ + + }, { + key: 'index', + get: function get() { + return this._index; + }, + set: function set(index) { + this._index = index; + + // update the slice + this._slice.index = index; + var halfDimensions = this._stack.halfDimensionsIJK; + this._slice.planePosition = this._prepareSlicePosition(halfDimensions, this._index); + + // also update the border + this._border.helpersSlice = this._slice; + + // update ourOfBounds flag + this._isIndexOutOfBounds(); + } + + /** + * Set/get current slice orientation.
+ * Values:
+ * - 0: acquisition direction (slice normal is z_cosine)
+ * - 1: next direction (slice normal is x_cosine)
+ * - 2: next direction (slice normal is y_cosine)
+ * - n: set orientation to 0
+ *
+ * Internally updates the sliceHelper direction. Also updates the + * borderHelper with the updated sliceHelper. + * + * @type {number} + */ + + }, { + key: 'orientation', + set: function set(orientation) { + this._orientation = orientation; + this._computeOrientationMaxIndex(); + + this._computeOrientationSpacing(); + this._slice.spacing = Math.abs(this._orientationSpacing); + this._slice.thickness = this._slice.spacing; + + this._slice.planeDirection = this._prepareDirection(this._orientation); + + // also update the border + this._border.helpersSlice = this._slice; + }, + get: function get() { + return this._orientation; + } + + /** + * Set/get the outOfBound flag. + * + * @type {boolean} + */ + + }, { + key: 'outOfBounds', + set: function set(outOfBounds) { + this._outOfBounds = outOfBounds; + }, + get: function get() { + return this._outOfBounds; + } + + /** + * Set/get the orientationMaxIndex. + * + * @type {number} + */ + + }, { + key: 'orientationMaxIndex', + set: function set(orientationMaxIndex) { + this._orientationMaxIndex = orientationMaxIndex; + }, + get: function get() { + return this._orientationMaxIndex; + } + + /** + * Set/get the orientationSpacing. + * + * @type {number} + */ + + }, { + key: 'orientationSpacing', + set: function set(orientationSpacing) { + this._orientationSpacing = orientationSpacing; + }, + get: function get() { + return this._orientationSpacing; + } + }, { + key: 'canvasWidth', + set: function set(canvasWidth) { + this._canvasWidth = canvasWidth; + this._slice.canvasWidth = this._canvasWidth; + }, + get: function get() { + return this._canvasWidth; + } + }, { + key: 'canvasHeight', + set: function set(canvasHeight) { + this._canvasHeight = canvasHeight; + this._slice.canvasHeight = this._canvasHeight; + }, + get: function get() { + return this._canvasHeight; + } + }, { + key: 'borderColor', + set: function set(borderColor) { + this._borderColor = borderColor; + this._border.color = borderColor; + this._slice.borderColor = this._borderColor; + }, + get: function get() { + return this._borderColor; + } + }]); + + return _class; + }(Constructor); }; // export factory @@ -34236,6 +34412,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _shaders_shaders_vr_vertex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shaders/shaders.vr.vertex */ "./src/shaders/shaders.vr.vertex.js"); /* harmony import */ var _shaders_shaders_vr_fragment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shaders/shaders.vr.fragment */ "./src/shaders/shaders.vr.fragment.js"); /* harmony import */ var _helpers_helpers_material_mixin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers/helpers.material.mixin */ "./src/helpers/helpers.material.mixin.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ @@ -34247,40 +34431,48 @@ __webpack_require__.r(__webpack_exports__); * @module helpers/volumerendering */ -const helpersVolumeRendering = (three = window.THREE) => { +var helpersVolumeRendering = function helpersVolumeRendering() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_helpers_helpers_material_mixin__WEBPACK_IMPORTED_MODULE_3__["helpersMaterialMixin"])(three); - return class extends Constructor { - constructor(stack) { + var Constructor = Object(_helpers_helpers_material_mixin__WEBPACK_IMPORTED_MODULE_3__["helpersMaterialMixin"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(stack) { + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this)); // - super(); - this._stack = stack; - this._textures = []; - this._shadersFragment = _shaders_shaders_vr_fragment__WEBPACK_IMPORTED_MODULE_2__["default"]; - this._shadersVertex = _shaders_shaders_vr_vertex__WEBPACK_IMPORTED_MODULE_1__["default"]; - this._uniforms = _shaders_shaders_vr_uniform__WEBPACK_IMPORTED_MODULE_0__["default"].uniforms(); - this._material = null; - this._geometry = null; - this._mesh = null; - this._algorithm = 0; // ray marching - this._alphaCorrection = 0.5; // default - this._interpolation = 1; // default to trilinear interpolation - this._shading = 1; // shading is on by default - this._shininess = 10.0; - this._steps = 256; // default - this._offset = 0; - this._windowCenter = 0.0; - this._windowWidth = 1.0; + _this._stack = stack; + _this._textures = []; + _this._shadersFragment = _shaders_shaders_vr_fragment__WEBPACK_IMPORTED_MODULE_2__["default"]; + _this._shadersVertex = _shaders_shaders_vr_vertex__WEBPACK_IMPORTED_MODULE_1__["default"]; + _this._uniforms = _shaders_shaders_vr_uniform__WEBPACK_IMPORTED_MODULE_0__["default"].uniforms(); + _this._material = null; + _this._geometry = null; + _this._mesh = null; - this._create(); + _this._algorithm = 0; // ray marching + _this._alphaCorrection = 0.5; // default + _this._interpolation = 1; // default to trilinear interpolation + _this._shading = 1; // shading is on by default + _this._shininess = 10.0; + _this._steps = 256; // default + _this._offset = 0; + _this._windowCenter = 0.0; + _this._windowWidth = 1.0; + + _this._create(); + return _this; } - _create() { + _class.prototype._create = function _create() { this._prepareStack(); this._prepareTexture(); this._prepareMaterial(); @@ -34288,9 +34480,9 @@ const helpersVolumeRendering = (three = window.THREE) => { this._mesh = new three.Mesh(this._geometry, this._material); this.add(this._mesh); - } + }; - _prepareStack() { + _class.prototype._prepareStack = function _prepareStack() { if (!this._stack.prepared) { this._stack.prepare(); } @@ -34304,9 +34496,9 @@ const helpersVolumeRendering = (three = window.THREE) => { this._offset = Math.min(0, this._stack._minMax[0]); this._windowCenter = this._stack.windowCenter; this._windowWidth = this._stack.windowWidth * 0.8; // multiply for better default visualization - } + }; - _prepareMaterial() { + _class.prototype._prepareMaterial = function _prepareMaterial() { // uniforms this._uniforms = _shaders_shaders_vr_uniform__WEBPACK_IMPORTED_MODULE_0__["default"].uniforms(); this._uniforms.uWorldBBox.value = this._stack.worldBoundingBox(); @@ -34334,116 +34526,19 @@ const helpersVolumeRendering = (three = window.THREE) => { side: three.BackSide, transparent: true }); - } + }; - _prepareGeometry() { - let worldBBox = this._stack.worldBoundingBox(); - let centerLPS = this._stack.worldCenter(); + _class.prototype._prepareGeometry = function _prepareGeometry() { + var worldBBox = this._stack.worldBoundingBox(); + var centerLPS = this._stack.worldCenter(); this._geometry = new three.BoxGeometry(worldBBox[1] - worldBBox[0], worldBBox[3] - worldBBox[2], worldBBox[5] - worldBBox[4]); this._geometry.applyMatrix(new three.Matrix4().makeTranslation(centerLPS.x, centerLPS.y, centerLPS.z)); - } - - get uniforms() { - return this._uniforms; - } - - set uniforms(uniforms) { - this._uniforms = uniforms; - } - - set mesh(mesh) { - this._mesh = mesh; - } - - get mesh() { - return this._mesh; - } - - get stack() { - return this._stack; - } - - set stack(stack) { - this._stack = stack; - } - - get windowCenter() { - return this._windowCenter; - } - - set windowCenter(windowCenter) { - this._windowCenter = windowCenter; - this._uniforms.uWindowCenterWidth.value[0] = this._windowCenter - this._offset; - } - - get windowWidth() { - return this._windowWidth; - } - - set windowWidth(windowWidth) { - this._windowWidth = Math.max(1, windowWidth); - this._uniforms.uWindowCenterWidth.value[1] = this._windowWidth; - } - - get steps() { - return this._steps; - } - - set steps(steps) { - this._steps = steps; - this._uniforms.uSteps.value = this._steps; - } - - get alphaCorrection() { - return this._alphaCorrection; - } - - set alphaCorrection(alphaCorrection) { - this._alphaCorrection = alphaCorrection; - this._uniforms.uAlphaCorrection.value = this._alphaCorrection; - } - - get interpolation() { - return this._interpolation; - } - - set interpolation(interpolation) { - this._interpolation = interpolation; - this._uniforms.uInterpolation.value = this._interpolation; - this._updateMaterial(); - } - - get shading() { - return this._shading; - } - - set shading(shading) { - this._shading = shading; - this._uniforms.uShading.value = this._shading; - } - - get shininess() { - return this._shininess; - } - - set shininess(shininess) { - this._shininess = shininess; - this._uniforms.uShininess.value = this._shininess; - } - - get algorithm() { - return this._algorithm; - } - - set algorithm(algorithm) { - this._algorithm = algorithm; - this._uniforms.uAlgorithm.value = this._algorithm; - } + }; - dispose() { + _class.prototype.dispose = function dispose() { // Release memory - for (let j = 0; j < this._textures.length; j++) { + for (var j = 0; j < this._textures.length; j++) { this._textures[j].dispose(); this._textures[j] = null; } @@ -34472,8 +34567,109 @@ const helpersVolumeRendering = (three = window.THREE) => { this._material = null; this._stack = null; - } - }; + }; + + _createClass(_class, [{ + key: 'uniforms', + get: function get() { + return this._uniforms; + }, + set: function set(uniforms) { + this._uniforms = uniforms; + } + }, { + key: 'mesh', + set: function set(mesh) { + this._mesh = mesh; + }, + get: function get() { + return this._mesh; + } + }, { + key: 'stack', + get: function get() { + return this._stack; + }, + set: function set(stack) { + this._stack = stack; + } + }, { + key: 'windowCenter', + get: function get() { + return this._windowCenter; + }, + set: function set(windowCenter) { + this._windowCenter = windowCenter; + this._uniforms.uWindowCenterWidth.value[0] = this._windowCenter - this._offset; + } + }, { + key: 'windowWidth', + get: function get() { + return this._windowWidth; + }, + set: function set(windowWidth) { + this._windowWidth = Math.max(1, windowWidth); + this._uniforms.uWindowCenterWidth.value[1] = this._windowWidth; + } + }, { + key: 'steps', + get: function get() { + return this._steps; + }, + set: function set(steps) { + this._steps = steps; + this._uniforms.uSteps.value = this._steps; + } + }, { + key: 'alphaCorrection', + get: function get() { + return this._alphaCorrection; + }, + set: function set(alphaCorrection) { + this._alphaCorrection = alphaCorrection; + this._uniforms.uAlphaCorrection.value = this._alphaCorrection; + } + }, { + key: 'interpolation', + get: function get() { + return this._interpolation; + }, + set: function set(interpolation) { + this._interpolation = interpolation; + this._uniforms.uInterpolation.value = this._interpolation; + this._updateMaterial(); + } + }, { + key: 'shading', + get: function get() { + return this._shading; + }, + set: function set(shading) { + this._shading = shading; + this._uniforms.uShading.value = this._shading; + } + }, { + key: 'shininess', + get: function get() { + return this._shininess; + }, + set: function set(shininess) { + this._shininess = shininess; + this._uniforms.uShininess.value = this._shininess; + } + }, { + key: 'algorithm', + get: function get() { + return this._algorithm; + }, + set: function set(algorithm) { + this._algorithm = algorithm; + this._uniforms.uAlgorithm.value = this._algorithm; + } + }]); + + return _class; + }(Constructor); }; @@ -34490,10 +34686,17 @@ const helpersVolumeRendering = (three = window.THREE) => { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return LoadersBase; }); /* harmony import */ var _helpers_helpers_progressbar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers/helpers.progressbar */ "./src/helpers/helpers.progressbar.js"); -/* harmony import */ var events__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! events */ "./node_modules/node-libs-browser/node_modules/events/events.js"); +/* harmony import */ var events__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! events */ "./node_modules/events/events.js"); /* harmony import */ var events__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(events__WEBPACK_IMPORTED_MODULE_1__); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** Imports **/ @@ -34524,32 +34727,44 @@ __webpack_require__.r(__webpack_exports__); * } * ); */ -class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { + +var LoadersBase = function (_EventEmitter) { + _inherits(LoadersBase, _EventEmitter); + /** * Create a Loader. * @param {dom} container - The dom container of loader. * @param {object} ProgressBar - The progressbar of loader. */ - constructor(container = null, ProgressBar = _helpers_helpers_progressbar__WEBPACK_IMPORTED_MODULE_0__["default"]) { - super(); - this._loaded = -1; - this._totalLoaded = -1; - this._parsed = -1; - this._totalParsed = -1; + function LoadersBase() { + var container = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + var ProgressBar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _helpers_helpers_progressbar__WEBPACK_IMPORTED_MODULE_0__["default"]; - this._data = []; + _classCallCheck(this, LoadersBase); + + var _this = _possibleConstructorReturn(this, _EventEmitter.call(this)); + + _this._loaded = -1; + _this._totalLoaded = -1; + _this._parsed = -1; + _this._totalParsed = -1; - this._container = container; - this._progressBar = null; - if (this._container && ProgressBar) { - this._progressBar = new ProgressBar(this._container); + _this._data = []; + + _this._container = container; + _this._progressBar = null; + if (_this._container && ProgressBar) { + _this._progressBar = new ProgressBar(_this._container); } + return _this; } /** * free the reference. */ - free() { + + + LoadersBase.prototype.free = function free() { this._data = []; this._container = null; // this._helpersProgressBar = null; @@ -34558,7 +34773,7 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { this._progressBar.free(); this._progressBar = null; } - } + }; /** * load the resource by url. @@ -34566,39 +34781,43 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { * @param {Map} requests - used for cancellation. * @return {promise} promise. */ - fetch(url, requests) { - return new Promise((resolve, reject) => { - const request = new XMLHttpRequest(); + + + LoadersBase.prototype.fetch = function fetch(url, requests) { + var _this2 = this; + + return new Promise(function (resolve, reject) { + var request = new XMLHttpRequest(); request.open('GET', url); request.crossOrigin = true; request.responseType = 'arraybuffer'; - request.onloadstart = event => { + request.onloadstart = function (event) { // emit 'fetch-start' event - this.emit('fetch-start', { + _this2.emit('fetch-start', { file: url, time: new Date() }); }; - request.onload = event => { + request.onload = function (event) { if (request.status === 200 || request.status === 0) { - this._loaded = event.loaded; - this._totalLoaded = event.total; + _this2._loaded = event.loaded; + _this2._totalLoaded = event.total; // will be removed after eventer set up - if (this._progressBar) { - this._progressBar.update(this._loaded, this._totalLoaded, 'load', url); + if (_this2._progressBar) { + _this2._progressBar.update(_this2._loaded, _this2._totalLoaded, 'load', url); } - let buffer = request.response; - let response = { - url, - buffer + var buffer = request.response; + var response = { + url: url, + buffer: buffer }; // emit 'fetch-success' event - this.emit('fetch-success', { + _this2.emit('fetch-success', { file: url, time: new Date(), totalLoaded: event.total @@ -34610,9 +34829,9 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { } }; - request.onerror = () => { + request.onerror = function () { // emit 'fetch-error' event - this.emit('fetch-error', { + _this2.emit('fetch-error', { file: url, time: new Date() }); @@ -34620,9 +34839,9 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { reject(request.statusText); }; - request.onabort = event => { + request.onabort = function (event) { // emit 'fetch-abort' event - this.emit('fetch-abort', { + _this2.emit('fetch-abort', { file: url, time: new Date() }); @@ -34630,9 +34849,9 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { reject(request.statusText || 'Aborted'); }; - request.ontimeout = () => { + request.ontimeout = function () { // emit 'fetch-timeout' event - this.emit('fetch-timeout', { + _this2.emit('fetch-timeout', { file: url, time: new Date() }); @@ -34640,25 +34859,25 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { reject(request.statusText); }; - request.onprogress = event => { - this._loaded = event.loaded; - this._totalLoaded = event.total; + request.onprogress = function (event) { + _this2._loaded = event.loaded; + _this2._totalLoaded = event.total; // emit 'fetch-progress' event - this.emit('fetch-progress', { + _this2.emit('fetch-progress', { file: url, total: event.total, loaded: event.loaded, time: new Date() }); // will be removed after eventer set up - if (this._progressBar) { - this._progressBar.update(this._loaded, this._totalLoaded, 'load', url); + if (_this2._progressBar) { + _this2._progressBar.update(_this2._loaded, _this2._totalLoaded, 'load', url); } }; - request.onloadend = event => { + request.onloadend = function (event) { // emit 'fetch-end' event - this.emit('fetch-end', { + _this2.emit('fetch-end', { file: url, time: new Date() }); @@ -34672,7 +34891,7 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { request.send(); }); - } + }; /** * parse the data loaded @@ -34680,11 +34899,13 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { * @param {object} response - loaded data. * @return {promise} promise. */ - parse(response) { - return new Promise((resolve, reject) => { + + + LoadersBase.prototype.parse = function parse(response) { + return new Promise(function (resolve, reject) { resolve(response); }); - } + }; /** * default load sequence group promise. @@ -34692,17 +34913,21 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { * @param {Map} requests - used for cancellation. * @return {promise} promise. */ - loadSequenceGroup(url, requests) { - const fetchSequence = []; - url.forEach(file => { - fetchSequence.push(this.fetch(file, requests)); + + LoadersBase.prototype.loadSequenceGroup = function loadSequenceGroup(url, requests) { + var _this3 = this; + + var fetchSequence = []; + + url.forEach(function (file) { + fetchSequence.push(_this3.fetch(file, requests)); }); - return Promise.all(fetchSequence).then(rawdata => { - return this.parse(rawdata); - }).then(data => { - this._data.push(data); + return Promise.all(fetchSequence).then(function (rawdata) { + return _this3.parse(rawdata); + }).then(function (data) { + _this3._data.push(data); return data; }).catch(function (error) { if (error === 'Aborted') { @@ -34711,7 +34936,7 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { window.console.log('oops... something went wrong...'); window.console.log(error); }); - } + }; /** * default load sequence promise. @@ -34719,11 +34944,15 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { * @param {Map} requests - used for cancellation. * @return {promise} promise. */ - loadSequence(url, requests) { - return this.fetch(url, requests).then(rawdata => { - return this.parse(rawdata); - }).then(data => { - this._data.push(data); + + + LoadersBase.prototype.loadSequence = function loadSequence(url, requests) { + var _this4 = this; + + return this.fetch(url, requests).then(function (rawdata) { + return _this4.parse(rawdata); + }).then(function (data) { + _this4._data.push(data); return data; }).catch(function (error) { if (error === 'Aborted') { @@ -34732,7 +34961,7 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { window.console.log('oops... something went wrong...'); window.console.log(error); }); - } + }; /** * load the data by url(urls) @@ -34740,7 +34969,11 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { * @param {Map} requests - used for cancellation. * @return {promise} promise */ - load(url, requests) { + + + LoadersBase.prototype.load = function load(url, requests) { + var _this5 = this; + // if we load a single file, convert it to an array if (!Array.isArray(url)) { url = [url]; @@ -34757,33 +34990,43 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { time: new Date() }); - const loadSequences = []; - url.forEach(file => { + var loadSequences = []; + url.forEach(function (file) { if (!Array.isArray(file)) { - loadSequences.push(this.loadSequence(file, requests)); + loadSequences.push(_this5.loadSequence(file, requests)); } else { - loadSequences.push(this.loadSequenceGroup(file, requests)); + loadSequences.push(_this5.loadSequenceGroup(file, requests)); } }); return Promise.all(loadSequences); - } + }; /** * Set data * @param {array} data */ - set data(data) { - this._data = data; - } - /** - * Get data - * @return {array} data loaded - */ - get data() { - return this._data; - } -} + + _createClass(LoadersBase, [{ + key: 'data', + set: function set(data) { + this._data = data; + } + + /** + * Get data + * @return {array} data loaded + */ + , + get: function get() { + return this._data; + } + }]); + + return LoadersBase; +}(events__WEBPACK_IMPORTED_MODULE_1___default.a); + +/* harmony default export */ __webpack_exports__["default"] = (LoadersBase); /***/ }), @@ -34796,15 +35039,20 @@ class LoadersBase extends events__WEBPACK_IMPORTED_MODULE_1___default.a { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return LoadersVolumesCornerstone; }); /* harmony import */ var _loaders_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./loaders.base */ "./src/loaders/loaders.base.js"); /* harmony import */ var _models_models_series__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../models/models.series */ "./src/models/models.series.js"); /* harmony import */ var _models_models_stack__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../models/models.stack */ "./src/models/models.stack.js"); /* harmony import */ var _models_models_frame__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../models/models.frame */ "./src/models/models.frame.js"); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ "./src/utils/index.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ -const PAKO = __webpack_require__(/*! pako */ "./node_modules/pako/index.js"); +var PAKO = __webpack_require__(/*! pako */ "./node_modules/pako/index.js"); @@ -34838,24 +35086,35 @@ const PAKO = __webpack_require__(/*! pako */ "./node_modules/pako/index.js"); * } * ); */ -class LoadersVolumesCornerstone extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default"] { - load(url, requests, cornerstone) { - this.cornerstone = cornerstone; - return super.load(url, requests); + +var LoadersVolumesCornerstone = function (_LoadersBase) { + _inherits(LoadersVolumesCornerstone, _LoadersBase); + + function LoadersVolumesCornerstone() { + _classCallCheck(this, LoadersVolumesCornerstone); + + return _possibleConstructorReturn(this, _LoadersBase.apply(this, arguments)); } - loadSequenceGroup(url, requests) { + LoadersVolumesCornerstone.prototype.load = function load(url, requests, cornerstone) { + this.cornerstone = cornerstone; + return _LoadersBase.prototype.load.call(this, url, requests); + }; + + LoadersVolumesCornerstone.prototype.loadSequenceGroup = function loadSequenceGroup(url, requests) { + var _this2 = this; + window.console.log('load sequence group cornerstone'); - const fetchSequence = []; - const loader = this.cornerstone; - url.forEach(file => { + var fetchSequence = []; + var loader = this.cornerstone; + url.forEach(function (file) { fetchSequence.push(loader.loadAndCacheImage(url)); }); - return Promise.all(fetchSequence).then(rawdata => { - return this.parse(rawdata); - }).then(data => { - this._data.push(data); + return Promise.all(fetchSequence).then(function (rawdata) { + return _this2.parse(rawdata); + }).then(function (data) { + _this2._data.push(data); return data; }).catch(function (error) { if (error === 'Aborted') { @@ -34864,15 +35123,17 @@ class LoadersVolumesCornerstone extends _loaders_base__WEBPACK_IMPORTED_MODULE_0 window.console.log('oops... something went wrong...'); window.console.log(error); }); - } + }; + + LoadersVolumesCornerstone.prototype.loadSequence = function loadSequence(url, requests) { + var _this3 = this; - loadSequence(url, requests) { window.console.log('load sequence cornerstone'); - return this.cornerstone.loadAndCacheImage(url).then(image => { + return this.cornerstone.loadAndCacheImage(url).then(function (image) { window.console.log('loaded by cornerstone', image); - return this.parse(image); - }).then(data => { - this._data.push(data); + return _this3.parse(image); + }).then(function (data) { + _this3._data.push(data); return data; }).catch(function (error) { if (error === 'Aborted') { @@ -34881,7 +35142,7 @@ class LoadersVolumesCornerstone extends _loaders_base__WEBPACK_IMPORTED_MODULE_0 window.console.log('oops... something went wrong...'); window.console.log(error); }); - } + }; /** * Parse response. @@ -34893,8 +35154,10 @@ class LoadersVolumesCornerstone extends _loaders_base__WEBPACK_IMPORTED_MODULE_0 * @param {object} response - response * @return {promise} promise */ - parse(response) { - const cornerstoneImage = response; + LoadersVolumesCornerstone.prototype.parse = function parse(response) { + var _this4 = this; + + var cornerstoneImage = response; // emit 'parse-start' event this.emit('parse-start', { file: response.url, @@ -34908,18 +35171,19 @@ class LoadersVolumesCornerstone extends _loaders_base__WEBPACK_IMPORTED_MODULE_0 this._progressBar.update(0, 100, 'parse', response.url); } - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve(new Promise((resolve, reject) => { - const { imageId } = cornerstoneImage; - const { metaData } = this.cornerstone; - const metaDataAll = metaData.get('all', imageId); + return new Promise(function (resolve, reject) { + setTimeout(function () { + resolve(new Promise(function (resolve, reject) { + var imageId = cornerstoneImage.imageId; + var metaData = _this4.cornerstone.metaData; + + var metaDataAll = metaData.get('all', imageId); console.log('get all metaData', metaDataAll); - const dataParser = new _utils__WEBPACK_IMPORTED_MODULE_4__["CornerstoneDataParser"](metaDataAll); + var dataParser = new _utils__WEBPACK_IMPORTED_MODULE_4__["CornerstoneDataParser"](metaDataAll); - let volumeParser = null; + var volumeParser = null; // create a series - let series = new _models_models_series__WEBPACK_IMPORTED_MODULE_1__["default"](); + var series = new _models_models_series__WEBPACK_IMPORTED_MODULE_1__["default"](); // series.rawHeader = volumeParser.rawHeader(); // global information series.seriesInstanceUID = dataParser.seriesInstanceUID(); @@ -34949,7 +35213,7 @@ class LoadersVolumesCornerstone extends _loaders_base__WEBPACK_IMPORTED_MODULE_0 console.log('create series', series); - let stack = new _models_models_stack__WEBPACK_IMPORTED_MODULE_2__["default"](); + var stack = new _models_models_stack__WEBPACK_IMPORTED_MODULE_2__["default"](); stack.pixelRepresentation = dataParser.pixelRepresentation(); stack.pixelType = dataParser.pixelType(); stack.invert = dataParser.invert(); @@ -34967,17 +35231,19 @@ class LoadersVolumesCornerstone extends _loaders_base__WEBPACK_IMPORTED_MODULE_0 // recursive call for each frame // better than for loop to be able // to update dom with "progress" callback - setTimeout(this.parseFrameClosure(series, stack, response.url, 0, dataParser, resolve, reject, cornerstoneImage), 0); + setTimeout(_this4.parseFrameClosure(series, stack, response.url, 0, dataParser, resolve, reject, cornerstoneImage), 0); })); }, 10); }); - } + }; - parseFrameClosure(series, stack, url, i, dataParser, resolve, reject, cornerstoneImage) { - return () => { - this.parseFrame(series, stack, url, i, dataParser, resolve, reject, cornerstoneImage); + LoadersVolumesCornerstone.prototype.parseFrameClosure = function parseFrameClosure(series, stack, url, i, dataParser, resolve, reject, cornerstoneImage) { + var _this5 = this; + + return function () { + _this5.parseFrame(series, stack, url, i, dataParser, resolve, reject, cornerstoneImage); }; - } + }; /** * recursive parse frame @@ -34989,8 +35255,10 @@ class LoadersVolumesCornerstone extends _loaders_base__WEBPACK_IMPORTED_MODULE_0 * @param {promise.resolve} resolve - promise resolve args * @param {promise.reject} reject - promise reject args */ - parseFrame(series, stack, url, i, dataParser, resolve, reject, cornerstoneImage) { - let frame = new _models_models_frame__WEBPACK_IMPORTED_MODULE_3__["default"](); + + + LoadersVolumesCornerstone.prototype.parseFrame = function parseFrame(series, stack, url, i, dataParser, resolve, reject, cornerstoneImage) { + var frame = new _models_models_frame__WEBPACK_IMPORTED_MODULE_3__["default"](); frame.sopInstanceUID = dataParser.sopInstanceUID(i); frame.url = url; frame.index = i; @@ -35066,8 +35334,12 @@ class LoadersVolumesCornerstone extends _loaders_base__WEBPACK_IMPORTED_MODULE_0 } else { setTimeout(this.parseFrameClosure(series, stack, url, this._parsed, dataParser, resolve, reject), 0); } - } -} + }; + + return LoadersVolumesCornerstone; +}(_loaders_base__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (LoadersVolumesCornerstone); /***/ }), @@ -35103,7 +35375,6 @@ __webpack_require__.r(__webpack_exports__); "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return LoadersVolumes; }); /* harmony import */ var _loaders_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./loaders.base */ "./src/loaders/loaders.base.js"); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); /* harmony import */ var _models_models_series__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../models/models.series */ "./src/models/models.series.js"); @@ -35114,8 +35385,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _parsers_parsers_nifti__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../parsers/parsers.nifti */ "./src/parsers/parsers.nifti.js"); /* harmony import */ var _parsers_parsers_nrrd__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../parsers/parsers.nrrd */ "./src/parsers/parsers.nrrd.js"); /* harmony import */ var _parsers_parsers_mgh__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../parsers/parsers.mgh */ "./src/parsers/parsers.mgh.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ -const PAKO = __webpack_require__(/*! pako */ "./node_modules/pako/index.js"); +var PAKO = __webpack_require__(/*! pako */ "./node_modules/pako/index.js"); @@ -35153,7 +35430,16 @@ const PAKO = __webpack_require__(/*! pako */ "./node_modules/pako/index.js"); * } * ); */ -class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default"] { + +var LoadersVolumes = function (_LoadersBase) { + _inherits(LoadersVolumes, _LoadersBase); + + function LoadersVolumes() { + _classCallCheck(this, LoadersVolumes); + + return _possibleConstructorReturn(this, _LoadersBase.apply(this, arguments)); + } + /** * Parse response. * response is formated as: @@ -35164,7 +35450,9 @@ class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default * @param {object} response - response * @return {promise} promise */ - parse(response) { + LoadersVolumes.prototype.parse = function parse(response) { + var _this2 = this; + // emit 'parse-start' event this.emit('parse-start', { file: response.url, @@ -35178,25 +35466,25 @@ class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default this._progressBar.update(0, 100, 'parse', response.url); } - return new Promise((resolve, reject) => { - setTimeout(() => { - resolve(new Promise((resolve, reject) => { - let data = response; + return new Promise(function (resolve, reject) { + setTimeout(function () { + resolve(new Promise(function (resolve, reject) { + var data = response; if (!Array.isArray(data)) { data = [data]; } - data.forEach(dataset => { - this._preprocess(dataset); + data.forEach(function (dataset) { + _this2._preprocess(dataset); }); if (data.length === 1) { data = data[0]; } else { // if raw/mhd pair - let mhdFile = data.filter(this._filterByExtension.bind(null, 'MHD')); - let rawFile = data.filter(this._filterByExtension.bind(null, 'RAW')); + var mhdFile = data.filter(_this2._filterByExtension.bind(null, 'MHD')); + var rawFile = data.filter(_this2._filterByExtension.bind(null, 'RAW')); if (data.length === 2 && mhdFile.length === 1 && rawFile.length === 1) { data.url = mhdFile[0].url; data.extension = mhdFile[0].extension; @@ -35205,10 +35493,10 @@ class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default } } - let Parser = this._parser(data.extension); + var Parser = _this2._parser(data.extension); if (!Parser) { // emit 'parse-error' event - this.emit('parse-error', { + _this2.emit('parse-error', { file: response.url, time: new Date(), error: data.filename + 'can not be parsed.' @@ -35217,13 +35505,13 @@ class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default } // check extension - let volumeParser = null; + var volumeParser = null; try { volumeParser = new Parser(data, 0); } catch (e) { console.warn(e); // emit 'parse-error' event - this.emit('parse-error', { + _this2.emit('parse-error', { file: response.url, time: new Date(), error: e @@ -35232,7 +35520,7 @@ class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default } // create a series - let series = new _models_models_series__WEBPACK_IMPORTED_MODULE_2__["default"](); + var series = new _models_models_series__WEBPACK_IMPORTED_MODULE_2__["default"](); series.rawHeader = volumeParser.rawHeader(); // global information series.seriesInstanceUID = volumeParser.seriesInstanceUID(); @@ -35263,7 +35551,7 @@ class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default series.patientSex = volumeParser.patientSex(); // just create 1 dummy stack for now - let stack = new _models_models_stack__WEBPACK_IMPORTED_MODULE_3__["default"](); + var stack = new _models_models_stack__WEBPACK_IMPORTED_MODULE_3__["default"](); stack.numberOfChannels = volumeParser.numberOfChannels(); stack.pixelRepresentation = volumeParser.pixelRepresentation(); stack.pixelType = volumeParser.pixelType(); @@ -35282,17 +35570,19 @@ class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default // recursive call for each frame // better than for loop to be able // to update dom with "progress" callback - setTimeout(this.parseFrameClosure(series, stack, response.url, 0, volumeParser, resolve, reject), 0); + setTimeout(_this2.parseFrameClosure(series, stack, response.url, 0, volumeParser, resolve, reject), 0); })); }, 10); }); - } + }; + + LoadersVolumes.prototype.parseFrameClosure = function parseFrameClosure(series, stack, url, i, dataParser, resolve, reject) { + var _this3 = this; - parseFrameClosure(series, stack, url, i, dataParser, resolve, reject) { - return () => { - this.parseFrame(series, stack, url, i, dataParser, resolve, reject); + return function () { + _this3.parseFrame(series, stack, url, i, dataParser, resolve, reject); }; - } + }; /** * recursive parse frame @@ -35304,8 +35594,10 @@ class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default * @param {promise.resolve} resolve - promise resolve args * @param {promise.reject} reject - promise reject args */ - parseFrame(series, stack, url, i, dataParser, resolve, reject) { - let frame = new _models_models_frame__WEBPACK_IMPORTED_MODULE_4__["default"](); + + + LoadersVolumes.prototype.parseFrame = function parseFrame(series, stack, url, i, dataParser, resolve, reject) { + var frame = new _models_models_frame__WEBPACK_IMPORTED_MODULE_4__["default"](); frame.sopInstanceUID = dataParser.sopInstanceUID(i); frame.url = url; frame.index = i; @@ -35381,15 +35673,17 @@ class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default } else { setTimeout(this.parseFrameClosure(series, stack, url, this._parsed, dataParser, resolve, reject), 0); } - } + }; /** * Return parser given an extension * @param {string} extension - extension * @return {parser} selected parser */ - _parser(extension) { - let Parser = null; + + + LoadersVolumes.prototype._parser = function _parser(extension) { + var Parser = null; switch (extension.toUpperCase()) { case 'NII': @@ -35418,14 +35712,16 @@ class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default return false; } return Parser; - } + }; /** * Pre-process data to be parsed (find data type and de-compress) * @param {*} data */ - _preprocess(data) { - const parsedUrl = _core_core_utils__WEBPACK_IMPORTED_MODULE_1__["default"].parseUrl(data.url); + + + LoadersVolumes.prototype._preprocess = function _preprocess(data) { + var parsedUrl = _core_core_utils__WEBPACK_IMPORTED_MODULE_1__["default"].parseUrl(data.url); // update data data.filename = parsedUrl.filename; data.extension = parsedUrl.extension; @@ -35447,10 +35743,10 @@ class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default } if (data.gzcompressed) { - let decompressedData = PAKO.inflate(data.buffer); + var decompressedData = PAKO.inflate(data.buffer); data.buffer = decompressedData.buffer; } - } + }; /** * Filter data by extension @@ -35458,13 +35754,19 @@ class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default * @param {*} item * @returns Boolean */ - _filterByExtension(extension, item) { + + + LoadersVolumes.prototype._filterByExtension = function _filterByExtension(extension, item) { if (item.extension.toUpperCase() === extension.toUpperCase()) { return true; } return false; - } -} + }; + + return LoadersVolumes; +}(_loaders_base__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (LoadersVolumes); /***/ }), @@ -35477,15 +35779,18 @@ class LoadersVolumes extends _loaders_base__WEBPACK_IMPORTED_MODULE_0__["default "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ModelsBase; }); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * Base object. * * @module models/base */ -class ModelsBase { - constructor() { +var ModelsBase = function () { + function ModelsBase() { + _classCallCheck(this, ModelsBase); + this._id = -1; } /** @@ -35497,15 +35802,17 @@ class ModelsBase { * * @return {boolean} True if merge was sucessful. False if something went wrong. */ - mergeModels(referenceArray, targetArray) { + + + ModelsBase.prototype.mergeModels = function mergeModels(referenceArray, targetArray) { if (!(this._validateModelArray(referenceArray) && this._validateModelArray(targetArray))) { window.console.log('invalid inputs provided.'); return false; } - for (let i = 0, targetLength = targetArray.length; i < targetLength; i++) { + for (var i = 0, targetLength = targetArray.length; i < targetLength; i++) { // test targetArray against existing targetArray - for (let j = 0, refLength = referenceArray.length; j < refLength; j++) { + for (var j = 0, refLength = referenceArray.length; j < refLength; j++) { if (referenceArray[j].merge(targetArray[i])) { // merged successfully break; @@ -35518,12 +35825,14 @@ class ModelsBase { } return true; - } + }; /** * Merge model against current model. */ - merge(model) { + + + ModelsBase.prototype.merge = function merge(model) { // make sure model is valid if (!this.validate(model)) { return false; @@ -35534,20 +35843,22 @@ class ModelsBase { return true; } return false; - } + }; /** * Validate a model. * * @return {boolean} True if model is valid. False if not. */ - validate(model) { + + + ModelsBase.prototype.validate = function validate(model) { if (!(model && model !== null && typeof model.merge === 'function')) { return false; } return true; - } + }; /** * Validate array of models. @@ -35556,21 +35867,27 @@ class ModelsBase { * * @return {boolean} True if array is valid. False if not. */ - _validateModelArray(modelArray) { + + + ModelsBase.prototype._validateModelArray = function _validateModelArray(modelArray) { if (!(modelArray !== null && Array === modelArray.constructor)) { window.console.log('invalid model array provided.'); return false; } - for (let i = 0; i < modelArray.length; i++) { + for (var i = 0; i < modelArray.length; i++) { if (!(modelArray[i] && modelArray[i] !== null && typeof modelArray[i].validate === 'function' && modelArray[i].validate(modelArray[i]))) { return false; } } return true; - } -} + }; + + return ModelsBase; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (ModelsBase); /***/ }), @@ -35583,9 +35900,16 @@ class ModelsBase { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ModelsFrame; }); /* harmony import */ var _models_models_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../models/models.base */ "./src/models/models.base.js"); /* harmony import */ var three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three/src/math/Vector3 */ "./node_modules/three/src/math/Vector3.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ @@ -35596,49 +35920,55 @@ __webpack_require__.r(__webpack_exports__); * * @module models/frame */ -class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["default"] { + +var ModelsFrame = function (_ModelsBase) { + _inherits(ModelsFrame, _ModelsBase); + /** * Constructor */ - constructor() { - super(); - - this._sopInstanceUID = null; - this._url = null; - this._stackID = -1; - this._invert = false; - this._frameTime = null; - this._ultrasoundRegions = []; - this._rows = 0; - this._columns = 0; - this._dimensionIndexValues = []; - this._imagePosition = null; - this._imageOrientation = null; - this._rightHanded = true; - this._sliceThickness = 1; - this._spacingBetweenSlices = null; - this._pixelPaddingValue = null; - this._pixelRepresentation = 0; - this._pixelType = 0; - this._pixelSpacing = null; - this._pixelAspectRatio = null; - this._pixelData = null; - - this._instanceNumber = null; - this._windowCenter = null; - this._windowWidth = null; - this._rescaleSlope = null; - this._rescaleIntercept = null; - - this._bitsAllocated = 8; - this._numberOfChannels = 1; - - this._minMax = null; - this._dist = null; - - this._index = -1; - - this._referencedSegmentNumber = -1; + function ModelsFrame() { + _classCallCheck(this, ModelsFrame); + + var _this = _possibleConstructorReturn(this, _ModelsBase.call(this)); + + _this._sopInstanceUID = null; + _this._url = null; + _this._stackID = -1; + _this._invert = false; + _this._frameTime = null; + _this._ultrasoundRegions = []; + _this._rows = 0; + _this._columns = 0; + _this._dimensionIndexValues = []; + _this._imagePosition = null; + _this._imageOrientation = null; + _this._rightHanded = true; + _this._sliceThickness = 1; + _this._spacingBetweenSlices = null; + _this._pixelPaddingValue = null; + _this._pixelRepresentation = 0; + _this._pixelType = 0; + _this._pixelSpacing = null; + _this._pixelAspectRatio = null; + _this._pixelData = null; + + _this._instanceNumber = null; + _this._windowCenter = null; + _this._windowWidth = null; + _this._rescaleSlope = null; + _this._rescaleIntercept = null; + + _this._bitsAllocated = 8; + _this._numberOfChannels = 1; + + _this._minMax = null; + _this._dist = null; + + _this._index = -1; + + _this._referencedSegmentNumber = -1; + return _this; } /** @@ -35648,13 +35978,15 @@ class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["defa * * @return {*} */ - validate(model) { - if (!(super.validate(model) && typeof model.cosines === 'function' && typeof model.spacingXY === 'function' && model.hasOwnProperty('_sopInstanceUID') && model.hasOwnProperty('_dimensionIndexValues') && model.hasOwnProperty('_imageOrientation') && model.hasOwnProperty('_imagePosition'))) { + + + ModelsFrame.prototype.validate = function validate(model) { + if (!(_ModelsBase.prototype.validate.call(this, model) && typeof model.cosines === 'function' && typeof model.spacingXY === 'function' && model.hasOwnProperty('_sopInstanceUID') && model.hasOwnProperty('_dimensionIndexValues') && model.hasOwnProperty('_imageOrientation') && model.hasOwnProperty('_imagePosition'))) { return false; } return true; - } + }; /** * Merge current frame with provided frame. @@ -35670,7 +36002,9 @@ class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["defa * * @return {boolean} True if frames could be merge. False if not. */ - merge(frame) { + + + ModelsFrame.prototype.merge = function merge(frame) { if (!this.validate(frame)) { return false; } @@ -35680,7 +36014,7 @@ class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["defa } else { return false; } - } + }; /** * Generate X, y and Z cosines from image orientation @@ -35688,12 +36022,14 @@ class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["defa * * @returns {array} Array[3] containing cosinesX, Y and Z. */ - cosines() { - let cosines = [new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](1, 0, 0), new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](0, 1, 0), new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](0, 0, 1)]; + + + ModelsFrame.prototype.cosines = function cosines() { + var cosines = [new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](1, 0, 0), new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](0, 1, 0), new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](0, 0, 1)]; if (this._imageOrientation && this._imageOrientation.length === 6) { - let xCos = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._imageOrientation[0], this._imageOrientation[1], this._imageOrientation[2]); - let yCos = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._imageOrientation[3], this._imageOrientation[4], this._imageOrientation[5]); + var xCos = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._imageOrientation[0], this._imageOrientation[1], this._imageOrientation[2]); + var yCos = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._imageOrientation[3], this._imageOrientation[4], this._imageOrientation[5]); if (xCos.length() > 0 && yCos.length() > 0) { cosines[0] = xCos; @@ -35711,15 +36047,17 @@ class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["defa } return cosines; - } + }; /** * Get x/y spacing of a frame. * * @return {*} */ - spacingXY() { - let spacingXY = [1.0, 1.0]; + + + ModelsFrame.prototype.spacingXY = function spacingXY() { + var spacingXY = [1.0, 1.0]; if (this.pixelSpacing) { spacingXY[0] = this.pixelSpacing[0]; @@ -35731,7 +36069,7 @@ class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["defa } return spacingXY; - } + }; /** * Get data value @@ -35740,13 +36078,15 @@ class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["defa * @param {*} row * @return {*} */ - getPixelData(column, row) { + + + ModelsFrame.prototype.getPixelData = function getPixelData(column, row) { if (column >= 0 && column < this._columns && row >= 0 && row < this._rows) { return this.pixelData[column + this._columns * row]; } else { return null; } - } + }; /** * Set data value * @@ -35755,49 +36095,55 @@ class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["defa * @param {*} value * @return {*} */ - setPixelData(column, row, value) { + + + ModelsFrame.prototype.setPixelData = function setPixelData(column, row, value) { this.pixelData[column + this._columns * row] = value; - } + }; /** * Get frame preview as data:URL * * @return {String} */ - getImageDataUrl() { - const canvas = document.createElement('canvas'); + + + ModelsFrame.prototype.getImageDataUrl = function getImageDataUrl() { + var canvas = document.createElement('canvas'); canvas.width = this._columns; canvas.height = this._rows; - const context = canvas.getContext('2d'); + var context = canvas.getContext('2d'); - const imageData = context.createImageData(canvas.width, canvas.height); + var imageData = context.createImageData(canvas.width, canvas.height); imageData.data.set(this._frameToCanvas()); context.putImageData(imageData, 0, 0); return canvas.toDataURL(); - } + }; /** * Convert frame.pixelData to canvas.context.imageData.data * * @return {Uint8Array} */ - _frameToCanvas() { - const dimension = this._columns * this._rows; - const params = { + + ModelsFrame.prototype._frameToCanvas = function _frameToCanvas() { + var dimension = this._columns * this._rows; + + var params = { invert: this._invert, min: this._minMax[0], padding: this._pixelPaddingValue }; - let data = new Uint8Array(dimension * 4); + var data = new Uint8Array(dimension * 4); if (params.padding !== null) { // recalculation of min ignoring pixelPaddingValue params.min = this._minMax[1]; - for (let index = 0, numPixels = this._pixelData.length; index < numPixels; index++) { + for (var index = 0, numPixels = this._pixelData.length; index < numPixels; index++) { if (this._pixelData[index] !== params.padding) { params.min = Math.min(params.min, this._pixelData[index]); } @@ -35806,9 +36152,9 @@ class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["defa if (this._windowWidth && this._windowCenter !== null) { // applying windowCenter and windowWidth - const intercept = this._rescaleIntercept || 0; + var intercept = this._rescaleIntercept || 0; - const slope = this._rescaleSlope || 1; + var slope = this._rescaleSlope || 1; params.min = Math.max((this._windowCenter - this._windowWidth / 2 - intercept) / slope, params.min); params.max = Math.min((this._windowCenter + this._windowWidth / 2 - intercept) / slope, this._minMax[1]); @@ -35819,24 +36165,24 @@ class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["defa params.range = params.max - params.min || 255; // if max is 0 convert it to: 255 - black, 1 - white if (this._numberOfChannels === 1) { - for (let i = 0; i < dimension; i++) { - const normalized = this._pixelTo8Bit(this._pixelData[i], params); + for (var i = 0; i < dimension; i++) { + var normalized = this._pixelTo8Bit(this._pixelData[i], params); data[4 * i] = normalized; data[4 * i + 1] = normalized; data[4 * i + 2] = normalized; data[4 * i + 3] = 255; // alpha channel (fully opaque) } } else if (this._numberOfChannels === 3) { - for (let i = 0; i < dimension; i++) { - data[4 * i] = this._pixelTo8Bit(this._pixelData[3 * i], params); - data[4 * i + 1] = this._pixelTo8Bit(this._pixelData[3 * i + 1], params); - data[4 * i + 2] = this._pixelTo8Bit(this._pixelData[3 * i + 2], params); - data[4 * i + 3] = 255; // alpha channel (fully opaque) + for (var _i = 0; _i < dimension; _i++) { + data[4 * _i] = this._pixelTo8Bit(this._pixelData[3 * _i], params); + data[4 * _i + 1] = this._pixelTo8Bit(this._pixelData[3 * _i + 1], params); + data[4 * _i + 2] = this._pixelTo8Bit(this._pixelData[3 * _i + 2], params); + data[4 * _i + 3] = 255; // alpha channel (fully opaque) } } return data; - } + }; /** * Convert pixel value to 8 bit (canvas.context.imageData.data: maximum 8 bit per each of RGBA value) @@ -35846,16 +36192,18 @@ class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["defa * * @return {Number} */ - _pixelTo8Bit(value, params) { + + + ModelsFrame.prototype._pixelTo8Bit = function _pixelTo8Bit(value, params) { // values equal to pixelPaddingValue are outside of the image and should be ignored - let packedValue = value <= params.min || value === params.padding ? 0 : 255; + var packedValue = value <= params.min || value === params.padding ? 0 : 255; if (value > params.min && value < params.max) { packedValue = Math.round((value - params.min) * 255 / params.range); } return Number.isNaN(packedValue) ? 0 : params.invert ? 255 - packedValue : packedValue; - } + }; /** * Compare 2 arrays. @@ -35868,7 +36216,9 @@ class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["defa * * @return {boolean} True if arrays are identicals. False if not. */ - _compareArrays(reference, target) { + + + ModelsFrame.prototype._compareArrays = function _compareArrays(reference, target) { // could both be null if (reference === target) { return true; @@ -35880,248 +36230,254 @@ class ModelsFrame extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["defa } return false; - } - - get frameTime() { - return this._frameTime; - } - - set frameTime(frameTime) { - this._frameTime = frameTime; - } - - get ultrasoundRegions() { - return this._ultrasoundRegions; - } - - set ultrasoundRegions(ultrasoundRegions) { - this._ultrasoundRegions = ultrasoundRegions; - } - - get rows() { - return this._rows; - } - - set rows(rows) { - this._rows = rows; - } - - get columns() { - return this._columns; - } - - set columns(columns) { - this._columns = columns; - } - - get spacingBetweenSlices() { - return this._spacingBetweenSlices; - } - - set spacingBetweenSlices(spacingBetweenSlices) { - this._spacingBetweenSlices = spacingBetweenSlices; - } - - get sliceThickness() { - return this._sliceThickness; - } - - set sliceThickness(sliceThickness) { - this._sliceThickness = sliceThickness; - } - - get imagePosition() { - return this._imagePosition; - } - - set imagePosition(imagePosition) { - this._imagePosition = imagePosition; - } - - get imageOrientation() { - return this._imageOrientation; - } - - set imageOrientation(imageOrientation) { - this._imageOrientation = imageOrientation; - } - - get windowWidth() { - return this._windowWidth; - } - - set windowWidth(windowWidth) { - this._windowWidth = windowWidth; - } - - get windowCenter() { - return this._windowCenter; - } - - set windowCenter(windowCenter) { - this._windowCenter = windowCenter; - } - - get rescaleSlope() { - return this._rescaleSlope; - } - - set rescaleSlope(rescaleSlope) { - this._rescaleSlope = rescaleSlope; - } - - get rescaleIntercept() { - return this._rescaleIntercept; - } - - set rescaleIntercept(rescaleIntercept) { - this._rescaleIntercept = rescaleIntercept; - } - - get bitsAllocated() { - return this._bitsAllocated; - } - - set bitsAllocated(bitsAllocated) { - this._bitsAllocated = bitsAllocated; - } - - get dist() { - return this._dist; - } - - set dist(dist) { - this._dist = dist; - } - - get pixelSpacing() { - return this._pixelSpacing; - } - - set pixelSpacing(pixelSpacing) { - this._pixelSpacing = pixelSpacing; - } - - get pixelAspectRatio() { - return this._pixelAspectRatio; - } - - set pixelAspectRatio(pixelAspectRatio) { - this._pixelAspectRatio = pixelAspectRatio; - } - - get minMax() { - return this._minMax; - } - - set minMax(minMax) { - this._minMax = minMax; - } - - get dimensionIndexValues() { - return this._dimensionIndexValues; - } - - set dimensionIndexValues(dimensionIndexValues) { - this._dimensionIndexValues = dimensionIndexValues; - } - - get instanceNumber() { - return this._instanceNumber; - } - - set instanceNumber(instanceNumber) { - this._instanceNumber = instanceNumber; - } - - get pixelData() { - return this._pixelData; - } - - set pixelData(pixelData) { - this._pixelData = pixelData; - } - - set sopInstanceUID(sopInstanceUID) { - this._sopInstanceUID = sopInstanceUID; - } - - get sopInstanceUID() { - return this._sopInstanceUID; - } - - get pixelPaddingValue() { - return this._pixelPaddingValue; - } - - set pixelPaddingValue(pixelPaddingValue) { - this._pixelPaddingValue = pixelPaddingValue; - } - - get pixelRepresentation() { - return this._pixelRepresentation; - } - - set pixelRepresentation(pixelRepresentation) { - this._pixelRepresentation = pixelRepresentation; - } - - get pixelType() { - return this._pixelType; - } - - set pixelType(pixelType) { - this._pixelType = pixelType; - } - - get url() { - return this._url; - } - - set url(url) { - this._url = url; - } - - get referencedSegmentNumber() { - return this._referencedSegmentNumber; - } - - set referencedSegmentNumber(referencedSegmentNumber) { - this._referencedSegmentNumber = referencedSegmentNumber; - } - - get rightHanded() { - return this._rightHanded; - } - - set rightHanded(rightHanded) { - this._rightHanded = rightHanded; - } - - get index() { - return this._index; - } - - set index(index) { - this._index = index; - } - - get invert() { - return this._invert; - } + }; - set invert(invert) { - this._invert = invert; - } + _createClass(ModelsFrame, [{ + key: 'frameTime', + get: function get() { + return this._frameTime; + }, + set: function set(frameTime) { + this._frameTime = frameTime; + } + }, { + key: 'ultrasoundRegions', + get: function get() { + return this._ultrasoundRegions; + }, + set: function set(ultrasoundRegions) { + this._ultrasoundRegions = ultrasoundRegions; + } + }, { + key: 'rows', + get: function get() { + return this._rows; + }, + set: function set(rows) { + this._rows = rows; + } + }, { + key: 'columns', + get: function get() { + return this._columns; + }, + set: function set(columns) { + this._columns = columns; + } + }, { + key: 'spacingBetweenSlices', + get: function get() { + return this._spacingBetweenSlices; + }, + set: function set(spacingBetweenSlices) { + this._spacingBetweenSlices = spacingBetweenSlices; + } + }, { + key: 'sliceThickness', + get: function get() { + return this._sliceThickness; + }, + set: function set(sliceThickness) { + this._sliceThickness = sliceThickness; + } + }, { + key: 'imagePosition', + get: function get() { + return this._imagePosition; + }, + set: function set(imagePosition) { + this._imagePosition = imagePosition; + } + }, { + key: 'imageOrientation', + get: function get() { + return this._imageOrientation; + }, + set: function set(imageOrientation) { + this._imageOrientation = imageOrientation; + } + }, { + key: 'windowWidth', + get: function get() { + return this._windowWidth; + }, + set: function set(windowWidth) { + this._windowWidth = windowWidth; + } + }, { + key: 'windowCenter', + get: function get() { + return this._windowCenter; + }, + set: function set(windowCenter) { + this._windowCenter = windowCenter; + } + }, { + key: 'rescaleSlope', + get: function get() { + return this._rescaleSlope; + }, + set: function set(rescaleSlope) { + this._rescaleSlope = rescaleSlope; + } + }, { + key: 'rescaleIntercept', + get: function get() { + return this._rescaleIntercept; + }, + set: function set(rescaleIntercept) { + this._rescaleIntercept = rescaleIntercept; + } + }, { + key: 'bitsAllocated', + get: function get() { + return this._bitsAllocated; + }, + set: function set(bitsAllocated) { + this._bitsAllocated = bitsAllocated; + } + }, { + key: 'dist', + get: function get() { + return this._dist; + }, + set: function set(dist) { + this._dist = dist; + } + }, { + key: 'pixelSpacing', + get: function get() { + return this._pixelSpacing; + }, + set: function set(pixelSpacing) { + this._pixelSpacing = pixelSpacing; + } + }, { + key: 'pixelAspectRatio', + get: function get() { + return this._pixelAspectRatio; + }, + set: function set(pixelAspectRatio) { + this._pixelAspectRatio = pixelAspectRatio; + } + }, { + key: 'minMax', + get: function get() { + return this._minMax; + }, + set: function set(minMax) { + this._minMax = minMax; + } + }, { + key: 'dimensionIndexValues', + get: function get() { + return this._dimensionIndexValues; + }, + set: function set(dimensionIndexValues) { + this._dimensionIndexValues = dimensionIndexValues; + } + }, { + key: 'instanceNumber', + get: function get() { + return this._instanceNumber; + }, + set: function set(instanceNumber) { + this._instanceNumber = instanceNumber; + } + }, { + key: 'pixelData', + get: function get() { + return this._pixelData; + }, + set: function set(pixelData) { + this._pixelData = pixelData; + } + }, { + key: 'sopInstanceUID', + set: function set(sopInstanceUID) { + this._sopInstanceUID = sopInstanceUID; + }, + get: function get() { + return this._sopInstanceUID; + } + }, { + key: 'pixelPaddingValue', + get: function get() { + return this._pixelPaddingValue; + }, + set: function set(pixelPaddingValue) { + this._pixelPaddingValue = pixelPaddingValue; + } + }, { + key: 'pixelRepresentation', + get: function get() { + return this._pixelRepresentation; + }, + set: function set(pixelRepresentation) { + this._pixelRepresentation = pixelRepresentation; + } + }, { + key: 'pixelType', + get: function get() { + return this._pixelType; + }, + set: function set(pixelType) { + this._pixelType = pixelType; + } + }, { + key: 'url', + get: function get() { + return this._url; + }, + set: function set(url) { + this._url = url; + } + }, { + key: 'referencedSegmentNumber', + get: function get() { + return this._referencedSegmentNumber; + }, + set: function set(referencedSegmentNumber) { + this._referencedSegmentNumber = referencedSegmentNumber; + } + }, { + key: 'rightHanded', + get: function get() { + return this._rightHanded; + }, + set: function set(rightHanded) { + this._rightHanded = rightHanded; + } + }, { + key: 'index', + get: function get() { + return this._index; + }, + set: function set(index) { + this._index = index; + } + }, { + key: 'invert', + get: function get() { + return this._invert; + }, + set: function set(invert) { + this._invert = invert; + } + }, { + key: 'numberOfChannels', + get: function get() { + return this._numberOfChannels; + }, + set: function set(numberOfChannels) { + this._numberOfChannels = numberOfChannels; + } + }]); - get numberOfChannels() { - return this._numberOfChannels; - } + return ModelsFrame; +}(_models_models_base__WEBPACK_IMPORTED_MODULE_0__["default"]); - set numberOfChannels(numberOfChannels) { - this._numberOfChannels = numberOfChannels; - } -} +/* harmony default export */ __webpack_exports__["default"] = (ModelsFrame); /***/ }), @@ -36164,8 +36520,15 @@ __webpack_require__.r(__webpack_exports__); "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ModelsSeries; }); /* harmony import */ var _models_models_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../models/models.base */ "./src/models/models.base.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ @@ -36174,43 +36537,49 @@ __webpack_require__.r(__webpack_exports__); * * @module models/series */ -class ModelsSeries extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["default"] { + +var ModelsSeries = function (_ModelsBase) { + _inherits(ModelsSeries, _ModelsBase); + /** * Models series constructor */ - constructor() { - super(); - - this._concatenationUID = -1; - this._seriesInstanceUID = -1; - this._transferSyntaxUID = ''; - this._seriesNumber = -1; - this._seriesDescription = ''; - this._seriesDate = ''; - this._studyDescription = ''; - this._studyDate = ''; - this._accessionNumber = -1; - this._modality = 'Modality not set'; - this._dimensionIndexSequence = []; + function ModelsSeries() { + _classCallCheck(this, ModelsSeries); + + var _this = _possibleConstructorReturn(this, _ModelsBase.call(this)); + + _this._concatenationUID = -1; + _this._seriesInstanceUID = -1; + _this._transferSyntaxUID = ''; + _this._seriesNumber = -1; + _this._seriesDescription = ''; + _this._seriesDate = ''; + _this._studyDescription = ''; + _this._studyDate = ''; + _this._accessionNumber = -1; + _this._modality = 'Modality not set'; + _this._dimensionIndexSequence = []; // it is used in the loader in case a dicom/nifti contains multiple frames // should be updated after merge or renamed - this._numberOfFrames = 0; - this._numberOfChannels = 1; + _this._numberOfFrames = 0; + _this._numberOfChannels = 1; // patient information - this._rawHeader = null; - this._patientID = ''; - this._patientName = ''; - this._patientAge = ''; - this._patientBirthdate = ''; - this._patientSex = ''; + _this._rawHeader = null; + _this._patientID = ''; + _this._patientName = ''; + _this._patientAge = ''; + _this._patientBirthdate = ''; + _this._patientSex = ''; // SEGMENTATION STUFF - this._segmentationType = null; - this._segmentationSegments = []; + _this._segmentationType = null; + _this._segmentationSegments = []; // STACK - this._stack = []; + _this._stack = []; + return _this; } /** @@ -36229,13 +36598,15 @@ class ModelsSeries extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["def * * @override */ - validate(model) { - if (!(super.validate(model) && typeof model.mergeSeries === 'function' && model.hasOwnProperty('_seriesInstanceUID') && model.hasOwnProperty('_numberOfFrames') && model.hasOwnProperty('_numberOfChannels') && model.hasOwnProperty('_stack') && typeof model._stack !== 'undefined' && Array === model._stack.constructor)) { + + + ModelsSeries.prototype.validate = function validate(model) { + if (!(_ModelsBase.prototype.validate.call(this, model) && typeof model.mergeSeries === 'function' && model.hasOwnProperty('_seriesInstanceUID') && model.hasOwnProperty('_numberOfFrames') && model.hasOwnProperty('_numberOfChannels') && model.hasOwnProperty('_stack') && typeof model._stack !== 'undefined' && Array === model._stack.constructor)) { return false; } return true; - } + }; /** * Merge current series with provided series. @@ -36249,7 +36620,9 @@ class ModelsSeries extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["def * * @override */ - merge(series) { + + + ModelsSeries.prototype.merge = function merge(series) { if (!this.validate(series)) { return false; } @@ -36270,7 +36643,7 @@ class ModelsSeries extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["def } else { return false; } - } + }; /** * Merge current series with provided array of series. @@ -36282,366 +36655,449 @@ class ModelsSeries extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["def * * @return {Array.} Array of series properly merged. */ - mergeSeries(target) { - let seriesContainer = [this]; + + + ModelsSeries.prototype.mergeSeries = function mergeSeries(target) { + var seriesContainer = [this]; this.mergeModels(seriesContainer, target); return seriesContainer; - } + }; /** * Series instance UID setter * * @param {*} seriesInstanceUID */ - set seriesInstanceUID(seriesInstanceUID) { - this._seriesInstanceUID = seriesInstanceUID; - } - /** - * Series instace UID getter - * - * @return {*} - */ - get seriesInstanceUID() { - return this._seriesInstanceUID; - } - /** - * Transfer syntax UID setter - * - * @param {*} transferSyntaxUID - */ - set transferSyntaxUID(transferSyntaxUID) { - this._transferSyntaxUID = transferSyntaxUID; - } + _createClass(ModelsSeries, [{ + key: 'seriesInstanceUID', + set: function set(seriesInstanceUID) { + this._seriesInstanceUID = seriesInstanceUID; + } - /** - * Transfer syntax UID getter - * - * @return {*} - */ - get transferSyntaxUID() { - return this._transferSyntaxUID; - } + /** + * Series instace UID getter + * + * @return {*} + */ + , + get: function get() { + return this._seriesInstanceUID; + } - /** - * Transfer syntax UID getter - * - * @return {*} - */ - get transferSyntaxUIDLabel() { - switch (this._transferSyntaxUID) { - case '1.2.840.10008.1.2.4.90': - return 'JPEG 2000 Lossless'; - case '1.2.840.10008.1.2.4.91': - return 'JPEG 2000 Lossy'; - case '1.2.840.10008.1.2.4.57': - return 'JPEG Lossless, Nonhierarchical (Processes 14)'; - case '1.2.840.10008.1.2.4.70': - return 'JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1])'; - case '1.2.840.10008.1.2.4.50': - return 'JPEG Baseline lossy process 1 (8 bit)'; - case '1.2.840.10008.1.2.4.51': - return 'JPEG Baseline lossy process 2 & 4 (12 bit)'; - case '1.2.840.10008.1.2': - return 'Implicit VR Little Endian'; - case '1.2.840.10008.1.2.1': - return 'Explicit VR Little Endian'; - case '1.2.840.10008.1.2.2': - return 'Explicit VR Big Endian'; - default: - return `Unknown transfersyntax: ${this._transferSyntaxUID}`; + /** + * Transfer syntax UID setter + * + * @param {*} transferSyntaxUID + */ + + }, { + key: 'transferSyntaxUID', + set: function set(transferSyntaxUID) { + this._transferSyntaxUID = transferSyntaxUID; } - } - /** - * Study date setter - * - * @param {*} studyDate - */ - set studyDate(studyDate) { - this._studyDate = studyDate; - } + /** + * Transfer syntax UID getter + * + * @return {*} + */ + , + get: function get() { + return this._transferSyntaxUID; + } - /** - * Study date getter - * - * @return {*} - */ - get studyDate() { - return this._studyDate; - } + /** + * Transfer syntax UID getter + * + * @return {*} + */ - /** - * Study descripition setter - * - * @param {*} studyDescription - */ - set studyDescription(studyDescription) { - this._studyDescription = studyDescription; - } + }, { + key: 'transferSyntaxUIDLabel', + get: function get() { + switch (this._transferSyntaxUID) { + case '1.2.840.10008.1.2.4.90': + return 'JPEG 2000 Lossless'; + case '1.2.840.10008.1.2.4.91': + return 'JPEG 2000 Lossy'; + case '1.2.840.10008.1.2.4.57': + return 'JPEG Lossless, Nonhierarchical (Processes 14)'; + case '1.2.840.10008.1.2.4.70': + return 'JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1])'; + case '1.2.840.10008.1.2.4.50': + return 'JPEG Baseline lossy process 1 (8 bit)'; + case '1.2.840.10008.1.2.4.51': + return 'JPEG Baseline lossy process 2 & 4 (12 bit)'; + case '1.2.840.10008.1.2': + return 'Implicit VR Little Endian'; + case '1.2.840.10008.1.2.1': + return 'Explicit VR Little Endian'; + case '1.2.840.10008.1.2.2': + return 'Explicit VR Big Endian'; + default: + return 'Unknown transfersyntax: ' + this._transferSyntaxUID; + } + } - /** - * Study description getter - * - * @return {*} - */ - get studyDescription() { - return this._studyDescription; - } + /** + * Study date setter + * + * @param {*} studyDate + */ - /** - * Series date setter - * - * @param {*} seriesDate - */ - set seriesDate(seriesDate) { - this._seriesDate = seriesDate; - } + }, { + key: 'studyDate', + set: function set(studyDate) { + this._studyDate = studyDate; + } - /** - * Series date getter - * - * @return {*} - */ - get seriesDate() { - return this._seriesDate; - } + /** + * Study date getter + * + * @return {*} + */ + , + get: function get() { + return this._studyDate; + } - /** - * Series descripition setter - * - * @param {*} seriesDescription - */ - set seriesDescription(seriesDescription) { - this._seriesDescription = seriesDescription; - } + /** + * Study descripition setter + * + * @param {*} studyDescription + */ - /** - * Series description getter - * - * @return {*} - */ - get seriesDescription() { - return this._seriesDescription; - } + }, { + key: 'studyDescription', + set: function set(studyDescription) { + this._studyDescription = studyDescription; + } - /** - * Raw Header setter - * - * @param {*} rawHeader - */ - set rawHeader(rawHeader) { - this._rawHeader = rawHeader; - } + /** + * Study description getter + * + * @return {*} + */ + , + get: function get() { + return this._studyDescription; + } - /** - * Raw Header getter - * - * @return {*} - */ - get rawHeader() { - return this._rawHeader; - } + /** + * Series date setter + * + * @param {*} seriesDate + */ - /** - * Patient ID setter - * - * @param {*} patientID - */ - set patientID(patientID) { - this._patientID = patientID; - } + }, { + key: 'seriesDate', + set: function set(seriesDate) { + this._seriesDate = seriesDate; + } - /** - * Patient ID getter - * - * @return {*} - */ - get patientID() { - return this._patientID; - } + /** + * Series date getter + * + * @return {*} + */ + , + get: function get() { + return this._seriesDate; + } - /** - * Patient name setter - * - * @param {*} patientName - */ - set patientName(patientName) { - this._patientName = patientName; - } + /** + * Series descripition setter + * + * @param {*} seriesDescription + */ - /** - * Patient name getter - * - * @return {*} - */ - get patientName() { - return this._patientName; - } + }, { + key: 'seriesDescription', + set: function set(seriesDescription) { + this._seriesDescription = seriesDescription; + } - /** - * Patient age setter - * - * @param {*} patientAge - */ - set patientAge(patientAge) { - this._patientAge = patientAge; - } + /** + * Series description getter + * + * @return {*} + */ + , + get: function get() { + return this._seriesDescription; + } + + /** + * Raw Header setter + * + * @param {*} rawHeader + */ + + }, { + key: 'rawHeader', + set: function set(rawHeader) { + this._rawHeader = rawHeader; + } + + /** + * Raw Header getter + * + * @return {*} + */ + , + get: function get() { + return this._rawHeader; + } + + /** + * Patient ID setter + * + * @param {*} patientID + */ + + }, { + key: 'patientID', + set: function set(patientID) { + this._patientID = patientID; + } + + /** + * Patient ID getter + * + * @return {*} + */ + , + get: function get() { + return this._patientID; + } + + /** + * Patient name setter + * + * @param {*} patientName + */ + + }, { + key: 'patientName', + set: function set(patientName) { + this._patientName = patientName; + } + + /** + * Patient name getter + * + * @return {*} + */ + , + get: function get() { + return this._patientName; + } + + /** + * Patient age setter + * + * @param {*} patientAge + */ + + }, { + key: 'patientAge', + set: function set(patientAge) { + this._patientAge = patientAge; + } + + /** + * Patient age getter + * + * @return {*} + */ + , + get: function get() { + return this._patientAge; + } + + /** + * Patient birthdate setter + * + * @param {*} patientBirthdate + */ + + }, { + key: 'patientBirthdate', + set: function set(patientBirthdate) { + this._patientBirthdate = patientBirthdate; + } + + /** + * Patient birthdate getter + * + * @return {*} + */ + , + get: function get() { + return this._patientBirthdate; + } + + /** + * Patient sex setter + * + * @param {*} patientSex + */ + + }, { + key: 'patientSex', + set: function set(patientSex) { + this._patientSex = patientSex; + } + + /** + * Patient sex getter + * + * @return {*} + */ + , + get: function get() { + return this._patientSex; + } + + /** + * Number of frames setter + * + * @param {*} numberOfFrames + */ + + }, { + key: 'numberOfFrames', + set: function set(numberOfFrames) { + this._numberOfFrames = numberOfFrames; + } + + /** + * Number of frames getter + * + * @return {*} + */ + , + get: function get() { + return this._numberOfFrames; + } - /** - * Patient age getter - * - * @return {*} - */ - get patientAge() { - return this._patientAge; - } + /** + * Number of channels setter + * + * @param {*} numberOfChannels + */ - /** - * Patient birthdate setter - * - * @param {*} patientBirthdate - */ - set patientBirthdate(patientBirthdate) { - this._patientBirthdate = patientBirthdate; - } + }, { + key: 'numberOfChannels', + set: function set(numberOfChannels) { + this._numberOfChannels = numberOfChannels; + } - /** - * Patient birthdate getter - * - * @return {*} - */ - get patientBirthdate() { - return this._patientBirthdate; - } + /** + * Number of channels getter + * + * @return {*} + */ + , + get: function get() { + return this._numberOfChannels; + } - /** - * Patient sex setter - * - * @param {*} patientSex - */ - set patientSex(patientSex) { - this._patientSex = patientSex; - } + /** + * Stack setter + * + * @param {*} stack + */ - /** - * Patient sex getter - * - * @return {*} - */ - get patientSex() { - return this._patientSex; - } + }, { + key: 'stack', + set: function set(stack) { + this._stack = stack; + } - /** - * Number of frames setter - * - * @param {*} numberOfFrames - */ - set numberOfFrames(numberOfFrames) { - this._numberOfFrames = numberOfFrames; - } + /** + * Stack getter + * + * @return {*} + */ + , + get: function get() { + return this._stack; + } - /** - * Number of frames getter - * - * @return {*} - */ - get numberOfFrames() { - return this._numberOfFrames; - } + /** + * Modality setter + * + * @param {*} modality + */ - /** - * Number of channels setter - * - * @param {*} numberOfChannels - */ - set numberOfChannels(numberOfChannels) { - this._numberOfChannels = numberOfChannels; - } + }, { + key: 'modality', + set: function set(modality) { + this._modality = modality; + } - /** - * Number of channels getter - * - * @return {*} - */ - get numberOfChannels() { - return this._numberOfChannels; - } + /** + * Modality getter + * + * @return {*} + */ + , + get: function get() { + return this._modality; + } - /** - * Stack setter - * - * @param {*} stack - */ - set stack(stack) { - this._stack = stack; - } + /** + * Segmentation type setter + * + * @param {*} segmentationType + */ - /** - * Stack getter - * - * @return {*} - */ - get stack() { - return this._stack; - } + }, { + key: 'segmentationType', + set: function set(segmentationType) { + this._segmentationType = segmentationType; + } - /** - * Modality setter - * - * @param {*} modality - */ - set modality(modality) { - this._modality = modality; - } + /** + * Segmentation type getter + * + * @return {*} + */ + , + get: function get() { + return this._segmentationType; + } - /** - * Modality getter - * - * @return {*} - */ - get modality() { - return this._modality; - } + /** + * Segmentation segments setter + * + * @param {*} segmentationSegments + */ - /** - * Segmentation type setter - * - * @param {*} segmentationType - */ - set segmentationType(segmentationType) { - this._segmentationType = segmentationType; - } + }, { + key: 'segmentationSegments', + set: function set(segmentationSegments) { + this._segmentationSegments = segmentationSegments; + } - /** - * Segmentation type getter - * - * @return {*} - */ - get segmentationType() { - return this._segmentationType; - } + /** + * Segmentation segments getter + * + * @return {*} + */ + , + get: function get() { + return this._segmentationSegments; + } + }]); - /** - * Segmentation segments setter - * - * @param {*} segmentationSegments - */ - set segmentationSegments(segmentationSegments) { - this._segmentationSegments = segmentationSegments; - } + return ModelsSeries; +}(_models_models_base__WEBPACK_IMPORTED_MODULE_0__["default"]); - /** - * Segmentation segments getter - * - * @return {*} - */ - get segmentationSegments() { - return this._segmentationSegments; - } -} +/* harmony default export */ __webpack_exports__["default"] = (ModelsSeries); /***/ }), @@ -36654,7 +37110,6 @@ class ModelsSeries extends _models_models_base__WEBPACK_IMPORTED_MODULE_0__["def "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ModelsStack; }); /* harmony import */ var three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! three/src/math/Matrix4 */ "./node_modules/three/src/math/Matrix4.js"); /* harmony import */ var three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three/src/math/Vector3 */ "./node_modules/three/src/math/Vector3.js"); /* harmony import */ var three_src_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! three/src/constants */ "./node_modules/three/src/constants.js"); @@ -36662,6 +37117,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _core_core_colors__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_core_core_colors__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); /* harmony import */ var _models_models_base__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../models/models.base */ "./src/models/models.base.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ @@ -36671,86 +37134,92 @@ __webpack_require__.r(__webpack_exports__); -const binaryString = __webpack_require__(/*! math-float32-to-binary-string */ "./node_modules/math-float32-to-binary-string/lib/index.js"); +var binaryString = __webpack_require__(/*! math-float32-to-binary-string */ "./node_modules/math-float32-to-binary-string/lib/index.js"); /** * Stack object. * * @module models/stack */ -class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["default"] { + +var ModelsStack = function (_ModelsBase) { + _inherits(ModelsStack, _ModelsBase); + /** * Models Stack constructor */ - constructor() { - super(); + function ModelsStack() { + _classCallCheck(this, ModelsStack); + + var _this = _possibleConstructorReturn(this, _ModelsBase.call(this)); - this._uid = null; - this._stackID = -1; + _this._uid = null; + _this._stackID = -1; - this._frame = []; - this._numberOfFrames = 0; + _this._frame = []; + _this._numberOfFrames = 0; - this._rows = 0; - this._columns = 0; - this._numberOfChannels = 1; - this._bitsAllocated = 8; - this._pixelType = 0; - this._pixelRepresentation = 0; + _this._rows = 0; + _this._columns = 0; + _this._numberOfChannels = 1; + _this._bitsAllocated = 8; + _this._pixelType = 0; + _this._pixelRepresentation = 0; - this._textureSize = 4096; - this._textureUnits = 7; + _this._textureSize = 4096; + _this._textureUnits = 7; - this._rawData = []; + _this._rawData = []; - this._windowCenter = 0; - this._windowWidth = 0; + _this._windowCenter = 0; + _this._windowWidth = 0; - this._rescaleSlope = 1; - this._rescaleIntercept = 0; + _this._rescaleSlope = 1; + _this._rescaleIntercept = 0; - this._minMax = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY]; + _this._minMax = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY]; // TRANSFORMATION MATRICES - this._regMatrix = new three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_0__["Matrix4"](); + _this._regMatrix = new three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_0__["Matrix4"](); - this._ijk2LPS = null; - this._lps2IJK = null; + _this._ijk2LPS = null; + _this._lps2IJK = null; - this._aabb2LPS = null; - this._lps2AABB = null; + _this._aabb2LPS = null; + _this._lps2AABB = null; // // IJK dimensions - this._dimensionsIJK = null; - this._halfDimensionsIJK = null; - this._spacing = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](1, 1, 1); - this._spacingBetweenSlices = 0; - this._sliceThickness = 0; - this._origin = null; - this._rightHanded = true; - this._xCosine = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](1, 0, 0); - this._yCosine = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](0, 1, 0); - this._zCosine = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](0, 0, 1); + _this._dimensionsIJK = null; + _this._halfDimensionsIJK = null; + _this._spacing = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](1, 1, 1); + _this._spacingBetweenSlices = 0; + _this._sliceThickness = 0; + _this._origin = null; + _this._rightHanded = true; + _this._xCosine = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](1, 0, 0); + _this._yCosine = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](0, 1, 0); + _this._zCosine = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](0, 0, 1); // convenience vars - this._prepared = false; - this._packed = false; - this._packedPerPixel = 1; + _this._prepared = false; + _this._packed = false; + _this._packedPerPixel = 1; // - this._modality = 'Modality not set'; + _this._modality = 'Modality not set'; // SEGMENTATION STUFF - this._segmentationType = null; - this._segmentationSegments = []; - this._segmentationDefaultColor = [63, 174, 128]; - this._frameSegment = []; - this._segmentationLUT = []; - this._segmentationLUTO = []; + _this._segmentationType = null; + _this._segmentationSegments = []; + _this._segmentationDefaultColor = [63, 174, 128]; + _this._frameSegment = []; + _this._segmentationLUT = []; + _this._segmentationLUTO = []; // photometricInterpretation Monochrome1 VS Monochrome2 - this._invert = false; + _this._invert = false; + return _this; } /** @@ -36763,10 +37232,12 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa * * We currently merge overlaping frames into 1. */ - prepareSegmentation() { + + + ModelsStack.prototype.prepareSegmentation = function prepareSegmentation() { // store frame and do special pre-processing this._frameSegment = this._frame; - let mergedFrames = []; + var mergedFrames = []; // order frames this.computeCosines(); @@ -36774,8 +37245,8 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa this._frame.sort(this._sortDistanceArraySort); // merge frames - let prevIndex = -1; - for (let i = 0; i < this._frame.length; i++) { + var prevIndex = -1; + for (var i = 0; i < this._frame.length; i++) { if (!mergedFrames[prevIndex] || mergedFrames[prevIndex]._dist != this._frame[i]._dist) { mergedFrames.push(this._frame[i]); prevIndex++; @@ -36787,14 +37258,14 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa // That allows us to merge frames later on. // If we merge frames without scaling, then we can not differenciate // voxels from segmentation A or B as the value is 0 or 1 in both cases. - for (let k = 0; k < mergedFrames[prevIndex]._rows * mergedFrames[prevIndex]._columns; k++) { + for (var k = 0; k < mergedFrames[prevIndex]._rows * mergedFrames[prevIndex]._columns; k++) { mergedFrames[prevIndex]._pixelData[k] *= this._frame[i]._referencedSegmentNumber; } } else { // frame already exsits at this location. // merge data from this segmentation into existing frame - for (let k = 0; k < mergedFrames[prevIndex]._rows * mergedFrames[prevIndex]._columns; k++) { - mergedFrames[prevIndex]._pixelData[k] += this._frame[i].pixelData[k] * this._frame[i]._referencedSegmentNumber; + for (var _k = 0; _k < mergedFrames[prevIndex]._rows * mergedFrames[prevIndex]._columns; _k++) { + mergedFrames[prevIndex]._pixelData[_k] += this._frame[i].pixelData[_k] * this._frame[i]._referencedSegmentNumber; } } @@ -36802,38 +37273,38 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa } // get information about segments - let dict = {}; - let max = 0; - for (let i = 0; i < this._segmentationSegments.length; i++) { - max = Math.max(max, parseInt(this._segmentationSegments[i].segmentNumber, 10)); + var dict = {}; + var max = 0; + for (var _i = 0; _i < this._segmentationSegments.length; _i++) { + max = Math.max(max, parseInt(this._segmentationSegments[_i].segmentNumber, 10)); - let color = this._segmentationSegments[i].recommendedDisplayCIELab; + var color = this._segmentationSegments[_i].recommendedDisplayCIELab; if (color === null) { - dict[this._segmentationSegments[i].segmentNumber] = this._segmentationDefaultColor; + dict[this._segmentationSegments[_i].segmentNumber] = this._segmentationDefaultColor; } else { - dict[this._segmentationSegments[i].segmentNumber] = _core_core_colors__WEBPACK_IMPORTED_MODULE_3___default.a.cielab2RGB(...color); + dict[this._segmentationSegments[_i].segmentNumber] = _core_core_colors__WEBPACK_IMPORTED_MODULE_3___default.a.cielab2RGB.apply(_core_core_colors__WEBPACK_IMPORTED_MODULE_3___default.a, color); } } // generate LUTs - for (let i = 0; i <= max; i++) { - let index = i / max; - let opacity = i ? 1 : 0; - let rgb = [0, 0, 0]; - if (dict.hasOwnProperty(i.toString())) { - rgb = dict[i.toString()]; + for (var _i2 = 0; _i2 <= max; _i2++) { + var index = _i2 / max; + var opacity = _i2 ? 1 : 0; + var rgb = [0, 0, 0]; + if (dict.hasOwnProperty(_i2.toString())) { + rgb = dict[_i2.toString()]; } rgb[0] /= 255; rgb[1] /= 255; rgb[2] /= 255; - this._segmentationLUT.push([index, ...rgb]); + this._segmentationLUT.push([index].concat(rgb)); this._segmentationLUTO.push([index, opacity]); } this._frame = mergedFrames; - } + }; /** * Compute cosines @@ -36846,7 +37317,9 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa * * @return {*} */ - prepare() { + + + ModelsStack.prototype.prepare = function prepare() { // if segmentation, merge some frames... if (this._modality === 'SEG') { this.prepareSegmentation(); @@ -36890,8 +37363,8 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa this.computeLPS2AABB(); // this.packEchos(); - const middleFrameIndex = Math.floor(this._frame.length / 2); - const middleFrame = this._frame[middleFrameIndex]; + var middleFrameIndex = Math.floor(this._frame.length / 2); + var middleFrame = this._frame[middleFrameIndex]; this._rescaleSlope = middleFrame.rescaleSlope || 1; this._rescaleIntercept = middleFrame.rescaleIntercept || 0; @@ -36907,16 +37380,16 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa this._bitsAllocated = middleFrame.bitsAllocated; this._prepared = true; - } + }; - packEchos() { + ModelsStack.prototype.packEchos = function packEchos() { // 4 echo times... - let echos = 4; - let packedEcho = []; - for (let i = 0; i < this._frame.length; i += echos) { - let frame = this._frame[i]; - for (let k = 0; k < this._rows * this._columns; k++) { - for (let j = 1; j < echos; j++) { + var echos = 4; + var packedEcho = []; + for (var i = 0; i < this._frame.length; i += echos) { + var frame = this._frame[i]; + for (var k = 0; k < this._rows * this._columns; k++) { + for (var j = 1; j < echos; j++) { frame.pixelData[k] += this._frame[i + j].pixelData[k]; } frame.pixelData[k] /= echos; @@ -36927,9 +37400,9 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa this._numberOfFrames = this._frame.length; this._dimensionsIJK = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._columns, this._rows, this._numberOfFrames); this._halfDimensionsIJK = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._dimensionsIJK.x / 2, this._dimensionsIJK.y / 2, this._dimensionsIJK.z / 2); - } + }; - computeNumberOfFrames() { + ModelsStack.prototype.computeNumberOfFrames = function computeNumberOfFrames() { // we need at least 1 frame if (this._frame && this._frame.length > 0) { this._numberOfFrames = this._frame.length; @@ -36938,19 +37411,21 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa window.console.warn(this._frame); return false; } - } + }; // frame.cosines - returns array [x, y, z] - computeCosines() { + + + ModelsStack.prototype.computeCosines = function computeCosines() { if (this._frame && this._frame[0]) { - let cosines = this._frame[0].cosines(); + var cosines = this._frame[0].cosines(); this._xCosine = cosines[0]; this._yCosine = cosines[1]; this._zCosine = cosines[2]; } - } + }; - orderFrames() { + ModelsStack.prototype.orderFrames = function orderFrames() { // order the frames based on theirs dimension indices // first index is the most important. // 1,1,1,1 will be first @@ -36974,17 +37449,19 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa } else { window.console.warn('do not know how to order the frames...'); } - } + }; - computeSpacing() { + ModelsStack.prototype.computeSpacing = function computeSpacing() { this.xySpacing(); this.zSpacing(); - } + }; /** * Compute stack z spacing */ - zSpacing() { + + + ModelsStack.prototype.zSpacing = function zSpacing() { if (this._numberOfFrames > 1) { if (this._frame[0].pixelSpacing && this._frame[0].pixelSpacing[2]) { this._spacing.z = this._frame[0].pixelSpacing[2]; @@ -37009,61 +37486,69 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa if (this._spacing.z === 0) { this._spacing.z = 1; } - } + }; /** * FRAME CAN DO IT */ - xySpacing() { + + + ModelsStack.prototype.xySpacing = function xySpacing() { if (this._frame && this._frame[0]) { - let spacingXY = this._frame[0].spacingXY(); + var spacingXY = this._frame[0].spacingXY(); this._spacing.x = spacingXY[0]; this._spacing.y = spacingXY[1]; } - } + }; /** * Find min and max intensities among all frames. */ - computeMinMaxIntensities() { + + + ModelsStack.prototype.computeMinMaxIntensities = function computeMinMaxIntensities() { // what about colors!!!!? // we ignore values if NaNs // https://github.com/FNNDSC/ami/issues/185 - for (let i = 0; i < this._frame.length; i++) { + for (var i = 0; i < this._frame.length; i++) { // get min/max - let min = this._frame[i].minMax[0]; + var min = this._frame[i].minMax[0]; if (!Number.isNaN(min)) { this._minMax[0] = Math.min(this._minMax[0], min); } - let max = this._frame[i].minMax[1]; + var max = this._frame[i].minMax[1]; if (!Number.isNaN(max)) { this._minMax[1] = Math.max(this._minMax[1], max); } } - } + }; /** * Compute IJK to LPS and invert transforms */ - computeIJK2LPS() { + + + ModelsStack.prototype.computeIJK2LPS = function computeIJK2LPS() { // ijk to lps this._ijk2LPS = _core_core_utils__WEBPACK_IMPORTED_MODULE_4__["default"].ijk2LPS(this._xCosine, this._yCosine, this._zCosine, this._spacing, this._origin, this._regMatrix); // lps 2 ijk this._lps2IJK = new three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_0__["Matrix4"](); this._lps2IJK.getInverse(this._ijk2LPS); - } + }; /** * Compute LPS to AABB and invert transforms */ - computeLPS2AABB() { + + + ModelsStack.prototype.computeLPS2AABB = function computeLPS2AABB() { this._aabb2LPS = _core_core_utils__WEBPACK_IMPORTED_MODULE_4__["default"].aabb2LPS(this._xCosine, this._yCosine, this._zCosine, this._origin); this._lps2AABB = new three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_0__["Matrix4"](); this._lps2AABB.getInverse(this._aabb2LPS); - } + }; /** * Merge stacks @@ -37072,21 +37557,25 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa * * @return {*} */ - merge(stack) { + + + ModelsStack.prototype.merge = function merge(stack) { // also make sure x/y/z cosines are a match! if (this._stackID === stack.stackID && this._numberOfFrames === 1 && stack._numberOfFrames === 1 && this._frame[0].columns === stack.frame[0].columns && this._frame[0].rows === stack.frame[0].rows && this._xCosine.equals(stack.xCosine) && this._yCosine.equals(stack.yCosine) && this._zCosine.equals(stack.zCosine)) { return this.mergeModels(this._frame, stack.frame); } else { return false; } - } + }; /** * Pack current stack pixel data into 8 bits array buffers */ - pack() { + + + ModelsStack.prototype.pack = function pack() { // Get total number of voxels - const nbVoxels = this._dimensionsIJK.x * this._dimensionsIJK.y * this._dimensionsIJK.z; + var nbVoxels = this._dimensionsIJK.x * this._dimensionsIJK.y * this._dimensionsIJK.z; // Packing style if (this._bitsAllocated === 8 && this._numberOfChannels === 1 || this._bitsAllocated === 1) { @@ -37098,10 +37587,10 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa } // Loop through all the textures we need - const textureDimension = this._textureSize * this._textureSize; - let requiredTextures = Math.ceil(nbVoxels / (textureDimension * this._packedPerPixel)); - let voxelIndexStart = 0; - let voxelIndexStop = this._packedPerPixel * textureDimension; + var textureDimension = this._textureSize * this._textureSize; + var requiredTextures = Math.ceil(nbVoxels / (textureDimension * this._packedPerPixel)); + var voxelIndexStart = 0; + var voxelIndexStop = this._packedPerPixel * textureDimension; if (voxelIndexStop > nbVoxels) { voxelIndexStop = nbVoxels; } @@ -37111,8 +37600,8 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa requiredTextures = this._textureUnits; } - for (let ii = 0; ii < requiredTextures; ii++) { - const packed = this._packTo8Bits(this._numberOfChannels, this._frame, this._textureSize, voxelIndexStart, voxelIndexStop); + for (var ii = 0; ii < requiredTextures; ii++) { + var packed = this._packTo8Bits(this._numberOfChannels, this._frame, this._textureSize, voxelIndexStart, voxelIndexStop); this._textureType = packed.textureType; this._rawData.push(packed.data); @@ -37124,7 +37613,7 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa } this._packed = true; - } + }; /** * Pack frame data to 32 bits texture @@ -37134,36 +37623,38 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa * @param {*} startVoxel * @param {*} stopVoxel */ - _packTo8Bits(channels, frame, textureSize, startVoxel, stopVoxel) { - const packed = { + + + ModelsStack.prototype._packTo8Bits = function _packTo8Bits(channels, frame, textureSize, startVoxel, stopVoxel) { + var packed = { textureType: null, data: null }; - const bitsAllocated = frame[0].bitsAllocated; - const pixelType = frame[0].pixelType; + var bitsAllocated = frame[0].bitsAllocated; + var pixelType = frame[0].pixelType; // transform signed to unsigned for convenience - let offset = 0; + var offset = 0; if (this._minMax[0] < 0) { offset -= this._minMax[0]; } - let packIndex = 0; - let frameIndex = 0; - let inFrameIndex = 0; + var packIndex = 0; + var frameIndex = 0; + var inFrameIndex = 0; // frame should return it! - const frameDimension = frame[0].rows * frame[0].columns; + var frameDimension = frame[0].rows * frame[0].columns; if (bitsAllocated === 8 && channels === 1 || bitsAllocated === 1) { - let data = new Uint8Array(textureSize * textureSize * 4); - let coordinate = 0; - let channelOffset = 0; - for (let i = startVoxel; i < stopVoxel; i++) { + var data = new Uint8Array(textureSize * textureSize * 4); + var coordinate = 0; + var channelOffset = 0; + for (var i = startVoxel; i < stopVoxel; i++) { frameIndex = ~~(i / frameDimension); inFrameIndex = i % frameDimension; - let raw = frame[frameIndex].pixelData[inFrameIndex] + offset; + var raw = frame[frameIndex].pixelData[inFrameIndex] + offset; if (!Number.isNaN(raw)) { data[4 * coordinate + channelOffset] = raw; } @@ -37175,111 +37666,115 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa packed.textureType = three_src_constants__WEBPACK_IMPORTED_MODULE_2__["RGBAFormat"]; packed.data = data; } else if (bitsAllocated === 16 && channels === 1) { - let data = new Uint8Array(textureSize * textureSize * 4); - let coordinate = 0; - let channelOffset = 0; + var _data = new Uint8Array(textureSize * textureSize * 4); + var _coordinate = 0; + var _channelOffset = 0; - for (let i = startVoxel; i < stopVoxel; i++) { - frameIndex = ~~(i / frameDimension); - inFrameIndex = i % frameDimension; + for (var _i3 = startVoxel; _i3 < stopVoxel; _i3++) { + frameIndex = ~~(_i3 / frameDimension); + inFrameIndex = _i3 % frameDimension; - let raw = frame[frameIndex].pixelData[inFrameIndex] + offset; - if (!Number.isNaN(raw)) { - data[4 * coordinate + 2 * channelOffset] = raw & 0x00ff; - data[4 * coordinate + 2 * channelOffset + 1] = raw >>> 8 & 0x00ff; + var _raw = frame[frameIndex].pixelData[inFrameIndex] + offset; + if (!Number.isNaN(_raw)) { + _data[4 * _coordinate + 2 * _channelOffset] = _raw & 0x00ff; + _data[4 * _coordinate + 2 * _channelOffset + 1] = _raw >>> 8 & 0x00ff; } packIndex++; - coordinate = Math.floor(packIndex / 2); - channelOffset = packIndex % 2; + _coordinate = Math.floor(packIndex / 2); + _channelOffset = packIndex % 2; } packed.textureType = three_src_constants__WEBPACK_IMPORTED_MODULE_2__["RGBAFormat"]; - packed.data = data; + packed.data = _data; } else if (bitsAllocated === 32 && channels === 1 && pixelType === 0) { - let data = new Uint8Array(textureSize * textureSize * 4); - for (let i = startVoxel; i < stopVoxel; i++) { - frameIndex = ~~(i / frameDimension); - inFrameIndex = i % frameDimension; + var _data2 = new Uint8Array(textureSize * textureSize * 4); + for (var _i4 = startVoxel; _i4 < stopVoxel; _i4++) { + frameIndex = ~~(_i4 / frameDimension); + inFrameIndex = _i4 % frameDimension; - let raw = frame[frameIndex].pixelData[inFrameIndex] + offset; - if (!Number.isNaN(raw)) { - data[4 * packIndex] = raw & 0x000000ff; - data[4 * packIndex + 1] = raw >>> 8 & 0x000000ff; - data[4 * packIndex + 2] = raw >>> 16 & 0x000000ff; - data[4 * packIndex + 3] = raw >>> 24 & 0x000000ff; + var _raw2 = frame[frameIndex].pixelData[inFrameIndex] + offset; + if (!Number.isNaN(_raw2)) { + _data2[4 * packIndex] = _raw2 & 0x000000ff; + _data2[4 * packIndex + 1] = _raw2 >>> 8 & 0x000000ff; + _data2[4 * packIndex + 2] = _raw2 >>> 16 & 0x000000ff; + _data2[4 * packIndex + 3] = _raw2 >>> 24 & 0x000000ff; } packIndex++; } packed.textureType = three_src_constants__WEBPACK_IMPORTED_MODULE_2__["RGBAFormat"]; - packed.data = data; + packed.data = _data2; } else if (bitsAllocated === 32 && channels === 1 && pixelType === 1) { - let data = new Uint8Array(textureSize * textureSize * 4); + var _data3 = new Uint8Array(textureSize * textureSize * 4); - for (let i = startVoxel; i < stopVoxel; i++) { - frameIndex = ~~(i / frameDimension); - inFrameIndex = i % frameDimension; + for (var _i5 = startVoxel; _i5 < stopVoxel; _i5++) { + frameIndex = ~~(_i5 / frameDimension); + inFrameIndex = _i5 % frameDimension; - let raw = frame[frameIndex].pixelData[inFrameIndex] + offset; - if (!Number.isNaN(raw)) { - let bitString = binaryString(raw); - let bitStringArray = bitString.match(/.{1,8}/g); + var _raw3 = frame[frameIndex].pixelData[inFrameIndex] + offset; + if (!Number.isNaN(_raw3)) { + var bitString = binaryString(_raw3); + var bitStringArray = bitString.match(/.{1,8}/g); - data[4 * packIndex] = parseInt(bitStringArray[0], 2); - data[4 * packIndex + 1] = parseInt(bitStringArray[1], 2); - data[4 * packIndex + 2] = parseInt(bitStringArray[2], 2); - data[4 * packIndex + 3] = parseInt(bitStringArray[3], 2); + _data3[4 * packIndex] = parseInt(bitStringArray[0], 2); + _data3[4 * packIndex + 1] = parseInt(bitStringArray[1], 2); + _data3[4 * packIndex + 2] = parseInt(bitStringArray[2], 2); + _data3[4 * packIndex + 3] = parseInt(bitStringArray[3], 2); } packIndex++; } packed.textureType = three_src_constants__WEBPACK_IMPORTED_MODULE_2__["RGBAFormat"]; - packed.data = data; + packed.data = _data3; } else if (bitsAllocated === 8 && channels === 3) { - let data = new Uint8Array(textureSize * textureSize * 3); + var _data4 = new Uint8Array(textureSize * textureSize * 3); - for (let i = startVoxel; i < stopVoxel; i++) { - frameIndex = ~~(i / frameDimension); - inFrameIndex = i % frameDimension; + for (var _i6 = startVoxel; _i6 < stopVoxel; _i6++) { + frameIndex = ~~(_i6 / frameDimension); + inFrameIndex = _i6 % frameDimension; - data[3 * packIndex] = frame[frameIndex].pixelData[3 * inFrameIndex]; - data[3 * packIndex + 1] = frame[frameIndex].pixelData[3 * inFrameIndex + 1]; - data[3 * packIndex + 2] = frame[frameIndex].pixelData[3 * inFrameIndex + 2]; + _data4[3 * packIndex] = frame[frameIndex].pixelData[3 * inFrameIndex]; + _data4[3 * packIndex + 1] = frame[frameIndex].pixelData[3 * inFrameIndex + 1]; + _data4[3 * packIndex + 2] = frame[frameIndex].pixelData[3 * inFrameIndex + 2]; packIndex++; } packed.textureType = three_src_constants__WEBPACK_IMPORTED_MODULE_2__["RGBFormat"]; - packed.data = data; + packed.data = _data4; } return packed; - } + }; /** * Get the stack world center * *@return {*} */ - worldCenter() { - let center = this._halfDimensionsIJK.clone().addScalar(-0.5).applyMatrix4(this._ijk2LPS); + + + ModelsStack.prototype.worldCenter = function worldCenter() { + var center = this._halfDimensionsIJK.clone().addScalar(-0.5).applyMatrix4(this._ijk2LPS); return center; - } + }; /** * Get the stack world bounding box * @return {*} */ - worldBoundingBox() { - let bbox = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY]; - const dims = this._dimensionsIJK; - for (let i = 0; i <= dims.x; i += dims.x) { - for (let j = 0; j <= dims.y; j += dims.y) { - for (let k = 0; k <= dims.z; k += dims.z) { - let world = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](i, j, k).applyMatrix4(this._ijk2LPS); + ModelsStack.prototype.worldBoundingBox = function worldBoundingBox() { + var bbox = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY]; + + var dims = this._dimensionsIJK; + + for (var i = 0; i <= dims.x; i += dims.x) { + for (var j = 0; j <= dims.y; j += dims.y) { + for (var k = 0; k <= dims.z; k += dims.z) { + var world = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](i, j, k).applyMatrix4(this._ijk2LPS); bbox = [Math.min(bbox[0], world.x), Math.max(bbox[1], world.x), // x min/max Math.min(bbox[2], world.y), Math.max(bbox[3], world.y), Math.min(bbox[4], world.z), Math.max(bbox[5], world.z)]; } @@ -37287,47 +37782,51 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa } return bbox; - } + }; /** * Get AABB size in LPS space. * * @return {*} */ - AABBox() { - let world0 = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"]().addScalar(-0.5).applyMatrix4(this._ijk2LPS).applyMatrix4(this._lps2AABB); - let world7 = this._dimensionsIJK.clone().addScalar(-0.5).applyMatrix4(this._ijk2LPS).applyMatrix4(this._lps2AABB); - let minBBox = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](Math.abs(world0.x - world7.x), Math.abs(world0.y - world7.y), Math.abs(world0.z - world7.z)); + ModelsStack.prototype.AABBox = function AABBox() { + var world0 = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"]().addScalar(-0.5).applyMatrix4(this._ijk2LPS).applyMatrix4(this._lps2AABB); + + var world7 = this._dimensionsIJK.clone().addScalar(-0.5).applyMatrix4(this._ijk2LPS).applyMatrix4(this._lps2AABB); + + var minBBox = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](Math.abs(world0.x - world7.x), Math.abs(world0.y - world7.y), Math.abs(world0.z - world7.z)); return minBBox; - } + }; /** * Get AABB center in LPS space */ - centerAABBox() { - let centerBBox = this.worldCenter(); + + + ModelsStack.prototype.centerAABBox = function centerAABBox() { + var centerBBox = this.worldCenter(); centerBBox.applyMatrix4(this._lps2AABB); return centerBBox; - } + }; - static indexInDimensions(index, dimensions) { + ModelsStack.indexInDimensions = function indexInDimensions(index, dimensions) { if (index.x >= 0 && index.y >= 0 && index.z >= 0 && index.x < dimensions.x && index.y < dimensions.y && index.z < dimensions.z) { return true; } return false; - } + }; - _arrayToVector3(array, index) { + ModelsStack.prototype._arrayToVector3 = function _arrayToVector3(array, index) { return new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](array[index], array[index + 1], array[index + 2]); - } + }; - _orderFrameOnDimensionIndicesArraySort(a, b) { + ModelsStack.prototype._orderFrameOnDimensionIndicesArraySort = function _orderFrameOnDimensionIndicesArraySort(a, b) { if ('dimensionIndexValues' in a && Object.prototype.toString.call(a.dimensionIndexValues) === '[object Array]' && 'dimensionIndexValues' in b && Object.prototype.toString.call(b.dimensionIndexValues) === '[object Array]') { - for (let i = 0; i < a.dimensionIndexValues.length; i++) { + for (var i = 0; i < a.dimensionIndexValues.length; i++) { if (parseInt(a.dimensionIndexValues[i], 10) > parseInt(b.dimensionIndexValues[i], 10)) { return 1; } @@ -37342,304 +37841,26 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa } return 0; - } + }; - _computeDistanceArrayMap(normal, frame) { + ModelsStack.prototype._computeDistanceArrayMap = function _computeDistanceArrayMap(normal, frame) { if (frame.imagePosition) { frame.dist = frame.imagePosition[0] * normal.x + frame.imagePosition[1] * normal.y + frame.imagePosition[2] * normal.z; } return frame; - } + }; - _sortDistanceArraySort(a, b) { + ModelsStack.prototype._sortDistanceArraySort = function _sortDistanceArraySort(a, b) { return a.dist - b.dist; - } - _sortInstanceNumberArraySort(a, b) { - return a.instanceNumber - b.instanceNumber; - } - _sortSopInstanceUIDArraySort(a, b) { - return a.sopInstanceUID - b.sopInstanceUID; - } - - set numberOfChannels(numberOfChannels) { - this._numberOfChannels = numberOfChannels; - } - - get numberOfChannels() { - return this._numberOfChannels; - } - - set frame(frame) { - this._frame = frame; - } - - get frame() { - return this._frame; - } - - set prepared(prepared) { - this._prepared = prepared; - } - - get prepared() { - return this._prepared; - } - - set packed(packed) { - this._packed = packed; - } - - get packed() { - return this._packed; - } - - set packedPerPixel(packedPerPixel) { - this._packedPerPixel = packedPerPixel; - } - - get packedPerPixel() { - return this._packedPerPixel; - } - - set dimensionsIJK(dimensionsIJK) { - this._dimensionsIJK = dimensionsIJK; - } - - get dimensionsIJK() { - return this._dimensionsIJK; - } - - set halfDimensionsIJK(halfDimensionsIJK) { - this._halfDimensionsIJK = halfDimensionsIJK; - } - - get halfDimensionsIJK() { - return this._halfDimensionsIJK; - } - - set regMatrix(regMatrix) { - this._regMatrix = regMatrix; - } - - get regMatrix() { - return this._regMatrix; - } - - set ijk2LPS(ijk2LPS) { - this._ijk2LPS = ijk2LPS; - } - - get ijk2LPS() { - return this._ijk2LPS; - } - - set lps2IJK(lps2IJK) { - this._lps2IJK = lps2IJK; - } - - get lps2IJK() { - return this._lps2IJK; - } - - set lps2AABB(lps2AABB) { - this._lps2AABB = lps2AABB; - } - - get lps2AABB() { - return this._lps2AABB; - } - - set textureSize(textureSize) { - this._textureSize = textureSize; - } - - get textureSize() { - return this._textureSize; - } - - set textureUnits(textureUnits) { - this._textureUnits = textureUnits; - } - - get textureUnits() { - return this._textureUnits; - } - - set textureType(textureType) { - this._textureType = textureType; - } - - get textureType() { - return this._textureType; - } - - set bitsAllocated(bitsAllocated) { - this._bitsAllocated = bitsAllocated; - } - - get bitsAllocated() { - return this._bitsAllocated; - } - - set rawData(rawData) { - this._rawData = rawData; - } - - get rawData() { - return this._rawData; - } - - get windowWidth() { - return this._windowWidth; - } - - set windowWidth(windowWidth) { - this._windowWidth = windowWidth; - } - - get windowCenter() { - return this._windowCenter; - } - - set windowCenter(windowCenter) { - this._windowCenter = windowCenter; - } - - get rescaleSlope() { - return this._rescaleSlope; - } - - set rescaleSlope(rescaleSlope) { - this._rescaleSlope = rescaleSlope; - } - - get rescaleIntercept() { - return this._rescaleIntercept; - } - - set rescaleIntercept(rescaleIntercept) { - this._rescaleIntercept = rescaleIntercept; - } - - get xCosine() { - return this._xCosine; - } - - set xCosine(xCosine) { - this._xCosine = xCosine; - } - - get yCosine() { - return this._yCosine; - } - - set yCosine(yCosine) { - this._yCosine = yCosine; - } - - get zCosine() { - return this._zCosine; - } - - set zCosine(zCosine) { - this._zCosine = zCosine; - } - - get minMax() { - return this._minMax; - } - - set minMax(minMax) { - this._minMax = minMax; - } - - get stackID() { - return this._stackID; - } - - set stackID(stackID) { - this._stackID = stackID; - } - - get pixelType() { - return this._pixelType; - } - - set pixelType(pixelType) { - this._pixelType = pixelType; - } - - get pixelRepresentation() { - return this._pixelRepresentation; - } - - set pixelRepresentation(pixelRepresentation) { - this._pixelRepresentation = pixelRepresentation; - } - - set invert(invert) { - this._invert = invert; - } - - get invert() { - return this._invert; - } - - set modality(modality) { - this._modality = modality; - } - - get modality() { - return this._modality; - } - - get rightHanded() { - return this._rightHanded; - } - - set rightHanded(rightHanded) { - this._rightHanded = rightHanded; - } - - get spacingBetweenSlices() { - return this._spacingBetweenSlices; - } - - set spacingBetweenSlices(spacingBetweenSlices) { - this._spacingBetweenSlices = spacingBetweenSlices; - } - - set segmentationSegments(segmentationSegments) { - this._segmentationSegments = segmentationSegments; - } - - get segmentationSegments() { - return this._segmentationSegments; - } - - set segmentationType(segmentationType) { - this._segmentationType = segmentationType; - } - - get segmentationType() { - return this._segmentationType; - } - - set segmentationLUT(segmentationLUT) { - this._segmentationLUT = segmentationLUT; - } - - get segmentationLUT() { - return this._segmentationLUT; - } + }; - set segmentationLUTO(segmentationLUTO) { - this._segmentationLUTO = segmentationLUTO; - } + ModelsStack.prototype._sortInstanceNumberArraySort = function _sortInstanceNumberArraySort(a, b) { + return a.instanceNumber - b.instanceNumber; + }; - get segmentationLUTO() { - return this._segmentationLUTO; - } + ModelsStack.prototype._sortSopInstanceUIDArraySort = function _sortSopInstanceUIDArraySort(a, b) { + return a.sopInstanceUID - b.sopInstanceUID; + }; // DEPRECATED FUNCTION @@ -37653,11 +37874,10 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa * * @return {*} */ - static value(stack, coordinate) { - window.console.warn(`models.stack.value is deprecated. - Please use core.utils.value instead.`); + ModelsStack.value = function value(stack, coordinate) { + window.console.warn('models.stack.value is deprecated.\n Please use core.utils.value instead.'); return _core_core_utils__WEBPACK_IMPORTED_MODULE_4__["default"].value(stack, coordinate); - } + }; /** * @deprecated for core.utils.rescaleSlopeIntercept @@ -37670,11 +37890,12 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa * * @return {*} */ - static valueRescaleSlopeIntercept(value, slope, intercept) { - window.console.warn(`models.stack.valueRescaleSlopeIntercept is deprecated. - Please use core.utils.rescaleSlopeIntercept instead.`); + + + ModelsStack.valueRescaleSlopeIntercept = function valueRescaleSlopeIntercept(value, slope, intercept) { + window.console.warn('models.stack.valueRescaleSlopeIntercept is deprecated.\n Please use core.utils.rescaleSlopeIntercept instead.'); return _core_core_utils__WEBPACK_IMPORTED_MODULE_4__["default"].rescaleSlopeIntercept(value, slope, intercept); - } + }; /** * @deprecated for core.utils.worldToData @@ -37686,13 +37907,300 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa * * @return {*} */ - static worldToData(stack, worldCoordinates) { - window.console.warn(`models.stack.worldToData is deprecated. - Please use core.utils.worldToData instead.`); + + + ModelsStack.worldToData = function worldToData(stack, worldCoordinates) { + window.console.warn('models.stack.worldToData is deprecated.\n Please use core.utils.worldToData instead.'); return _core_core_utils__WEBPACK_IMPORTED_MODULE_4__["default"].worldToData(stack._lps2IJK, worldCoordinates); - } -} + }; + + _createClass(ModelsStack, [{ + key: 'numberOfChannels', + set: function set(numberOfChannels) { + this._numberOfChannels = numberOfChannels; + }, + get: function get() { + return this._numberOfChannels; + } + }, { + key: 'frame', + set: function set(frame) { + this._frame = frame; + }, + get: function get() { + return this._frame; + } + }, { + key: 'prepared', + set: function set(prepared) { + this._prepared = prepared; + }, + get: function get() { + return this._prepared; + } + }, { + key: 'packed', + set: function set(packed) { + this._packed = packed; + }, + get: function get() { + return this._packed; + } + }, { + key: 'packedPerPixel', + set: function set(packedPerPixel) { + this._packedPerPixel = packedPerPixel; + }, + get: function get() { + return this._packedPerPixel; + } + }, { + key: 'dimensionsIJK', + set: function set(dimensionsIJK) { + this._dimensionsIJK = dimensionsIJK; + }, + get: function get() { + return this._dimensionsIJK; + } + }, { + key: 'halfDimensionsIJK', + set: function set(halfDimensionsIJK) { + this._halfDimensionsIJK = halfDimensionsIJK; + }, + get: function get() { + return this._halfDimensionsIJK; + } + }, { + key: 'regMatrix', + set: function set(regMatrix) { + this._regMatrix = regMatrix; + }, + get: function get() { + return this._regMatrix; + } + }, { + key: 'ijk2LPS', + set: function set(ijk2LPS) { + this._ijk2LPS = ijk2LPS; + }, + get: function get() { + return this._ijk2LPS; + } + }, { + key: 'lps2IJK', + set: function set(lps2IJK) { + this._lps2IJK = lps2IJK; + }, + get: function get() { + return this._lps2IJK; + } + }, { + key: 'lps2AABB', + set: function set(lps2AABB) { + this._lps2AABB = lps2AABB; + }, + get: function get() { + return this._lps2AABB; + } + }, { + key: 'textureSize', + set: function set(textureSize) { + this._textureSize = textureSize; + }, + get: function get() { + return this._textureSize; + } + }, { + key: 'textureUnits', + set: function set(textureUnits) { + this._textureUnits = textureUnits; + }, + get: function get() { + return this._textureUnits; + } + }, { + key: 'textureType', + set: function set(textureType) { + this._textureType = textureType; + }, + get: function get() { + return this._textureType; + } + }, { + key: 'bitsAllocated', + set: function set(bitsAllocated) { + this._bitsAllocated = bitsAllocated; + }, + get: function get() { + return this._bitsAllocated; + } + }, { + key: 'rawData', + set: function set(rawData) { + this._rawData = rawData; + }, + get: function get() { + return this._rawData; + } + }, { + key: 'windowWidth', + get: function get() { + return this._windowWidth; + }, + set: function set(windowWidth) { + this._windowWidth = windowWidth; + } + }, { + key: 'windowCenter', + get: function get() { + return this._windowCenter; + }, + set: function set(windowCenter) { + this._windowCenter = windowCenter; + } + }, { + key: 'rescaleSlope', + get: function get() { + return this._rescaleSlope; + }, + set: function set(rescaleSlope) { + this._rescaleSlope = rescaleSlope; + } + }, { + key: 'rescaleIntercept', + get: function get() { + return this._rescaleIntercept; + }, + set: function set(rescaleIntercept) { + this._rescaleIntercept = rescaleIntercept; + } + }, { + key: 'xCosine', + get: function get() { + return this._xCosine; + }, + set: function set(xCosine) { + this._xCosine = xCosine; + } + }, { + key: 'yCosine', + get: function get() { + return this._yCosine; + }, + set: function set(yCosine) { + this._yCosine = yCosine; + } + }, { + key: 'zCosine', + get: function get() { + return this._zCosine; + }, + set: function set(zCosine) { + this._zCosine = zCosine; + } + }, { + key: 'minMax', + get: function get() { + return this._minMax; + }, + set: function set(minMax) { + this._minMax = minMax; + } + }, { + key: 'stackID', + get: function get() { + return this._stackID; + }, + set: function set(stackID) { + this._stackID = stackID; + } + }, { + key: 'pixelType', + get: function get() { + return this._pixelType; + }, + set: function set(pixelType) { + this._pixelType = pixelType; + } + }, { + key: 'pixelRepresentation', + get: function get() { + return this._pixelRepresentation; + }, + set: function set(pixelRepresentation) { + this._pixelRepresentation = pixelRepresentation; + } + }, { + key: 'invert', + set: function set(invert) { + this._invert = invert; + }, + get: function get() { + return this._invert; + } + }, { + key: 'modality', + set: function set(modality) { + this._modality = modality; + }, + get: function get() { + return this._modality; + } + }, { + key: 'rightHanded', + get: function get() { + return this._rightHanded; + }, + set: function set(rightHanded) { + this._rightHanded = rightHanded; + } + }, { + key: 'spacingBetweenSlices', + get: function get() { + return this._spacingBetweenSlices; + }, + set: function set(spacingBetweenSlices) { + this._spacingBetweenSlices = spacingBetweenSlices; + } + }, { + key: 'segmentationSegments', + set: function set(segmentationSegments) { + this._segmentationSegments = segmentationSegments; + }, + get: function get() { + return this._segmentationSegments; + } + }, { + key: 'segmentationType', + set: function set(segmentationType) { + this._segmentationType = segmentationType; + }, + get: function get() { + return this._segmentationType; + } + }, { + key: 'segmentationLUT', + set: function set(segmentationLUT) { + this._segmentationLUT = segmentationLUT; + }, + get: function get() { + return this._segmentationLUT; + } + }, { + key: 'segmentationLUTO', + set: function set(segmentationLUTO) { + this._segmentationLUTO = segmentationLUTO; + }, + get: function get() { + return this._segmentationLUTO; + } + }]); + + return ModelsStack; +}(_models_models_base__WEBPACK_IMPORTED_MODULE_5__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (ModelsStack); /***/ }), @@ -37705,13 +38213,18 @@ class ModelsStack extends _models_models_base__WEBPACK_IMPORTED_MODULE_5__["defa "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ModelsVoxel; }); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * @module models/voxel */ -class ModelsVoxel { - constructor() { +var ModelsVoxel = function () { + function ModelsVoxel() { + _classCallCheck(this, ModelsVoxel); + this._id = -1; this._worldCoordinates = null; this._dataCoordinates = null; @@ -37719,46 +38232,52 @@ class ModelsVoxel { this._value = null; } - set worldCoordinates(worldCoordinates) { - this._worldCoordinates = worldCoordinates; - } - - get worldCoordinates() { - return this._worldCoordinates; - } - - set dataCoordinates(dataCoordinates) { - this._dataCoordinates = dataCoordinates; - } - - get dataCoordinates() { - return this._dataCoordinates; - } - - set screenCoordinates(screenCoordinates) { - this._screenCoordinates = screenCoordinates; - } - - get screenCoordinates() { - return this._screenCoordinates; - } - - set value(value) { - this._value = value; - } - - get value() { - return this._value; - } + _createClass(ModelsVoxel, [{ + key: "worldCoordinates", + set: function set(worldCoordinates) { + this._worldCoordinates = worldCoordinates; + }, + get: function get() { + return this._worldCoordinates; + } + }, { + key: "dataCoordinates", + set: function set(dataCoordinates) { + this._dataCoordinates = dataCoordinates; + }, + get: function get() { + return this._dataCoordinates; + } + }, { + key: "screenCoordinates", + set: function set(screenCoordinates) { + this._screenCoordinates = screenCoordinates; + }, + get: function get() { + return this._screenCoordinates; + } + }, { + key: "value", + set: function set(value) { + this._value = value; + }, + get: function get() { + return this._value; + } + }, { + key: "id", + set: function set(id) { + this._id = id; + }, + get: function get() { + return this._id; + } + }]); - set id(id) { - this._id = id; - } + return ModelsVoxel; +}(); - get id() { - return this._id; - } -} +/* harmony default export */ __webpack_exports__["default"] = (ModelsVoxel); /***/ }), @@ -37771,12 +38290,17 @@ class ModelsVoxel { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ParsersDicom; }); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); /* harmony import */ var _parsers_volume__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parsers.volume */ "./src/parsers/parsers.volume.js"); /* harmony import */ var OpenJPEG_js_dist_openJPEG_DynamicMemory_browser_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! OpenJPEG.js/dist/openJPEG-DynamicMemory-browser.js */ "./node_modules/OpenJPEG.js/dist/openJPEG-DynamicMemory-browser.js"); /* harmony import */ var OpenJPEG_js_dist_openJPEG_DynamicMemory_browser_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(OpenJPEG_js_dist_openJPEG_DynamicMemory_browser_js__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _decoders_decoders_rle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../decoders/decoders.rle */ "./src/decoders/decoders.rle.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ @@ -37785,11 +38309,11 @@ __webpack_require__.r(__webpack_exports__); -let DicomParser = __webpack_require__(/*! dicom-parser */ "./node_modules/dicom-parser/dist/dicomParser.min.js"); -let Jpeg = __webpack_require__(/*! jpeg-lossless-decoder-js */ "./node_modules/jpeg-lossless-decoder-js/src/main.js"); -let JpegBaseline = __webpack_require__(/*! ../../external/scripts/jpeg */ "./external/scripts/jpeg.js"); -let Jpx = __webpack_require__(/*! ../../external/scripts/jpx */ "./external/scripts/jpx.js"); -let openJPEG; // for one time initialization +var DicomParser = __webpack_require__(/*! dicom-parser */ "./node_modules/dicom-parser/dist/dicomParser.min.js"); +var Jpeg = __webpack_require__(/*! jpeg-lossless-decoder-js */ "./node_modules/jpeg-lossless-decoder-js/src/main.js"); +var JpegBaseline = __webpack_require__(/*! ../../external/scripts/jpeg */ "./external/scripts/jpeg.js"); +var Jpx = __webpack_require__(/*! ../../external/scripts/jpx */ "./external/scripts/jpx.js"); +var openJPEG = void 0; // for one time initialization /** * Dicom parser is a combination of utilities to get a VJS image from dicom files. @@ -37806,31 +38330,38 @@ let openJPEG; // for one time initialization * @param arrayBuffer {arraybuffer} - List of files to be parsed. It is urls from which * VJS.parsers.dicom can pull the data from. */ -class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default"] { - constructor(data, id) { + +var ParsersDicom = function (_ParsersVolume) { + _inherits(ParsersDicom, _ParsersVolume); + + function ParsersDicom(data, id) { + _classCallCheck(this, ParsersDicom); + console.log('parse image', data); - super(); - this._id = id; + var _this = _possibleConstructorReturn(this, _ParsersVolume.call(this)); + + _this._id = id; - this._arrayBuffer = data.buffer; + _this._arrayBuffer = data.buffer; - let byteArray = new Uint8Array(this._arrayBuffer); + var byteArray = new Uint8Array(_this._arrayBuffer); // catch error // throw error if any! - this._dataSet = null; + _this._dataSet = null; try { - this._dataSet = DicomParser.parseDicom(byteArray); + _this._dataSet = DicomParser.parseDicom(byteArray); // const parser = new Jpx(); // console.log('jpx parser', parser); // this._dataSet = parser.parse(byteArray); } catch (e) { console.log(e); - const error = new Error('parsers.dicom could not parse the file'); + var error = new Error('parsers.dicom could not parse the file'); throw error; } + return _this; } /** @@ -37838,36 +38369,44 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default * * @return {String} */ - seriesInstanceUID() { + + + ParsersDicom.prototype.seriesInstanceUID = function seriesInstanceUID() { return this._dataSet.string('x0020000e'); - } + }; /** * Study instance UID (0020,000d) * * @return {String} */ - studyInstanceUID() { + + + ParsersDicom.prototype.studyInstanceUID = function studyInstanceUID() { return this._dataSet.string('x0020000d'); - } + }; /** * Get modality (0008,0060) * * @return {String} */ - modality() { + + + ParsersDicom.prototype.modality = function modality() { return this._dataSet.string('x00080060'); - } + }; /** * Segmentation type (0062,0001) * * @return {String} */ - segmentationType() { + + + ParsersDicom.prototype.segmentationType = function segmentationType() { return this._dataSet.string('x00620001'); - } + }; /** * Segmentation segments @@ -37880,34 +38419,36 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default * * @return {*} */ - segmentationSegments() { - let segmentationSegments = []; - let segmentSequence = this._dataSet.elements.x00620002; + + + ParsersDicom.prototype.segmentationSegments = function segmentationSegments() { + var segmentationSegments = []; + var segmentSequence = this._dataSet.elements.x00620002; if (!segmentSequence) { return segmentationSegments; } - for (let i = 0; i < segmentSequence.items.length; i++) { - let recommendedDisplayCIELab = this._recommendedDisplayCIELab(segmentSequence.items[i]); - let segmentationCode = this._segmentationCode(segmentSequence.items[i]); - let segmentNumber = segmentSequence.items[i].dataSet.uint16('x00620004'); - let segmentLabel = segmentSequence.items[i].dataSet.string('x00620005'); - let segmentAlgorithmType = segmentSequence.items[i].dataSet.string('x00620008'); + for (var i = 0; i < segmentSequence.items.length; i++) { + var recommendedDisplayCIELab = this._recommendedDisplayCIELab(segmentSequence.items[i]); + var segmentationCode = this._segmentationCode(segmentSequence.items[i]); + var segmentNumber = segmentSequence.items[i].dataSet.uint16('x00620004'); + var segmentLabel = segmentSequence.items[i].dataSet.string('x00620005'); + var segmentAlgorithmType = segmentSequence.items[i].dataSet.string('x00620008'); segmentationSegments.push({ - recommendedDisplayCIELab, + recommendedDisplayCIELab: recommendedDisplayCIELab, segmentationCodeDesignator: segmentationCode['segmentationCodeDesignator'], segmentationCodeValue: segmentationCode['segmentationCodeValue'], segmentationCodeMeaning: segmentationCode['segmentationCodeMeaning'], - segmentNumber, - segmentLabel, - segmentAlgorithmType + segmentNumber: segmentNumber, + segmentLabel: segmentLabel, + segmentAlgorithmType: segmentAlgorithmType }); } return segmentationSegments; - } + }; /** * Segmentation code @@ -37919,11 +38460,13 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default * * @return {*} */ - _segmentationCode(segment) { - let segmentationCodeDesignator = 'unknown'; - let segmentationCodeValue = 'unknown'; - let segmentationCodeMeaning = 'unknown'; - let element = segment.dataSet.elements.x00082218; + + + ParsersDicom.prototype._segmentationCode = function _segmentationCode(segment) { + var segmentationCodeDesignator = 'unknown'; + var segmentationCodeValue = 'unknown'; + var segmentationCodeMeaning = 'unknown'; + var element = segment.dataSet.elements.x00082218; if (element && element.items && element.items.length > 0) { segmentationCodeDesignator = element.items[0].dataSet.string('x00080102'); @@ -37932,11 +38475,11 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return { - segmentationCodeDesignator, - segmentationCodeValue, - segmentationCodeMeaning + segmentationCodeDesignator: segmentationCodeDesignator, + segmentationCodeValue: segmentationCodeValue, + segmentationCodeMeaning: segmentationCodeMeaning }; - } + }; /** * Recommended display CIELab @@ -37945,34 +38488,38 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default * * @return {*} */ - _recommendedDisplayCIELab(segment) { + + + ParsersDicom.prototype._recommendedDisplayCIELab = function _recommendedDisplayCIELab(segment) { if (!segment.dataSet.elements.x0062000d) { return null; } - let offset = segment.dataSet.elements.x0062000d.dataOffset; - let length = segment.dataSet.elements.x0062000d.length; - let byteArray = segment.dataSet.byteArray.slice(offset, offset + length); + var offset = segment.dataSet.elements.x0062000d.dataOffset; + var length = segment.dataSet.elements.x0062000d.length; + var byteArray = segment.dataSet.byteArray.slice(offset, offset + length); // https://www.dabsoft.ch/dicom/3/C.10.7.1.1/ - let CIELabScaled = new Uint16Array(length / 2); - for (let i = 0; i < length / 2; i++) { + var CIELabScaled = new Uint16Array(length / 2); + for (var i = 0; i < length / 2; i++) { CIELabScaled[i] = (byteArray[2 * i + 1] << 8) + byteArray[2 * i]; } - let CIELabNormalized = [CIELabScaled[0] / 65535 * 100, CIELabScaled[1] / 65535 * 255 - 128, CIELabScaled[2] / 65535 * 255 - 128]; + var CIELabNormalized = [CIELabScaled[0] / 65535 * 100, CIELabScaled[1] / 65535 * 255 - 128, CIELabScaled[2] / 65535 * 255 - 128]; return CIELabNormalized; - } + }; /** * Raw dataset * * @return {*} */ - rawHeader() { + + + ParsersDicom.prototype.rawHeader = function rawHeader() { return this._dataSet; - } + }; /** * SOP Instance UID @@ -37981,126 +38528,152 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default * * @return {*} */ - sopInstanceUID(frameIndex = 0) { - let sopInstanceUID = this._findStringEverywhere('x2005140f', 'x00080018', frameIndex); + + + ParsersDicom.prototype.sopInstanceUID = function sopInstanceUID() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var sopInstanceUID = this._findStringEverywhere('x2005140f', 'x00080018', frameIndex); return sopInstanceUID; - } + }; /** * Transfer syntax UID * * @return {*} */ - transferSyntaxUID() { + + + ParsersDicom.prototype.transferSyntaxUID = function transferSyntaxUID() { return this._dataSet.string('x00020010'); - } + }; /** * Study date * * @return {*} */ - studyDate() { + + + ParsersDicom.prototype.studyDate = function studyDate() { return this._dataSet.string('x00080020'); - } + }; /** * Study description * * @return {*} */ - studyDescription() { + + + ParsersDicom.prototype.studyDescription = function studyDescription() { return this._dataSet.string('x00081030'); - } + }; /** * Series date * * @return {*} */ - seriesDate() { + + + ParsersDicom.prototype.seriesDate = function seriesDate() { return this._dataSet.string('x00080021'); - } + }; /** * Series description * * @return {*} */ - seriesDescription() { + + + ParsersDicom.prototype.seriesDescription = function seriesDescription() { return this._dataSet.string('x0008103e'); - } + }; /** * Patient name * * @return {*} */ - patientName() { + + + ParsersDicom.prototype.patientName = function patientName() { return this._dataSet.string('x00100010'); - } + }; /** * Patient ID * * @return {*} */ - patientID() { + + + ParsersDicom.prototype.patientID = function patientID() { return this._dataSet.string('x00100020'); - } + }; /** * Patient birthdate * * @return {*} */ - patientBirthdate() { + + + ParsersDicom.prototype.patientBirthdate = function patientBirthdate() { return this._dataSet.string('x00100030'); - } + }; /** * Patient sex * * @return {*} */ - patientSex() { + + + ParsersDicom.prototype.patientSex = function patientSex() { return this._dataSet.string('x00100040'); - } + }; /** * Patient age * * @return {*} */ - patientAge() { + + + ParsersDicom.prototype.patientAge = function patientAge() { return this._dataSet.string('x00101010'); - } + }; /** * Photometric interpretation * * @return {*} */ - photometricInterpretation() { + + + ParsersDicom.prototype.photometricInterpretation = function photometricInterpretation() { return this._dataSet.string('x00280004'); - } + }; - planarConfiguration() { - let planarConfiguration = this._dataSet.uint16('x00280006'); + ParsersDicom.prototype.planarConfiguration = function planarConfiguration() { + var planarConfiguration = this._dataSet.uint16('x00280006'); if (typeof planarConfiguration === 'undefined') { planarConfiguration = null; } return planarConfiguration; - } + }; - samplesPerPixel() { + ParsersDicom.prototype.samplesPerPixel = function samplesPerPixel() { return this._dataSet.uint16('x00280002'); - } + }; - numberOfFrames() { - let numberOfFrames = this._dataSet.intString('x00280008'); + ParsersDicom.prototype.numberOfFrames = function numberOfFrames() { + var numberOfFrames = this._dataSet.intString('x00280008'); // need something smarter! if (typeof numberOfFrames === 'undefined') { @@ -38108,11 +38681,11 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return numberOfFrames; - } + }; - numberOfChannels() { - let numberOfChannels = 1; - let photometricInterpretation = this.photometricInterpretation(); + ParsersDicom.prototype.numberOfChannels = function numberOfChannels() { + var numberOfChannels = 1; + var photometricInterpretation = this.photometricInterpretation(); if (!(photometricInterpretation !== 'RGB' && photometricInterpretation !== 'PALETTE COLOR' && photometricInterpretation !== 'YBR_FULL' && photometricInterpretation !== 'YBR_FULL_422' && photometricInterpretation !== 'YBR_PARTIAL_422' && photometricInterpretation !== 'YBR_PARTIAL_420' && photometricInterpretation !== 'YBR_RCT')) { numberOfChannels = 3; @@ -38120,17 +38693,19 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default // make sure we return a number! (not a string!) return numberOfChannels; - } + }; - invert() { - let photometricInterpretation = this.photometricInterpretation(); + ParsersDicom.prototype.invert = function invert() { + var photometricInterpretation = this.photometricInterpretation(); return photometricInterpretation === 'MONOCHROME1' ? true : false; - } + }; + + ParsersDicom.prototype.imageOrientation = function imageOrientation() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - imageOrientation(frameIndex = 0) { // expect frame index to start at 0! - let imageOrientation = this._findStringEverywhere('x00209116', 'x00200037', frameIndex); + var imageOrientation = this._findStringEverywhere('x00209116', 'x00200037', frameIndex); // format image orientation ('1\0\0\0\1\0') to array containing 6 numbers if (imageOrientation) { @@ -38140,21 +38715,23 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return imageOrientation; - } + }; - referencedSegmentNumber(frameIndex = 0) { - let referencedSegmentNumber = -1; - let referencedSegmentNumberElement = this._findInGroupSequence('x52009230', 'x0062000a', frameIndex); + ParsersDicom.prototype.referencedSegmentNumber = function referencedSegmentNumber() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var referencedSegmentNumber = -1; + var referencedSegmentNumberElement = this._findInGroupSequence('x52009230', 'x0062000a', frameIndex); if (referencedSegmentNumberElement !== null) { referencedSegmentNumber = referencedSegmentNumberElement.uint16('x0062000b'); } return referencedSegmentNumber; - } + }; - pixelAspectRatio() { - let pixelAspectRatio = [this._dataSet.intString('x00280034', 0), this._dataSet.intString('x00280034', 1)]; + ParsersDicom.prototype.pixelAspectRatio = function pixelAspectRatio() { + var pixelAspectRatio = [this._dataSet.intString('x00280034', 0), this._dataSet.intString('x00280034', 1)]; // need something smarter! if (typeof pixelAspectRatio[0] === 'undefined') { @@ -38163,10 +38740,12 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default // make sure we return a number! (not a string!) return pixelAspectRatio; - } + }; - imagePosition(frameIndex = 0) { - let imagePosition = this._findStringEverywhere('x00209113', 'x00200032', frameIndex); + ParsersDicom.prototype.imagePosition = function imagePosition() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var imagePosition = this._findStringEverywhere('x00209113', 'x00200032', frameIndex); // format image orientation ('1\0\0\0\1\0') to array containing 6 numbers if (imagePosition) { @@ -38175,17 +38754,19 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return imagePosition; - } + }; - instanceNumber(frameIndex = 0) { - let instanceNumber = null; + ParsersDicom.prototype.instanceNumber = function instanceNumber() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var instanceNumber = null; // first look for frame! // per frame functionnal group sequence - let perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230; + var perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230; if (typeof perFrameFunctionnalGroupSequence !== 'undefined') { if (perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x2005140f) { - let planeOrientationSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x2005140f.items[0].dataSet; + var planeOrientationSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x2005140f.items[0].dataSet; instanceNumber = planeOrientationSequence.intString('x00200013'); } else { instanceNumber = this._dataSet.intString('x00200013'); @@ -38205,11 +38786,13 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return instanceNumber; - } + }; + + ParsersDicom.prototype.pixelSpacing = function pixelSpacing() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - pixelSpacing(frameIndex = 0) { // expect frame index to start at 0! - let pixelSpacing = this._findStringEverywhere('x00289110', 'x00280030', frameIndex); + var pixelSpacing = this._findStringEverywhere('x00289110', 'x00280030', frameIndex); if (pixelSpacing === null) { pixelSpacing = this._dataSet.string('x00181164'); @@ -38220,9 +38803,9 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } if (pixelSpacing) { - const splittedSpacing = pixelSpacing.split('\\'); + var splittedSpacing = pixelSpacing.split('\\'); if (splittedSpacing.length !== 2) { - console.error(`DICOM spacing format is not supported (could not split string on "\\"): ${pixelSpacing}`); + console.error('DICOM spacing format is not supported (could not split string on "\\"): ' + pixelSpacing); pixelSpacing = null; } else { pixelSpacing = splittedSpacing.map(_core_core_utils__WEBPACK_IMPORTED_MODULE_0__["default"].stringToNumber); @@ -38230,18 +38813,22 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return pixelSpacing; - } + }; + + ParsersDicom.prototype.ultrasoundRegions = function ultrasoundRegions() { + var _this2 = this; + + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - ultrasoundRegions(frameIndex = 0) { - const sequence = this._dataSet.elements['x00186011']; + var sequence = this._dataSet.elements['x00186011']; if (!sequence || !sequence.items) { return []; } - const ultrasoundRegions = []; + var ultrasoundRegions = []; - sequence.items.forEach(item => { + sequence.items.forEach(function (item) { ultrasoundRegions.push({ x0: item.dataSet.uint32('x00186018'), y0: item.dataSet.uint32('x0018601a'), @@ -38249,20 +38836,22 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default y1: item.dataSet.uint32('x0018601e'), axisX: item.dataSet.int32('x00186020') || null, // optional axisY: item.dataSet.int32('x00186022') || null, // optional - unitsX: this._getUnitsName(item.dataSet.uint16('x00186024')), - unitsY: this._getUnitsName(item.dataSet.uint16('x00186026')), + unitsX: _this2._getUnitsName(item.dataSet.uint16('x00186024')), + unitsY: _this2._getUnitsName(item.dataSet.uint16('x00186026')), deltaX: item.dataSet.double('x0018602c'), deltaY: item.dataSet.double('x0018602e') }); }); return ultrasoundRegions; - } + }; + + ParsersDicom.prototype.frameTime = function frameTime() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - frameTime(frameIndex = 0) { - let frameIncrementPointer = this._dataSet.uint16('x00280009', 1); - let frameRate = this._dataSet.intString('x00082144'); - let frameTime; + var frameIncrementPointer = this._dataSet.uint16('x00280009', 1); + var frameRate = this._dataSet.intString('x00082144'); + var frameTime = void 0; if (typeof frameIncrementPointer === 'number') { frameIncrementPointer = frameIncrementPointer.toString(16); @@ -38278,10 +38867,12 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return frameTime; - } + }; + + ParsersDicom.prototype.rows = function rows() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - rows(frameIndex = 0) { - let rows = this._dataSet.uint16('x00280010'); + var rows = this._dataSet.uint16('x00280010'); if (typeof rows === 'undefined') { rows = null; @@ -38289,10 +38880,12 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return rows; - } + }; + + ParsersDicom.prototype.columns = function columns() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - columns(frameIndex = 0) { - let columns = this._dataSet.uint16('x00280011'); + var columns = this._dataSet.uint16('x00280011'); if (typeof columns === 'undefined') { columns = null; @@ -38300,89 +38893,113 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return columns; - } + }; + + ParsersDicom.prototype.pixelType = function pixelType() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - pixelType(frameIndex = 0) { // 0 integer, 1 float // dicom only support integers return 0; - } + }; - pixelRepresentation(frameIndex = 0) { - let pixelRepresentation = this._dataSet.uint16('x00280103'); + ParsersDicom.prototype.pixelRepresentation = function pixelRepresentation() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var pixelRepresentation = this._dataSet.uint16('x00280103'); return pixelRepresentation; - } + }; - pixelPaddingValue(frameIndex = 0) { - let padding = this._dataSet.int16('x00280120'); + ParsersDicom.prototype.pixelPaddingValue = function pixelPaddingValue() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var padding = this._dataSet.int16('x00280120'); if (typeof padding === 'undefined') { padding = null; } return padding; - } + }; + + ParsersDicom.prototype.bitsAllocated = function bitsAllocated() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - bitsAllocated(frameIndex = 0) { // expect frame index to start at 0! - let bitsAllocated = this._dataSet.uint16('x00280100'); + var bitsAllocated = this._dataSet.uint16('x00280100'); return bitsAllocated; - } + }; + + ParsersDicom.prototype.highBit = function highBit() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - highBit(frameIndex = 0) { // expect frame index to start at 0! - let highBit = this._dataSet.uint16('x00280102'); + var highBit = this._dataSet.uint16('x00280102'); return highBit; - } + }; + + ParsersDicom.prototype.rescaleIntercept = function rescaleIntercept() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - rescaleIntercept(frameIndex = 0) { return this._findFloatStringInFrameGroupSequence('x00289145', 'x00281052', frameIndex); - } + }; + + ParsersDicom.prototype.rescaleSlope = function rescaleSlope() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - rescaleSlope(frameIndex = 0) { return this._findFloatStringInFrameGroupSequence('x00289145', 'x00281053', frameIndex); - } + }; + + ParsersDicom.prototype.windowCenter = function windowCenter() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - windowCenter(frameIndex = 0) { return this._findFloatStringInFrameGroupSequence('x00289132', 'x00281050', frameIndex); - } + }; + + ParsersDicom.prototype.windowWidth = function windowWidth() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - windowWidth(frameIndex = 0) { return this._findFloatStringInFrameGroupSequence('x00289132', 'x00281051', frameIndex); - } + }; + + ParsersDicom.prototype.sliceThickness = function sliceThickness() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - sliceThickness(frameIndex = 0) { return this._findFloatStringInFrameGroupSequence('x00289110', 'x00180050', frameIndex); - } + }; + + ParsersDicom.prototype.spacingBetweenSlices = function spacingBetweenSlices() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - spacingBetweenSlices(frameIndex = 0) { - let spacing = this._dataSet.floatString('x00180088'); + var spacing = this._dataSet.floatString('x00180088'); if (typeof spacing === 'undefined') { spacing = null; } return spacing; - } + }; - dimensionIndexValues(frameIndex = 0) { - let dimensionIndexValues = null; + ParsersDicom.prototype.dimensionIndexValues = function dimensionIndexValues() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var dimensionIndexValues = null; // try to get it from enhanced MR images // per-frame functionnal group sequence - let perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230; + var perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230; if (typeof perFrameFunctionnalGroupSequence !== 'undefined') { - let frameContentSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x00209111; + var frameContentSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x00209111; if (frameContentSequence !== undefined && frameContentSequence !== null) { frameContentSequence = frameContentSequence.items[0].dataSet; - let dimensionIndexValuesElt = frameContentSequence.elements.x00209157; + var dimensionIndexValuesElt = frameContentSequence.elements.x00209157; if (dimensionIndexValuesElt !== undefined && dimensionIndexValuesElt !== null) { // /4 because UL - let nbValues = dimensionIndexValuesElt.length / 4; + var nbValues = dimensionIndexValuesElt.length / 4; dimensionIndexValues = []; - for (let i = 0; i < nbValues; i++) { + for (var i = 0; i < nbValues; i++) { dimensionIndexValues.push(frameContentSequence.uint32('x00209157', i)); } } @@ -38390,66 +39007,72 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return dimensionIndexValues; - } + }; - inStackPositionNumber(frameIndex = 0) { - let inStackPositionNumber = null; + ParsersDicom.prototype.inStackPositionNumber = function inStackPositionNumber() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var inStackPositionNumber = null; // try to get it from enhanced MR images // per-frame functionnal group sequence - let perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230; + var perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230; if (typeof perFrameFunctionnalGroupSequence !== 'undefined') { // NOT A PHILIPS TRICK! - let philipsPrivateSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x00209111.items[0].dataSet; + var philipsPrivateSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x00209111.items[0].dataSet; inStackPositionNumber = philipsPrivateSequence.uint32('x00209057'); } else { inStackPositionNumber = null; } return inStackPositionNumber; - } + }; - stackID(frameIndex = 0) { - let stackID = null; + ParsersDicom.prototype.stackID = function stackID() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var stackID = null; // try to get it from enhanced MR images // per-frame functionnal group sequence - let perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230; + var perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230; if (typeof perFrameFunctionnalGroupSequence !== 'undefined') { // NOT A PHILIPS TRICK! - let philipsPrivateSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x00209111.items[0].dataSet; + var philipsPrivateSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x00209111.items[0].dataSet; stackID = philipsPrivateSequence.intString('x00209056'); } else { stackID = null; } return stackID; - } + }; + + ParsersDicom.prototype.extractPixelData = function extractPixelData() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - extractPixelData(frameIndex = 0) { // decompress - let decompressedData = this._decodePixelData(frameIndex); + var decompressedData = this._decodePixelData(frameIndex); - let numberOfChannels = this.numberOfChannels(); + var numberOfChannels = this.numberOfChannels(); if (numberOfChannels > 1) { return this._convertColorSpace(decompressedData); } else { return decompressedData; } - } + }; // // private methods // - _findInGroupSequence(sequence, subsequence, index) { - let functionalGroupSequence = this._dataSet.elements[sequence]; + ParsersDicom.prototype._findInGroupSequence = function _findInGroupSequence(sequence, subsequence, index) { + var functionalGroupSequence = this._dataSet.elements[sequence]; if (typeof functionalGroupSequence !== 'undefined') { - let inSequence = functionalGroupSequence.items[index].dataSet.elements[subsequence]; + var inSequence = functionalGroupSequence.items[index].dataSet.elements[subsequence]; if (typeof inSequence !== 'undefined') { return inSequence.items[0].dataSet; @@ -38457,28 +39080,28 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return null; - } + }; - _findStringInGroupSequence(sequence, subsequence, tag, index) { + ParsersDicom.prototype._findStringInGroupSequence = function _findStringInGroupSequence(sequence, subsequence, tag, index) { // index = 0 if shared!!! - let dataSet = this._findInGroupSequence(sequence, subsequence, index); + var dataSet = this._findInGroupSequence(sequence, subsequence, index); if (dataSet !== null) { return dataSet.string(tag); } return null; - } + }; - _findStringInFrameGroupSequence(subsequence, tag, index) { + ParsersDicom.prototype._findStringInFrameGroupSequence = function _findStringInFrameGroupSequence(subsequence, tag, index) { return this._findStringInGroupSequence('x52009229', subsequence, tag, 0) || this._findStringInGroupSequence('x52009230', subsequence, tag, index); - } + }; - _findStringEverywhere(subsequence, tag, index) { - let targetString = this._findStringInFrameGroupSequence(subsequence, tag, index); + ParsersDicom.prototype._findStringEverywhere = function _findStringEverywhere(subsequence, tag, index) { + var targetString = this._findStringInFrameGroupSequence(subsequence, tag, index); // PET MODULE if (targetString === null) { - const petModule = 'x00540022'; + var petModule = 'x00540022'; targetString = this._findStringInSequence(petModule, tag); } @@ -38491,12 +39114,12 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return targetString; - } + }; - _findStringInSequence(sequenceTag, tag, index) { - const sequence = this._dataSet.elements[sequenceTag]; + ParsersDicom.prototype._findStringInSequence = function _findStringInSequence(sequenceTag, tag, index) { + var sequence = this._dataSet.elements[sequenceTag]; - let targetString; + var targetString = void 0; if (sequence) { targetString = sequence.items[0].dataSet.string(tag); } @@ -38506,10 +39129,10 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return targetString; - } + }; - _findFloatStringInGroupSequence(sequence, subsequence, tag, index) { - let dataInGroupSequence = this._dataSet.floatString(tag); + ParsersDicom.prototype._findFloatStringInGroupSequence = function _findFloatStringInGroupSequence(sequence, subsequence, tag, index) { + var dataInGroupSequence = this._dataSet.floatString(tag); // try to get it from enhanced MR images // per-frame functionnal group @@ -38522,15 +39145,17 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return dataInGroupSequence; - } + }; - _findFloatStringInFrameGroupSequence(subsequence, tag, index) { + ParsersDicom.prototype._findFloatStringInFrameGroupSequence = function _findFloatStringInFrameGroupSequence(subsequence, tag, index) { return this._findFloatStringInGroupSequence('x52009229', subsequence, tag, 0) || this._findFloatStringInGroupSequence('x52009230', subsequence, tag, index); - } + }; + + ParsersDicom.prototype._decodePixelData = function _decodePixelData() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - _decodePixelData(frameIndex = 0) { // if compressed..? - let transferSyntaxUID = this.transferSyntaxUID(); + var transferSyntaxUID = this.transferSyntaxUID(); console.log('transfer syntax uid', transferSyntaxUID); // find compression scheme if (transferSyntaxUID === '1.2.840.10008.1.2.4.90' || @@ -38559,25 +39184,27 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default return this._decodeUncompressed(frameIndex); } else if (transferSyntaxUID === '1.2.840.10008.1.2.2') { // Explicit VR Big Endian - let frame = this._decodeUncompressed(frameIndex); + var frame = this._decodeUncompressed(frameIndex); // and sawp it! return this._swapFrame(frame); } else { throw { - error: `no decoder for transfer syntax ${transferSyntaxUID}` + error: 'no decoder for transfer syntax ' + transferSyntaxUID }; } - } + }; // github.com/chafey/cornerstoneWADOImageLoader/blob/master/src/imageLoader/wadouri/getEncapsulatedImageFrame.js - framesAreFragmented() { - const numberOfFrames = this._dataSet.intString('x00280008'); - const pixelDataElement = this._dataSet.elements.x7fe00010; + + + ParsersDicom.prototype.framesAreFragmented = function framesAreFragmented() { + var numberOfFrames = this._dataSet.intString('x00280008'); + var pixelDataElement = this._dataSet.elements.x7fe00010; return numberOfFrames !== pixelDataElement.fragments.length; - } + }; - getEncapsulatedImageFrame(frameIndex) { + ParsersDicom.prototype.getEncapsulatedImageFrame = function getEncapsulatedImageFrame(frameIndex) { if (this._dataSet.elements.x7fe00010 && this._dataSet.elements.x7fe00010.basicOffsetTable.length) { // Basic Offset Table is not empty return DicomParser.readEncapsulatedImageFrame(this._dataSet, this._dataSet.elements.x7fe00010, frameIndex); @@ -38589,11 +39216,15 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return DicomParser.readEncapsulatedPixelDataFromFragments(this._dataSet, this._dataSet.elements.x7fe00010, frameIndex); - } + }; // used if OpenJPEG library isn't loaded (OHIF/image-JPEG2000 isn't supported and can't parse some images) - _decodeJpx(frameIndex = 0) { - const jpxImage = new Jpx(); + + + ParsersDicom.prototype._decodeJpx = function _decodeJpx() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var jpxImage = new Jpx(); // https://github.com/OHIF/image-JPEG2000/issues/6 // It currently returns either Int16 or Uint16 based on whether the codestream is signed or not. jpxImage.parse(this.getEncapsulatedImageFrame(frameIndex)); @@ -38607,24 +39238,26 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return jpxImage.tiles[0].items; - } + }; + + ParsersDicom.prototype._decodeOpenJPEG = function _decodeOpenJPEG() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - _decodeOpenJPEG(frameIndex = 0) { - const encodedPixelData = this.getEncapsulatedImageFrame(frameIndex); - const bytesPerPixel = this.bitsAllocated(frameIndex) <= 8 ? 1 : 2; - const signed = this.pixelRepresentation(frameIndex) === 1; - const dataPtr = openJPEG._malloc(encodedPixelData.length); + var encodedPixelData = this.getEncapsulatedImageFrame(frameIndex); + var bytesPerPixel = this.bitsAllocated(frameIndex) <= 8 ? 1 : 2; + var signed = this.pixelRepresentation(frameIndex) === 1; + var dataPtr = openJPEG._malloc(encodedPixelData.length); openJPEG.writeArrayToMemory(encodedPixelData, dataPtr); // create param outpout - const imagePtrPtr = openJPEG._malloc(4); - const imageSizePtr = openJPEG._malloc(4); - const imageSizeXPtr = openJPEG._malloc(4); - const imageSizeYPtr = openJPEG._malloc(4); - const imageSizeCompPtr = openJPEG._malloc(4); - const ret = openJPEG.ccall('jp2_decode', 'number', ['number', 'number', 'number', 'number', 'number', 'number', 'number'], [dataPtr, encodedPixelData.length, imagePtrPtr, imageSizePtr, imageSizeXPtr, imageSizeYPtr, imageSizeCompPtr]); - const imagePtr = openJPEG.getValue(imagePtrPtr, '*'); + var imagePtrPtr = openJPEG._malloc(4); + var imageSizePtr = openJPEG._malloc(4); + var imageSizeXPtr = openJPEG._malloc(4); + var imageSizeYPtr = openJPEG._malloc(4); + var imageSizeCompPtr = openJPEG._malloc(4); + var ret = openJPEG.ccall('jp2_decode', 'number', ['number', 'number', 'number', 'number', 'number', 'number', 'number'], [dataPtr, encodedPixelData.length, imagePtrPtr, imageSizePtr, imageSizeXPtr, imageSizeYPtr, imageSizeCompPtr]); + var imagePtr = openJPEG.getValue(imagePtrPtr, '*'); if (ret !== 0) { console.log('[opj_decode] decoding failed!'); @@ -38639,16 +39272,16 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } // Copy the data from the EMSCRIPTEN heap into the correct type array - const length = openJPEG.getValue(imageSizeXPtr, 'i32') * openJPEG.getValue(imageSizeYPtr, 'i32') * openJPEG.getValue(imageSizeCompPtr, 'i32'); - const src32 = new Int32Array(openJPEG.HEAP32.buffer, imagePtr, length); - let pixelData; + var length = openJPEG.getValue(imageSizeXPtr, 'i32') * openJPEG.getValue(imageSizeYPtr, 'i32') * openJPEG.getValue(imageSizeCompPtr, 'i32'); + var src32 = new Int32Array(openJPEG.HEAP32.buffer, imagePtr, length); + var pixelData = void 0; if (bytesPerPixel === 1) { if (Uint8Array.from) { pixelData = Uint8Array.from(src32); } else { pixelData = new Uint8Array(length); - for (let i = 0; i < length; i++) { + for (var i = 0; i < length; i++) { pixelData[i] = src32[i]; } } @@ -38657,16 +39290,16 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default pixelData = Int16Array.from(src32); } else { pixelData = new Int16Array(length); - for (let i = 0; i < length; i++) { - pixelData[i] = src32[i]; + for (var _i = 0; _i < length; _i++) { + pixelData[_i] = src32[_i]; } } } else if (Uint16Array.from) { pixelData = Uint16Array.from(src32); } else { pixelData = new Uint16Array(length); - for (let i = 0; i < length; i++) { - pixelData[i] = src32[i]; + for (var _i2 = 0; _i2 < length; _i2++) { + pixelData[_i2] = src32[_i2]; } } @@ -38679,10 +39312,14 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default openJPEG._free(imageSizeCompPtr); return pixelData; - } + }; // from cornerstone - _decodeJ2K(frameIndex = 0) { + + + ParsersDicom.prototype._decodeJ2K = function _decodeJ2K() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + if (typeof OpenJPEG_js_dist_openJPEG_DynamicMemory_browser_js__WEBPACK_IMPORTED_MODULE_2__ === 'undefined') { // OpenJPEG decoder not loaded return this._decodeJpx(frameIndex); @@ -38697,40 +39334,46 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } return this._decodeOpenJPEG(frameIndex); - } + }; + + ParsersDicom.prototype._decodeRLE = function _decodeRLE() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - _decodeRLE(frameIndex = 0) { - const bitsAllocated = this.bitsAllocated(frameIndex); - const planarConfiguration = this.planarConfiguration(); - const columns = this.columns(); - const rows = this.rows(); - const samplesPerPixel = this.samplesPerPixel(frameIndex); - const pixelRepresentation = this.pixelRepresentation(frameIndex); + var bitsAllocated = this.bitsAllocated(frameIndex); + var planarConfiguration = this.planarConfiguration(); + var columns = this.columns(); + var rows = this.rows(); + var samplesPerPixel = this.samplesPerPixel(frameIndex); + var pixelRepresentation = this.pixelRepresentation(frameIndex); // format data for the RLE decoder - const imageFrame = { - pixelRepresentation, - bitsAllocated, - planarConfiguration, - columns, - rows, - samplesPerPixel + var imageFrame = { + pixelRepresentation: pixelRepresentation, + bitsAllocated: bitsAllocated, + planarConfiguration: planarConfiguration, + columns: columns, + rows: rows, + samplesPerPixel: samplesPerPixel }; - const pixelData = DicomParser.readEncapsulatedPixelDataFromFragments(this._dataSet, this._dataSet.elements.x7fe00010, frameIndex); + var pixelData = DicomParser.readEncapsulatedPixelDataFromFragments(this._dataSet, this._dataSet.elements.x7fe00010, frameIndex); - const decoded = Object(_decoders_decoders_rle__WEBPACK_IMPORTED_MODULE_3__["RLEDecoder"])(imageFrame, pixelData); + var decoded = Object(_decoders_decoders_rle__WEBPACK_IMPORTED_MODULE_3__["RLEDecoder"])(imageFrame, pixelData); return decoded.pixelData; - } + }; // from cornerstone - _decodeJPEGLossless(frameIndex = 0) { - let encodedPixelData = this.getEncapsulatedImageFrame(frameIndex); - let pixelRepresentation = this.pixelRepresentation(frameIndex); - let bitsAllocated = this.bitsAllocated(frameIndex); - let byteOutput = bitsAllocated <= 8 ? 1 : 2; - let decoder = new Jpeg.lossless.Decoder(); - let decompressedData = decoder.decode(encodedPixelData.buffer, encodedPixelData.byteOffset, encodedPixelData.length, byteOutput); + + + ParsersDicom.prototype._decodeJPEGLossless = function _decodeJPEGLossless() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var encodedPixelData = this.getEncapsulatedImageFrame(frameIndex); + var pixelRepresentation = this.pixelRepresentation(frameIndex); + var bitsAllocated = this.bitsAllocated(frameIndex); + var byteOutput = bitsAllocated <= 8 ? 1 : 2; + var decoder = new Jpeg.lossless.Decoder(); + var decompressedData = decoder.decode(encodedPixelData.buffer, encodedPixelData.byteOffset, encodedPixelData.length, byteOutput); if (pixelRepresentation === 0) { if (byteOutput === 2) { @@ -38742,14 +39385,16 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } else { return new Int16Array(decompressedData.buffer); } - } + }; + + ParsersDicom.prototype._decodeJPEGBaseline = function _decodeJPEGBaseline() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - _decodeJPEGBaseline(frameIndex = 0) { - let encodedPixelData = this.getEncapsulatedImageFrame(frameIndex); - let rows = this.rows(frameIndex); - let columns = this.columns(frameIndex); - let bitsAllocated = this.bitsAllocated(frameIndex); - let jpegBaseline = new JpegBaseline(); + var encodedPixelData = this.getEncapsulatedImageFrame(frameIndex); + var rows = this.rows(frameIndex); + var columns = this.columns(frameIndex); + var bitsAllocated = this.bitsAllocated(frameIndex); + var jpegBaseline = new JpegBaseline(); jpegBaseline.parse(encodedPixelData); if (bitsAllocated === 8) { @@ -38757,17 +39402,19 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } else if (bitsAllocated === 16) { return jpegBaseline.getData16(columns, rows); } - } + }; + + ParsersDicom.prototype._decodeUncompressed = function _decodeUncompressed() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - _decodeUncompressed(frameIndex = 0) { - let pixelRepresentation = this.pixelRepresentation(frameIndex); - let bitsAllocated = this.bitsAllocated(frameIndex); - let pixelDataElement = this._dataSet.elements.x7fe00010; - let pixelDataOffset = pixelDataElement.dataOffset; - let numberOfChannels = this.numberOfChannels(); - let numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels; - let frameOffset = 0; - let buffer = this._dataSet.byteArray.buffer; + var pixelRepresentation = this.pixelRepresentation(frameIndex); + var bitsAllocated = this.bitsAllocated(frameIndex); + var pixelDataElement = this._dataSet.elements.x7fe00010; + var pixelDataOffset = pixelDataElement.dataOffset; + var numberOfChannels = this.numberOfChannels(); + var numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels; + var frameOffset = 0; + var buffer = this._dataSet.byteArray.buffer; if (pixelRepresentation === 0 && bitsAllocated === 8) { // unsigned 8 bit @@ -38786,22 +39433,22 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default frameOffset = pixelDataOffset + frameIndex * numPixels * 4; return new Uint32Array(buffer, frameOffset, numPixels); } else if (pixelRepresentation === 0 && bitsAllocated === 1) { - let newBuffer = new ArrayBuffer(numPixels); - let newArray = new Uint8Array(newBuffer); + var newBuffer = new ArrayBuffer(numPixels); + var newArray = new Uint8Array(newBuffer); frameOffset = pixelDataOffset + frameIndex * numPixels; - let index = 0; + var index = 0; - let bitStart = frameIndex * numPixels; - let bitEnd = frameIndex * numPixels + numPixels; + var bitStart = frameIndex * numPixels; + var bitEnd = frameIndex * numPixels + numPixels; - let byteStart = Math.floor(bitStart / 8); - let bitStartOffset = bitStart - byteStart * 8; - let byteEnd = Math.ceil(bitEnd / 8); + var byteStart = Math.floor(bitStart / 8); + var bitStartOffset = bitStart - byteStart * 8; + var byteEnd = Math.ceil(bitEnd / 8); - let targetBuffer = new Uint8Array(buffer, pixelDataOffset); + var targetBuffer = new Uint8Array(buffer, pixelDataOffset); - for (let i = byteStart; i <= byteEnd; i++) { + for (var i = byteStart; i <= byteEnd; i++) { while (bitStartOffset < 8) { switch (bitStartOffset) { case 0: @@ -38842,20 +39489,20 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default bitStartOffset = 0; } } - } + }; - _interpretAsRGB(photometricInterpretation) { - const rgbLikeTypes = ['RGB', 'YBR_RCT', 'YBR_ICT', 'YBR_FULL_422']; + ParsersDicom.prototype._interpretAsRGB = function _interpretAsRGB(photometricInterpretation) { + var rgbLikeTypes = ['RGB', 'YBR_RCT', 'YBR_ICT', 'YBR_FULL_422']; return rgbLikeTypes.indexOf(photometricInterpretation) !== -1; - } + }; - _convertColorSpace(uncompressedData) { - let rgbData = null; - let photometricInterpretation = this.photometricInterpretation(); - let planarConfiguration = this.planarConfiguration(); + ParsersDicom.prototype._convertColorSpace = function _convertColorSpace(uncompressedData) { + var rgbData = null; + var photometricInterpretation = this.photometricInterpretation(); + var planarConfiguration = this.planarConfiguration(); - const interpretAsRGB = this._interpretAsRGB(photometricInterpretation); + var interpretAsRGB = this._interpretAsRGB(photometricInterpretation); if (interpretAsRGB && planarConfiguration === 0) { // ALL GOOD, ALREADY ORDERED // planar or non planar planarConfiguration @@ -38870,16 +39517,16 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } else if (uncompressedData instanceof Uint16Array) { rgbData = new Uint16Array(uncompressedData.length); } else { - const error = new Error(`unsuported typed array: ${uncompressedData}`); + var error = new Error('unsuported typed array: ' + uncompressedData); throw error; } - let numPixels = uncompressedData.length / 3; - let rgbaIndex = 0; - let rIndex = 0; - let gIndex = numPixels; - let bIndex = numPixels * 2; - for (let i = 0; i < numPixels; i++) { + var numPixels = uncompressedData.length / 3; + var rgbaIndex = 0; + var rIndex = 0; + var gIndex = numPixels; + var bIndex = numPixels * 2; + for (var i = 0; i < numPixels; i++) { rgbData[rgbaIndex++] = uncompressedData[rIndex++]; // red rgbData[rgbaIndex++] = uncompressedData[gIndex++]; // green rgbData[rgbaIndex++] = uncompressedData[bIndex++]; // blue @@ -38894,53 +39541,55 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default } else if (uncompressedData instanceof Uint16Array) { rgbData = new Uint16Array(uncompressedData.length); } else { - const error = new Error(`unsuported typed array: ${uncompressedData}`); - throw error; + var _error = new Error('unsuported typed array: ' + uncompressedData); + throw _error; } // https://github.com/chafey/cornerstoneWADOImageLoader/blob/master/src/decodeYBRFull.js - let nPixels = uncompressedData.length / 3; - let ybrIndex = 0; - let rgbaIndex = 0; - for (let i = 0; i < nPixels; i++) { - let y = uncompressedData[ybrIndex++]; - let cb = uncompressedData[ybrIndex++]; - let cr = uncompressedData[ybrIndex++]; - rgbData[rgbaIndex++] = y + 1.402 * (cr - 128); // red - rgbData[rgbaIndex++] = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green - rgbData[rgbaIndex++] = y + 1.772 * (cb - 128); // blue + var nPixels = uncompressedData.length / 3; + var ybrIndex = 0; + var _rgbaIndex = 0; + for (var _i3 = 0; _i3 < nPixels; _i3++) { + var y = uncompressedData[ybrIndex++]; + var cb = uncompressedData[ybrIndex++]; + var cr = uncompressedData[ybrIndex++]; + rgbData[_rgbaIndex++] = y + 1.402 * (cr - 128); // red + rgbData[_rgbaIndex++] = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green + rgbData[_rgbaIndex++] = y + 1.772 * (cb - 128); // blue // rgbData[rgbaIndex++] = 255; //alpha } } else { - const error = new Error(`photometric interpolation not supported: ${photometricInterpretation}`); - throw error; + var _error2 = new Error('photometric interpolation not supported: ' + photometricInterpretation); + throw _error2; } return rgbData; - } + }; /** * Swap bytes in frame. */ - _swapFrame(frame) { + + + ParsersDicom.prototype._swapFrame = function _swapFrame(frame) { // swap bytes ( if 8bits (1byte), nothing to swap) - let bitsAllocated = this.bitsAllocated(); + var bitsAllocated = this.bitsAllocated(); if (bitsAllocated === 16) { - for (let i = 0; i < frame.length; i++) { + for (var i = 0; i < frame.length; i++) { frame[i] = this._swap16(frame[i]); } } else if (bitsAllocated === 32) { - for (let i = 0; i < frame.length; i++) { - frame[i] = this._swap32(frame[i]); + for (var _i4 = 0; _i4 < frame.length; _i4++) { + frame[_i4] = this._swap32(frame[_i4]); } } return frame; - } + }; - _getUnitsName(value) { - const units = { + ParsersDicom.prototype._getUnitsName = function _getUnitsName(value) { + var units = { 0: 'none', 1: 'percent', 2: 'dB', @@ -38957,8 +39606,12 @@ class ParsersDicom extends _parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default }; return units.hasOwnProperty(value) ? units[value] : 'none'; - } -} + }; + + return ParsersDicom; +}(_parsers_volume__WEBPACK_IMPORTED_MODULE_1__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (ParsersDicom); /***/ }), @@ -39001,9 +39654,14 @@ __webpack_require__.r(__webpack_exports__); "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ParsersMgh; }); /* harmony import */ var _parsers_volume__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parsers.volume */ "./src/parsers/parsers.volume.js"); /* harmony import */ var three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three/src/math/Vector3 */ "./node_modules/three/src/math/Vector3.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ @@ -39012,175 +39670,189 @@ __webpack_require__.r(__webpack_exports__); /** * @module parsers/mgh */ -class ParsersMgh extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"] { - constructor(data, id) { - super(); + +var ParsersMgh = function (_ParsersVolume) { + _inherits(ParsersMgh, _ParsersVolume); + + function ParsersMgh(data, id) { + _classCallCheck(this, ParsersMgh); /** * @member * @type {arraybuffer} */ - this._id = id; - this._url = data.url; - this._buffer = null; - this._bufferPos = 0; - this._dataPos = 0; - this._pixelData = null; + var _this = _possibleConstructorReturn(this, _ParsersVolume.call(this)); + + _this._id = id; + _this._url = data.url; + _this._buffer = null; + _this._bufferPos = 0; + _this._dataPos = 0; + _this._pixelData = null; // Default MGH Header as described at: // https://surfer.nmr.mgh.harvard.edu/fswiki/FsTutorial/MghFormat // Image "header" with default values - this._version = 1; - this._width = 0; - this._height = 0; - this._depth = 0; - this._nframes = 0; - this._type = ParsersMgh.MRI_UCHAR; // 0-UCHAR, 4-SHORT, 1-INT, 3-FLOAT - this._dof = 0; - this._goodRASFlag = 0; // True: Use directional cosines, false assume CORONAL - this._spacingXYZ = [1, 1, 1]; - this._Xras = [-1, 0, 0]; - this._Yras = [0, 0, -1]; - this._Zras = [0, 1, 0]; - this._Cras = [0, 0, 0]; + _this._version = 1; + _this._width = 0; + _this._height = 0; + _this._depth = 0; + _this._nframes = 0; + _this._type = ParsersMgh.MRI_UCHAR; // 0-UCHAR, 4-SHORT, 1-INT, 3-FLOAT + _this._dof = 0; + _this._goodRASFlag = 0; // True: Use directional cosines, false assume CORONAL + _this._spacingXYZ = [1, 1, 1]; + _this._Xras = [-1, 0, 0]; + _this._Yras = [0, 0, -1]; + _this._Zras = [0, 1, 0]; + _this._Cras = [0, 0, 0]; // Image "footer" - this._tr = 0; // ms - this._flipAngle = 0; // radians - this._te = 0; // ms - this._ti = 0; // ms - this._fov = 0; // from doc: IGNORE THIS FIELD (data is inconsistent) - this._tags = []; // Will then contain variable length char strings + _this._tr = 0; // ms + _this._flipAngle = 0; // radians + _this._te = 0; // ms + _this._ti = 0; // ms + _this._fov = 0; // from doc: IGNORE THIS FIELD (data is inconsistent) + _this._tags = []; // Will then contain variable length char strings // Other misc - this._origin = [0, 0, 0]; - this._imageOrient = [0, 0, 0, 0, 0, 0]; + _this._origin = [0, 0, 0]; + _this._imageOrient = [0, 0, 0, 0, 0, 0]; // Read header // ArrayBuffer in data.buffer may need endian swap - this._buffer = data.buffer; + _this._buffer = data.buffer; - this._version = this._readInt(); - this._swapEndian = false; - if (this._version == 1) { + _this._version = _this._readInt(); + _this._swapEndian = false; + if (_this._version == 1) { // Life is good - } else if (this._version == 16777216) { - this._swapEndian = true; - this._version = this._swap32(this._version); + } else if (_this._version == 16777216) { + _this._swapEndian = true; + _this._version = _this._swap32(_this._version); } else { - const error = new Error('MGH/MGZ parser: Unknown Endian. Version reports: ' + this._version); + var error = new Error('MGH/MGZ parser: Unknown Endian. Version reports: ' + _this._version); throw error; } - this._width = this._readInt(); - this._height = this._readInt(); - this._depth = this._readInt(); // AMI calls this frames - this._nframes = this._readInt(); - this._type = this._readInt(); - this._dof = this._readInt(); - this._goodRASFlag = this._readShort(); - this._spacingXYZ = this._readFloat(3); - this._Xras = this._readFloat(3); - this._Yras = this._readFloat(3); - this._Zras = this._readFloat(3); - this._Cras = this._readFloat(3); - - this._bufferPos = 284; - let dataSize = this._width * this._height * this._depth * this._nframes; - let vSize = this._width * this._height * this._depth; - - switch (this._type) { + _this._width = _this._readInt(); + _this._height = _this._readInt(); + _this._depth = _this._readInt(); // AMI calls this frames + _this._nframes = _this._readInt(); + _this._type = _this._readInt(); + _this._dof = _this._readInt(); + _this._goodRASFlag = _this._readShort(); + _this._spacingXYZ = _this._readFloat(3); + _this._Xras = _this._readFloat(3); + _this._Yras = _this._readFloat(3); + _this._Zras = _this._readFloat(3); + _this._Cras = _this._readFloat(3); + + _this._bufferPos = 284; + var dataSize = _this._width * _this._height * _this._depth * _this._nframes; + var vSize = _this._width * _this._height * _this._depth; + + switch (_this._type) { case ParsersMgh.MRI_UCHAR: - this._pixelData = this._readUChar(dataSize); + _this._pixelData = _this._readUChar(dataSize); break; case ParsersMgh.MRI_INT: - this._pixelData = this._readInt(dataSize); + _this._pixelData = _this._readInt(dataSize); break; case ParsersMgh.MRI_FLOAT: - this._pixelData = this._readFloat(dataSize); + _this._pixelData = _this._readFloat(dataSize); break; case ParsersMgh.MRI_SHORT: - this._pixelData = this._readShort(dataSize); + _this._pixelData = _this._readShort(dataSize); break; default: - throw Error('MGH/MGZ parser: Unknown _type. _type reports: ' + this._type); + throw Error('MGH/MGZ parser: Unknown _type. _type reports: ' + _this._type); } - this._tr = this._readFloat(1); - this._flipAngle = this._readFloat(1); - this._te = this._readFloat(1); - this._ti = this._readFloat(1); - this._fov = this._readFloat(1); + _this._tr = _this._readFloat(1); + _this._flipAngle = _this._readFloat(1); + _this._te = _this._readFloat(1); + _this._ti = _this._readFloat(1); + _this._fov = _this._readFloat(1); - let enc = new TextDecoder(); - let t = this._tagReadStart(); + var enc = new TextDecoder(); + var t = _this._tagReadStart(); while (t[0] != undefined) { - let tagType = t[0]; - let tagLen = t[1]; - let tagValue = undefined; + var tagType = t[0]; + var tagLen = t[1]; + var tagValue = undefined; switch (tagType) { case ParsersMgh.TAG_OLD_MGH_XFORM: case ParsersMgh.TAG_MGH_XFORM: - tagValue = this._readChar(tagLen); + tagValue = _this._readChar(tagLen); break; default: - tagValue = this._readChar(tagLen); + tagValue = _this._readChar(tagLen); } tagValue = enc.decode(tagValue); - this._tags.push({ tagType: tagType, tagValue: tagValue }); + _this._tags.push({ tagType: tagType, tagValue: tagValue }); // read for next loop - t = this._tagReadStart(); + t = _this._tagReadStart(); } // detect if we are in a right handed coordinate system - const first = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"]().fromArray(this._Xras); - const second = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"]().fromArray(this._Yras); - const crossFirstSecond = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"]().crossVectors(first, second); - const third = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"]().fromArray(this._Zras); + var first = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"]().fromArray(_this._Xras); + var second = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"]().fromArray(_this._Yras); + var crossFirstSecond = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"]().crossVectors(first, second); + var third = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"]().fromArray(_this._Zras); if (crossFirstSecond.angleTo(third) > Math.PI / 2) { - this._rightHanded = false; + _this._rightHanded = false; } // - sign to move to LPS space - this._imageOrient = [-this._Xras[0], -this._Xras[1], this._Xras[2], -this._Yras[0], -this._Yras[1], this._Yras[2]]; + _this._imageOrient = [-_this._Xras[0], -_this._Xras[1], _this._Xras[2], -_this._Yras[0], -_this._Yras[1], _this._Yras[2]]; // Calculate origin - let fcx = this._width / 2.0; - let fcy = this._height / 2.0; - let fcz = this._depth / 2.0; + var fcx = _this._width / 2.0; + var fcy = _this._height / 2.0; + var fcz = _this._depth / 2.0; - for (let ui = 0; ui < 3; ++ui) { - this._origin[ui] = this._Cras[ui] - (this._Xras[ui] * this._spacingXYZ[0] * fcx + this._Yras[ui] * this._spacingXYZ[1] * fcy + this._Zras[ui] * this._spacingXYZ[2] * fcz); + for (var ui = 0; ui < 3; ++ui) { + _this._origin[ui] = _this._Cras[ui] - (_this._Xras[ui] * _this._spacingXYZ[0] * fcx + _this._Yras[ui] * _this._spacingXYZ[1] * fcy + _this._Zras[ui] * _this._spacingXYZ[2] * fcz); } // - sign to move to LPS space - this._origin = [-this._origin[0], -this._origin[1], this._origin[2]]; + _this._origin = [-_this._origin[0], -_this._origin[1], _this._origin[2]]; + return _this; } - seriesInstanceUID() { + ParsersMgh.prototype.seriesInstanceUID = function seriesInstanceUID() { // use filename + timestamp..? return this._url; - } + }; - numberOfFrames() { + ParsersMgh.prototype.numberOfFrames = function numberOfFrames() { // AMI calls Z component frames, not T (_nframes) return this._depth; - } + }; + + ParsersMgh.prototype.sopInstanceUID = function sopInstanceUID() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - sopInstanceUID(frameIndex = 0) { return frameIndex; - } + }; + + ParsersMgh.prototype.rows = function rows() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - rows(frameIndex = 0) { return this._width; - } + }; + + ParsersMgh.prototype.columns = function columns() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - columns(frameIndex = 0) { return this._height; - } + }; + + ParsersMgh.prototype.pixelType = function pixelType() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - pixelType(frameIndex = 0) { // Return: 0 integer, 1 float switch (this._type) { case ParsersMgh.MRI_UCHAR: @@ -39192,9 +39864,11 @@ class ParsersMgh extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"] default: throw Error('MGH/MGZ parser: Unknown _type. _type reports: ' + this._type); } - } + }; + + ParsersMgh.prototype.bitsAllocated = function bitsAllocated() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - bitsAllocated(frameIndex = 0) { switch (this._type) { case ParsersMgh.MRI_UCHAR: return 8; @@ -39206,77 +39880,97 @@ class ParsersMgh extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"] default: throw Error('MGH/MGZ parser: Unknown _type. _type reports: ' + this._type); } - } + }; + + ParsersMgh.prototype.pixelSpacing = function pixelSpacing() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - pixelSpacing(frameIndex = 0) { return this._spacingXYZ; - } + }; + + ParsersMgh.prototype.imageOrientation = function imageOrientation() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - imageOrientation(frameIndex = 0) { return this._imageOrient; - } + }; + + ParsersMgh.prototype.imagePosition = function imagePosition() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - imagePosition(frameIndex = 0) { return this._origin; - } + }; - extractPixelData(frameIndex = 0) { - let sliceSize = this._width * this._height; + ParsersMgh.prototype.extractPixelData = function extractPixelData() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var sliceSize = this._width * this._height; return this._pixelData.slice(frameIndex * sliceSize, (frameIndex + 1) * sliceSize); - } + }; // signed int32 - _readInt(len = 1) { - let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 4)); + + + ParsersMgh.prototype._readInt = function _readInt() { + var len = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; + + var tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 4)); this._bufferPos += len * 4; - let v = undefined; + var v = undefined; if (len == 1) { v = tempBuff.getInt32(0, this._swapEndian); } else { v = new Int32Array(len); - for (let i = 0; i < len; i++) { + for (var i = 0; i < len; i++) { v[i] = tempBuff.getInt32(i * 4, this._swapEndian); } } return v; - } + }; // signed int16 - _readShort(len = 1) { - let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 2)); + + + ParsersMgh.prototype._readShort = function _readShort() { + var len = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; + + var tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 2)); this._bufferPos += len * 2; - let v = undefined; + var v = undefined; if (len == 1) { v = tempBuff.getInt16(0, this._swapEndian); } else { v = new Int16Array(len); - for (let i = 0; i < len; i++) { + for (var i = 0; i < len; i++) { v[i] = tempBuff.getInt16(i * 2, this._swapEndian); } } return v; - } + }; // signed int64 - _readLong(len = 1) { - let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 8)); + + + ParsersMgh.prototype._readLong = function _readLong() { + var len = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; + + var tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 8)); this._bufferPos += len * 8; - let v = new Uint16Array(len); - for (let i = 0; i < len; i++) { + var v = new Uint16Array(len); + for (var i = 0; i < len; i++) { /* DataView doesn't have Int64. * This work around based off Scalajs * (https://github.com/scala-js/scala-js/blob/master/library/src/main/scala/scala/scalajs/js/typedarray/DataViewExt.scala) * v[i]=tempBuff.getInt64(i*8,this._swapEndian); */ - let shiftHigh = 0; - let shiftLow = 0; + var shiftHigh = 0; + var shiftLow = 0; if (this._swapendian) { shiftHigh = 4; } else { shiftLow = 4; } - let high = tempBuff.getInt32(i * 8 + shiftHigh, this._swapEndian); - let low = tempBuff.getInt32(i * 8 + shiftLow, this._swapEndian); + var high = tempBuff.getInt32(i * 8 + shiftHigh, this._swapEndian); + var low = tempBuff.getInt32(i * 8 + shiftLow, this._swapEndian); if (high != 0) { console.log('Unable to read Int64 with high word: ' + high + 'low word: ' + low); low = undefined; @@ -39290,62 +39984,74 @@ class ParsersMgh extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"] } else { return v; } - } + }; // signed int8 - _readChar(len = 1) { - let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len)); + + + ParsersMgh.prototype._readChar = function _readChar() { + var len = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; + + var tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len)); this._bufferPos += len; - let v = undefined; + var v = undefined; if (len == 1) { v = tempBuff.getInt8(0, this._swapEndian); } else { v = new Int8Array(len); - for (let i = 0; i < len; i++) { + for (var i = 0; i < len; i++) { v[i] = tempBuff.getInt8(i, this._swapEndian); } } return v; - } + }; // unsigned int8 - _readUChar(len = 1) { - let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len)); + + + ParsersMgh.prototype._readUChar = function _readUChar() { + var len = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; + + var tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len)); this._bufferPos += len; - let v = undefined; + var v = undefined; if (len == 1) { v = tempBuff.getUint8(0, this._swapEndian); } else { v = new Uint8Array(len); - for (let i = 0; i < len; i++) { + for (var i = 0; i < len; i++) { v[i] = tempBuff.getUint8(i, this._swapEndian); } } return v; - } + }; // float32 - _readFloat(len = 1) { - let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 4)); + + + ParsersMgh.prototype._readFloat = function _readFloat() { + var len = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; + + var tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 4)); this._bufferPos += len * 4; - let v = undefined; + var v = undefined; if (len == 1) { v = tempBuff.getFloat32(0, this._swapEndian); } else { v = new Float32Array(len); - for (let i = 0; i < len; i++) { + for (var i = 0; i < len; i++) { v[i] = tempBuff.getFloat32(i * 4, this._swapEndian); } } return v; - } + }; - _tagReadStart() { + ParsersMgh.prototype._tagReadStart = function _tagReadStart() { if (this._bufferPos >= this._buffer.byteLength) { return [undefined, undefined]; } - let tagType = this._readInt(); - let tagLen = undefined; + var tagType = this._readInt(); + var tagLen = undefined; switch (tagType) { case ParsersMgh.TAG_OLD_MGH_XFORM: tagLen = this._readInt(); @@ -39363,11 +40069,16 @@ class ParsersMgh extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"] tagType = undefined; } return [tagType, tagLen]; - } -} + }; + + return ParsersMgh; +}(_parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"]); // https://github.com/freesurfer/freesurfer/ // See include/mri.h + + +/* harmony default export */ __webpack_exports__["default"] = (ParsersMgh); ParsersMgh.MRI_UCHAR = 0; ParsersMgh.MRI_INT = 1; ParsersMgh.MRI_LONG = 2; @@ -39411,9 +40122,14 @@ ParsersMgh.TAG_FIELDSTRENGTH = 43; "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ParsersMHD; }); /* harmony import */ var _parsers_volume__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parsers.volume */ "./src/parsers/parsers.volume.js"); /* harmony import */ var three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three/src/math/Vector3 */ "./node_modules/three/src/math/Vector3.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ @@ -39422,42 +40138,48 @@ __webpack_require__.r(__webpack_exports__); /** * @module parsers/mhd */ -class ParsersMHD extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"] { - constructor(data, id) { - super(); + +var ParsersMHD = function (_ParsersVolume) { + _inherits(ParsersMHD, _ParsersVolume); + + function ParsersMHD(data, id) { + _classCallCheck(this, ParsersMHD); /** * @member * @type {arraybuffer} */ - this._id = id; - this._url = data.url; - this._header = {}; - this._buffer = null; + var _this = _possibleConstructorReturn(this, _ParsersVolume.call(this)); + + _this._id = id; + _this._url = data.url; + _this._header = {}; + _this._buffer = null; try { // parse header (mhd) data - let lines = new TextDecoder().decode(data.mhdBuffer).split('\n'); - lines.forEach(line => { - let keyvalue = line.split('='); + var lines = new TextDecoder().decode(data.mhdBuffer).split('\n'); + lines.forEach(function (line) { + var keyvalue = line.split('='); if (keyvalue.length === 2) { - this._header[keyvalue[0].trim()] = keyvalue[1].trim(); + _this._header[keyvalue[0].trim()] = keyvalue[1].trim(); } }); - this._header.DimSize = this._header.DimSize.split(' '); - this._header.ElementSpacing = this._header.ElementSpacing.split(' '); - this._header.TransformMatrix = this._header.TransformMatrix.split(' '); - this._header.Offset = this._header.Offset.split(' '); + _this._header.DimSize = _this._header.DimSize.split(' '); + _this._header.ElementSpacing = _this._header.ElementSpacing.split(' '); + _this._header.TransformMatrix = _this._header.TransformMatrix.split(' '); + _this._header.Offset = _this._header.Offset.split(' '); // - this._buffer = data.rawBuffer; + _this._buffer = data.rawBuffer; } catch (error) { window.console.log('ooops... :('); } + return _this; } - rightHanded() { - let anatomicalOrientation = this._header.AnatomicalOrientation; + ParsersMHD.prototype.rightHanded = function rightHanded() { + var anatomicalOrientation = this._header.AnatomicalOrientation; if (anatomicalOrientation === 'RAS' || anatomicalOrientation === 'RPI' || anatomicalOrientation === 'LPS' || anatomicalOrientation === 'LAI') { this._rightHanded = true; } else { @@ -39465,41 +40187,51 @@ class ParsersMHD extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"] } return this._rightHanded; - } + }; - seriesInstanceUID() { + ParsersMHD.prototype.seriesInstanceUID = function seriesInstanceUID() { // use filename + timestamp..? return this._url; - } + }; - numberOfFrames() { + ParsersMHD.prototype.numberOfFrames = function numberOfFrames() { return parseInt(this._header.DimSize[2], 10); - } + }; + + ParsersMHD.prototype.sopInstanceUID = function sopInstanceUID() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - sopInstanceUID(frameIndex = 0) { return frameIndex; - } + }; + + ParsersMHD.prototype.rows = function rows() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - rows(frameIndex = 0) { return parseInt(this._header.DimSize[1], 10); - } + }; + + ParsersMHD.prototype.columns = function columns() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - columns(frameIndex = 0) { return parseInt(this._header.DimSize[0], 10); - } + }; + + ParsersMHD.prototype.pixelType = function pixelType() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - pixelType(frameIndex = 0) { // 0 - int // 1 - float - let type = 0; + var type = 0; if (this._header.ElementType === 'MET_UFLOAT' || this._header.ElementType === 'MET_FLOAT') { type = 1; } return type; - } + }; + + ParsersMHD.prototype.bitsAllocated = function bitsAllocated() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - bitsAllocated(frameIndex = 0) { - let bitsAllocated = 1; + var bitsAllocated = 1; if (this._header.ElementType === 'MET_UCHAR' || this._header.ElementType === 'MET_CHAR') { bitsAllocated = 8; @@ -39510,7 +40242,7 @@ class ParsersMHD extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"] } return bitsAllocated; - } + }; /** * https://itk.org/Wiki/ITK/MetaIO/Documentation @@ -39519,42 +40251,54 @@ class ParsersMHD extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"] * * @param {*} frameIndex */ - pixelSpacing(frameIndex = 0) { - let x = parseFloat(this._header.ElementSpacing[1], 10); - let y = parseFloat(this._header.ElementSpacing[0], 10); - let z = parseFloat(this._header.ElementSpacing[2], 10); + + + ParsersMHD.prototype.pixelSpacing = function pixelSpacing() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var x = parseFloat(this._header.ElementSpacing[1], 10); + var y = parseFloat(this._header.ElementSpacing[0], 10); + var z = parseFloat(this._header.ElementSpacing[2], 10); return [x, y, z]; - } + }; + + ParsersMHD.prototype.imageOrientation = function imageOrientation() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - imageOrientation(frameIndex = 0) { - let invertX = this._header.AnatomicalOrientation.match(/L/) ? -1 : 1; - let invertY = this._header.AnatomicalOrientation.match(/P/) ? -1 : 1; + var invertX = this._header.AnatomicalOrientation.match(/L/) ? -1 : 1; + var invertY = this._header.AnatomicalOrientation.match(/P/) ? -1 : 1; - let x = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](parseFloat(this._header.TransformMatrix[0]) * invertX, parseFloat(this._header.TransformMatrix[1]) * invertY, parseFloat(this._header.TransformMatrix[2])); + var x = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](parseFloat(this._header.TransformMatrix[0]) * invertX, parseFloat(this._header.TransformMatrix[1]) * invertY, parseFloat(this._header.TransformMatrix[2])); x.normalize(); - let y = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](parseFloat(this._header.TransformMatrix[3]) * invertX, parseFloat(this._header.TransformMatrix[4]) * invertY, parseFloat(this._header.TransformMatrix[5])); + var y = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](parseFloat(this._header.TransformMatrix[3]) * invertX, parseFloat(this._header.TransformMatrix[4]) * invertY, parseFloat(this._header.TransformMatrix[5])); y.normalize(); return [x.x, x.y, x.z, y.x, y.y, y.z]; - } + }; + + ParsersMHD.prototype.imagePosition = function imagePosition() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - imagePosition(frameIndex = 0) { return [parseFloat(this._header.Offset[0]), parseFloat(this._header.Offset[1]), parseFloat(this._header.Offset[2])]; - } + }; + + ParsersMHD.prototype.extractPixelData = function extractPixelData() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - extractPixelData(frameIndex = 0) { return this._decompressUncompressed(frameIndex); - } + }; + + ParsersMHD.prototype._decompressUncompressed = function _decompressUncompressed() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - _decompressUncompressed(frameIndex = 0) { - let buffer = this._buffer; - let numberOfChannels = this.numberOfChannels(); - let numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels; + var buffer = this._buffer; + var numberOfChannels = this.numberOfChannels(); + var numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels; if (!this.rightHanded()) { frameIndex = this.numberOfFrames() - 1 - frameIndex; } - let frameOffset = frameIndex * numPixels; + var frameOffset = frameIndex * numPixels; if (this._header.ElementType === 'MET_CHAR') { return new Int8Array(buffer, frameOffset, numPixels); @@ -39576,8 +40320,12 @@ class ParsersMHD extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"] frameOffset = frameOffset * 4; return new Float32Array(buffer, frameOffset, numPixels); } - } -} + }; + + return ParsersMHD; +}(_parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (ParsersMHD); /***/ }), @@ -39590,10 +40338,15 @@ class ParsersMHD extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"] "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ParsersNifti; }); /* harmony import */ var _parsers_volume__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parsers.volume */ "./src/parsers/parsers.volume.js"); /* harmony import */ var nifti_reader_js_src_nifti__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! nifti-reader-js/src/nifti */ "./node_modules/nifti-reader-js/src/nifti.js"); /* harmony import */ var nifti_reader_js_src_nifti__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nifti_reader_js_src_nifti__WEBPACK_IMPORTED_MODULE_1__); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ @@ -39602,46 +40355,52 @@ __webpack_require__.r(__webpack_exports__); /** * @module parsers/nifti */ -class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"] { - constructor(data, id) { - super(); + +var ParsersNifti = function (_ParsersVolume) { + _inherits(ParsersNifti, _ParsersVolume); + + function ParsersNifti(data, id) { + _classCallCheck(this, ParsersNifti); /** * @member * @type {arraybuffer} */ - this._id = id; - this._arrayBuffer = data.buffer; - this._url = data.url; - this._dataSet = null; - this._niftiHeader = null; - this._niftiImage = null; - this._ordered = true; - this._orderedData = null; + var _this = _possibleConstructorReturn(this, _ParsersVolume.call(this)); + + _this._id = id; + _this._arrayBuffer = data.buffer; + _this._url = data.url; + _this._dataSet = null; + _this._niftiHeader = null; + _this._niftiImage = null; + _this._ordered = true; + _this._orderedData = null; // - this._qfac = 1.0; + _this._qfac = 1.0; - if (nifti_reader_js_src_nifti__WEBPACK_IMPORTED_MODULE_1___default.a.isNIFTI(this._arrayBuffer)) { - this._dataSet = nifti_reader_js_src_nifti__WEBPACK_IMPORTED_MODULE_1___default.a.readHeader(this._arrayBuffer); - this._niftiImage = nifti_reader_js_src_nifti__WEBPACK_IMPORTED_MODULE_1___default.a.readImage(this._dataSet, this._arrayBuffer); + if (nifti_reader_js_src_nifti__WEBPACK_IMPORTED_MODULE_1___default.a.isNIFTI(_this._arrayBuffer)) { + _this._dataSet = nifti_reader_js_src_nifti__WEBPACK_IMPORTED_MODULE_1___default.a.readHeader(_this._arrayBuffer); + _this._niftiImage = nifti_reader_js_src_nifti__WEBPACK_IMPORTED_MODULE_1___default.a.readImage(_this._dataSet, _this._arrayBuffer); } else { - const error = new Error('parsers.nifti could not parse the file'); + var error = new Error('parsers.nifti could not parse the file'); throw error; } + return _this; } - seriesInstanceUID() { + ParsersNifti.prototype.seriesInstanceUID = function seriesInstanceUID() { // use filename + timestamp..? return this._url; - } + }; - numberOfFrames() { + ParsersNifti.prototype.numberOfFrames = function numberOfFrames() { return this._dataSet.dims[3]; - } + }; - numberOfChannels() { - let numberOfChannels = 1; + ParsersNifti.prototype.numberOfChannels = function numberOfChannels() { + var numberOfChannels = 1; // can dims[0] >= 5 and not multi channels with RGB datatypecode? @@ -39655,21 +40414,29 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default } return numberOfChannels; - } + }; + + ParsersNifti.prototype.sopInstanceUID = function sopInstanceUID() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - sopInstanceUID(frameIndex = 0) { return frameIndex; - } + }; + + ParsersNifti.prototype.rows = function rows() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - rows(frameIndex = 0) { return this._dataSet.dims[2]; - } + }; + + ParsersNifti.prototype.columns = function columns() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - columns(frameIndex = 0) { return this._dataSet.dims[1]; - } + }; + + ParsersNifti.prototype.pixelType = function pixelType() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - pixelType(frameIndex = 0) { // papaya.volume.nifti.NIFTI_TYPE_UINT8 = 2; // papaya.volume.nifti.NIFTI_TYPE_INT16 = 4; // papaya.volume.nifti.NIFTI_TYPE_INT32 = 8; @@ -39688,27 +40455,33 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default // 0 integer, 1 float - let pixelType = 0; + var pixelType = 0; if (this._dataSet.datatypeCode === 16 || this._dataSet.datatypeCode === 64 || this._dataSet.datatypeCode === 1536) { pixelType = 1; } return pixelType; - } + }; + + ParsersNifti.prototype.bitsAllocated = function bitsAllocated() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - bitsAllocated(frameIndex = 0) { return this._dataSet.numBitsPerVoxel; - } + }; + + ParsersNifti.prototype.pixelSpacing = function pixelSpacing() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - pixelSpacing(frameIndex = 0) { return [this._dataSet.pixDims[1], this._dataSet.pixDims[2], this._dataSet.pixDims[3]]; - } + }; - sliceThickness() { + ParsersNifti.prototype.sliceThickness = function sliceThickness() { // should be a string... return null; // this._dataSet.pixDims[3].toString(); - } + }; + + ParsersNifti.prototype.imageOrientation = function imageOrientation() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - imageOrientation(frameIndex = 0) { // http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1.h // http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c if (this._dataSet.qform_code > 0) { @@ -39760,10 +40533,10 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default // This R matrix is represented by quaternion [a,b,c,d] = [0,1,0,0] // (which encodes a 180 degree rotation about the x-axis). // https://github.com/Kitware/ITK/blob/master/Modules/IO/NIFTI/src/itkNiftiImageIO.cxx - let a = 0.0; - let b = this._dataSet.quatern_b; - let c = this._dataSet.quatern_c; - let d = this._dataSet.quatern_d; + var a = 0.0; + var b = this._dataSet.quatern_b; + var c = this._dataSet.quatern_c; + var d = this._dataSet.quatern_d; // compute a a = 1.0 - (b * b + c * c + d * d); if (a < 0.0000001) { @@ -39795,9 +40568,9 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default // The srow_* vectors are in the NIFTI_1 header. Note that no use is // made of pixdim[] in this method. - const rowX = [-this._dataSet.affine[0][0], -this._dataSet.affine[0][1], this._dataSet.affine[0][2]]; - const rowY = [-this._dataSet.affine[1][0], -this._dataSet.affine[1][1], this._dataSet.affine[0][2]]; - return [...rowX, ...rowY]; + var rowX = [-this._dataSet.affine[0][0], -this._dataSet.affine[0][1], this._dataSet.affine[0][2]]; + var rowY = [-this._dataSet.affine[1][0], -this._dataSet.affine[1][1], this._dataSet.affine[0][2]]; + return [].concat(rowX, rowY); } else if (this._dataSet.qform_code === 0) { // METHOD 1 (the "old" way, used only when qform_code = 0): // ------------------------------------------------------- @@ -39813,44 +40586,62 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default // ANALYZE 7.5 files. } return [1, 0, 0, 0, 1, 0]; - } + }; + + ParsersNifti.prototype.imagePosition = function imagePosition() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - imagePosition(frameIndex = 0) { // qoffset is RAS return [-this._dataSet.qoffset_x, -this._dataSet.qoffset_y, this._dataSet.qoffset_z]; - } + }; + + ParsersNifti.prototype.dimensionIndexValues = function dimensionIndexValues() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - dimensionIndexValues(frameIndex = 0) { return null; - } + }; + + ParsersNifti.prototype.instanceNumber = function instanceNumber() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - instanceNumber(frameIndex = 0) { return frameIndex; - } + }; + + ParsersNifti.prototype.windowCenter = function windowCenter() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - windowCenter(frameIndex = 0) { // calc min and calc max return null; - } + }; + + ParsersNifti.prototype.windowWidth = function windowWidth() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - windowWidth(frameIndex = 0) { // calc min and calc max return null; - } + }; + + ParsersNifti.prototype.rescaleSlope = function rescaleSlope() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - rescaleSlope(frameIndex = 0) { return this._dataSet.scl_slope; - } + }; + + ParsersNifti.prototype.rescaleIntercept = function rescaleIntercept() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - rescaleIntercept(frameIndex = 0) { return this._dataSet.scl_inter; - } + }; + + ParsersNifti.prototype.extractPixelData = function extractPixelData() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - extractPixelData(frameIndex = 0) { return this._decompressUncompressed(frameIndex); - } + }; + + ParsersNifti.prototype._decompressUncompressed = function _decompressUncompressed() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - _decompressUncompressed(frameIndex = 0) { // papaya.volume.nifti.NIFTI_TYPE_UINT8 = 2; // papaya.volume.nifti.NIFTI_TYPE_INT16 = 4; // papaya.volume.nifti.NIFTI_TYPE_INT32 = 8; @@ -39867,13 +40658,13 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default // papaya.volume.nifti.NIFTI_TYPE_COMPLEX128 = 1792; // papaya.volume.nifti.NIFTI_TYPE_COMPLEX256 = 2048; - let numberOfChannels = this.numberOfChannels(); - let numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels; + var numberOfChannels = this.numberOfChannels(); + var numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels; // if( !this.rightHanded() ){ // frameIndex = this.numberOfFrames() - 1 - frameIndex; // } - let frameOffset = frameIndex * numPixels; - let buffer = this._niftiImage; + var frameOffset = frameIndex * numPixels; + var buffer = this._niftiImage; // use bits allocated && pixel reprensentation too if (!this._ordered && this._orderedData === null) { @@ -39905,25 +40696,25 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default } else if (this._dataSet.datatypeCode === 16) { // signed float 32 bit frameOffset = frameOffset * 4; - const data = new Float32Array(buffer, frameOffset, numPixels); - for (let i = 0; i < data.length; i++) { + var data = new Float32Array(buffer, frameOffset, numPixels); + for (var i = 0; i < data.length; i++) { if (data[i] === Infinity || data[i] === -Infinity) { data[i] = 0; } } return data; } else { - window.console.warn(`Unknown data type: datatypeCode : ${this._dataSet.datatypeCode}`); + window.console.warn('Unknown data type: datatypeCode : ' + this._dataSet.datatypeCode); } - } + }; - _reorderData() { - let numberOfChannels = this.numberOfChannels(); - let numPixels = this.rows() * this.columns() * numberOfChannels; - let buffer = this._niftiImage; + ParsersNifti.prototype._reorderData = function _reorderData() { + var numberOfChannels = this.numberOfChannels(); + var numPixels = this.rows() * this.columns() * numberOfChannels; + var buffer = this._niftiImage; - let totalNumPixels = numPixels * this.numberOfFrames(); - let tmp = null; + var totalNumPixels = numPixels * this.numberOfFrames(); + var tmp = null; this._orderedData = null; if (this._dataSet.datatypeCode === 2) { @@ -39946,21 +40737,25 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default } // re-order pixels... - let numPixels2 = tmp.length / 3; - let rgbaIndex = 0; - let rIndex = 0; - let gIndex = numPixels2; - let bIndex = numPixels2 * 2; + var numPixels2 = tmp.length / 3; + var rgbaIndex = 0; + var rIndex = 0; + var gIndex = numPixels2; + var bIndex = numPixels2 * 2; - for (let i = 0; i < numPixels2; i++) { + for (var i = 0; i < numPixels2; i++) { this._orderedData[rgbaIndex++] = tmp[rIndex++]; // red this._orderedData[rgbaIndex++] = tmp[gIndex++]; // green this._orderedData[rgbaIndex++] = tmp[bIndex++]; // blue } this._ordered = true; - } -} + }; + + return ParsersNifti; +}(_parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (ParsersNifti); /***/ }), @@ -39973,43 +40768,54 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ParsersNifti; }); /* harmony import */ var _parsers_volume__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parsers.volume */ "./src/parsers/parsers.volume.js"); /* harmony import */ var three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three/src/math/Vector3 */ "./node_modules/three/src/math/Vector3.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Imports ***/ -let pako = __webpack_require__(/*! pako */ "./node_modules/pako/index.js"); -let NrrdReader = __webpack_require__(/*! nrrd-js */ "./node_modules/nrrd-js/nrrd.js"); +var pako = __webpack_require__(/*! pako */ "./node_modules/pako/index.js"); +var NrrdReader = __webpack_require__(/*! nrrd-js */ "./node_modules/nrrd-js/nrrd.js"); /** * @module parsers/nifti */ -class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"] { + +var ParsersNifti = function (_ParsersVolume) { + _inherits(ParsersNifti, _ParsersVolume); + /** * Constructor * * @param {*} data * @param {*} id */ - constructor(data, id) { - super(); + function ParsersNifti(data, id) { + _classCallCheck(this, ParsersNifti); /** * @member * @type {arraybuffer} */ - this._id = id; - this._arrayBuffer = data.buffer; - this._url = data.url; - this._dataSet = null; - this._unpackedData = null; + var _this = _possibleConstructorReturn(this, _ParsersVolume.call(this)); + + _this._id = id; + _this._arrayBuffer = data.buffer; + _this._url = data.url; + _this._dataSet = null; + _this._unpackedData = null; try { - this._dataSet = NrrdReader.parse(this._arrayBuffer); + _this._dataSet = NrrdReader.parse(_this._arrayBuffer); } catch (error) { window.console.log('ooops... :('); } + return _this; } /** @@ -40017,7 +40823,9 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default * * @return {*} */ - rightHanded() { + + + ParsersNifti.prototype.rightHanded = function rightHanded() { if (this._dataSet.space.match(/^right-anterior-superior/) || this._dataSet.space.match(/^left-posterior-superior/)) { this._rightHanded = true; } else { @@ -40025,35 +40833,41 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default } return this._rightHanded; - } + }; /** * Series instance UID * * @return {*} */ - seriesInstanceUID() { + + + ParsersNifti.prototype.seriesInstanceUID = function seriesInstanceUID() { // use filename + timestamp..? return this._url; - } + }; /** * Number of frames * * @return {*} */ - numberOfFrames() { + + + ParsersNifti.prototype.numberOfFrames = function numberOfFrames() { return this._dataSet.sizes[2]; - } + }; /** * Number of channels * * @return {*} */ - numberOfChannels() { + + + ParsersNifti.prototype.numberOfChannels = function numberOfChannels() { return 1; - } + }; /** * SOP instance UID @@ -40062,9 +40876,13 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default * * @return {*} */ - sopInstanceUID(frameIndex = 0) { + + + ParsersNifti.prototype.sopInstanceUID = function sopInstanceUID() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + return frameIndex; - } + }; /** * Rows @@ -40073,9 +40891,13 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default * * @return {*} */ - rows(frameIndex = 0) { + + + ParsersNifti.prototype.rows = function rows() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + return this._dataSet.sizes[1]; - } + }; /** * Columns @@ -40084,9 +40906,13 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default * * @return {*} */ - columns(frameIndex = 0) { + + + ParsersNifti.prototype.columns = function columns() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + return this._dataSet.sizes[0]; - } + }; /** * Pixel type @@ -40095,15 +40921,19 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default * * @return {*} */ - pixelType(frameIndex = 0) { + + + ParsersNifti.prototype.pixelType = function pixelType() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + // 0 - int // 1 - float - let pixelType = 0; + var pixelType = 0; if (this._dataSet.type === 'float') { pixelType = 1; } return pixelType; - } + }; /** * Bits allocated @@ -40112,8 +40942,12 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default * * @return {*} */ - bitsAllocated(frameIndex = 0) { - let bitsAllocated = 1; + + + ParsersNifti.prototype.bitsAllocated = function bitsAllocated() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var bitsAllocated = 1; if (this._dataSet.type === 'int8' || this._dataSet.type === 'uint8' || this._dataSet.type === 'char') { bitsAllocated = 8; @@ -40124,7 +40958,7 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default } return bitsAllocated; - } + }; /** * Pixel spacing @@ -40133,15 +40967,19 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default * * @return {*} */ - pixelSpacing(frameIndex = 0) { - const x = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._dataSet.spaceDirections[0][0], this._dataSet.spaceDirections[0][1], this._dataSet.spaceDirections[0][2]); - const y = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._dataSet.spaceDirections[1][0], this._dataSet.spaceDirections[1][1], this._dataSet.spaceDirections[1][2]); - const z = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._dataSet.spaceDirections[2][0], this._dataSet.spaceDirections[2][1], this._dataSet.spaceDirections[2][2]); + ParsersNifti.prototype.pixelSpacing = function pixelSpacing() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var x = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._dataSet.spaceDirections[0][0], this._dataSet.spaceDirections[0][1], this._dataSet.spaceDirections[0][2]); + + var y = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._dataSet.spaceDirections[1][0], this._dataSet.spaceDirections[1][1], this._dataSet.spaceDirections[1][2]); + + var z = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._dataSet.spaceDirections[2][0], this._dataSet.spaceDirections[2][1], this._dataSet.spaceDirections[2][2]); return [x.length(), y.length(), z.length()]; - } + }; /** * Image orientation @@ -40150,18 +40988,22 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default * * @return {*} */ - imageOrientation(frameIndex = 0) { - let invertX = this._dataSet.space.match(/right/) ? -1 : 1; - let invertY = this._dataSet.space.match(/anterior/) ? -1 : 1; - let x = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._dataSet.spaceDirections[0][0] * invertX, this._dataSet.spaceDirections[0][1] * invertY, this._dataSet.spaceDirections[0][2]); + + ParsersNifti.prototype.imageOrientation = function imageOrientation() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var invertX = this._dataSet.space.match(/right/) ? -1 : 1; + var invertY = this._dataSet.space.match(/anterior/) ? -1 : 1; + + var x = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._dataSet.spaceDirections[0][0] * invertX, this._dataSet.spaceDirections[0][1] * invertY, this._dataSet.spaceDirections[0][2]); x.normalize(); - let y = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._dataSet.spaceDirections[1][0] * invertX, this._dataSet.spaceDirections[1][1] * invertY, this._dataSet.spaceDirections[1][2]); + var y = new three_src_math_Vector3__WEBPACK_IMPORTED_MODULE_1__["Vector3"](this._dataSet.spaceDirections[1][0] * invertX, this._dataSet.spaceDirections[1][1] * invertY, this._dataSet.spaceDirections[1][2]); y.normalize(); return [x.x, x.y, x.z, y.x, y.y, y.z]; - } + }; /** * Image position @@ -40170,9 +41012,13 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default * * @return {*} */ - imagePosition(frameIndex = 0) { + + + ParsersNifti.prototype.imagePosition = function imagePosition() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + return [this._dataSet.spaceOrigin[0], this._dataSet.spaceOrigin[1], this._dataSet.spaceOrigin[2]]; - } + }; /** * Extract pixel data ffrom array buffer @@ -40181,9 +41027,13 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default * * @return {*} */ - extractPixelData(frameIndex = 0) { + + + ParsersNifti.prototype.extractPixelData = function extractPixelData() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + return this._decompressUncompressed(frameIndex); - } + }; /** * Decompress data from uncompressed array buffer @@ -40192,18 +41042,22 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default * * @return {*} */ - _decompressUncompressed(frameIndex = 0) { - let buffer = this._dataSet.buffer; - const numberOfChannels = this.numberOfChannels(); - const numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels; + + + ParsersNifti.prototype._decompressUncompressed = function _decompressUncompressed() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var buffer = this._dataSet.buffer; + var numberOfChannels = this.numberOfChannels(); + var numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels; if (!this.rightHanded()) { frameIndex = this.numberOfFrames() - 1 - frameIndex; } - let frameOffset = frameIndex * numPixels; + var frameOffset = frameIndex * numPixels; // unpack data if needed if (this._unpackedData === null && this._dataSet.encoding === 'gzip') { - let unpackedData = pako.inflate(this._dataSet.buffer); + var unpackedData = pako.inflate(this._dataSet.buffer); this._unpackedData = unpackedData.buffer; buffer = this._unpackedData; } else if (this._dataSet.encoding === 'gzip') { @@ -40230,8 +41084,12 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default frameOffset = frameOffset * 4; return new Float32Array(buffer, frameOffset, numPixels); } - } -} + }; + + return ParsersNifti; +}(_parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (ParsersNifti); /***/ }), @@ -40244,189 +41102,234 @@ class ParsersNifti extends _parsers_volume__WEBPACK_IMPORTED_MODULE_0__["default "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ParsersVolume; }); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * @module parsers/volume */ -class ParsersVolume { - constructor() { +var ParsersVolume = function () { + function ParsersVolume() { + _classCallCheck(this, ParsersVolume); + this._rightHanded = true; } - pixelRepresentation() { + ParsersVolume.prototype.pixelRepresentation = function pixelRepresentation() { return 0; - } + }; + + ParsersVolume.prototype.pixelPaddingValue = function pixelPaddingValue() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - pixelPaddingValue(frameIndex = 0) { return null; - } + }; - modality() { + ParsersVolume.prototype.modality = function modality() { return 'unknown'; - } + }; - segmentationType() { + ParsersVolume.prototype.segmentationType = function segmentationType() { return 'unknown'; - } + }; - segmentationSegments() { + ParsersVolume.prototype.segmentationSegments = function segmentationSegments() { return []; - } + }; - referencedSegmentNumber(frameIndex) { + ParsersVolume.prototype.referencedSegmentNumber = function referencedSegmentNumber(frameIndex) { return -1; - } + }; - rightHanded() { + ParsersVolume.prototype.rightHanded = function rightHanded() { return this._rightHanded; - } + }; - spacingBetweenSlices() { + ParsersVolume.prototype.spacingBetweenSlices = function spacingBetweenSlices() { return null; - } + }; - numberOfChannels() { + ParsersVolume.prototype.numberOfChannels = function numberOfChannels() { return 1; - } + }; - sliceThickness() { + ParsersVolume.prototype.sliceThickness = function sliceThickness() { return null; - } + }; + + ParsersVolume.prototype.dimensionIndexValues = function dimensionIndexValues() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - dimensionIndexValues(frameIndex = 0) { return null; - } + }; + + ParsersVolume.prototype.instanceNumber = function instanceNumber() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - instanceNumber(frameIndex = 0) { return frameIndex; - } + }; + + ParsersVolume.prototype.windowCenter = function windowCenter() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - windowCenter(frameIndex = 0) { return null; - } + }; + + ParsersVolume.prototype.windowWidth = function windowWidth() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - windowWidth(frameIndex = 0) { return null; - } + }; + + ParsersVolume.prototype.rescaleSlope = function rescaleSlope() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - rescaleSlope(frameIndex = 0) { return 1; - } + }; + + ParsersVolume.prototype.rescaleIntercept = function rescaleIntercept() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - rescaleIntercept(frameIndex = 0) { return 0; - } + }; + + ParsersVolume.prototype.ultrasoundRegions = function ultrasoundRegions() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - ultrasoundRegions(frameIndex = 0) { return []; - } + }; + + ParsersVolume.prototype.frameTime = function frameTime() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - frameTime(frameIndex = 0) { return null; - } + }; - _decompressUncompressed() {} + ParsersVolume.prototype._decompressUncompressed = function _decompressUncompressed() {}; // http://stackoverflow.com/questions/5320439/how-do-i-swap-endian-ness-byte-order-of-a-variable-in-javascript - _swap16(val) { + + + ParsersVolume.prototype._swap16 = function _swap16(val) { return (val & 0xff) << 8 | val >> 8 & 0xff; - } + }; - _swap32(val) { + ParsersVolume.prototype._swap32 = function _swap32(val) { return (val & 0xff) << 24 | (val & 0xff00) << 8 | val >> 8 & 0xff00 | val >> 24 & 0xff; - } + }; - invert() { + ParsersVolume.prototype.invert = function invert() { return false; - } + }; /** * Get the transfer syntax UID. * @return {*} */ - transferSyntaxUID() { + + + ParsersVolume.prototype.transferSyntaxUID = function transferSyntaxUID() { return 'no value provided'; - } + }; /** * Get the study date. * @return {*} */ - studyDate() { + + + ParsersVolume.prototype.studyDate = function studyDate() { return 'no value provided'; - } + }; /** * Get the study desciption. * @return {*} */ - studyDescription() { + + + ParsersVolume.prototype.studyDescription = function studyDescription() { return 'no value provided'; - } + }; /** * Get the series date. * @return {*} */ - seriesDate() { + + + ParsersVolume.prototype.seriesDate = function seriesDate() { return 'no value provided'; - } + }; /** * Get the series desciption. * @return {*} */ - seriesDescription() { + + + ParsersVolume.prototype.seriesDescription = function seriesDescription() { return 'no value provided'; - } + }; /** * Get the raw Header. * @return {*} */ - rawHeader() { + + + ParsersVolume.prototype.rawHeader = function rawHeader() { return 'no value provided'; - } + }; /** * Get the patient ID. * @return {*} */ - patientID() { + + + ParsersVolume.prototype.patientID = function patientID() { return 'no value provided'; - } + }; /** * Get the patient name. * @return {*} */ - patientName() { + + + ParsersVolume.prototype.patientName = function patientName() { return 'no value provided'; - } + }; /** * Get the patient age. * @return {*} */ - patientAge() { + + + ParsersVolume.prototype.patientAge = function patientAge() { return 'no value provided'; - } + }; /** * Get the patient birthdate. * @return {*} */ - patientBirthdate() { + + + ParsersVolume.prototype.patientBirthdate = function patientBirthdate() { return 'no value provided'; - } + }; /** * Get the patient sex. * @return {*} */ - patientSex() { + + + ParsersVolume.prototype.patientSex = function patientSex() { return 'no value provided'; - } + }; /** * Get min/max values in array @@ -40435,18 +41338,26 @@ class ParsersVolume { * * @return {*} */ - minMaxPixelData(pixelData = []) { - let minMax = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY]; - let numPixels = pixelData.length; - for (let index = 0; index < numPixels; index++) { - let spv = pixelData[index]; + + + ParsersVolume.prototype.minMaxPixelData = function minMaxPixelData() { + var pixelData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + + var minMax = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY]; + var numPixels = pixelData.length; + for (var index = 0; index < numPixels; index++) { + var spv = pixelData[index]; minMax[0] = Math.min(minMax[0], spv); minMax[1] = Math.max(minMax[1], spv); } return minMax; - } -} + }; + + return ParsersVolume; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (ParsersVolume); /***/ }), @@ -40476,7 +41387,7 @@ __webpack_require__.r(__webpack_exports__); "use strict"; __webpack_require__.r(__webpack_exports__); -const segmentationFs = { +var segmentationFs = { 0: { color: [0, 0, 0], opacity: 0, label: 'Unknown' }, 1: { color: [70, 130, 180], opacity: 1, label: 'Left-Cerebral-Exterior' }, 2: { color: [245, 245, 245], opacity: 1, label: 'Left-Cerebral-White-Matter' }, @@ -41872,54 +42783,69 @@ const segmentationFs = { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return PresetsSegmentation; }); /* harmony import */ var _presets_segmentation_freesurfer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./presets.segmentation.freesurfer */ "./src/presets/presets.segmentation.freesurfer.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * @module presets/segmentation */ -class PresetsSegmentation { - constructor(presetID = 'Freesurfer') { - this._presetID = presetID; - this._presets = this.presetSegs(); - } +var PresetsSegmentation = function () { + function PresetsSegmentation() { + var presetID = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Freesurfer'; - set preset(targetPreset) { - this._presetID = targetPreset; - } + _classCallCheck(this, PresetsSegmentation); - get preset() { - return this.fetchPreset(this._presetID); + this._presetID = presetID; + this._presets = this.presetSegs(); } - fetchPreset(presetID) { - let presets = this._presets; + PresetsSegmentation.prototype.fetchPreset = function fetchPreset(presetID) { + var presets = this._presets; return presets[presetID]; - } + }; - addPreset(presetObj) { + PresetsSegmentation.prototype.addPreset = function addPreset(presetObj) { this._presets.push(presetObj); - } + }; + + PresetsSegmentation.prototype.presetsAvailable = function presetsAvailable() { + var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'segmentation'; - presetsAvailable(type = 'segmentation') { - let available = []; - let presets = this._presets; + var available = []; + var presets = this._presets; - for (let i in presets) { + for (var i in presets) { available.push(i); } return available; - } + }; - presetSegs() { + PresetsSegmentation.prototype.presetSegs = function presetSegs() { return { Freesurfer: _presets_segmentation_freesurfer__WEBPACK_IMPORTED_MODULE_0__["default"] }; - } -} + }; + + _createClass(PresetsSegmentation, [{ + key: 'preset', + set: function set(targetPreset) { + this._presetID = targetPreset; + }, + get: function get() { + return this.fetchPreset(this._presetID); + } + }]); + + return PresetsSegmentation; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (PresetsSegmentation); /***/ }), @@ -41933,55 +42859,61 @@ class PresetsSegmentation { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _shaders_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shaders.base */ "./src/shaders/shaders.base.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + + + +var IntersectBox = function (_ShadersBase) { + _inherits(IntersectBox, _ShadersBase); + + function IntersectBox() { + _classCallCheck(this, IntersectBox); + var _this = _possibleConstructorReturn(this, _ShadersBase.call(this)); -class IntersectBox extends _shaders_base__WEBPACK_IMPORTED_MODULE_0__["default"] { - constructor() { - super(); - this.name = 'intersectBox'; + _this.name = 'intersectBox'; // default properties names - this._rayOrigin = 'rayOrigin'; - this._rayDirection = 'rayDirection'; - this._aabbMin = 'aabbMin'; - this._aabbMax = 'aabbMax'; - this._tNear = 'tNear'; - this._tFar = 'tFar'; - this._intersect = 'intersect'; - } + _this._rayOrigin = 'rayOrigin'; + _this._rayDirection = 'rayDirection'; + _this._aabbMin = 'aabbMin'; + _this._aabbMax = 'aabbMax'; + _this._tNear = 'tNear'; + _this._tFar = 'tFar'; + _this._intersect = 'intersect'; + return _this; + } + + IntersectBox.prototype.api = function api() { + var baseFragment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._base; + var rayOrigin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._rayOrigin; + var rayDirection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this._rayDirection; + var aabbMin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this._aabbMin; + var aabbMax = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this._aabbMax; + var tNear = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : this._tNear; + var tFar = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : this._tFar; + var intersect = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : this._intersect; - api(baseFragment = this._base, rayOrigin = this._rayOrigin, rayDirection = this._rayDirection, aabbMin = this._aabbMin, aabbMax = this._aabbMax, tNear = this._tNear, tFar = this._tFar, intersect = this._intersect) { this._base = baseFragment; return this.compute(rayOrigin, rayDirection, aabbMin, aabbMax, tNear, tFar, intersect); - } + }; - compute(rayOrigin, rayDirection, aabbMin, aabbMax, tNear, tFar, intersect) { + IntersectBox.prototype.compute = function compute(rayOrigin, rayDirection, aabbMin, aabbMax, tNear, tFar, intersect) { this.computeDefinition(); this._base._functions[this._name] = this._definition; - return `${this._name}(${rayOrigin}, ${rayDirection}, ${aabbMin}, ${aabbMax}, ${tNear}, ${tFar}, ${intersect});`; - } + return this._name + '(' + rayOrigin + ', ' + rayDirection + ', ' + aabbMin + ', ' + aabbMax + ', ' + tNear + ', ' + tFar + ', ' + intersect + ');'; + }; - computeDefinition() { - this._definition = ` -void ${this._name}(vec3 rayOrigin, vec3 rayDirection, vec3 boxMin, vec3 boxMax, out float tNear, out float tFar, out bool intersect){ - // compute intersection of ray with all six bbox planes - vec3 invRay = vec3(1.) / rayDirection; - vec3 tBot = invRay * (boxMin - rayOrigin); - vec3 tTop = invRay * (boxMax - rayOrigin); - // re-order intersections to find smallest and largest on each axis - vec3 tMin = min(tTop, tBot); - vec3 tMax = max(tTop, tBot); - // find the largest tMin and the smallest tMax - float largest_tMin = max(max(tMin.x, tMin.y), max(tMin.x, tMin.z)); - float smallest_tMax = min(min(tMax.x, tMax.y), min(tMax.x, tMax.z)); - tNear = largest_tMin; - tFar = smallest_tMax; - intersect = smallest_tMax > largest_tMin; -} + IntersectBox.prototype.computeDefinition = function computeDefinition() { + this._definition = '\nvoid ' + this._name + '(vec3 rayOrigin, vec3 rayDirection, vec3 boxMin, vec3 boxMax, out float tNear, out float tFar, out bool intersect){\n // compute intersection of ray with all six bbox planes\n vec3 invRay = vec3(1.) / rayDirection;\n vec3 tBot = invRay * (boxMin - rayOrigin);\n vec3 tTop = invRay * (boxMax - rayOrigin);\n // re-order intersections to find smallest and largest on each axis\n vec3 tMin = min(tTop, tBot);\n vec3 tMax = max(tTop, tBot);\n // find the largest tMin and the smallest tMax\n float largest_tMin = max(max(tMin.x, tMin.y), max(tMin.x, tMin.z));\n float smallest_tMax = min(min(tMax.x, tMax.y), min(tMax.x, tMax.z));\n tNear = largest_tMin;\n tFar = smallest_tMax;\n intersect = smallest_tMax > largest_tMin;\n}\n\n '; + }; - `; - } -} + return IntersectBox; +}(_shaders_base__WEBPACK_IMPORTED_MODULE_0__["default"]); /* harmony default export */ __webpack_exports__["default"] = (new IntersectBox()); @@ -41997,85 +42929,59 @@ void ${this._name}(vec3 rayOrigin, vec3 rayDirection, vec3 boxMin, vec3 boxMax, "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _shaders_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shaders.base */ "./src/shaders/shaders.base.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -class Texture3d extends _shaders_base__WEBPACK_IMPORTED_MODULE_0__["default"] { - constructor() { - super(); - this.name = 'texture3d'; + + +var Texture3d = function (_ShadersBase) { + _inherits(Texture3d, _ShadersBase); + + function Texture3d() { + _classCallCheck(this, Texture3d); + + var _this = _possibleConstructorReturn(this, _ShadersBase.call(this)); + + _this.name = 'texture3d'; // default properties names - this._dataCoordinates = 'dataCoordinates'; - this._dataValue = 'dataValue'; - this._offset = 'offset'; + _this._dataCoordinates = 'dataCoordinates'; + _this._dataValue = 'dataValue'; + _this._offset = 'offset'; + return _this; } - api(baseFragment = this._base, dataCoordinates = this._dataCoordinates, dataValue = this._dataValue, offset = this._offset) { + Texture3d.prototype.api = function api() { + var baseFragment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._base; + var dataCoordinates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._dataCoordinates; + var dataValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this._dataValue; + var offset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this._offset; + this._base = baseFragment; return this.compute(dataCoordinates, dataValue, offset); - } + }; - compute(dataCoordinates, dataValue, offset) { + Texture3d.prototype.compute = function compute(dataCoordinates, dataValue, offset) { this.computeDefinition(); this._base._functions[this._name] = this._definition; - return `${this._name}(${dataCoordinates}, ${dataValue}, ${offset});`; - } + return this._name + '(' + dataCoordinates + ', ' + dataValue + ', ' + offset + ');'; + }; - computeDefinition() { - let content = ` - step( abs( textureIndexF - 0.0 ), 0.0 ) * texture2D(uTextureContainer[0], uv) + - step( abs( textureIndexF - 1.0 ), 0.0 ) * texture2D(uTextureContainer[1], uv) + - step( abs( textureIndexF - 2.0 ), 0.0 ) * texture2D(uTextureContainer[2], uv) + - step( abs( textureIndexF - 3.0 ), 0.0 ) * texture2D(uTextureContainer[3], uv) + - step( abs( textureIndexF - 4.0 ), 0.0 ) * texture2D(uTextureContainer[4], uv) + - step( abs( textureIndexF - 5.0 ), 0.0 ) * texture2D(uTextureContainer[5], uv) + - step( abs( textureIndexF - 6.0 ), 0.0 ) * texture2D(uTextureContainer[6], uv)`; + Texture3d.prototype.computeDefinition = function computeDefinition() { + var content = '\n step( abs( textureIndexF - 0.0 ), 0.0 ) * texture2D(uTextureContainer[0], uv) +\n step( abs( textureIndexF - 1.0 ), 0.0 ) * texture2D(uTextureContainer[1], uv) +\n step( abs( textureIndexF - 2.0 ), 0.0 ) * texture2D(uTextureContainer[2], uv) +\n step( abs( textureIndexF - 3.0 ), 0.0 ) * texture2D(uTextureContainer[3], uv) +\n step( abs( textureIndexF - 4.0 ), 0.0 ) * texture2D(uTextureContainer[4], uv) +\n step( abs( textureIndexF - 5.0 ), 0.0 ) * texture2D(uTextureContainer[5], uv) +\n step( abs( textureIndexF - 6.0 ), 0.0 ) * texture2D(uTextureContainer[6], uv)'; if (this._base._uniforms.uTextureContainer.length === 14) { - content += ` + - step( abs( textureIndexF - 7.0 ), 0.0 ) * texture2D(uTextureContainer[7], uv) + - step( abs( textureIndexF - 8.0 ), 0.0 ) * texture2D(uTextureContainer[8], uv) + - step( abs( textureIndexF - 9.0 ), 0.0 ) * texture2D(uTextureContainer[9], uv) + - step( abs( textureIndexF - 10.0 ), 0.0 ) * texture2D(uTextureContainer[10], uv) + - step( abs( textureIndexF - 11.0 ), 0.0 ) * texture2D(uTextureContainer[11], uv) + - step( abs( textureIndexF - 12.0 ), 0.0 ) * texture2D(uTextureContainer[12], uv) + - step( abs( textureIndexF - 13.0 ), 0.0 ) * texture2D(uTextureContainer[13], uv)`; + content += ' +\n step( abs( textureIndexF - 7.0 ), 0.0 ) * texture2D(uTextureContainer[7], uv) +\n step( abs( textureIndexF - 8.0 ), 0.0 ) * texture2D(uTextureContainer[8], uv) +\n step( abs( textureIndexF - 9.0 ), 0.0 ) * texture2D(uTextureContainer[9], uv) +\n step( abs( textureIndexF - 10.0 ), 0.0 ) * texture2D(uTextureContainer[10], uv) +\n step( abs( textureIndexF - 11.0 ), 0.0 ) * texture2D(uTextureContainer[11], uv) +\n step( abs( textureIndexF - 12.0 ), 0.0 ) * texture2D(uTextureContainer[12], uv) +\n step( abs( textureIndexF - 13.0 ), 0.0 ) * texture2D(uTextureContainer[13], uv)'; } - this._definition = ` -void ${this._name}(in ivec3 dataCoordinates, out vec4 dataValue, out int offset){ - float textureSizeF = float(uTextureSize); - int voxelsPerTexture = uTextureSize*uTextureSize; - - int index = dataCoordinates.x - + dataCoordinates.y * uDataDimensions.x - + dataCoordinates.z * uDataDimensions.y * uDataDimensions.x; - - // dividing an integer by an integer will give you an integer result, rounded down - // can not get float numbers to work :( - int packedIndex = index/uPackedPerPixel; - offset = index - uPackedPerPixel*packedIndex; - - // Map data index to right sampler2D texture - int textureIndex = packedIndex/voxelsPerTexture; - int inTextureIndex = packedIndex - voxelsPerTexture*textureIndex; - - // Get row and column in the texture - int rowIndex = inTextureIndex/uTextureSize; - float rowIndexF = float(rowIndex); - float colIndex = float(inTextureIndex - uTextureSize * rowIndex); - - // Map row and column to uv - vec2 uv = vec2(0,0); - uv.x = (0.5 + colIndex) / textureSizeF; - uv.y = 1. - (0.5 + rowIndexF) / textureSizeF; + this._definition = '\nvoid ' + this._name + '(in ivec3 dataCoordinates, out vec4 dataValue, out int offset){\n float textureSizeF = float(uTextureSize);\n int voxelsPerTexture = uTextureSize*uTextureSize;\n\n int index = dataCoordinates.x\n + dataCoordinates.y * uDataDimensions.x\n + dataCoordinates.z * uDataDimensions.y * uDataDimensions.x;\n \n // dividing an integer by an integer will give you an integer result, rounded down\n // can not get float numbers to work :(\n int packedIndex = index/uPackedPerPixel;\n offset = index - uPackedPerPixel*packedIndex;\n\n // Map data index to right sampler2D texture\n int textureIndex = packedIndex/voxelsPerTexture;\n int inTextureIndex = packedIndex - voxelsPerTexture*textureIndex;\n\n // Get row and column in the texture\n int rowIndex = inTextureIndex/uTextureSize;\n float rowIndexF = float(rowIndex);\n float colIndex = float(inTextureIndex - uTextureSize * rowIndex);\n\n // Map row and column to uv\n vec2 uv = vec2(0,0);\n uv.x = (0.5 + colIndex) / textureSizeF;\n uv.y = 1. - (0.5 + rowIndexF) / textureSizeF;\n\n float textureIndexF = float(textureIndex);\n dataValue = vec4(0.) + ' + content + ';\n}\n '; + }; - float textureIndexF = float(textureIndex); - dataValue = vec4(0.) + ${content}; -} - `; - } -} + return Texture3d; +}(_shaders_base__WEBPACK_IMPORTED_MODULE_0__["default"]); /* harmony default export */ __webpack_exports__["default"] = (new Texture3d()); @@ -42091,25 +42997,37 @@ void ${this._name}(in ivec3 dataCoordinates, out vec4 dataValue, out int offset) "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _shaders_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shaders.base */ "./src/shaders/shaders.base.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * Set of methods to unpack values from [r][b][g][a] -> float */ -class Unpack extends _shaders_base__WEBPACK_IMPORTED_MODULE_0__["default"] { + +var Unpack = function (_ShadersBase) { + _inherits(Unpack, _ShadersBase); + /** * Constructor */ - constructor() { - super(); - this.name = 'unpack'; + function Unpack() { + _classCallCheck(this, Unpack); + + var _this = _possibleConstructorReturn(this, _ShadersBase.call(this)); + + _this.name = 'unpack'; // default properties names - this._packedData = 'packedData'; - this._offset = 'offset'; - this._unpackedData = 'unpackedData'; + _this._packedData = 'packedData'; + _this._offset = 'offset'; + _this._unpackedData = 'unpackedData'; - this._base._uniforms = { + _this._base._uniforms = { uNumberOfChannels: { value: 1 }, @@ -42120,22 +43038,28 @@ class Unpack extends _shaders_base__WEBPACK_IMPORTED_MODULE_0__["default"] { value: 0 } }; + return _this; } - api(baseFragment = this._base, packedData = this._packedData, offset = this._offset, unpackedData = this._unpackedData) { + Unpack.prototype.api = function api() { + var baseFragment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._base; + var packedData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._packedData; + var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this._offset; + var unpackedData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this._unpackedData; + this._base = baseFragment; return this.compute(packedData, offset, unpackedData); - } + }; - compute(packedData, offset, unpackedData) { + Unpack.prototype.compute = function compute(packedData, offset, unpackedData) { this.computeDefinition(); this._base._functions[this._name] = this._definition; - return `${this._name}(${packedData}, ${offset}, ${unpackedData});`; - } + return this._name + '(' + packedData + ', ' + offset + ', ' + unpackedData + ');'; + }; - computeDefinition() { + Unpack.prototype.computeDefinition = function computeDefinition() { // fun stuff - let content = ''; + var content = ''; if (this._base._uniforms.uNumberOfChannels.value === 1) { switch (this._base._uniforms.uBitsAllocated.value) { case 1: @@ -42159,232 +43083,55 @@ class Unpack extends _shaders_base__WEBPACK_IMPORTED_MODULE_0__["default"] { content = this.upackIdentity(); } - this._definition = ` -void ${this._name}(in vec4 packedData, in int offset, out vec4 unpackedData){ - -${content} - -} - `; - } + this._definition = '\nvoid ' + this._name + '(in vec4 packedData, in int offset, out vec4 unpackedData){\n\n' + content + '\n\n} \n '; + }; - upack8() { + Unpack.prototype.upack8 = function upack8() { this._base._functions['uInt8'] = this.uInt8(); - return ` -float floatedOffset = float(offset); -float floatedOffsetSquared = floatedOffset * floatedOffset; -uInt8( - step( floatedOffsetSquared , 0.0 ) * packedData.r + - step( floatedOffsetSquared - 2. * floatedOffset + 1., 0.0 ) * packedData.g + - step( floatedOffsetSquared - 2. * 2. * floatedOffset + 4., 0.0 ) * packedData.b + - step( floatedOffsetSquared - 2. * 3. * floatedOffset + 9., 0.0 ) * packedData.a - , - unpackedData.x); - `; - } + return '\nfloat floatedOffset = float(offset);\nfloat floatedOffsetSquared = floatedOffset * floatedOffset;\nuInt8(\n step( floatedOffsetSquared , 0.0 ) * packedData.r +\n step( floatedOffsetSquared - 2. * floatedOffset + 1., 0.0 ) * packedData.g +\n step( floatedOffsetSquared - 2. * 2. * floatedOffset + 4., 0.0 ) * packedData.b +\n step( floatedOffsetSquared - 2. * 3. * floatedOffset + 9., 0.0 ) * packedData.a\n ,\n unpackedData.x);\n '; + }; - upack16() { + Unpack.prototype.upack16 = function upack16() { this._base._functions['uInt16'] = this.uInt16(); - return ` -float floatedOffset = float(offset); -uInt16( - packedData.r * (1. - floatedOffset) + packedData.b * floatedOffset, - packedData.g * (1. - floatedOffset) + packedData.a * floatedOffset, - unpackedData.x); - `; - } + return '\nfloat floatedOffset = float(offset);\nuInt16(\n packedData.r * (1. - floatedOffset) + packedData.b * floatedOffset,\n packedData.g * (1. - floatedOffset) + packedData.a * floatedOffset,\n unpackedData.x);\n '; + }; - upack32() { + Unpack.prototype.upack32 = function upack32() { if (this._base._uniforms.uPixelType.value === 0) { this._base._functions['uInt32'] = this.uInt32(); - return ` -uInt32( - packedData.r, - packedData.g, - packedData.b, - packedData.a, - unpackedData.x); - `; + return '\nuInt32(\n packedData.r,\n packedData.g,\n packedData.b,\n packedData.a,\n unpackedData.x);\n '; } else { this._base._functions['uFloat32'] = this.uFloat32(); - return ` -uFloat32( - packedData.r, - packedData.g, - packedData.b, - packedData.a, - unpackedData.x); - `; - } - } - - upackIdentity() { - return ` -unpackedData = packedData; - `; - } - - uInt8() { - return ` -void uInt8(in float r, out float value){ - value = r * 255.; -} - `; - } - - uInt16() { - return ` -void uInt16(in float r, in float a, out float value){ - value = r * 255. + a * 255. * 256.; -} - `; - } - - uInt32() { - return ` -void uInt32(in float r, in float g, in float b, in float a, out float value){ - value = r * 255. + g * 255. * 256. + b * 255. * 256. * 256. + a * 255. * 256. * 256. * 256.; - // value = r * 255. + g * 65025. + b * 16581375. + a * 4228250625.; -} - `; - } - - uFloat32() { - return ` -void uFloat32(in float r, in float g, in float b, in float a, out float value){ - - // create arrays containing bits for rgba values - // value between 0 and 255 - value = r * 255.; - int bytemeR[8]; - bytemeR[0] = int(floor(value / 128.)); - value -= float(bytemeR[0] * 128); - bytemeR[1] = int(floor(value / 64.)); - value -= float(bytemeR[1] * 64); - bytemeR[2] = int(floor(value / 32.)); - value -= float(bytemeR[2] * 32); - bytemeR[3] = int(floor(value / 16.)); - value -= float(bytemeR[3] * 16); - bytemeR[4] = int(floor(value / 8.)); - value -= float(bytemeR[4] * 8); - bytemeR[5] = int(floor(value / 4.)); - value -= float(bytemeR[5] * 4); - bytemeR[6] = int(floor(value / 2.)); - value -= float(bytemeR[6] * 2); - bytemeR[7] = int(floor(value)); - - value = g * 255.; - int bytemeG[8]; - bytemeG[0] = int(floor(value / 128.)); - value -= float(bytemeG[0] * 128); - bytemeG[1] = int(floor(value / 64.)); - value -= float(bytemeG[1] * 64); - bytemeG[2] = int(floor(value / 32.)); - value -= float(bytemeG[2] * 32); - bytemeG[3] = int(floor(value / 16.)); - value -= float(bytemeG[3] * 16); - bytemeG[4] = int(floor(value / 8.)); - value -= float(bytemeG[4] * 8); - bytemeG[5] = int(floor(value / 4.)); - value -= float(bytemeG[5] * 4); - bytemeG[6] = int(floor(value / 2.)); - value -= float(bytemeG[6] * 2); - bytemeG[7] = int(floor(value)); - - value = b * 255.; - int bytemeB[8]; - bytemeB[0] = int(floor(value / 128.)); - value -= float(bytemeB[0] * 128); - bytemeB[1] = int(floor(value / 64.)); - value -= float(bytemeB[1] * 64); - bytemeB[2] = int(floor(value / 32.)); - value -= float(bytemeB[2] * 32); - bytemeB[3] = int(floor(value / 16.)); - value -= float(bytemeB[3] * 16); - bytemeB[4] = int(floor(value / 8.)); - value -= float(bytemeB[4] * 8); - bytemeB[5] = int(floor(value / 4.)); - value -= float(bytemeB[5] * 4); - bytemeB[6] = int(floor(value / 2.)); - value -= float(bytemeB[6] * 2); - bytemeB[7] = int(floor(value)); - - value = a * 255.; - int bytemeA[8]; - bytemeA[0] = int(floor(value / 128.)); - value -= float(bytemeA[0] * 128); - bytemeA[1] = int(floor(value / 64.)); - value -= float(bytemeA[1] * 64); - bytemeA[2] = int(floor(value / 32.)); - value -= float(bytemeA[2] * 32); - bytemeA[3] = int(floor(value / 16.)); - value -= float(bytemeA[3] * 16); - bytemeA[4] = int(floor(value / 8.)); - value -= float(bytemeA[4] * 8); - bytemeA[5] = int(floor(value / 4.)); - value -= float(bytemeA[5] * 4); - bytemeA[6] = int(floor(value / 2.)); - value -= float(bytemeA[6] * 2); - bytemeA[7] = int(floor(value)); - - // compute float32 value from bit arrays - - // sign - int issigned = 1 - 2 * bytemeR[0]; - // issigned = int(pow(-1., float(bytemeR[0]))); - - // exponent - int exponent = 0; - - exponent += bytemeR[1] * int(pow(2., 7.)); - exponent += bytemeR[2] * int(pow(2., 6.)); - exponent += bytemeR[3] * int(pow(2., 5.)); - exponent += bytemeR[4] * int(pow(2., 4.)); - exponent += bytemeR[5] * int(pow(2., 3.)); - exponent += bytemeR[6] * int(pow(2., 2.)); - exponent += bytemeR[7] * int(pow(2., 1.)); - - exponent += bytemeG[0]; - - - // fraction - float fraction = 0.; - - fraction = float(bytemeG[1]) * pow(2., -1.); - fraction += float(bytemeG[2]) * pow(2., -2.); - fraction += float(bytemeG[3]) * pow(2., -3.); - fraction += float(bytemeG[4]) * pow(2., -4.); - fraction += float(bytemeG[5]) * pow(2., -5.); - fraction += float(bytemeG[6]) * pow(2., -6.); - fraction += float(bytemeG[7]) * pow(2., -7.); - - fraction += float(bytemeB[0]) * pow(2., -8.); - fraction += float(bytemeB[1]) * pow(2., -9.); - fraction += float(bytemeB[2]) * pow(2., -10.); - fraction += float(bytemeB[3]) * pow(2., -11.); - fraction += float(bytemeB[4]) * pow(2., -12.); - fraction += float(bytemeB[5]) * pow(2., -13.); - fraction += float(bytemeB[6]) * pow(2., -14.); - fraction += float(bytemeB[7]) * pow(2., -15.); - - fraction += float(bytemeA[0]) * pow(2., -16.); - fraction += float(bytemeA[1]) * pow(2., -17.); - fraction += float(bytemeA[2]) * pow(2., -18.); - fraction += float(bytemeA[3]) * pow(2., -19.); - fraction += float(bytemeA[4]) * pow(2., -20.); - fraction += float(bytemeA[5]) * pow(2., -21.); - fraction += float(bytemeA[6]) * pow(2., -22.); - fraction += float(bytemeA[7]) * pow(2., -23.); - - value = float(issigned) * pow( 2., float(exponent - 127)) * (1. + fraction); -} - `; - } -} + return '\nuFloat32(\n packedData.r,\n packedData.g,\n packedData.b,\n packedData.a,\n unpackedData.x);\n '; + } + }; + + Unpack.prototype.upackIdentity = function upackIdentity() { + return '\nunpackedData = packedData;\n '; + }; + + Unpack.prototype.uInt8 = function uInt8() { + return '\nvoid uInt8(in float r, out float value){\n value = r * 255.;\n}\n '; + }; + + Unpack.prototype.uInt16 = function uInt16() { + return '\nvoid uInt16(in float r, in float a, out float value){\n value = r * 255. + a * 255. * 256.;\n}\n '; + }; + + Unpack.prototype.uInt32 = function uInt32() { + return '\nvoid uInt32(in float r, in float g, in float b, in float a, out float value){\n value = r * 255. + g * 255. * 256. + b * 255. * 256. * 256. + a * 255. * 256. * 256. * 256.;\n // value = r * 255. + g * 65025. + b * 16581375. + a * 4228250625.;\n}\n '; + }; + + Unpack.prototype.uFloat32 = function uFloat32() { + return '\nvoid uFloat32(in float r, in float g, in float b, in float a, out float value){\n\n // create arrays containing bits for rgba values\n // value between 0 and 255\n value = r * 255.;\n int bytemeR[8];\n bytemeR[0] = int(floor(value / 128.));\n value -= float(bytemeR[0] * 128);\n bytemeR[1] = int(floor(value / 64.));\n value -= float(bytemeR[1] * 64);\n bytemeR[2] = int(floor(value / 32.));\n value -= float(bytemeR[2] * 32);\n bytemeR[3] = int(floor(value / 16.));\n value -= float(bytemeR[3] * 16);\n bytemeR[4] = int(floor(value / 8.));\n value -= float(bytemeR[4] * 8);\n bytemeR[5] = int(floor(value / 4.));\n value -= float(bytemeR[5] * 4);\n bytemeR[6] = int(floor(value / 2.));\n value -= float(bytemeR[6] * 2);\n bytemeR[7] = int(floor(value));\n\n value = g * 255.;\n int bytemeG[8];\n bytemeG[0] = int(floor(value / 128.));\n value -= float(bytemeG[0] * 128);\n bytemeG[1] = int(floor(value / 64.));\n value -= float(bytemeG[1] * 64);\n bytemeG[2] = int(floor(value / 32.));\n value -= float(bytemeG[2] * 32);\n bytemeG[3] = int(floor(value / 16.));\n value -= float(bytemeG[3] * 16);\n bytemeG[4] = int(floor(value / 8.));\n value -= float(bytemeG[4] * 8);\n bytemeG[5] = int(floor(value / 4.));\n value -= float(bytemeG[5] * 4);\n bytemeG[6] = int(floor(value / 2.));\n value -= float(bytemeG[6] * 2);\n bytemeG[7] = int(floor(value));\n\n value = b * 255.;\n int bytemeB[8];\n bytemeB[0] = int(floor(value / 128.));\n value -= float(bytemeB[0] * 128);\n bytemeB[1] = int(floor(value / 64.));\n value -= float(bytemeB[1] * 64);\n bytemeB[2] = int(floor(value / 32.));\n value -= float(bytemeB[2] * 32);\n bytemeB[3] = int(floor(value / 16.));\n value -= float(bytemeB[3] * 16);\n bytemeB[4] = int(floor(value / 8.));\n value -= float(bytemeB[4] * 8);\n bytemeB[5] = int(floor(value / 4.));\n value -= float(bytemeB[5] * 4);\n bytemeB[6] = int(floor(value / 2.));\n value -= float(bytemeB[6] * 2);\n bytemeB[7] = int(floor(value));\n\n value = a * 255.;\n int bytemeA[8];\n bytemeA[0] = int(floor(value / 128.));\n value -= float(bytemeA[0] * 128);\n bytemeA[1] = int(floor(value / 64.));\n value -= float(bytemeA[1] * 64);\n bytemeA[2] = int(floor(value / 32.));\n value -= float(bytemeA[2] * 32);\n bytemeA[3] = int(floor(value / 16.));\n value -= float(bytemeA[3] * 16);\n bytemeA[4] = int(floor(value / 8.));\n value -= float(bytemeA[4] * 8);\n bytemeA[5] = int(floor(value / 4.));\n value -= float(bytemeA[5] * 4);\n bytemeA[6] = int(floor(value / 2.));\n value -= float(bytemeA[6] * 2);\n bytemeA[7] = int(floor(value));\n\n // compute float32 value from bit arrays\n\n // sign\n int issigned = 1 - 2 * bytemeR[0];\n // issigned = int(pow(-1., float(bytemeR[0])));\n\n // exponent\n int exponent = 0;\n\n exponent += bytemeR[1] * int(pow(2., 7.));\n exponent += bytemeR[2] * int(pow(2., 6.));\n exponent += bytemeR[3] * int(pow(2., 5.));\n exponent += bytemeR[4] * int(pow(2., 4.));\n exponent += bytemeR[5] * int(pow(2., 3.));\n exponent += bytemeR[6] * int(pow(2., 2.));\n exponent += bytemeR[7] * int(pow(2., 1.));\n\n exponent += bytemeG[0];\n\n\n // fraction\n float fraction = 0.;\n\n fraction = float(bytemeG[1]) * pow(2., -1.);\n fraction += float(bytemeG[2]) * pow(2., -2.);\n fraction += float(bytemeG[3]) * pow(2., -3.);\n fraction += float(bytemeG[4]) * pow(2., -4.);\n fraction += float(bytemeG[5]) * pow(2., -5.);\n fraction += float(bytemeG[6]) * pow(2., -6.);\n fraction += float(bytemeG[7]) * pow(2., -7.);\n\n fraction += float(bytemeB[0]) * pow(2., -8.);\n fraction += float(bytemeB[1]) * pow(2., -9.);\n fraction += float(bytemeB[2]) * pow(2., -10.);\n fraction += float(bytemeB[3]) * pow(2., -11.);\n fraction += float(bytemeB[4]) * pow(2., -12.);\n fraction += float(bytemeB[5]) * pow(2., -13.);\n fraction += float(bytemeB[6]) * pow(2., -14.);\n fraction += float(bytemeB[7]) * pow(2., -15.);\n\n fraction += float(bytemeA[0]) * pow(2., -16.);\n fraction += float(bytemeA[1]) * pow(2., -17.);\n fraction += float(bytemeA[2]) * pow(2., -18.);\n fraction += float(bytemeA[3]) * pow(2., -19.);\n fraction += float(bytemeA[4]) * pow(2., -20.);\n fraction += float(bytemeA[5]) * pow(2., -21.);\n fraction += float(bytemeA[6]) * pow(2., -22.);\n fraction += float(bytemeA[7]) * pow(2., -23.);\n\n value = float(issigned) * pow( 2., float(exponent - 127)) * (1. + fraction);\n}\n '; + }; + + return Unpack; +}(_shaders_base__WEBPACK_IMPORTED_MODULE_0__["default"]); /* harmony default export */ __webpack_exports__["default"] = (new Unpack()); @@ -42402,47 +43149,53 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _shaders_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shaders.base */ "./src/shaders/shaders.base.js"); /* harmony import */ var _helpers_shaders_helpers_unpack__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/shaders.helpers.unpack */ "./src/shaders/helpers/shaders.helpers.unpack.js"); /* harmony import */ var _helpers_shaders_helpers_texture3d__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers/shaders.helpers.texture3d */ "./src/shaders/helpers/shaders.helpers.texture3d.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -class InterpolationIdentity extends _shaders_base__WEBPACK_IMPORTED_MODULE_0__["default"] { - constructor() { - super(); - this.name = 'interpolationIdentity'; + +var InterpolationIdentity = function (_ShadersBase) { + _inherits(InterpolationIdentity, _ShadersBase); + + function InterpolationIdentity() { + _classCallCheck(this, InterpolationIdentity); + + var _this = _possibleConstructorReturn(this, _ShadersBase.call(this)); + + _this.name = 'interpolationIdentity'; // default properties names - this._currentVoxel = 'currentVoxel'; - this._dataValue = 'dataValue'; + _this._currentVoxel = 'currentVoxel'; + _this._dataValue = 'dataValue'; + return _this; } - api(baseFragment = this._base, currentVoxel = this._currentVoxel, dataValue = this._dataValue) { + InterpolationIdentity.prototype.api = function api() { + var baseFragment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._base; + var currentVoxel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._currentVoxel; + var dataValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this._dataValue; + this._base = baseFragment; return this.compute(currentVoxel, dataValue); - } + }; - compute(currentVoxel, dataValue) { + InterpolationIdentity.prototype.compute = function compute(currentVoxel, dataValue) { this.computeDefinition(); this._base._functions[this._name] = this._definition; - return `${this._name}(${currentVoxel}, ${dataValue});`; - } - - computeDefinition() { - this._definition = ` -void ${this._name}(in vec3 currentVoxel, out vec4 dataValue){ - // lower bound - vec3 rcurrentVoxel = vec3(floor(currentVoxel.x + 0.5 ), floor(currentVoxel.y + 0.5 ), floor(currentVoxel.z + 0.5 )); - ivec3 voxel = ivec3(int(rcurrentVoxel.x), int(rcurrentVoxel.y), int(rcurrentVoxel.z)); + return this._name + '(' + currentVoxel + ', ' + dataValue + ');'; + }; - vec4 tmp = vec4(0., 0., 0., 0.); - int offset = 0; + InterpolationIdentity.prototype.computeDefinition = function computeDefinition() { + this._definition = '\nvoid ' + this._name + '(in vec3 currentVoxel, out vec4 dataValue){\n // lower bound\n vec3 rcurrentVoxel = vec3(floor(currentVoxel.x + 0.5 ), floor(currentVoxel.y + 0.5 ), floor(currentVoxel.z + 0.5 ));\n ivec3 voxel = ivec3(int(rcurrentVoxel.x), int(rcurrentVoxel.y), int(rcurrentVoxel.z));\n\n vec4 tmp = vec4(0., 0., 0., 0.);\n int offset = 0;\n\n ' + _helpers_shaders_helpers_texture3d__WEBPACK_IMPORTED_MODULE_2__["default"].api(this._base, 'voxel', 'tmp', 'offset') + '\n ' + _helpers_shaders_helpers_unpack__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'tmp', 'offset', 'dataValue') + '\n}\n '; + }; - ${_helpers_shaders_helpers_texture3d__WEBPACK_IMPORTED_MODULE_2__["default"].api(this._base, 'voxel', 'tmp', 'offset')} - ${_helpers_shaders_helpers_unpack__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'tmp', 'offset', 'dataValue')} -} - `; - } -} + return InterpolationIdentity; +}(_shaders_base__WEBPACK_IMPORTED_MODULE_0__["default"]); /* harmony default export */ __webpack_exports__["default"] = (new InterpolationIdentity()); @@ -42492,180 +43245,54 @@ function shadersInterpolation(baseFragment, currentVoxel, dataValue, gradient) { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _shaders_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shaders.base */ "./src/shaders/shaders.base.js"); /* harmony import */ var _shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./shaders.interpolation.identity */ "./src/shaders/interpolation/shaders.interpolation.identity.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -class InterpolationTrilinear extends _shaders_base__WEBPACK_IMPORTED_MODULE_0__["default"] { - constructor() { - super(); - this.name = 'interpolationTrilinear'; - - // default properties names - this._currentVoxel = 'currentVoxel'; - this._dataValue = 'dataValue'; - this._gradient = 'gradient'; - } - - api(baseFragment = this._base, currentVoxel = this._currentVoxel, dataValue = this._dataValue, gradient = this._gradient) { - this._base = baseFragment; - return this.compute(currentVoxel, dataValue, gradient); - } - compute(currentVoxel, dataValue, gradient) { - this.computeDefinition(); - this._base._functions[this._name] = this._definition; - return `${this._name}(${currentVoxel}, ${dataValue}, ${gradient});`; - } - computeDefinition() { - this._definition = ` -void trilinearInterpolation( - in vec3 normalizedPosition, - out vec4 interpolatedValue, - in vec4 v000, in vec4 v100, - in vec4 v001, in vec4 v101, - in vec4 v010, in vec4 v110, - in vec4 v011, in vec4 v111) { - // https://en.wikipedia.org/wiki/Trilinear_interpolation - vec4 c00 = v000 * ( 1.0 - normalizedPosition.x ) + v100 * normalizedPosition.x; - vec4 c01 = v001 * ( 1.0 - normalizedPosition.x ) + v101 * normalizedPosition.x; - vec4 c10 = v010 * ( 1.0 - normalizedPosition.x ) + v110 * normalizedPosition.x; - vec4 c11 = v011 * ( 1.0 - normalizedPosition.x ) + v111 * normalizedPosition.x; - // c0 and c1 - vec4 c0 = c00 * ( 1.0 - normalizedPosition.y) + c10 * normalizedPosition.y; - vec4 c1 = c01 * ( 1.0 - normalizedPosition.y) + c11 * normalizedPosition.y; +var InterpolationTrilinear = function (_ShadersBase) { + _inherits(InterpolationTrilinear, _ShadersBase); - // c - vec4 c = c0 * ( 1.0 - normalizedPosition.z) + c1 * normalizedPosition.z; - interpolatedValue = c; -} + function InterpolationTrilinear() { + _classCallCheck(this, InterpolationTrilinear); -void ${this._name}(in vec3 currentVoxel, out vec4 dataValue, out vec3 gradient){ + var _this = _possibleConstructorReturn(this, _ShadersBase.call(this)); - vec3 lower_bound = floor(currentVoxel); - lower_bound = max(vec3(0.), lower_bound); - - vec3 higher_bound = lower_bound + vec3(1.); + _this.name = 'interpolationTrilinear'; - vec3 normalizedPosition = (currentVoxel - lower_bound); - normalizedPosition = max(vec3(0.), normalizedPosition); - - vec4 interpolatedValue = vec4(0.); - - // - // fetch values required for interpolation - // - vec4 v000 = vec4(0.0, 0.0, 0.0, 0.0); - vec3 c000 = vec3(lower_bound.x, lower_bound.y, lower_bound.z); - ${_shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c000', 'v000')} - - // - vec4 v100 = vec4(0.0, 0.0, 0.0, 0.0); - vec3 c100 = vec3(higher_bound.x, lower_bound.y, lower_bound.z); - ${_shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c100', 'v100')} - - // - vec4 v001 = vec4(0.0, 0.0, 0.0, 0.0); - vec3 c001 = vec3(lower_bound.x, lower_bound.y, higher_bound.z); - ${_shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c001', 'v001')} - - // - vec4 v101 = vec4(0.0, 0.0, 0.0, 0.0); - vec3 c101 = vec3(higher_bound.x, lower_bound.y, higher_bound.z); - ${_shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c101', 'v101')} - - // - vec4 v010 = vec4(0.0, 0.0, 0.0, 0.0); - vec3 c010 = vec3(lower_bound.x, higher_bound.y, lower_bound.z); - ${_shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c010', 'v010')} - - vec4 v110 = vec4(0.0, 0.0, 0.0, 0.0); - vec3 c110 = vec3(higher_bound.x, higher_bound.y, lower_bound.z); - ${_shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c110', 'v110')} - - // - vec4 v011 = vec4(0.0, 0.0, 0.0, 0.0); - vec3 c011 = vec3(lower_bound.x, higher_bound.y, higher_bound.z); - ${_shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c011', 'v011')} - - vec4 v111 = vec4(0.0, 0.0, 0.0, 0.0); - vec3 c111 = vec3(higher_bound.x, higher_bound.y, higher_bound.z); - ${_shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c111', 'v111')} - - // compute interpolation at position - trilinearInterpolation(normalizedPosition, interpolatedValue ,v000, v100, v001, v101, v010,v110, v011,v111); - dataValue = interpolatedValue; - - // That breaks shading in volume rendering - // if (gradient.x == 1.) { // skip gradient calculation for slice helper - // return; - // } - - // compute gradient - float gradientStep = 0.005; - - // x axis - vec3 g100 = vec3(1., 0., 0.); - vec3 ng100 = normalizedPosition + g100 * gradientStep; - ng100.x = min(1., ng100.x); - - vec4 vg100 = vec4(0.); - trilinearInterpolation(ng100, vg100 ,v000, v100, v001, v101, v010,v110, v011,v111); - - vec3 go100 = -g100; - vec3 ngo100 = normalizedPosition + go100 * gradientStep; - ngo100.x = max(0., ngo100.x); - - vec4 vgo100 = vec4(0.); - trilinearInterpolation(ngo100, vgo100 ,v000, v100, v001, v101, v010,v110, v011,v111); - - gradient.x = (g100.x * vg100.x + go100.x * vgo100.x); - - // y axis - vec3 g010 = vec3(0., 1., 0.); - vec3 ng010 = normalizedPosition + g010 * gradientStep; - ng010.y = min(1., ng010.y); - - vec4 vg010 = vec4(0.); - trilinearInterpolation(ng010, vg010 ,v000, v100, v001, v101, v010,v110, v011,v111); - - vec3 go010 = -g010; - vec3 ngo010 = normalizedPosition + go010 * gradientStep; - ngo010.y = max(0., ngo010.y); - - vec4 vgo010 = vec4(0.); - trilinearInterpolation(ngo010, vgo010 ,v000, v100, v001, v101, v010,v110, v011,v111); - - gradient.y = (g010.y * vg010.x + go010.y * vgo010.x); + // default properties names + _this._currentVoxel = 'currentVoxel'; + _this._dataValue = 'dataValue'; + _this._gradient = 'gradient'; + return _this; + } - // z axis - vec3 g001 = vec3(0., 0., 1.); - vec3 ng001 = normalizedPosition + g001 * gradientStep; - ng001.z = min(1., ng001.z); + InterpolationTrilinear.prototype.api = function api() { + var baseFragment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._base; + var currentVoxel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._currentVoxel; + var dataValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this._dataValue; + var gradient = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this._gradient; - vec4 vg001 = vec4(0.); - trilinearInterpolation(ng001, vg001 ,v000, v100, v001, v101, v010,v110, v011,v111); + this._base = baseFragment; + return this.compute(currentVoxel, dataValue, gradient); + }; - vec3 go001 = -g001; - vec3 ngo001 = normalizedPosition + go001 * gradientStep; - ngo001.z = max(0., ngo001.z); + InterpolationTrilinear.prototype.compute = function compute(currentVoxel, dataValue, gradient) { + this.computeDefinition(); + this._base._functions[this._name] = this._definition; + return this._name + '(' + currentVoxel + ', ' + dataValue + ', ' + gradient + ');'; + }; - vec4 vgo001 = vec4(0.); - trilinearInterpolation(ngo001, vgo001 ,v000, v100, v001, v101, v010,v110, v011,v111); + InterpolationTrilinear.prototype.computeDefinition = function computeDefinition() { + this._definition = '\nvoid trilinearInterpolation(\n in vec3 normalizedPosition,\n out vec4 interpolatedValue,\n in vec4 v000, in vec4 v100,\n in vec4 v001, in vec4 v101,\n in vec4 v010, in vec4 v110,\n in vec4 v011, in vec4 v111) {\n // https://en.wikipedia.org/wiki/Trilinear_interpolation\n vec4 c00 = v000 * ( 1.0 - normalizedPosition.x ) + v100 * normalizedPosition.x;\n vec4 c01 = v001 * ( 1.0 - normalizedPosition.x ) + v101 * normalizedPosition.x;\n vec4 c10 = v010 * ( 1.0 - normalizedPosition.x ) + v110 * normalizedPosition.x;\n vec4 c11 = v011 * ( 1.0 - normalizedPosition.x ) + v111 * normalizedPosition.x;\n\n // c0 and c1\n vec4 c0 = c00 * ( 1.0 - normalizedPosition.y) + c10 * normalizedPosition.y;\n vec4 c1 = c01 * ( 1.0 - normalizedPosition.y) + c11 * normalizedPosition.y;\n\n // c\n vec4 c = c0 * ( 1.0 - normalizedPosition.z) + c1 * normalizedPosition.z;\n interpolatedValue = c;\n}\n\nvoid ' + this._name + '(in vec3 currentVoxel, out vec4 dataValue, out vec3 gradient){\n\n vec3 lower_bound = floor(currentVoxel);\n lower_bound = max(vec3(0.), lower_bound);\n \n vec3 higher_bound = lower_bound + vec3(1.);\n\n vec3 normalizedPosition = (currentVoxel - lower_bound);\n normalizedPosition = max(vec3(0.), normalizedPosition);\n\n vec4 interpolatedValue = vec4(0.);\n\n //\n // fetch values required for interpolation\n //\n vec4 v000 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c000 = vec3(lower_bound.x, lower_bound.y, lower_bound.z);\n ' + _shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c000', 'v000') + '\n\n //\n vec4 v100 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c100 = vec3(higher_bound.x, lower_bound.y, lower_bound.z);\n ' + _shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c100', 'v100') + '\n\n //\n vec4 v001 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c001 = vec3(lower_bound.x, lower_bound.y, higher_bound.z);\n ' + _shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c001', 'v001') + '\n\n //\n vec4 v101 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c101 = vec3(higher_bound.x, lower_bound.y, higher_bound.z);\n ' + _shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c101', 'v101') + '\n \n //\n vec4 v010 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c010 = vec3(lower_bound.x, higher_bound.y, lower_bound.z);\n ' + _shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c010', 'v010') + '\n\n vec4 v110 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c110 = vec3(higher_bound.x, higher_bound.y, lower_bound.z);\n ' + _shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c110', 'v110') + '\n\n //\n vec4 v011 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c011 = vec3(lower_bound.x, higher_bound.y, higher_bound.z);\n ' + _shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c011', 'v011') + '\n\n vec4 v111 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c111 = vec3(higher_bound.x, higher_bound.y, higher_bound.z);\n ' + _shaders_interpolation_identity__WEBPACK_IMPORTED_MODULE_1__["default"].api(this._base, 'c111', 'v111') + '\n\n // compute interpolation at position\n trilinearInterpolation(normalizedPosition, interpolatedValue ,v000, v100, v001, v101, v010,v110, v011,v111);\n dataValue = interpolatedValue;\n\n // That breaks shading in volume rendering\n // if (gradient.x == 1.) { // skip gradient calculation for slice helper\n // return;\n // }\n\n // compute gradient\n float gradientStep = 0.005;\n\n // x axis\n vec3 g100 = vec3(1., 0., 0.);\n vec3 ng100 = normalizedPosition + g100 * gradientStep;\n ng100.x = min(1., ng100.x);\n\n vec4 vg100 = vec4(0.);\n trilinearInterpolation(ng100, vg100 ,v000, v100, v001, v101, v010,v110, v011,v111);\n\n vec3 go100 = -g100;\n vec3 ngo100 = normalizedPosition + go100 * gradientStep;\n ngo100.x = max(0., ngo100.x);\n\n vec4 vgo100 = vec4(0.);\n trilinearInterpolation(ngo100, vgo100 ,v000, v100, v001, v101, v010,v110, v011,v111);\n\n gradient.x = (g100.x * vg100.x + go100.x * vgo100.x);\n\n // y axis\n vec3 g010 = vec3(0., 1., 0.);\n vec3 ng010 = normalizedPosition + g010 * gradientStep;\n ng010.y = min(1., ng010.y);\n\n vec4 vg010 = vec4(0.);\n trilinearInterpolation(ng010, vg010 ,v000, v100, v001, v101, v010,v110, v011,v111);\n\n vec3 go010 = -g010;\n vec3 ngo010 = normalizedPosition + go010 * gradientStep;\n ngo010.y = max(0., ngo010.y);\n\n vec4 vgo010 = vec4(0.);\n trilinearInterpolation(ngo010, vgo010 ,v000, v100, v001, v101, v010,v110, v011,v111);\n\n gradient.y = (g010.y * vg010.x + go010.y * vgo010.x);\n\n // z axis\n vec3 g001 = vec3(0., 0., 1.);\n vec3 ng001 = normalizedPosition + g001 * gradientStep;\n ng001.z = min(1., ng001.z);\n\n vec4 vg001 = vec4(0.);\n trilinearInterpolation(ng001, vg001 ,v000, v100, v001, v101, v010,v110, v011,v111);\n\n vec3 go001 = -g001;\n vec3 ngo001 = normalizedPosition + go001 * gradientStep;\n ngo001.z = max(0., ngo001.z);\n\n vec4 vgo001 = vec4(0.);\n trilinearInterpolation(ngo001, vgo001 ,v000, v100, v001, v101, v010,v110, v011,v111);\n\n gradient.z = (g001.z * vg001.x + go001.z * vgo001.x);\n\n // normalize gradient\n // +0.0001 instead of if?\n float gradientMagnitude = length(gradient);\n if (gradientMagnitude > 0.0) {\n gradient = -(1. / gradientMagnitude) * gradient;\n }\n}\n '; + }; - gradient.z = (g001.z * vg001.x + go001.z * vgo001.x); - - // normalize gradient - // +0.0001 instead of if? - float gradientMagnitude = length(gradient); - if (gradientMagnitude > 0.0) { - gradient = -(1. / gradientMagnitude) * gradient; - } -} - `; - } -} + return InterpolationTrilinear; +}(_shaders_base__WEBPACK_IMPORTED_MODULE_0__["default"]); /* harmony default export */ __webpack_exports__["default"] = (new InterpolationTrilinear()); @@ -42680,9 +43307,14 @@ void ${this._name}(in vec3 currentVoxel, out vec4 dataValue, out vec3 gradient){ "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ShadersBase; }); -class ShadersBase { - constructor() { +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var ShadersBase = function () { + function ShadersBase() { + _classCallCheck(this, ShadersBase); + this._name = 'shadersBase'; this._base = { _functions: {}, @@ -42691,14 +43323,20 @@ class ShadersBase { this._definition = ''; } - get name() { - return this._name; - } + _createClass(ShadersBase, [{ + key: 'name', + get: function get() { + return this._name; + }, + set: function set(name) { + this._name = name; + } + }]); - set name(name) { - this._name = name; - } -} + return ShadersBase; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (ShadersBase); /***/ }), @@ -42711,126 +43349,65 @@ class ShadersBase { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ShadersFragment; }); -class ShadersFragment { +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var ShadersFragment = function () { // pass uniforms object - constructor(uniforms) { + function ShadersFragment(uniforms) { + _classCallCheck(this, ShadersFragment); + this._uniforms = uniforms; this._functions = {}; this._main = ''; } - functions() { + ShadersFragment.prototype.functions = function functions() { if (this._main === '') { // if main is empty, functions can not have been computed this.main(); } - let content = ''; - for (let property in this._functions) { + var content = ''; + for (var property in this._functions) { content += this._functions[property] + '\n'; } return content; - } + }; - uniforms() { - let content = ''; - for (let property in this._uniforms) { - let uniform = this._uniforms[property]; - content += `uniform ${uniform.typeGLSL} ${property}`; + ShadersFragment.prototype.uniforms = function uniforms() { + var content = ''; + for (var property in this._uniforms) { + var uniform = this._uniforms[property]; + content += 'uniform ' + uniform.typeGLSL + ' ' + property; if (uniform && uniform.length) { - content += `[${uniform.length}]`; + content += '[' + uniform.length + ']'; } content += ';\n'; } return content; - } + }; - main() { + ShadersFragment.prototype.main = function main() { // need to pre-call main to fill up the functions list - this._main = ` - -float luma (vec3 rgb) { - return (rgb.r + rgb.g + rgb.b)/3.0; -} - -const float T = 0.04; -const float M = 1.0; -const float L = 0.002; - -void main(void) { - - vec2 texCoord = vec2(((vProjectedCoords.x / vProjectedCoords.w) + 1.0 ) / 2.0, - ((vProjectedCoords.y / vProjectedCoords.w) + 1.0 ) / 2.0 ); - - float borderWidth = uWidth; // in px - float step_u = borderWidth * 1.0 / uCanvasWidth; - float step_v = borderWidth * 1.0 / uCanvasHeight; - vec4 centerPixel = texture2D(uTextureFilled, texCoord); - - vec4 rightPixel = texture2D(uTextureFilled, texCoord + vec2(step_u, 0.0)); - vec4 bottomPixel = texture2D(uTextureFilled, texCoord + vec2(0.0, step_v)); - - // now manually compute the derivatives - float _dFdX = length(rightPixel - centerPixel) / step_u; - float _dFdY = length(bottomPixel - centerPixel) / step_v; - - // gl_FragColor.r = _dFdX; - // gl_FragColor.g = _dFdY; - gl_FragColor.r = max(max(centerPixel.r, rightPixel.r), bottomPixel.r); - gl_FragColor.g = max(max(centerPixel.g, rightPixel.g), bottomPixel.g); - gl_FragColor.b = max(max(centerPixel.b, rightPixel.b), bottomPixel.b); - float maxDerivative = max(_dFdX, _dFdY); - float clampedDerivative = clamp(maxDerivative, 0., 1.); - gl_FragColor.a = uOpacity * clampedDerivative; + this._main = '\n\nfloat luma (vec3 rgb) {\n return (rgb.r + rgb.g + rgb.b)/3.0;\n}\n\nconst float T = 0.04;\nconst float M = 1.0;\nconst float L = 0.002;\n\nvoid main(void) {\n\n vec2 texCoord = vec2(((vProjectedCoords.x / vProjectedCoords.w) + 1.0 ) / 2.0,\n ((vProjectedCoords.y / vProjectedCoords.w) + 1.0 ) / 2.0 );\n\n float borderWidth = uWidth; // in px\n float step_u = borderWidth * 1.0 / uCanvasWidth;\n float step_v = borderWidth * 1.0 / uCanvasHeight;\n vec4 centerPixel = texture2D(uTextureFilled, texCoord);\n\n vec4 rightPixel = texture2D(uTextureFilled, texCoord + vec2(step_u, 0.0));\n vec4 bottomPixel = texture2D(uTextureFilled, texCoord + vec2(0.0, step_v));\n\n // now manually compute the derivatives\n float _dFdX = length(rightPixel - centerPixel) / step_u;\n float _dFdY = length(bottomPixel - centerPixel) / step_v;\n\n // gl_FragColor.r = _dFdX;\n // gl_FragColor.g = _dFdY;\n gl_FragColor.r = max(max(centerPixel.r, rightPixel.r), bottomPixel.r);\n gl_FragColor.g = max(max(centerPixel.g, rightPixel.g), bottomPixel.g);\n gl_FragColor.b = max(max(centerPixel.b, rightPixel.b), bottomPixel.b);\n float maxDerivative = max(_dFdX, _dFdY);\n float clampedDerivative = clamp(maxDerivative, 0., 1.);\n gl_FragColor.a = uOpacity * clampedDerivative;\n\n return;\n // float h = 1./uCanvasHeight;\n // float w = 1./uCanvasWidth;\n // vec4 n[9];\n // n[0] = texture2D(uTextureFilled, vProjectedTextCoords + vec2( -w, -h));\n // n[1] = texture2D(uTextureFilled, vProjectedTextCoords + vec2(0.0, -h));\n // n[2] = texture2D(uTextureFilled, vProjectedTextCoords + vec2( w, -h));\n // n[3] = texture2D(uTextureFilled, vProjectedTextCoords + vec2( -w, 0.0));\n // n[4] = texture2D(uTextureFilled, vProjectedTextCoords);\n // n[5] = texture2D(uTextureFilled, texCoord + vec2( w, 0.0));\n // n[6] = texture2D(uTextureFilled, texCoord + vec2( -w, h));\n // n[7] = texture2D(uTextureFilled, texCoord + vec2(0.0, h));\n // n[8] = texture2D(uTextureFilled, texCoord + vec2( w, h));\n // vec4 sobel_horizEdge = n[2] + (2.0*n[5]) + n[8] - (n[0] + (2.0*n[3]) + n[6]);\n // vec4 sobel_vertEdge = n[0] + (2.0*n[1]) + n[2] - (n[6] + (2.0*n[7]) + n[8]);\n // vec3 sobel = sqrt((sobel_horizEdge.rgb * sobel_horizEdge.rgb) + (sobel_vertEdge.rgb * sobel_vertEdge.rgb));\n // gl_FragColor = vec4( sobel, max(max(sobel.r, sobel.g), sobel.b) );\n\n // return;\n}\n '; + }; - return; - // float h = 1./uCanvasHeight; - // float w = 1./uCanvasWidth; - // vec4 n[9]; - // n[0] = texture2D(uTextureFilled, vProjectedTextCoords + vec2( -w, -h)); - // n[1] = texture2D(uTextureFilled, vProjectedTextCoords + vec2(0.0, -h)); - // n[2] = texture2D(uTextureFilled, vProjectedTextCoords + vec2( w, -h)); - // n[3] = texture2D(uTextureFilled, vProjectedTextCoords + vec2( -w, 0.0)); - // n[4] = texture2D(uTextureFilled, vProjectedTextCoords); - // n[5] = texture2D(uTextureFilled, texCoord + vec2( w, 0.0)); - // n[6] = texture2D(uTextureFilled, texCoord + vec2( -w, h)); - // n[7] = texture2D(uTextureFilled, texCoord + vec2(0.0, h)); - // n[8] = texture2D(uTextureFilled, texCoord + vec2( w, h)); - // vec4 sobel_horizEdge = n[2] + (2.0*n[5]) + n[8] - (n[0] + (2.0*n[3]) + n[6]); - // vec4 sobel_vertEdge = n[0] + (2.0*n[1]) + n[2] - (n[6] + (2.0*n[7]) + n[8]); - // vec3 sobel = sqrt((sobel_horizEdge.rgb * sobel_horizEdge.rgb) + (sobel_vertEdge.rgb * sobel_vertEdge.rgb)); - // gl_FragColor = vec4( sobel, max(max(sobel.r, sobel.g), sobel.b) ); - - // return; -} - `; - } - - compute() { - let shaderInterpolation = ''; + ShadersFragment.prototype.compute = function compute() { + var shaderInterpolation = ''; // shaderInterpolation.inline(args) //true/false // shaderInterpolation.functions(args) - return ` -// uniforms -${this.uniforms()} - -// varying (should fetch it from vertex directly) -varying vec4 vProjectedCoords; + return '\n// uniforms\n' + this.uniforms() + '\n\n// varying (should fetch it from vertex directly)\nvarying vec4 vProjectedCoords;\n\n// tailored functions\n' + this.functions() + '\n\n// main loop\n' + this._main + '\n '; + }; -// tailored functions -${this.functions()} + return ShadersFragment; +}(); -// main loop -${this._main} - `; - } -} +/* harmony default export */ __webpack_exports__["default"] = (ShadersFragment); /***/ }), @@ -42843,12 +43420,17 @@ ${this._main} "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ShadersUniform; }); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * @module shaders/data */ -class ShadersUniform { - static uniforms() { +var ShadersUniform = function () { + function ShadersUniform() { + _classCallCheck(this, ShadersUniform); + } + + ShadersUniform.uniforms = function uniforms() { return { uCanvasWidth: { type: 'f', @@ -42876,8 +43458,12 @@ class ShadersUniform { typeGLSL: 'sampler2D' } }; - } -} + }; + + return ShadersUniform; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (ShadersUniform); /***/ }), @@ -42890,26 +43476,21 @@ class ShadersUniform { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ShadersVertex; }); -class ShadersVertex { - compute() { - return ` -varying vec4 vProjectedCoords; +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -// -// main -// -void main() { +var ShadersVertex = function () { + function ShadersVertex() { + _classCallCheck(this, ShadersVertex); + } - vec4 vPos = modelMatrix * vec4(position, 1.0 ); - mat4 vProjectionViewMatrix = projectionMatrix * viewMatrix; - vProjectedCoords = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 ); + ShadersVertex.prototype.compute = function compute() { + return "\nvarying vec4 vProjectedCoords;\n\n//\n// main\n//\nvoid main() {\n\n vec4 vPos = modelMatrix * vec4(position, 1.0 );\n mat4 vProjectionViewMatrix = projectionMatrix * viewMatrix;\n vProjectedCoords = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\n\n}\n "; + }; -} - `; - } -} + return ShadersVertex; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (ShadersVertex); /***/ }), @@ -42922,194 +43503,64 @@ void main() { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ShadersFragment; }); /* harmony import */ var _interpolation_shaders_interpolation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interpolation/shaders.interpolation */ "./src/shaders/interpolation/shaders.interpolation.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -class ShadersFragment { + +var ShadersFragment = function () { // pass uniforms object - constructor(uniforms) { + function ShadersFragment(uniforms) { + _classCallCheck(this, ShadersFragment); + this._uniforms = uniforms; this._functions = {}; this._main = ''; } - functions() { + ShadersFragment.prototype.functions = function functions() { if (this._main === '') { // if main is empty, functions can not have been computed this.main(); } - let content = ''; - for (let property in this._functions) { + var content = ''; + for (var property in this._functions) { content += this._functions[property] + '\n'; } return content; - } + }; - uniforms() { - let content = ''; - for (let property in this._uniforms) { - let uniform = this._uniforms[property]; - content += `uniform ${uniform.typeGLSL} ${property}`; + ShadersFragment.prototype.uniforms = function uniforms() { + var content = ''; + for (var property in this._uniforms) { + var uniform = this._uniforms[property]; + content += 'uniform ' + uniform.typeGLSL + ' ' + property; if (uniform && uniform.length) { - content += `[${uniform.length}]`; + content += '[' + uniform.length + ']'; } content += ';\n'; } return content; - } + }; - main() { + ShadersFragment.prototype.main = function main() { // need to pre-call main to fill up the functions list - this._main = ` -void main(void) { - - // draw border if slice is cropped - // float uBorderDashLength = 10.; - - if( uCanvasWidth > 0. && - ((gl_FragCoord.x > uBorderMargin && (gl_FragCoord.x - uBorderMargin) < uBorderWidth) || - (gl_FragCoord.x < (uCanvasWidth - uBorderMargin) && (gl_FragCoord.x + uBorderMargin) > (uCanvasWidth - uBorderWidth) ))){ - float valueY = mod(gl_FragCoord.y, 2. * uBorderDashLength); - if( valueY < uBorderDashLength && gl_FragCoord.y > uBorderMargin && gl_FragCoord.y < (uCanvasHeight - uBorderMargin) ){ - gl_FragColor = vec4(uBorderColor, 1.); - return; - } - } - - if( uCanvasHeight > 0. && - ((gl_FragCoord.y > uBorderMargin && (gl_FragCoord.y - uBorderMargin) < uBorderWidth) || - (gl_FragCoord.y < (uCanvasHeight - uBorderMargin) && (gl_FragCoord.y + uBorderMargin) > (uCanvasHeight - uBorderWidth) ))){ - float valueX = mod(gl_FragCoord.x, 2. * uBorderDashLength); - if( valueX < uBorderDashLength && gl_FragCoord.x > uBorderMargin && gl_FragCoord.x < (uCanvasWidth - uBorderMargin) ){ - gl_FragColor = vec4(uBorderColor, 1.); - return; - } - } - - // get texture coordinates of current pixel - vec4 dataValue = vec4(0.); - vec3 gradient = vec3(1.); // gradient calculations will be skipped if it is equal to vec3(1.) - float steps = floor(uThickness / uSpacing + 0.5); - - if (steps > 1.) { - vec3 origin = vPos - uThickness * 0.5 * vNormal; - vec4 dataValueAcc = vec4(0.); - for (float step = 0.; step < 128.; step++) { - if (step >= steps) { - break; - } - - vec4 dataCoordinates = uWorldToData * vec4(origin + step * uSpacing * vNormal, 1.); - vec3 currentVoxel = dataCoordinates.xyz; - ${Object(_interpolation_shaders_interpolation__WEBPACK_IMPORTED_MODULE_0__["default"])(this, 'currentVoxel', 'dataValueAcc', 'gradient')}; - - if (step == 0.) { - dataValue.r = dataValueAcc.r; - continue; - } - - if (uThicknessMethod == 0) { - dataValue.r = max(dataValueAcc.r, dataValue.r); - } - if (uThicknessMethod == 1) { - dataValue.r += dataValueAcc.r; - } - if (uThicknessMethod == 2) { - dataValue.r = min(dataValueAcc.r, dataValue.r); - } - } - - if (uThicknessMethod == 1) { - dataValue.r /= steps; - } - } else { - vec4 dataCoordinates = uWorldToData * vec4(vPos, 1.); - vec3 currentVoxel = dataCoordinates.xyz; - ${Object(_interpolation_shaders_interpolation__WEBPACK_IMPORTED_MODULE_0__["default"])(this, 'currentVoxel', 'dataValue', 'gradient')} - } - - if(uNumberOfChannels == 1){ - // rescale/slope - float realIntensity = dataValue.r * uRescaleSlopeIntercept[0] + uRescaleSlopeIntercept[1]; - - // threshold - if (realIntensity < uLowerUpperThreshold[0] || realIntensity > uLowerUpperThreshold[1]) { - discard; - } - - // normalize - float windowMin = uWindowCenterWidth[0] - uWindowCenterWidth[1] * 0.5; - float normalizedIntensity = - ( realIntensity - windowMin ) / uWindowCenterWidth[1]; - dataValue.r = dataValue.g = dataValue.b = normalizedIntensity; - dataValue.a = 1.; - - // apply LUT - if(uLut == 1){ - // should opacity be grabbed there? - dataValue = texture2D( uTextureLUT, vec2( normalizedIntensity , 1.0) ); - } - - // apply segmentation - if(uLutSegmentation == 1){ - // should opacity be grabbed there? - // - float textureWidth = 256.; - float textureHeight = 128.; - float min = 0.; - // start at 0! - int adjustedIntensity = int(floor(realIntensity + 0.5)); - - // Get row and column in the texture - int colIndex = int(mod(float(adjustedIntensity), textureWidth)); - int rowIndex = int(floor(float(adjustedIntensity)/textureWidth)); - - float texWidth = 1./textureWidth; - float texHeight = 1./textureHeight; - - // Map row and column to uv - vec2 uv = vec2(0,0); - uv.x = 0.5 * texWidth + (texWidth * float(colIndex)); - uv.y = 1. - (0.5 * texHeight + float(rowIndex) * texHeight); - - dataValue = texture2D( uTextureLUTSegmentation, uv ); - } - } - - if(uInvert == 1){ - dataValue.xyz = vec3(1.) - dataValue.xyz; - } - - dataValue.a = dataValue.a*uOpacity; - - gl_FragColor = dataValue; -} - `; - } - - compute() { - return ` -// uniforms -${this.uniforms()} + this._main = '\nvoid main(void) {\n\n // draw border if slice is cropped\n // float uBorderDashLength = 10.;\n\n if( uCanvasWidth > 0. &&\n ((gl_FragCoord.x > uBorderMargin && (gl_FragCoord.x - uBorderMargin) < uBorderWidth) ||\n (gl_FragCoord.x < (uCanvasWidth - uBorderMargin) && (gl_FragCoord.x + uBorderMargin) > (uCanvasWidth - uBorderWidth) ))){\n float valueY = mod(gl_FragCoord.y, 2. * uBorderDashLength);\n if( valueY < uBorderDashLength && gl_FragCoord.y > uBorderMargin && gl_FragCoord.y < (uCanvasHeight - uBorderMargin) ){\n gl_FragColor = vec4(uBorderColor, 1.);\n return;\n }\n }\n\n if( uCanvasHeight > 0. &&\n ((gl_FragCoord.y > uBorderMargin && (gl_FragCoord.y - uBorderMargin) < uBorderWidth) ||\n (gl_FragCoord.y < (uCanvasHeight - uBorderMargin) && (gl_FragCoord.y + uBorderMargin) > (uCanvasHeight - uBorderWidth) ))){\n float valueX = mod(gl_FragCoord.x, 2. * uBorderDashLength);\n if( valueX < uBorderDashLength && gl_FragCoord.x > uBorderMargin && gl_FragCoord.x < (uCanvasWidth - uBorderMargin) ){\n gl_FragColor = vec4(uBorderColor, 1.);\n return;\n }\n }\n\n // get texture coordinates of current pixel\n vec4 dataValue = vec4(0.);\n vec3 gradient = vec3(1.); // gradient calculations will be skipped if it is equal to vec3(1.) \n float steps = floor(uThickness / uSpacing + 0.5);\n\n if (steps > 1.) {\n vec3 origin = vPos - uThickness * 0.5 * vNormal;\n vec4 dataValueAcc = vec4(0.);\n for (float step = 0.; step < 128.; step++) {\n if (step >= steps) {\n break;\n }\n\n vec4 dataCoordinates = uWorldToData * vec4(origin + step * uSpacing * vNormal, 1.);\n vec3 currentVoxel = dataCoordinates.xyz;\n ' + Object(_interpolation_shaders_interpolation__WEBPACK_IMPORTED_MODULE_0__["default"])(this, 'currentVoxel', 'dataValueAcc', 'gradient') + ';\n\n if (step == 0.) {\n dataValue.r = dataValueAcc.r;\n continue;\n }\n\n if (uThicknessMethod == 0) {\n dataValue.r = max(dataValueAcc.r, dataValue.r);\n }\n if (uThicknessMethod == 1) {\n dataValue.r += dataValueAcc.r;\n }\n if (uThicknessMethod == 2) {\n dataValue.r = min(dataValueAcc.r, dataValue.r);\n }\n }\n\n if (uThicknessMethod == 1) {\n dataValue.r /= steps;\n }\n } else {\n vec4 dataCoordinates = uWorldToData * vec4(vPos, 1.);\n vec3 currentVoxel = dataCoordinates.xyz;\n ' + Object(_interpolation_shaders_interpolation__WEBPACK_IMPORTED_MODULE_0__["default"])(this, 'currentVoxel', 'dataValue', 'gradient') + '\n }\n\n if(uNumberOfChannels == 1){\n // rescale/slope\n float realIntensity = dataValue.r * uRescaleSlopeIntercept[0] + uRescaleSlopeIntercept[1];\n \n // threshold\n if (realIntensity < uLowerUpperThreshold[0] || realIntensity > uLowerUpperThreshold[1]) {\n discard;\n }\n \n // normalize\n float windowMin = uWindowCenterWidth[0] - uWindowCenterWidth[1] * 0.5;\n float normalizedIntensity =\n ( realIntensity - windowMin ) / uWindowCenterWidth[1];\n dataValue.r = dataValue.g = dataValue.b = normalizedIntensity;\n dataValue.a = 1.;\n\n // apply LUT\n if(uLut == 1){\n // should opacity be grabbed there?\n dataValue = texture2D( uTextureLUT, vec2( normalizedIntensity , 1.0) );\n }\n \n // apply segmentation\n if(uLutSegmentation == 1){\n // should opacity be grabbed there?\n //\n float textureWidth = 256.;\n float textureHeight = 128.;\n float min = 0.;\n // start at 0!\n int adjustedIntensity = int(floor(realIntensity + 0.5));\n \n // Get row and column in the texture\n int colIndex = int(mod(float(adjustedIntensity), textureWidth));\n int rowIndex = int(floor(float(adjustedIntensity)/textureWidth));\n \n float texWidth = 1./textureWidth;\n float texHeight = 1./textureHeight;\n \n // Map row and column to uv\n vec2 uv = vec2(0,0);\n uv.x = 0.5 * texWidth + (texWidth * float(colIndex));\n uv.y = 1. - (0.5 * texHeight + float(rowIndex) * texHeight);\n \n dataValue = texture2D( uTextureLUTSegmentation, uv );\n }\n }\n\n if(uInvert == 1){\n dataValue.xyz = vec3(1.) - dataValue.xyz;\n }\n\n dataValue.a = dataValue.a*uOpacity;\n\n gl_FragColor = dataValue;\n}\n '; + }; -// varying (should fetch it from vertex directly) -varying vec3 vPos; -varying vec3 vNormal; + ShadersFragment.prototype.compute = function compute() { + return '\n// uniforms\n' + this.uniforms() + '\n\n// varying (should fetch it from vertex directly)\nvarying vec3 vPos;\nvarying vec3 vNormal;\n\n// tailored functions\n' + this.functions() + '\n\n// main loop\n' + this._main + '\n '; + }; -// tailored functions -${this.functions()} + return ShadersFragment; +}(); -// main loop -${this._main} - `; - } -} +/* harmony default export */ __webpack_exports__["default"] = (ShadersFragment); /***/ }), @@ -43122,18 +43573,24 @@ ${this._main} "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ShadersUniform; }); /* harmony import */ var three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! three/src/math/Matrix4 */ "./node_modules/three/src/math/Matrix4.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * @module shaders/data */ -class ShadersUniform { + +var ShadersUniform = function () { + function ShadersUniform() { + _classCallCheck(this, ShadersUniform); + } + /** * Shaders data uniforms */ - static uniforms() { + ShadersUniform.uniforms = function uniforms() { return { uTextureSize: { type: 'i', @@ -43275,8 +43732,12 @@ class ShadersUniform { typeGLSL: 'int' } }; - } -} + }; + + return ShadersUniform; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (ShadersUniform); /***/ }), @@ -43289,22 +43750,21 @@ class ShadersUniform { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ShadersVertex; }); -class ShadersVertex { - compute() { - return ` -varying vec3 vPos; -varying vec3 vNormal; - -void main() { - vNormal = normal; - vPos = (modelMatrix * vec4(position, 1.0 )).xyz; - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 ); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -} - `; +var ShadersVertex = function () { + function ShadersVertex() { + _classCallCheck(this, ShadersVertex); } -} + + ShadersVertex.prototype.compute = function compute() { + return "\nvarying vec3 vPos;\nvarying vec3 vNormal;\n\nvoid main() {\n vNormal = normal;\n vPos = (modelMatrix * vec4(position, 1.0 )).xyz;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\n\n}\n "; + }; + + return ShadersVertex; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (ShadersVertex); /***/ }), @@ -43395,117 +43855,65 @@ __webpack_require__.r(__webpack_exports__); "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ShadersFragment; }); -class ShadersFragment { +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var ShadersFragment = function () { // pass uniforms object - constructor(uniforms) { + function ShadersFragment(uniforms) { + _classCallCheck(this, ShadersFragment); + this._uniforms = uniforms; this._functions = {}; this._main = ''; } - functions() { + ShadersFragment.prototype.functions = function functions() { if (this._main === '') { // if main is empty, functions can not have been computed this.main(); } - let content = ''; - for (let property in this._functions) { + var content = ''; + for (var property in this._functions) { content += this._functions[property] + '\n'; } return content; - } + }; - uniforms() { - let content = ''; - for (let property in this._uniforms) { - let uniform = this._uniforms[property]; - content += `uniform ${uniform.typeGLSL} ${property}`; + ShadersFragment.prototype.uniforms = function uniforms() { + var content = ''; + for (var property in this._uniforms) { + var uniform = this._uniforms[property]; + content += 'uniform ' + uniform.typeGLSL + ' ' + property; if (uniform && uniform.length) { - content += `[${uniform.length}]`; + content += '[' + uniform.length + ']'; } content += ';\n'; } return content; - } + }; - main() { + ShadersFragment.prototype.main = function main() { // need to pre-call main to fill up the functions list - this._main = ` -void main(void) { - - vec2 texc = vec2(((vProjectedCoords.x / vProjectedCoords.w) + 1.0 ) / 2.0, - ((vProjectedCoords.y / vProjectedCoords.w) + 1.0 ) / 2.0 ); - - // just silence warning for - // vec4 dummy = vPos; - - //The back position is the world space position stored in the texture. - vec4 baseColor0 = texture2D(uTextureBackTest0, texc); - vec4 baseColor1 = texture2D(uTextureBackTest1, texc); - - if( uTrackMouse == 1 ){ - - if( vProjectedCoords.x < uMouse.x ){ - - gl_FragColor = baseColor0; - - } - else{ - - gl_FragColor = mix( baseColor0, baseColor1, uOpacity1 ); - - } - - } - else{ - - if( uType1 == 0 ){ - - //merge an image into - gl_FragColor = mix( baseColor0, baseColor1, uOpacity1 ); - - } - else{ - - float opacity = baseColor1.a; - gl_FragColor = mix( baseColor0, baseColor1, opacity * uOpacity1 ); - - } - - } - - return; -} - `; - } + this._main = '\nvoid main(void) {\n\n vec2 texc = vec2(((vProjectedCoords.x / vProjectedCoords.w) + 1.0 ) / 2.0,\n ((vProjectedCoords.y / vProjectedCoords.w) + 1.0 ) / 2.0 );\n\n // just silence warning for\n // vec4 dummy = vPos;\n\n //The back position is the world space position stored in the texture.\n vec4 baseColor0 = texture2D(uTextureBackTest0, texc);\n vec4 baseColor1 = texture2D(uTextureBackTest1, texc);\n\n if( uTrackMouse == 1 ){\n\n if( vProjectedCoords.x < uMouse.x ){\n\n gl_FragColor = baseColor0;\n\n }\n else{\n\n gl_FragColor = mix( baseColor0, baseColor1, uOpacity1 );\n\n }\n\n }\n else{\n\n if( uType1 == 0 ){\n\n //merge an image into\n gl_FragColor = mix( baseColor0, baseColor1, uOpacity1 );\n\n }\n else{\n\n float opacity = baseColor1.a;\n gl_FragColor = mix( baseColor0, baseColor1, opacity * uOpacity1 );\n\n }\n\n }\n\n return;\n}\n '; + }; - compute() { - let shaderInterpolation = ''; + ShadersFragment.prototype.compute = function compute() { + var shaderInterpolation = ''; // shaderInterpolation.inline(args) //true/false // shaderInterpolation.functions(args) - return ` -// uniforms -${this.uniforms()} - -// varying (should fetch it from vertex directly) -// varying vec4 vPos; -varying vec4 vProjectedCoords; + return '\n// uniforms\n' + this.uniforms() + '\n\n// varying (should fetch it from vertex directly)\n// varying vec4 vPos;\nvarying vec4 vProjectedCoords;\n\n// tailored functions\n' + this.functions() + '\n\n// main loop\n' + this._main + '\n '; + }; -// tailored functions -${this.functions()} + return ShadersFragment; +}(); -// main loop -${this._main} - `; - } -} +/* harmony default export */ __webpack_exports__["default"] = (ShadersFragment); /***/ }), @@ -43518,15 +43926,21 @@ ${this._main} "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ShadersUniform; }); /* harmony import */ var three_src_math_Vector2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! three/src/math/Vector2 */ "./node_modules/three/src/math/Vector2.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * @module shaders/data */ -class ShadersUniform { - static uniforms() { + +var ShadersUniform = function () { + function ShadersUniform() { + _classCallCheck(this, ShadersUniform); + } + + ShadersUniform.uniforms = function uniforms() { return { uTextureBackTest0: { type: 't', @@ -43569,8 +43983,12 @@ class ShadersUniform { typeGLSL: 'vec2' } }; - } -} + }; + + return ShadersUniform; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (ShadersUniform); /***/ }), @@ -43583,26 +44001,21 @@ class ShadersUniform { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ShadersVertex; }); -class ShadersVertex { - compute() { - return ` -// varying vec4 vPos; -varying vec4 vProjectedCoords; +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -// -// main -// -void main() { +var ShadersVertex = function () { + function ShadersVertex() { + _classCallCheck(this, ShadersVertex); + } - vec4 vPos = modelMatrix * vec4(position, 1.0 ); - vProjectedCoords = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 ); + ShadersVertex.prototype.compute = function compute() { + return "\n// varying vec4 vPos;\nvarying vec4 vProjectedCoords;\n\n//\n// main\n//\nvoid main() {\n\n vec4 vPos = modelMatrix * vec4(position, 1.0 );\n vProjectedCoords = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\n\n}\n "; + }; -} - `; - } -} + return ShadersVertex; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (ShadersVertex); /***/ }), @@ -43615,14 +44028,18 @@ void main() { "use strict"; __webpack_require__.r(__webpack_exports__); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * Localizer fragment shader */ -/* harmony default export */ __webpack_exports__["default"] = (class { +var _class = function () { /** * */ - constructor(uniforms) { + function _class(uniforms) { + _classCallCheck(this, _class); + this._uniforms = uniforms; this._functions = {}; this._main = ''; @@ -43631,155 +44048,66 @@ __webpack_require__.r(__webpack_exports__); /** * */ - functions() { + + + _class.prototype.functions = function functions() { if (this._main === '') { // if main is empty, functions can not have been computed this.main(); } - let content = ''; - for (let property in this._functions) { + var content = ''; + for (var property in this._functions) { content += this._functions[property] + '\n'; } return content; - } + }; /** * */ - uniforms() { - let content = ''; - for (let property in this._uniforms) { - let uniform = this._uniforms[property]; - content += `uniform ${uniform.typeGLSL} ${property}`; + + + _class.prototype.uniforms = function uniforms() { + var content = ''; + for (var property in this._uniforms) { + var uniform = this._uniforms[property]; + content += 'uniform ' + uniform.typeGLSL + ' ' + property; if (uniform && uniform.length) { - content += `[${uniform.length}]`; + content += '[' + uniform.length + ']'; } content += ';\n'; } return content; - } + }; /** * */ - main() { + + + _class.prototype.main = function main() { // need to pre-call main to fill up the functions list - this._main = ` -void intersectionProjection( - in vec4 plane, - in vec4 slice, - out vec3 intersectionProjection){ - - vec3 intersectionDirection = normalize(cross(plane.xyz, slice.xyz)); - vec3 intersectionPoint = - cross(intersectionDirection,slice.xyz) * plane.w + - cross(plane.xyz, intersectionDirection) * slice.w; - - intersectionProjection = - intersectionPoint.xyz + - (dot(vPos.xyz - intersectionPoint, intersectionDirection) - * intersectionDirection); - -} - -void main(void) { - vec4 c1 = vec4(0., 0., 0., 0.); - vec4 c2 = vec4(0., 0., 0., 0.); - vec4 c3 = vec4(0., 0., 0., 0.); - - // localizer #1 - // must be normalized! - if(length(uPlane1.xyz) > 0.5) { - vec3 projection1 = vec3(1.); - intersectionProjection( - uPlane1, - uSlice, - projection1 - ); - - vec4 projInter1 = (vProjectionViewMatrix * vec4(projection1, 1.)); - vec3 ndc1 = projInter1.xyz / projInter1.w; - vec2 screenSpace1 = (ndc1.xy * .5 + .5) * vec2(uCanvasWidth, uCanvasHeight); - - float d1 = distance(gl_FragCoord.xy, screenSpace1.xy); - c1 = vec4(uPlaneColor1, 1. - smoothstep(.5, .7, d1)); - } - - // localizer #2 - if(length(uPlane2.xyz) > 0.5) { - vec3 projection2 = vec3(1.); - intersectionProjection( - uPlane2, - uSlice, - projection2 - ); - - vec4 projInter2 = (vProjectionViewMatrix * vec4(projection2, 1.)); - vec3 ndc2 = projInter2.xyz / projInter2.w; - vec2 screenSpace2 = (ndc2.xy * .5 + .5) * vec2(uCanvasWidth, uCanvasHeight); - - float d2 = distance(gl_FragCoord.xy, screenSpace2.xy); - c2 = vec4(uPlaneColor2, 1. - smoothstep(.5, .7, d2)); - } - - // localizer #3 - if(length(uPlane3.xyz) > 0.5) { - vec3 projection3 = vec3(1.); - intersectionProjection( - uPlane3, - uSlice, - projection3 - ); - - vec4 projInter3 = (vProjectionViewMatrix * vec4(projection3, 1.)); - vec3 ndc3 = projInter3.xyz / projInter3.w; - vec2 screenSpace3 = (ndc3.xy * .5 + .5) * vec2(uCanvasWidth, uCanvasHeight); - - float d3 = distance(gl_FragCoord.xy, screenSpace3.xy); - c3 = vec4(uPlaneColor3, 1. - smoothstep(.5, .7, d3)); - } - - // float uBorderDashLength = 10.0; - // float uBorderWidth = 2.0; - // float valueX = mod(gl_FragCoord.x, 2. * uBorderDashLength); - // float valueY = mod(gl_FragCoord.y, 2. * uBorderDashLength); - // if( valueX < uBorderDashLength || valueY < uBorderDashLength ){ - vec3 colorMix = c1.xyz*c1.w + c2.xyz*c2.w + c3.xyz*c3.w; - gl_FragColor = vec4(colorMix, max(max(c1.w, c2.w),c3.w)*0.5); - return; - // } - - // gl_FragColor = vec4(0., 0., 0., 0.); - // return; -} - `; - } + this._main = '\nvoid intersectionProjection(\n in vec4 plane,\n in vec4 slice,\n out vec3 intersectionProjection){\n\n vec3 intersectionDirection = normalize(cross(plane.xyz, slice.xyz));\n vec3 intersectionPoint = \n cross(intersectionDirection,slice.xyz) * plane.w +\n cross(plane.xyz, intersectionDirection) * slice.w;\n\n intersectionProjection =\n intersectionPoint.xyz +\n (dot(vPos.xyz - intersectionPoint, intersectionDirection)\n * intersectionDirection);\n\n}\n\nvoid main(void) {\n vec4 c1 = vec4(0., 0., 0., 0.);\n vec4 c2 = vec4(0., 0., 0., 0.);\n vec4 c3 = vec4(0., 0., 0., 0.);\n\n // localizer #1\n // must be normalized!\n if(length(uPlane1.xyz) > 0.5) {\n vec3 projection1 = vec3(1.);\n intersectionProjection(\n uPlane1,\n uSlice,\n projection1\n );\n\n vec4 projInter1 = (vProjectionViewMatrix * vec4(projection1, 1.));\n vec3 ndc1 = projInter1.xyz / projInter1.w;\n vec2 screenSpace1 = (ndc1.xy * .5 + .5) * vec2(uCanvasWidth, uCanvasHeight);\n\n float d1 = distance(gl_FragCoord.xy, screenSpace1.xy);\n c1 = vec4(uPlaneColor1, 1. - smoothstep(.5, .7, d1));\n }\n\n // localizer #2\n if(length(uPlane2.xyz) > 0.5) {\n vec3 projection2 = vec3(1.);\n intersectionProjection(\n uPlane2,\n uSlice,\n projection2\n );\n\n vec4 projInter2 = (vProjectionViewMatrix * vec4(projection2, 1.));\n vec3 ndc2 = projInter2.xyz / projInter2.w;\n vec2 screenSpace2 = (ndc2.xy * .5 + .5) * vec2(uCanvasWidth, uCanvasHeight);\n\n float d2 = distance(gl_FragCoord.xy, screenSpace2.xy);\n c2 = vec4(uPlaneColor2, 1. - smoothstep(.5, .7, d2));\n }\n\n // localizer #3\n if(length(uPlane3.xyz) > 0.5) {\n vec3 projection3 = vec3(1.);\n intersectionProjection(\n uPlane3,\n uSlice,\n projection3\n );\n\n vec4 projInter3 = (vProjectionViewMatrix * vec4(projection3, 1.));\n vec3 ndc3 = projInter3.xyz / projInter3.w;\n vec2 screenSpace3 = (ndc3.xy * .5 + .5) * vec2(uCanvasWidth, uCanvasHeight);\n\n float d3 = distance(gl_FragCoord.xy, screenSpace3.xy);\n c3 = vec4(uPlaneColor3, 1. - smoothstep(.5, .7, d3));\n }\n\n // float uBorderDashLength = 10.0;\n // float uBorderWidth = 2.0;\n // float valueX = mod(gl_FragCoord.x, 2. * uBorderDashLength);\n // float valueY = mod(gl_FragCoord.y, 2. * uBorderDashLength);\n // if( valueX < uBorderDashLength || valueY < uBorderDashLength ){\n vec3 colorMix = c1.xyz*c1.w + c2.xyz*c2.w + c3.xyz*c3.w;\n gl_FragColor = vec4(colorMix, max(max(c1.w, c2.w),c3.w)*0.5);\n return;\n // }\n \n // gl_FragColor = vec4(0., 0., 0., 0.);\n // return;\n}\n '; + }; /** * */ - compute() { - return ` -// uniforms -${this.uniforms()} -// varying (should fetch it from vertex directly) -varying vec4 vPos; -varying mat4 vProjectionViewMatrix; -// tailored functions -${this.functions()} + _class.prototype.compute = function compute() { + return '\n// uniforms\n' + this.uniforms() + '\n\n// varying (should fetch it from vertex directly)\nvarying vec4 vPos;\nvarying mat4 vProjectionViewMatrix;\n\n// tailored functions\n' + this.functions() + '\n\n// main loop\n' + this._main + '\n '; + }; -// main loop -${this._main} - `; - } -}); + return _class; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (_class); /***/ }), @@ -43792,15 +44120,21 @@ ${this._main} "use strict"; __webpack_require__.r(__webpack_exports__); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * @module shaders/localizer/uniforms */ -/* harmony default export */ __webpack_exports__["default"] = (class { +var _class = function () { + function _class() { + _classCallCheck(this, _class); + } + /** * Shaders data uniforms */ - static uniforms() { + _class.uniforms = function uniforms() { return { uCanvasWidth: { type: 'f', @@ -43848,8 +44182,12 @@ __webpack_require__.r(__webpack_exports__); typeGLSL: 'vec3' } }; - } -}); + }; + + return _class; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (_class); /***/ }), @@ -43862,31 +44200,27 @@ __webpack_require__.r(__webpack_exports__); "use strict"; __webpack_require__.r(__webpack_exports__); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * */ -/* harmony default export */ __webpack_exports__["default"] = (class { +var _class = function () { + function _class() { + _classCallCheck(this, _class); + } + /** * */ - compute() { - return ` -varying vec4 vPos; -varying mat4 vProjectionViewMatrix; - -// -// main -// -void main() { + _class.prototype.compute = function compute() { + return "\nvarying vec4 vPos;\nvarying mat4 vProjectionViewMatrix;\n\n//\n// main\n//\nvoid main() {\n\n vPos = modelMatrix * vec4(position, 1.0 );\n vProjectionViewMatrix = projectionMatrix * viewMatrix;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\n\n}\n "; + }; - vPos = modelMatrix * vec4(position, 1.0 ); - vProjectionViewMatrix = projectionMatrix * viewMatrix; - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 ); + return _class; +}(); -} - `; - } -}); +/* harmony default export */ __webpack_exports__["default"] = (_class); /***/ }), @@ -43899,318 +44233,70 @@ void main() { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ShadersFragment; }); /* harmony import */ var _interpolation_shaders_interpolation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interpolation/shaders.interpolation */ "./src/shaders/interpolation/shaders.interpolation.js"); /* harmony import */ var _helpers_shaders_helpers_intersectBox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/shaders.helpers.intersectBox */ "./src/shaders/helpers/shaders.helpers.intersectBox.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -class ShadersFragment { + +var ShadersFragment = function () { // pass uniforms object - constructor(uniforms) { + function ShadersFragment(uniforms) { + _classCallCheck(this, ShadersFragment); + this._uniforms = uniforms; this._functions = {}; this._main = ''; } - functions() { + ShadersFragment.prototype.functions = function functions() { if (this._main === '') { // if main is empty, functions can not have been computed this.main(); } - let content = ''; - for (let property in this._functions) { + var content = ''; + for (var property in this._functions) { content += this._functions[property] + '\n'; } return content; - } + }; - uniforms() { - let content = ''; - for (let property in this._uniforms) { - let uniform = this._uniforms[property]; - content += `uniform ${uniform.typeGLSL} ${property}`; + ShadersFragment.prototype.uniforms = function uniforms() { + var content = ''; + for (var property in this._uniforms) { + var uniform = this._uniforms[property]; + content += 'uniform ' + uniform.typeGLSL + ' ' + property; if (uniform && uniform.length) { - content += `[${uniform.length}]`; + content += '[' + uniform.length + ']'; } content += ';\n'; } return content; - } + }; - main() { + ShadersFragment.prototype.main = function main() { // need to pre-call main to fill up the functions list - this._main = ` -void getIntensity(in vec3 dataCoordinates, out float intensity, out vec3 gradient){ - - vec4 dataValue = vec4(0., 0., 0., 0.); - ${Object(_interpolation_shaders_interpolation__WEBPACK_IMPORTED_MODULE_0__["default"])(this, 'dataCoordinates', 'dataValue', 'gradient')} - - intensity = dataValue.r; - - // rescale/slope - intensity = intensity*uRescaleSlopeIntercept[0] + uRescaleSlopeIntercept[1]; - // window level - float windowMin = uWindowCenterWidth[0] - uWindowCenterWidth[1] * 0.5; - intensity = ( intensity - windowMin ) / uWindowCenterWidth[1]; -} - -mat4 inverse(mat4 m) { - float - a00 = m[0][0], a01 = m[0][1], a02 = m[0][2], a03 = m[0][3], - a10 = m[1][0], a11 = m[1][1], a12 = m[1][2], a13 = m[1][3], - a20 = m[2][0], a21 = m[2][1], a22 = m[2][2], a23 = m[2][3], - a30 = m[3][0], a31 = m[3][1], a32 = m[3][2], a33 = m[3][3], - - b00 = a00 * a11 - a01 * a10, - b01 = a00 * a12 - a02 * a10, - b02 = a00 * a13 - a03 * a10, - b03 = a01 * a12 - a02 * a11, - b04 = a01 * a13 - a03 * a11, - b05 = a02 * a13 - a03 * a12, - b06 = a20 * a31 - a21 * a30, - b07 = a20 * a32 - a22 * a30, - b08 = a20 * a33 - a23 * a30, - b09 = a21 * a32 - a22 * a31, - b10 = a21 * a33 - a23 * a31, - b11 = a22 * a33 - a23 * a32, - - det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; - - return mat4( - a11 * b11 - a12 * b10 + a13 * b09, - a02 * b10 - a01 * b11 - a03 * b09, - a31 * b05 - a32 * b04 + a33 * b03, - a22 * b04 - a21 * b05 - a23 * b03, - a12 * b08 - a10 * b11 - a13 * b07, - a00 * b11 - a02 * b08 + a03 * b07, - a32 * b02 - a30 * b05 - a33 * b01, - a20 * b05 - a22 * b02 + a23 * b01, - a10 * b10 - a11 * b08 + a13 * b06, - a01 * b08 - a00 * b10 - a03 * b06, - a30 * b04 - a31 * b02 + a33 * b00, - a21 * b02 - a20 * b04 - a23 * b00, - a11 * b07 - a10 * b09 - a12 * b06, - a00 * b09 - a01 * b07 + a02 * b06, - a31 * b01 - a30 * b03 - a32 * b00, - a20 * b03 - a21 * b01 + a22 * b00) / det; -} - -/** - * Adapted from original sources - * - * Original code: - * http://jamie-wong.com/2016/07/15/ray-marching-signed-distance-functions/ - * https://www.shadertoy.com/view/lt33z7 - * - * The vec3 returned is the RGB color of the light's contribution. - * - * k_a: Ambient color - * k_d: Diffuse color - * k_s: Specular color - * alpha: Shininess coefficient - * p: position of point being lit - * eye: the position of the camera - * lightPos: the position of the light - * lightIntensity: color/intensity of the light - * - * See https://en.wikipedia.org/wiki/Phong_reflection_model#Description - */ -vec3 phongShading(vec3 k_a, vec3 k_d, vec3 k_s, float shininess, vec3 p, vec3 eye, - vec3 lightPos, vec3 lightIntensity, vec3 normal) { - vec3 N = normal; - vec3 L = lightPos - p; - if (length(L) > 0.) { - L = L / length(L); - } - vec3 V = eye - p; - if (length(V) > 0.) { - V = V / length(V); - } - vec3 R = reflect(-L, N); - if (length(R) > 0.) { - R = R / length(R); - } - - // https://en.wikipedia.org/wiki/Blinn%E2%80%93Phong_shading_model - vec3 h = L + V; - vec3 H = h; - if (length(h) > 0.) { - H = H / length(h); - } - - float dotLN = dot(L, N); - float dotRV = dot(R, V); - - if (dotLN < 0.) { - // Light not visible from this point on the surface - return k_a; - } - - if (dotRV < 0.) { - // Light reflection in opposite direction as viewer, apply only diffuse - // component - return k_a + lightIntensity * (k_d * dotLN); - } - - float specAngle = max(dot(H, normal), 0.0); - float specular = pow(dotRV, shininess); //pow(specAngle, shininess); // - return k_a + lightIntensity * (k_d * dotLN + k_s * specular); -} - -float PI = 3.14159265358979323846264 * 00000.1; // PI - -// expects values in the range of [0,1]x[0,1], returns values in the [0,1] range. -// do not collapse into a single function per: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/ -highp float rand( const in vec2 uv) { - const highp float a = 12.9898; - const highp float b = 78.233; - const highp float c = 43758.5453; - highp float dt = dot(uv.xy, vec2(a, b)), sn = mod(dt, PI); - return fract(sin(sn) * c); -} - -void main(void) { - const int maxSteps = 1024; - - // the ray - vec3 rayOrigin = cameraPosition; - vec3 rayDirection = normalize(vPos.xyz - rayOrigin); - - vec3 lightOrigin = uLightPositionInCamera == 1 ? cameraPosition : uLightPosition; - - // the Axe-Aligned B-Box - vec3 AABBMin = vec3(uWorldBBox[0], uWorldBBox[2], uWorldBBox[4]); - vec3 AABBMax = vec3(uWorldBBox[1], uWorldBBox[3], uWorldBBox[5]); - - // Intersection ray/bbox - float tNear, tFar; - bool intersect = false; - ${_helpers_shaders_helpers_intersectBox__WEBPACK_IMPORTED_MODULE_1__["default"].api(this, 'rayOrigin', 'rayDirection', 'AABBMin', 'AABBMax', 'tNear', 'tFar', 'intersect')} - if (tNear < 0.0) tNear = 0.0; - - // x / y should be within o-1 - // should - float offset = rand(gl_FragCoord.xy); - - // init the ray marching - float tStep = (tFar - tNear) / float(uSteps); - float tCurrent = tNear + offset * tStep; - vec4 accumulatedColor = vec4(0.0); - float accumulatedAlpha = 0.0; - - // MIP volume rendering - float maxIntensity = 0.0; - - mat4 dataToWorld = inverse(uWorldToData); - - // rayOrigin -= rayDirection * 0.1; // gold_noise(vPos.xz, vPos.y) / 100.; - - for(int rayStep = 0; rayStep < maxSteps; rayStep++){ - vec3 currentPosition = rayOrigin + rayDirection * tCurrent; - // some non-linear FUN - // some occlusion issue to be fixed - vec3 transformedPosition = currentPosition; //transformPoint(currentPosition, uAmplitude, uFrequence); - // world to data coordinates - // rounding trick - // first center of first voxel in data space is CENTERED on (0,0,0) - vec4 dataCoordinatesRaw = uWorldToData * vec4(transformedPosition, 1.0); - vec3 currentVoxel = vec3(dataCoordinatesRaw.x, dataCoordinatesRaw.y, dataCoordinatesRaw.z); - float intensity = 0.0; - vec3 gradient = vec3(0., 0., 0.); - getIntensity(currentVoxel, intensity, gradient); - // map gradient to world space and normalize before using - // we avoid to call "normalize" as it may be undefined if vector length == 0. - gradient = (vec3(dataToWorld * vec4(gradient, 0.))); - if (length(gradient) > 0.0) { - gradient = normalize(gradient); - } - - vec4 colorSample; - float alphaSample; - if(uLut == 1){ - vec4 colorFromLUT = texture2D( uTextureLUT, vec2( intensity, 1.0) ); - // 256 colors - colorSample = colorFromLUT; - alphaSample = colorFromLUT.a; - } - else{ - alphaSample = intensity; - colorSample.r = colorSample.g = colorSample.b = intensity; - } - - // ray marching algorithm - // shading on - // interpolation on - if (uAlgorithm == 0 && uShading == 1 && uInterpolation != 0) { - // && alphaSample > .3 - vec3 ambientComponent = uSampleColorToAmbient == 1 ? colorSample.xyz : uAmbientColor; - ambientComponent *= uAmbient; - vec3 diffuseComponent = uSampleColorToDiffuse == 1 ? colorSample.xyz : uDiffuseColor; - diffuseComponent *= uDiffuse; - vec3 specularComponent = uSpecular * uSpecularColor; - float shininess = uShininess; - vec3 vIntensity = uIntensity; - - colorSample.xyz += phongShading( - ambientComponent, - diffuseComponent, - specularComponent, - shininess, - currentPosition.xyz, - rayOrigin.xyz, - lightOrigin.xyz, - vIntensity, - gradient); - } - - alphaSample = 1.0 - pow((1.0- alphaSample),tStep*uAlphaCorrection); - alphaSample *= (1.0 - accumulatedAlpha); - - accumulatedColor += alphaSample * colorSample; - accumulatedAlpha += alphaSample; + this._main = '\nvoid getIntensity(in vec3 dataCoordinates, out float intensity, out vec3 gradient){\n\n vec4 dataValue = vec4(0., 0., 0., 0.);\n ' + Object(_interpolation_shaders_interpolation__WEBPACK_IMPORTED_MODULE_0__["default"])(this, 'dataCoordinates', 'dataValue', 'gradient') + '\n\n intensity = dataValue.r;\n\n // rescale/slope\n intensity = intensity*uRescaleSlopeIntercept[0] + uRescaleSlopeIntercept[1];\n // window level\n float windowMin = uWindowCenterWidth[0] - uWindowCenterWidth[1] * 0.5;\n intensity = ( intensity - windowMin ) / uWindowCenterWidth[1];\n}\n\nmat4 inverse(mat4 m) {\n float\n a00 = m[0][0], a01 = m[0][1], a02 = m[0][2], a03 = m[0][3],\n a10 = m[1][0], a11 = m[1][1], a12 = m[1][2], a13 = m[1][3],\n a20 = m[2][0], a21 = m[2][1], a22 = m[2][2], a23 = m[2][3],\n a30 = m[3][0], a31 = m[3][1], a32 = m[3][2], a33 = m[3][3],\n\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32,\n\n det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n return mat4(\n a11 * b11 - a12 * b10 + a13 * b09,\n a02 * b10 - a01 * b11 - a03 * b09,\n a31 * b05 - a32 * b04 + a33 * b03,\n a22 * b04 - a21 * b05 - a23 * b03,\n a12 * b08 - a10 * b11 - a13 * b07,\n a00 * b11 - a02 * b08 + a03 * b07,\n a32 * b02 - a30 * b05 - a33 * b01,\n a20 * b05 - a22 * b02 + a23 * b01,\n a10 * b10 - a11 * b08 + a13 * b06,\n a01 * b08 - a00 * b10 - a03 * b06,\n a30 * b04 - a31 * b02 + a33 * b00,\n a21 * b02 - a20 * b04 - a23 * b00,\n a11 * b07 - a10 * b09 - a12 * b06,\n a00 * b09 - a01 * b07 + a02 * b06,\n a31 * b01 - a30 * b03 - a32 * b00,\n a20 * b03 - a21 * b01 + a22 * b00) / det;\n}\n\n/**\n * Adapted from original sources\n * \n * Original code: \n * http://jamie-wong.com/2016/07/15/ray-marching-signed-distance-functions/\n * https://www.shadertoy.com/view/lt33z7\n * \n * The vec3 returned is the RGB color of the light\'s contribution.\n *\n * k_a: Ambient color\n * k_d: Diffuse color\n * k_s: Specular color\n * alpha: Shininess coefficient\n * p: position of point being lit\n * eye: the position of the camera\n * lightPos: the position of the light\n * lightIntensity: color/intensity of the light\n *\n * See https://en.wikipedia.org/wiki/Phong_reflection_model#Description\n */\nvec3 phongShading(vec3 k_a, vec3 k_d, vec3 k_s, float shininess, vec3 p, vec3 eye,\n vec3 lightPos, vec3 lightIntensity, vec3 normal) {\n vec3 N = normal;\n vec3 L = lightPos - p;\n if (length(L) > 0.) {\n L = L / length(L);\n }\n vec3 V = eye - p;\n if (length(V) > 0.) {\n V = V / length(V);\n }\n vec3 R = reflect(-L, N);\n if (length(R) > 0.) {\n R = R / length(R);\n }\n\n // https://en.wikipedia.org/wiki/Blinn%E2%80%93Phong_shading_model\n vec3 h = L + V;\n vec3 H = h;\n if (length(h) > 0.) {\n H = H / length(h);\n }\n\n float dotLN = dot(L, N);\n float dotRV = dot(R, V);\n\n if (dotLN < 0.) {\n // Light not visible from this point on the surface\n return k_a;\n } \n\n if (dotRV < 0.) {\n // Light reflection in opposite direction as viewer, apply only diffuse\n // component\n return k_a + lightIntensity * (k_d * dotLN);\n }\n\n float specAngle = max(dot(H, normal), 0.0);\n float specular = pow(dotRV, shininess); //pow(specAngle, shininess); // \n return k_a + lightIntensity * (k_d * dotLN + k_s * specular);\n}\n\nfloat PI = 3.14159265358979323846264 * 00000.1; // PI\n\n// expects values in the range of [0,1]x[0,1], returns values in the [0,1] range.\n// do not collapse into a single function per: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\nhighp float rand( const in vec2 uv) {\n const highp float a = 12.9898;\n const highp float b = 78.233;\n const highp float c = 43758.5453;\n highp float dt = dot(uv.xy, vec2(a, b)), sn = mod(dt, PI);\n return fract(sin(sn) * c);\n}\n\nvoid main(void) {\n const int maxSteps = 1024;\n\n // the ray\n vec3 rayOrigin = cameraPosition;\n vec3 rayDirection = normalize(vPos.xyz - rayOrigin);\n\n vec3 lightOrigin = uLightPositionInCamera == 1 ? cameraPosition : uLightPosition;\n\n // the Axe-Aligned B-Box\n vec3 AABBMin = vec3(uWorldBBox[0], uWorldBBox[2], uWorldBBox[4]);\n vec3 AABBMax = vec3(uWorldBBox[1], uWorldBBox[3], uWorldBBox[5]);\n\n // Intersection ray/bbox\n float tNear, tFar;\n bool intersect = false;\n ' + _helpers_shaders_helpers_intersectBox__WEBPACK_IMPORTED_MODULE_1__["default"].api(this, 'rayOrigin', 'rayDirection', 'AABBMin', 'AABBMax', 'tNear', 'tFar', 'intersect') + '\n if (tNear < 0.0) tNear = 0.0;\n\n // x / y should be within o-1\n // should\n float offset = rand(gl_FragCoord.xy);\n\n // init the ray marching\n float tStep = (tFar - tNear) / float(uSteps);\n float tCurrent = tNear + offset * tStep;\n vec4 accumulatedColor = vec4(0.0);\n float accumulatedAlpha = 0.0;\n\n // MIP volume rendering\n float maxIntensity = 0.0;\n\n mat4 dataToWorld = inverse(uWorldToData);\n\n // rayOrigin -= rayDirection * 0.1; // gold_noise(vPos.xz, vPos.y) / 100.; \n\n for(int rayStep = 0; rayStep < maxSteps; rayStep++){\n vec3 currentPosition = rayOrigin + rayDirection * tCurrent;\n // some non-linear FUN\n // some occlusion issue to be fixed\n vec3 transformedPosition = currentPosition; //transformPoint(currentPosition, uAmplitude, uFrequence);\n // world to data coordinates\n // rounding trick\n // first center of first voxel in data space is CENTERED on (0,0,0)\n vec4 dataCoordinatesRaw = uWorldToData * vec4(transformedPosition, 1.0);\n vec3 currentVoxel = vec3(dataCoordinatesRaw.x, dataCoordinatesRaw.y, dataCoordinatesRaw.z);\n float intensity = 0.0;\n vec3 gradient = vec3(0., 0., 0.);\n getIntensity(currentVoxel, intensity, gradient);\n // map gradient to world space and normalize before using\n // we avoid to call "normalize" as it may be undefined if vector length == 0.\n gradient = (vec3(dataToWorld * vec4(gradient, 0.)));\n if (length(gradient) > 0.0) {\n gradient = normalize(gradient);\n }\n\n vec4 colorSample;\n float alphaSample;\n if(uLut == 1){\n vec4 colorFromLUT = texture2D( uTextureLUT, vec2( intensity, 1.0) );\n // 256 colors\n colorSample = colorFromLUT;\n alphaSample = colorFromLUT.a;\n }\n else{\n alphaSample = intensity;\n colorSample.r = colorSample.g = colorSample.b = intensity;\n }\n\n // ray marching algorithm\n // shading on\n // interpolation on\n if (uAlgorithm == 0 && uShading == 1 && uInterpolation != 0) {\n // && alphaSample > .3\n vec3 ambientComponent = uSampleColorToAmbient == 1 ? colorSample.xyz : uAmbientColor;\n ambientComponent *= uAmbient;\n vec3 diffuseComponent = uSampleColorToDiffuse == 1 ? colorSample.xyz : uDiffuseColor;\n diffuseComponent *= uDiffuse;\n vec3 specularComponent = uSpecular * uSpecularColor;\n float shininess = uShininess;\n vec3 vIntensity = uIntensity;\n\n colorSample.xyz += phongShading(\n ambientComponent,\n diffuseComponent,\n specularComponent,\n shininess,\n currentPosition.xyz,\n rayOrigin.xyz,\n lightOrigin.xyz,\n vIntensity,\n gradient);\n }\n\n alphaSample = 1.0 - pow((1.0- alphaSample),tStep*uAlphaCorrection);\n alphaSample *= (1.0 - accumulatedAlpha);\n\n accumulatedColor += alphaSample * colorSample;\n accumulatedAlpha += alphaSample;\n\n tCurrent += tStep;\n\n if (tCurrent > tFar || (uAlgorithm == 0 && accumulatedAlpha >= 1.0)) break;\n\n if (uAlgorithm == 1 && (intensity >= maxIntensity)) {\n maxIntensity = intensity;\n accumulatedColor = colorSample;\n accumulatedAlpha = 1.;\n }\n }\n\n gl_FragColor = vec4(accumulatedColor.xyz, accumulatedAlpha);\n}\n '; + }; - tCurrent += tStep; - - if (tCurrent > tFar || (uAlgorithm == 0 && accumulatedAlpha >= 1.0)) break; - - if (uAlgorithm == 1 && (intensity >= maxIntensity)) { - maxIntensity = intensity; - accumulatedColor = colorSample; - accumulatedAlpha = 1.; - } - } - - gl_FragColor = vec4(accumulatedColor.xyz, accumulatedAlpha); -} - `; - } - - compute() { - let shaderInterpolation = ''; + ShadersFragment.prototype.compute = function compute() { + var shaderInterpolation = ''; // shaderInterpolation.inline(args) //true/false // shaderInterpolation.functions(args) - return ` -// uniforms -${this.uniforms()} - -// varying (should fetch it from vertex directly) -varying vec4 vPos; + return '\n// uniforms\n' + this.uniforms() + '\n\n// varying (should fetch it from vertex directly)\nvarying vec4 vPos;\n\n// tailored functions\n' + this.functions() + '\n\n// main loop\n' + this._main + '\n '; + }; -// tailored functions -${this.functions()} + return ShadersFragment; +}(); -// main loop -${this._main} - `; - } -} +/* harmony default export */ __webpack_exports__["default"] = (ShadersFragment); /***/ }), @@ -44223,15 +44309,21 @@ ${this._main} "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ShadersUniform; }); /* harmony import */ var three_src_math_Matrix4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! three/src/math/Matrix4 */ "./node_modules/three/src/math/Matrix4.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * @module shaders/data */ -class ShadersUniform { - static uniforms() { + +var ShadersUniform = function () { + function ShadersUniform() { + _classCallCheck(this, ShadersUniform); + } + + ShadersUniform.uniforms = function uniforms() { return { uTextureSize: { type: 'i', @@ -44403,8 +44495,12 @@ class ShadersUniform { typeGLSL: 'int' } }; - } -} + }; + + return ShadersUniform; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (ShadersUniform); /***/ }), @@ -44417,24 +44513,21 @@ class ShadersUniform { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ShadersVertex; }); -class ShadersVertex { - compute() { - return ` -varying vec4 vPos; +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -// -// main -// -void main() { +var ShadersVertex = function () { + function ShadersVertex() { + _classCallCheck(this, ShadersVertex); + } - vPos = modelMatrix * vec4(position, 1.0 ); - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 ); + ShadersVertex.prototype.compute = function compute() { + return "\nvarying vec4 vPos;\n\n//\n// main\n//\nvoid main() {\n\n vPos = modelMatrix * vec4(position, 1.0 );\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\n\n}\n "; + }; -} - `; - } -} + return ShadersVertex; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (ShadersVertex); /***/ }), @@ -44447,21 +44540,24 @@ void main() { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CornerstoneDataParser; }); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); /* harmony import */ var OpenJPEG_js_dist_openJPEG_DynamicMemory_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! OpenJPEG.js/dist/openJPEG-DynamicMemory-browser */ "./node_modules/OpenJPEG.js/dist/openJPEG-DynamicMemory-browser.js"); /* harmony import */ var OpenJPEG_js_dist_openJPEG_DynamicMemory_browser__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(OpenJPEG_js_dist_openJPEG_DynamicMemory_browser__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _decoders_decoders_rle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../decoders/decoders.rle */ "./src/decoders/decoders.rle.js"); /* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./index */ "./src/utils/index.js"); /* harmony import */ var _getNumberValues__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNumberValues */ "./src/utils/getNumberValues.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + -class CornerstoneDataParser { - constructor(metaData) { +var CornerstoneDataParser = function () { + function CornerstoneDataParser(metaData) { + _classCallCheck(this, CornerstoneDataParser); + this.metaData = metaData; } @@ -44470,36 +44566,44 @@ class CornerstoneDataParser { * * @return {String} */ - seriesInstanceUID() { + + + CornerstoneDataParser.prototype.seriesInstanceUID = function seriesInstanceUID() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['0020000e']); - } + }; /** * Study instance UID (0020,000d) * * @return {String} */ - studyInstanceUID() { + + + CornerstoneDataParser.prototype.studyInstanceUID = function studyInstanceUID() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['0020000d']); - } + }; /** * Get modality (0008,0060) * * @return {String} */ - modality() { + + + CornerstoneDataParser.prototype.modality = function modality() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00080060']); - } + }; /** * Segmentation type (0062,0001) * * @return {String} */ - segmentationType() { + + + CornerstoneDataParser.prototype.segmentationType = function segmentationType() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00620001']); - } + }; /** * Segmentation segments @@ -44512,30 +44616,32 @@ class CornerstoneDataParser { * * @return {*} */ - segmentationSegments() { - let segmentationSegments = []; - let segmentSequence = this.metaData['00620002']; + + + CornerstoneDataParser.prototype.segmentationSegments = function segmentationSegments() { + var segmentationSegments = []; + var segmentSequence = this.metaData['00620002']; console.log('parse segmentSequence', segmentSequence); if (!segmentSequence) { return segmentationSegments; } try { - for (let i = 0; i < segmentSequence.items.length; i++) { - let recommendedDisplayCIELab = this._recommendedDisplayCIELab(segmentSequence.items[i]); - let segmentationCode = this._segmentationCode(segmentSequence.items[i]); - let segmentNumber = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(segmentSequence.items[i].dataSet['00620004']); - let segmentLabel = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(segmentSequence.items[i].dataSet['00620005']); - let segmentAlgorithmType = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(segmentSequence.items[i].dataSet['00620008']); + for (var i = 0; i < segmentSequence.items.length; i++) { + var recommendedDisplayCIELab = this._recommendedDisplayCIELab(segmentSequence.items[i]); + var segmentationCode = this._segmentationCode(segmentSequence.items[i]); + var segmentNumber = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(segmentSequence.items[i].dataSet['00620004']); + var segmentLabel = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(segmentSequence.items[i].dataSet['00620005']); + var segmentAlgorithmType = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(segmentSequence.items[i].dataSet['00620008']); segmentationSegments.push({ - recommendedDisplayCIELab, + recommendedDisplayCIELab: recommendedDisplayCIELab, segmentationCodeDesignator: segmentationCode['segmentationCodeDesignator'], segmentationCodeValue: segmentationCode['segmentationCodeValue'], segmentationCodeMeaning: segmentationCode['segmentationCodeMeaning'], - segmentNumber, - segmentLabel, - segmentAlgorithmType + segmentNumber: segmentNumber, + segmentLabel: segmentLabel, + segmentAlgorithmType: segmentAlgorithmType }); } } catch (e) { @@ -44543,7 +44649,7 @@ class CornerstoneDataParser { } return segmentationSegments; - } + }; /** * Segmentation code @@ -44555,11 +44661,13 @@ class CornerstoneDataParser { * * @return {*} */ - _segmentationCode(segment) { - let segmentationCodeDesignator = 'unknown'; - let segmentationCodeValue = 'unknown'; - let segmentationCodeMeaning = 'unknown'; - let element = segment.dataSet['00082218']; + + + CornerstoneDataParser.prototype._segmentationCode = function _segmentationCode(segment) { + var segmentationCodeDesignator = 'unknown'; + var segmentationCodeValue = 'unknown'; + var segmentationCodeMeaning = 'unknown'; + var element = segment.dataSet['00082218']; if (element && element.items && element.items.length > 0) { segmentationCodeDesignator = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(element.items[0].dataSet['00080102']); @@ -44568,11 +44676,11 @@ class CornerstoneDataParser { } return { - segmentationCodeDesignator, - segmentationCodeValue, - segmentationCodeMeaning + segmentationCodeDesignator: segmentationCodeDesignator, + segmentationCodeValue: segmentationCodeValue, + segmentationCodeMeaning: segmentationCodeMeaning }; - } + }; /** * Recommended display CIELab @@ -44581,34 +44689,38 @@ class CornerstoneDataParser { * * @return {*} */ - _recommendedDisplayCIELab(segment) { + + + CornerstoneDataParser.prototype._recommendedDisplayCIELab = function _recommendedDisplayCIELab(segment) { if (!segment.dataSet['0062000d']) { return null; } - let offset = segment.dataSet['0062000d'].dataOffset; - let length = segment.dataSet['0062000d'].length; - let byteArray = segment.dataSet.byteArray.slice(offset, offset + length); + var offset = segment.dataSet['0062000d'].dataOffset; + var length = segment.dataSet['0062000d'].length; + var byteArray = segment.dataSet.byteArray.slice(offset, offset + length); // https://www.dabsoft.ch/dicom/3/C.10.7.1.1/ - let CIELabScaled = new Uint16Array(length / 2); - for (let i = 0; i < length / 2; i++) { + var CIELabScaled = new Uint16Array(length / 2); + for (var i = 0; i < length / 2; i++) { CIELabScaled[i] = (byteArray[2 * i + 1] << 8) + byteArray[2 * i]; } - let CIELabNormalized = [CIELabScaled[0] / 65535 * 100, CIELabScaled[1] / 65535 * 255 - 128, CIELabScaled[2] / 65535 * 255 - 128]; + var CIELabNormalized = [CIELabScaled[0] / 65535 * 100, CIELabScaled[1] / 65535 * 255 - 128, CIELabScaled[2] / 65535 * 255 - 128]; return CIELabNormalized; - } + }; /** * Raw dataset * * @return {*} */ - rawHeader() { + + + CornerstoneDataParser.prototype.rawHeader = function rawHeader() { return this.metaData; - } + }; /** * SOP Instance UID @@ -44617,125 +44729,151 @@ class CornerstoneDataParser { * * @return {*} */ - sopInstanceUID(frameIndex = 0) { + + + CornerstoneDataParser.prototype.sopInstanceUID = function sopInstanceUID() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00080018']); - } + }; /** * Transfer syntax UID * * @return {*} */ - transferSyntaxUID() { + + + CornerstoneDataParser.prototype.transferSyntaxUID = function transferSyntaxUID() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00020010']); - } + }; /** * Study date * * @return {*} */ - studyDate() { + + + CornerstoneDataParser.prototype.studyDate = function studyDate() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00080020']); - } + }; /** * Study description * * @return {*} */ - studyDescription() { + + + CornerstoneDataParser.prototype.studyDescription = function studyDescription() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00081030']); - } + }; /** * Series date * * @return {*} */ - seriesDate() { + + + CornerstoneDataParser.prototype.seriesDate = function seriesDate() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00080021']); - } + }; /** * Series description * * @return {*} */ - seriesDescription() { + + + CornerstoneDataParser.prototype.seriesDescription = function seriesDescription() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['0008103e']); - } + }; /** * Patient name * * @return {*} */ - patientName() { + + + CornerstoneDataParser.prototype.patientName = function patientName() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00100010']); - } + }; /** * Patient ID * * @return {*} */ - patientID() { + + + CornerstoneDataParser.prototype.patientID = function patientID() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00100020']); - } + }; /** * Patient birthdate * * @return {*} */ - patientBirthdate() { + + + CornerstoneDataParser.prototype.patientBirthdate = function patientBirthdate() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00100030']); - } + }; /** * Patient sex * * @return {*} */ - patientSex() { + + + CornerstoneDataParser.prototype.patientSex = function patientSex() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00100040']); - } + }; /** * Patient age * * @return {*} */ - patientAge() { + + + CornerstoneDataParser.prototype.patientAge = function patientAge() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00101010']); - } + }; /** * Photometric interpretation * * @return {*} */ - photometricInterpretation() { + + + CornerstoneDataParser.prototype.photometricInterpretation = function photometricInterpretation() { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00280004']); - } + }; - planarConfiguration() { - let planarConfiguration = this.metaData.uint16('00280006'); + CornerstoneDataParser.prototype.planarConfiguration = function planarConfiguration() { + var planarConfiguration = this.metaData.uint16('00280006'); if (typeof planarConfiguration === 'undefined') { planarConfiguration = null; } return planarConfiguration; - } + }; - samplesPerPixel() { + CornerstoneDataParser.prototype.samplesPerPixel = function samplesPerPixel() { return this.metaData.uint16('00280002'); - } + }; - numberOfFrames() { - let numberOfFrames = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData['00280008']); + CornerstoneDataParser.prototype.numberOfFrames = function numberOfFrames() { + var numberOfFrames = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData['00280008']); // need something smarter! if (typeof numberOfFrames === 'undefined') { @@ -44743,11 +44881,11 @@ class CornerstoneDataParser { } return numberOfFrames; - } + }; - numberOfChannels() { - let numberOfChannels = 1; - let photometricInterpretation = this.photometricInterpretation(); + CornerstoneDataParser.prototype.numberOfChannels = function numberOfChannels() { + var numberOfChannels = 1; + var photometricInterpretation = this.photometricInterpretation(); if (!(photometricInterpretation !== 'RGB' && photometricInterpretation !== 'PALETTE COLOR' && photometricInterpretation !== 'YBR_FULL' && photometricInterpretation !== 'YBR_FULL_422' && photometricInterpretation !== 'YBR_PARTIAL_422' && photometricInterpretation !== 'YBR_PARTIAL_420' && photometricInterpretation !== 'YBR_RCT')) { numberOfChannels = 3; @@ -44755,45 +44893,53 @@ class CornerstoneDataParser { // make sure we return a number! (not a string!) return numberOfChannels; - } + }; - invert() { - let photometricInterpretation = this.photometricInterpretation(); + CornerstoneDataParser.prototype.invert = function invert() { + var photometricInterpretation = this.photometricInterpretation(); return photometricInterpretation === 'MONOCHROME1'; - } + }; + + CornerstoneDataParser.prototype.imageOrientation = function imageOrientation() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - imageOrientation(frameIndex = 0) { return Object(_getNumberValues__WEBPACK_IMPORTED_MODULE_4__["default"])(this.metaData['00200037'], 6); - } + }; + + CornerstoneDataParser.prototype.referencedSegmentNumber = function referencedSegmentNumber() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - referencedSegmentNumber(frameIndex = 0) { - let referencedSegmentNumber = -1; - let referencedSegmentNumberElement = this._findInGroupSequence('52009230', '0062000a', frameIndex); + var referencedSegmentNumber = -1; + var referencedSegmentNumberElement = this._findInGroupSequence('52009230', '0062000a', frameIndex); if (referencedSegmentNumberElement !== null) { referencedSegmentNumber = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(referencedSegmentNumberElement['0062000b']); } return referencedSegmentNumber; - } + }; - pixelAspectRatio() { + CornerstoneDataParser.prototype.pixelAspectRatio = function pixelAspectRatio() { return Object(_getNumberValues__WEBPACK_IMPORTED_MODULE_4__["default"])(this.metaData['00280034'], 2); - } + }; + + CornerstoneDataParser.prototype.imagePosition = function imagePosition() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - imagePosition(frameIndex = 0) { return Object(_getNumberValues__WEBPACK_IMPORTED_MODULE_4__["default"])(this.metaData['00200032'], 3); - } + }; + + CornerstoneDataParser.prototype.instanceNumber = function instanceNumber() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - instanceNumber(frameIndex = 0) { - let instanceNumber = null; + var instanceNumber = null; // first look for frame! // per frame functionnal group sequence - let perFrameFunctionnalGroupSequence = this.metaData['52009230']; + var perFrameFunctionnalGroupSequence = this.metaData['52009230']; if (typeof perFrameFunctionnalGroupSequence !== 'undefined') { if (perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['2005140f']) { - let planeOrientationSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['2005140f'].items[0].dataSet; + var planeOrientationSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['2005140f'].items[0].dataSet; instanceNumber = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(planeOrientationSequence['00200013']); } else { instanceNumber = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData['00200013']); @@ -44813,22 +44959,28 @@ class CornerstoneDataParser { } return instanceNumber; - } + }; + + CornerstoneDataParser.prototype.pixelSpacing = function pixelSpacing() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - pixelSpacing(frameIndex = 0) { return Object(_getNumberValues__WEBPACK_IMPORTED_MODULE_4__["default"])(this.metaData['00280030'], 2); - } + }; + + CornerstoneDataParser.prototype.ultrasoundRegions = function ultrasoundRegions() { + var _this = this; + + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - ultrasoundRegions(frameIndex = 0) { - const sequence = this.metaData['00186011']; + var sequence = this.metaData['00186011']; if (!sequence || !sequence.items) { return []; } - const ultrasoundRegions = []; + var ultrasoundRegions = []; - sequence.items.forEach(item => { + sequence.items.forEach(function (item) { ultrasoundRegions.push({ x0: item.dataSet.uint32('00186018'), y0: item.dataSet.uint32('0018601a'), @@ -44836,20 +44988,22 @@ class CornerstoneDataParser { y1: item.dataSet.uint32('0018601e'), axisX: item.dataSet.int32('00186020') || null, // optional axisY: item.dataSet.int32('00186022') || null, // optional - unitsX: this._getUnitsName(item.dataSet.uint16('00186024')), - unitsY: this._getUnitsName(item.dataSet.uint16('00186026')), + unitsX: _this._getUnitsName(item.dataSet.uint16('00186024')), + unitsY: _this._getUnitsName(item.dataSet.uint16('00186026')), deltaX: item.dataSet.double('0018602c'), deltaY: item.dataSet.double('0018602e') }); }); return ultrasoundRegions; - } + }; + + CornerstoneDataParser.prototype.frameTime = function frameTime() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - frameTime(frameIndex = 0) { - let frameIncrementPointer = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberString"])(this.metaData['00280009']); - let frameRate = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberString"])(this.metaData['00082144']); - let frameTime; + var frameIncrementPointer = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberString"])(this.metaData['00280009']); + var frameRate = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberString"])(this.metaData['00082144']); + var frameTime = void 0; if (typeof frameIncrementPointer === 'number') { frameIncrementPointer = frameIncrementPointer.toString(16); @@ -44865,10 +45019,12 @@ class CornerstoneDataParser { } return frameTime; - } + }; - rows(frameIndex = 0) { - let rows = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberString"])(this.metaData['00280010']); + CornerstoneDataParser.prototype.rows = function rows() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var rows = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberString"])(this.metaData['00280010']); if (typeof rows === 'undefined') { rows = null; @@ -44876,10 +45032,12 @@ class CornerstoneDataParser { } return rows; - } + }; + + CornerstoneDataParser.prototype.columns = function columns() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - columns(frameIndex = 0) { - let columns = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberString"])(this.metaData['00280011']); + var columns = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberString"])(this.metaData['00280011']); if (typeof columns === 'undefined') { columns = null; @@ -44887,86 +45045,110 @@ class CornerstoneDataParser { } return columns; - } + }; + + CornerstoneDataParser.prototype.pixelType = function pixelType() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - pixelType(frameIndex = 0) { // 0 integer, 1 float // dicom only support integers return 0; - } + }; + + CornerstoneDataParser.prototype.pixelRepresentation = function pixelRepresentation() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - pixelRepresentation(frameIndex = 0) { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData['00280103']); - } + }; + + CornerstoneDataParser.prototype.pixelPaddingValue = function pixelPaddingValue() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - pixelPaddingValue(frameIndex = 0) { - let padding = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData['00280120']); + var padding = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData['00280120']); if (typeof padding === 'undefined') { padding = null; } return padding; - } + }; + + CornerstoneDataParser.prototype.bitsAllocated = function bitsAllocated() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - bitsAllocated(frameIndex = 0) { // expect frame index to start at 0! return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberString"])(this.metaData['00280100']); - } + }; + + CornerstoneDataParser.prototype.highBit = function highBit() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - highBit(frameIndex = 0) { // expect frame index to start at 0! return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData['00280102']); - } + }; + + CornerstoneDataParser.prototype.rescaleIntercept = function rescaleIntercept() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - rescaleIntercept(frameIndex = 0) { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData['00281052']); - } + }; + + CornerstoneDataParser.prototype.rescaleSlope = function rescaleSlope() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - rescaleSlope(frameIndex = 0) { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData['00281053']); - } + }; + + CornerstoneDataParser.prototype.windowCenter = function windowCenter() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - windowCenter(frameIndex = 0) { return this._findFloatStringInFrameGroupSequence('00289132', '00281050', frameIndex); - } + }; + + CornerstoneDataParser.prototype.windowWidth = function windowWidth() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - windowWidth(frameIndex = 0) { return this._findFloatStringInFrameGroupSequence('00289132', '00281051', frameIndex); - } + }; + + CornerstoneDataParser.prototype.sliceThickness = function sliceThickness() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - sliceThickness(frameIndex = 0) { return Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData['00180050']); - } + }; - spacingBetweenSlices(frameIndex = 0) { - let spacing = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData['00180088']); + CornerstoneDataParser.prototype.spacingBetweenSlices = function spacingBetweenSlices() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var spacing = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData['00180088']); if (typeof spacing === 'undefined') { spacing = null; } return spacing; - } + }; + + CornerstoneDataParser.prototype.dimensionIndexValues = function dimensionIndexValues() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - dimensionIndexValues(frameIndex = 0) { - let dimensionIndexValues = null; + var dimensionIndexValues = null; // try to get it from enhanced MR images // per-frame functionnal group sequence - let perFrameFunctionnalGroupSequence = this.metaData['52009230']; + var perFrameFunctionnalGroupSequence = this.metaData['52009230']; if (typeof perFrameFunctionnalGroupSequence !== 'undefined') { - let frameContentSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['00209111']; + var frameContentSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['00209111']; if (frameContentSequence !== undefined && frameContentSequence !== null) { frameContentSequence = frameContentSequence.items[0].dataSet; - let dimensionIndexValuesElt = frameContentSequence['00209157']; + var dimensionIndexValuesElt = frameContentSequence['00209157']; if (dimensionIndexValuesElt !== undefined && dimensionIndexValuesElt !== null) { // /4 because UL - let nbValues = dimensionIndexValuesElt.length / 4; + var nbValues = dimensionIndexValuesElt.length / 4; dimensionIndexValues = []; - for (let i = 0; i < nbValues; i++) { + for (var i = 0; i < nbValues; i++) { dimensionIndexValues.push(Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(frameContentSequence['00209157'], i)); } } @@ -44974,67 +45156,73 @@ class CornerstoneDataParser { } return dimensionIndexValues; - } + }; + + CornerstoneDataParser.prototype.inStackPositionNumber = function inStackPositionNumber() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - inStackPositionNumber(frameIndex = 0) { - let inStackPositionNumber = null; + var inStackPositionNumber = null; // try to get it from enhanced MR images // per-frame functionnal group sequence - let perFrameFunctionnalGroupSequence = this.metaData['52009230']; + var perFrameFunctionnalGroupSequence = this.metaData['52009230']; if (typeof perFrameFunctionnalGroupSequence !== 'undefined') { // NOT A PHILIPS TRICK! - let philipsPrivateSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['00209111'].items[0].dataSet; + var philipsPrivateSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['00209111'].items[0].dataSet; inStackPositionNumber = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(philipsPrivateSequence['00209057']); } else { inStackPositionNumber = null; } return inStackPositionNumber; - } + }; - stackID(frameIndex = 0) { - let stackID = null; + CornerstoneDataParser.prototype.stackID = function stackID() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var stackID = null; // try to get it from enhanced MR images // per-frame functionnal group sequence - let perFrameFunctionnalGroupSequence = this.metaData['52009230']; + var perFrameFunctionnalGroupSequence = this.metaData['52009230']; if (typeof perFrameFunctionnalGroupSequence !== 'undefined') { // NOT A PHILIPS TRICK! - let philipsPrivateSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['00209111'].items[0].dataSet; + var philipsPrivateSequence = perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['00209111'].items[0].dataSet; stackID = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(philipsPrivateSequence['00209056']); } else { stackID = null; } return stackID; - } + }; + + CornerstoneDataParser.prototype.extractPixelData = function extractPixelData() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - extractPixelData(frameIndex = 0) { // decompress - let decompressedData = this._decodePixelData(frameIndex); + var decompressedData = this._decodePixelData(frameIndex); - let numberOfChannels = this.numberOfChannels(); + var numberOfChannels = this.numberOfChannels(); if (numberOfChannels > 1) { return this._convertColorSpace(decompressedData); } else { return decompressedData; } - } + }; // // private methods // - _findInGroupSequence(sequence, subsequence, index) { - let functionalGroupSequence = this.metaData[sequence]; + CornerstoneDataParser.prototype._findInGroupSequence = function _findInGroupSequence(sequence, subsequence, index) { + var functionalGroupSequence = this.metaData[sequence]; console.log('_findInGroupSequence', functionalGroupSequence, sequence); if (typeof functionalGroupSequence !== 'undefined') { - let inSequence = functionalGroupSequence.items[index].dataSet[subsequence]; + var inSequence = functionalGroupSequence.items[index].dataSet[subsequence]; if (typeof inSequence !== 'undefined') { return inSequence.items[0].dataSet; @@ -45042,11 +45230,11 @@ class CornerstoneDataParser { } return null; - } + }; - _findStringInGroupSequence(sequence, subsequence, tag, index) { + CornerstoneDataParser.prototype._findStringInGroupSequence = function _findStringInGroupSequence(sequence, subsequence, tag, index) { // index = 0 if shared!!! - let dataSet = this._findInGroupSequence(sequence, subsequence, index); + var dataSet = this._findInGroupSequence(sequence, subsequence, index); console.log('_findStringInGroupSequence', dataSet); if (dataSet !== null) { @@ -45054,11 +45242,11 @@ class CornerstoneDataParser { } return null; - } + }; - _findStringInFrameGroupSequence(subsequence, tag, index) { + CornerstoneDataParser.prototype._findStringInFrameGroupSequence = function _findStringInFrameGroupSequence(subsequence, tag, index) { return this._findStringInGroupSequence('52009229', subsequence, tag, 0) || this._findStringInGroupSequence('52009230', subsequence, tag, index); - } + }; // _findStringEverywhere(subsequence, tag, index) { // let targetString = this._findStringInFrameGroupSequence(subsequence, tag, index); @@ -45079,10 +45267,10 @@ class CornerstoneDataParser { // return targetString; // } - _findStringInSequence(sequenceTag, tag, index) { - const sequence = this.metaData[sequenceTag]; + CornerstoneDataParser.prototype._findStringInSequence = function _findStringInSequence(sequenceTag, tag, index) { + var sequence = this.metaData[sequenceTag]; - let targetString; + var targetString = void 0; if (sequence) { targetString = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(sequence.items[0].dataSet[tag]); } @@ -45092,10 +45280,10 @@ class CornerstoneDataParser { } return targetString; - } + }; - _findFloatStringInGroupSequence(sequence, subsequence, tag, index) { - let dataInGroupSequence = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData[tag]); + CornerstoneDataParser.prototype._findFloatStringInGroupSequence = function _findFloatStringInGroupSequence(sequence, subsequence, tag, index) { + var dataInGroupSequence = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getNumberValue"])(this.metaData[tag]); // try to get it from enhanced MR images // per-frame functionnal group @@ -45108,15 +45296,17 @@ class CornerstoneDataParser { } return dataInGroupSequence; - } + }; - _findFloatStringInFrameGroupSequence(subsequence, tag, index) { + CornerstoneDataParser.prototype._findFloatStringInFrameGroupSequence = function _findFloatStringInFrameGroupSequence(subsequence, tag, index) { return this._findFloatStringInGroupSequence('52009229', subsequence, tag, 0) || this._findFloatStringInGroupSequence('52009230', subsequence, tag, index); - } + }; + + CornerstoneDataParser.prototype._decodePixelData = function _decodePixelData() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - _decodePixelData(frameIndex = 0) { // if compressed..? - let transferSyntaxUID = this.transferSyntaxUID(); + var transferSyntaxUID = this.transferSyntaxUID(); console.log('transfer syntax uid', transferSyntaxUID); // find compression scheme if (transferSyntaxUID === '1.2.840.10008.1.2.4.90' || @@ -45145,25 +45335,27 @@ class CornerstoneDataParser { return this._decodeUncompressed(frameIndex); } else if (transferSyntaxUID === '1.2.840.10008.1.2.2') { // Explicit VR Big Endian - let frame = this._decodeUncompressed(frameIndex); + var frame = this._decodeUncompressed(frameIndex); // and sawp it! return this._swapFrame(frame); } else { throw { - error: `no decoder for transfer syntax ${transferSyntaxUID}` + error: 'no decoder for transfer syntax ' + transferSyntaxUID }; } - } + }; // github.com/chafey/cornerstoneWADOImageLoader/blob/master/src/imageLoader/wadouri/getEncapsulatedImageFrame.js - framesAreFragmented() { - const numberOfFrames = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00280008']); - const pixelDataElement = this.metaData['7fe00010']; + + + CornerstoneDataParser.prototype.framesAreFragmented = function framesAreFragmented() { + var numberOfFrames = Object(_index__WEBPACK_IMPORTED_MODULE_3__["getValue"])(this.metaData['00280008']); + var pixelDataElement = this.metaData['7fe00010']; return numberOfFrames !== pixelDataElement.fragments.length; - } + }; - getEncapsulatedImageFrame(frameIndex) { + CornerstoneDataParser.prototype.getEncapsulatedImageFrame = function getEncapsulatedImageFrame(frameIndex) { if (this.metaData['7fe00010'] && this.metaData['7fe00010'].basicOffsetTable.length) { // Basic Offset Table is not empty return DicomParser.readEncapsulatedImageFrame(this.metaData, this.metaData['7fe00010'], frameIndex); @@ -45175,11 +45367,15 @@ class CornerstoneDataParser { } return DicomParser.readEncapsulatedPixelDataFromFragments(this.metaData, this.metaData['7fe00010'], frameIndex); - } + }; // used if OpenJPEG library isn't loaded (OHIF/image-JPEG2000 isn't supported and can't parse some images) - _decodeJpx(frameIndex = 0) { - const jpxImage = new Jpx(); + + + CornerstoneDataParser.prototype._decodeJpx = function _decodeJpx() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var jpxImage = new Jpx(); // https://github.com/OHIF/image-JPEG2000/issues/6 // It currently returns either Int16 or Uint16 based on whether the codestream is signed or not. jpxImage.parse(this.getEncapsulatedImageFrame(frameIndex)); @@ -45193,24 +45389,26 @@ class CornerstoneDataParser { } return jpxImage.tiles[0].items; - } + }; + + CornerstoneDataParser.prototype._decodeOpenJPEG = function _decodeOpenJPEG() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - _decodeOpenJPEG(frameIndex = 0) { - const encodedPixelData = this.getEncapsulatedImageFrame(frameIndex); - const bytesPerPixel = this.bitsAllocated(frameIndex) <= 8 ? 1 : 2; - const signed = this.pixelRepresentation(frameIndex) === 1; - const dataPtr = openJPEG._malloc(encodedPixelData.length); + var encodedPixelData = this.getEncapsulatedImageFrame(frameIndex); + var bytesPerPixel = this.bitsAllocated(frameIndex) <= 8 ? 1 : 2; + var signed = this.pixelRepresentation(frameIndex) === 1; + var dataPtr = openJPEG._malloc(encodedPixelData.length); openJPEG.writeArrayToMemory(encodedPixelData, dataPtr); // create param outpout - const imagePtrPtr = openJPEG._malloc(4); - const imageSizePtr = openJPEG._malloc(4); - const imageSizeXPtr = openJPEG._malloc(4); - const imageSizeYPtr = openJPEG._malloc(4); - const imageSizeCompPtr = openJPEG._malloc(4); - const ret = openJPEG.ccall('jp2_decode', 'number', ['number', 'number', 'number', 'number', 'number', 'number', 'number'], [dataPtr, encodedPixelData.length, imagePtrPtr, imageSizePtr, imageSizeXPtr, imageSizeYPtr, imageSizeCompPtr]); - const imagePtr = openJPEG.getValue(imagePtrPtr, '*'); + var imagePtrPtr = openJPEG._malloc(4); + var imageSizePtr = openJPEG._malloc(4); + var imageSizeXPtr = openJPEG._malloc(4); + var imageSizeYPtr = openJPEG._malloc(4); + var imageSizeCompPtr = openJPEG._malloc(4); + var ret = openJPEG.ccall('jp2_decode', 'number', ['number', 'number', 'number', 'number', 'number', 'number', 'number'], [dataPtr, encodedPixelData.length, imagePtrPtr, imageSizePtr, imageSizeXPtr, imageSizeYPtr, imageSizeCompPtr]); + var imagePtr = openJPEG.getValue(imagePtrPtr, '*'); if (ret !== 0) { console.log('[opj_decode] decoding failed!'); @@ -45225,16 +45423,16 @@ class CornerstoneDataParser { } // Copy the data from the EMSCRIPTEN heap into the correct type array - const length = openJPEG.getValue(imageSizeXPtr, 'i32') * openJPEG.getValue(imageSizeYPtr, 'i32') * openJPEG.getValue(imageSizeCompPtr, 'i32'); - const src32 = new Int32Array(openJPEG.HEAP32.buffer, imagePtr, length); - let pixelData; + var length = openJPEG.getValue(imageSizeXPtr, 'i32') * openJPEG.getValue(imageSizeYPtr, 'i32') * openJPEG.getValue(imageSizeCompPtr, 'i32'); + var src32 = new Int32Array(openJPEG.HEAP32.buffer, imagePtr, length); + var pixelData = void 0; if (bytesPerPixel === 1) { if (Uint8Array.from) { pixelData = Uint8Array.from(src32); } else { pixelData = new Uint8Array(length); - for (let i = 0; i < length; i++) { + for (var i = 0; i < length; i++) { pixelData[i] = src32[i]; } } @@ -45243,16 +45441,16 @@ class CornerstoneDataParser { pixelData = Int16Array.from(src32); } else { pixelData = new Int16Array(length); - for (let i = 0; i < length; i++) { - pixelData[i] = src32[i]; + for (var _i = 0; _i < length; _i++) { + pixelData[_i] = src32[_i]; } } } else if (Uint16Array.from) { pixelData = Uint16Array.from(src32); } else { pixelData = new Uint16Array(length); - for (let i = 0; i < length; i++) { - pixelData[i] = src32[i]; + for (var _i2 = 0; _i2 < length; _i2++) { + pixelData[_i2] = src32[_i2]; } } @@ -45265,10 +45463,14 @@ class CornerstoneDataParser { openJPEG._free(imageSizeCompPtr); return pixelData; - } + }; // from cornerstone - _decodeJ2K(frameIndex = 0) { + + + CornerstoneDataParser.prototype._decodeJ2K = function _decodeJ2K() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + if (typeof OpenJPEG_js_dist_openJPEG_DynamicMemory_browser__WEBPACK_IMPORTED_MODULE_1__ === 'undefined') { // OpenJPEG decoder not loaded return this._decodeJpx(frameIndex); @@ -45283,40 +45485,46 @@ class CornerstoneDataParser { } return this._decodeOpenJPEG(frameIndex); - } + }; - _decodeRLE(frameIndex = 0) { - const bitsAllocated = this.bitsAllocated(frameIndex); - const planarConfiguration = this.planarConfiguration(); - const columns = this.columns(); - const rows = this.rows(); - const samplesPerPixel = this.samplesPerPixel(frameIndex); - const pixelRepresentation = this.pixelRepresentation(frameIndex); + CornerstoneDataParser.prototype._decodeRLE = function _decodeRLE() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var bitsAllocated = this.bitsAllocated(frameIndex); + var planarConfiguration = this.planarConfiguration(); + var columns = this.columns(); + var rows = this.rows(); + var samplesPerPixel = this.samplesPerPixel(frameIndex); + var pixelRepresentation = this.pixelRepresentation(frameIndex); // format data for the RLE decoder - const imageFrame = { - pixelRepresentation, - bitsAllocated, - planarConfiguration, - columns, - rows, - samplesPerPixel + var imageFrame = { + pixelRepresentation: pixelRepresentation, + bitsAllocated: bitsAllocated, + planarConfiguration: planarConfiguration, + columns: columns, + rows: rows, + samplesPerPixel: samplesPerPixel }; - const pixelData = DicomParser.readEncapsulatedPixelDataFromFragments(this.metaData, this.metaData['7fe00010'], frameIndex); + var pixelData = DicomParser.readEncapsulatedPixelDataFromFragments(this.metaData, this.metaData['7fe00010'], frameIndex); - const decoded = Object(_decoders_decoders_rle__WEBPACK_IMPORTED_MODULE_2__["RLEDecoder"])(imageFrame, pixelData); + var decoded = Object(_decoders_decoders_rle__WEBPACK_IMPORTED_MODULE_2__["RLEDecoder"])(imageFrame, pixelData); return decoded.pixelData; - } + }; // from cornerstone - _decodeJPEGLossless(frameIndex = 0) { - let encodedPixelData = this.getEncapsulatedImageFrame(frameIndex); - let pixelRepresentation = this.pixelRepresentation(frameIndex); - let bitsAllocated = this.bitsAllocated(frameIndex); - let byteOutput = bitsAllocated <= 8 ? 1 : 2; - let decoder = new Jpeg.lossless.Decoder(); - let decompressedData = decoder.decode(encodedPixelData.buffer, encodedPixelData.byteOffset, encodedPixelData.length, byteOutput); + + + CornerstoneDataParser.prototype._decodeJPEGLossless = function _decodeJPEGLossless() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var encodedPixelData = this.getEncapsulatedImageFrame(frameIndex); + var pixelRepresentation = this.pixelRepresentation(frameIndex); + var bitsAllocated = this.bitsAllocated(frameIndex); + var byteOutput = bitsAllocated <= 8 ? 1 : 2; + var decoder = new Jpeg.lossless.Decoder(); + var decompressedData = decoder.decode(encodedPixelData.buffer, encodedPixelData.byteOffset, encodedPixelData.length, byteOutput); if (pixelRepresentation === 0) { if (byteOutput === 2) { @@ -45328,14 +45536,16 @@ class CornerstoneDataParser { } else { return new Int16Array(decompressedData.buffer); } - } + }; + + CornerstoneDataParser.prototype._decodeJPEGBaseline = function _decodeJPEGBaseline() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - _decodeJPEGBaseline(frameIndex = 0) { - let encodedPixelData = this.getEncapsulatedImageFrame(frameIndex); - let rows = this.rows(frameIndex); - let columns = this.columns(frameIndex); - let bitsAllocated = this.bitsAllocated(frameIndex); - let jpegBaseline = new JpegBaseline(); + var encodedPixelData = this.getEncapsulatedImageFrame(frameIndex); + var rows = this.rows(frameIndex); + var columns = this.columns(frameIndex); + var bitsAllocated = this.bitsAllocated(frameIndex); + var jpegBaseline = new JpegBaseline(); jpegBaseline.parse(encodedPixelData); if (bitsAllocated === 8) { @@ -45343,17 +45553,19 @@ class CornerstoneDataParser { } else if (bitsAllocated === 16) { return jpegBaseline.getData16(columns, rows); } - } + }; - _decodeUncompressed(frameIndex = 0) { - let pixelRepresentation = this.pixelRepresentation(frameIndex); - let bitsAllocated = this.bitsAllocated(frameIndex); - let pixelDataElement = this.metaData['7fe00010']; - let pixelDataOffset = pixelDataElement.dataOffset; - let numberOfChannels = this.numberOfChannels(); - let numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels; - let frameOffset = 0; - let buffer = this.metaData.byteArray.buffer; + CornerstoneDataParser.prototype._decodeUncompressed = function _decodeUncompressed() { + var frameIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + var pixelRepresentation = this.pixelRepresentation(frameIndex); + var bitsAllocated = this.bitsAllocated(frameIndex); + var pixelDataElement = this.metaData['7fe00010']; + var pixelDataOffset = pixelDataElement.dataOffset; + var numberOfChannels = this.numberOfChannels(); + var numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels; + var frameOffset = 0; + var buffer = this.metaData.byteArray.buffer; if (pixelRepresentation === 0 && bitsAllocated === 8) { // unsigned 8 bit @@ -45372,22 +45584,22 @@ class CornerstoneDataParser { frameOffset = pixelDataOffset + frameIndex * numPixels * 4; return new Uint32Array(buffer, frameOffset, numPixels); } else if (pixelRepresentation === 0 && bitsAllocated === 1) { - let newBuffer = new ArrayBuffer(numPixels); - let newArray = new Uint8Array(newBuffer); + var newBuffer = new ArrayBuffer(numPixels); + var newArray = new Uint8Array(newBuffer); frameOffset = pixelDataOffset + frameIndex * numPixels; - let index = 0; + var index = 0; - let bitStart = frameIndex * numPixels; - let bitEnd = frameIndex * numPixels + numPixels; + var bitStart = frameIndex * numPixels; + var bitEnd = frameIndex * numPixels + numPixels; - let byteStart = Math.floor(bitStart / 8); - let bitStartOffset = bitStart - byteStart * 8; - let byteEnd = Math.ceil(bitEnd / 8); + var byteStart = Math.floor(bitStart / 8); + var bitStartOffset = bitStart - byteStart * 8; + var byteEnd = Math.ceil(bitEnd / 8); - let targetBuffer = new Uint8Array(buffer, pixelDataOffset); + var targetBuffer = new Uint8Array(buffer, pixelDataOffset); - for (let i = byteStart; i <= byteEnd; i++) { + for (var i = byteStart; i <= byteEnd; i++) { while (bitStartOffset < 8) { switch (bitStartOffset) { case 0: @@ -45428,20 +45640,20 @@ class CornerstoneDataParser { bitStartOffset = 0; } } - } + }; - _interpretAsRGB(photometricInterpretation) { - const rgbLikeTypes = ['RGB', 'YBR_RCT', 'YBR_ICT', 'YBR_FULL_422']; + CornerstoneDataParser.prototype._interpretAsRGB = function _interpretAsRGB(photometricInterpretation) { + var rgbLikeTypes = ['RGB', 'YBR_RCT', 'YBR_ICT', 'YBR_FULL_422']; return rgbLikeTypes.indexOf(photometricInterpretation) !== -1; - } + }; - _convertColorSpace(uncompressedData) { - let rgbData = null; - let photometricInterpretation = this.photometricInterpretation(); - let planarConfiguration = this.planarConfiguration(); + CornerstoneDataParser.prototype._convertColorSpace = function _convertColorSpace(uncompressedData) { + var rgbData = null; + var photometricInterpretation = this.photometricInterpretation(); + var planarConfiguration = this.planarConfiguration(); - const interpretAsRGB = this._interpretAsRGB(photometricInterpretation); + var interpretAsRGB = this._interpretAsRGB(photometricInterpretation); if (interpretAsRGB && planarConfiguration === 0) { // ALL GOOD, ALREADY ORDERED // planar or non planar planarConfiguration @@ -45456,16 +45668,16 @@ class CornerstoneDataParser { } else if (uncompressedData instanceof Uint16Array) { rgbData = new Uint16Array(uncompressedData.length); } else { - const error = new Error(`unsuported typed array: ${uncompressedData}`); + var error = new Error('unsuported typed array: ' + uncompressedData); throw error; } - let numPixels = uncompressedData.length / 3; - let rgbaIndex = 0; - let rIndex = 0; - let gIndex = numPixels; - let bIndex = numPixels * 2; - for (let i = 0; i < numPixels; i++) { + var numPixels = uncompressedData.length / 3; + var rgbaIndex = 0; + var rIndex = 0; + var gIndex = numPixels; + var bIndex = numPixels * 2; + for (var i = 0; i < numPixels; i++) { rgbData[rgbaIndex++] = uncompressedData[rIndex++]; // red rgbData[rgbaIndex++] = uncompressedData[gIndex++]; // green rgbData[rgbaIndex++] = uncompressedData[bIndex++]; // blue @@ -45480,53 +45692,55 @@ class CornerstoneDataParser { } else if (uncompressedData instanceof Uint16Array) { rgbData = new Uint16Array(uncompressedData.length); } else { - const error = new Error(`unsuported typed array: ${uncompressedData}`); - throw error; + var _error = new Error('unsuported typed array: ' + uncompressedData); + throw _error; } // https://github.com/chafey/cornerstoneWADOImageLoader/blob/master/src/decodeYBRFull.js - let nPixels = uncompressedData.length / 3; - let ybrIndex = 0; - let rgbaIndex = 0; - for (let i = 0; i < nPixels; i++) { - let y = uncompressedData[ybrIndex++]; - let cb = uncompressedData[ybrIndex++]; - let cr = uncompressedData[ybrIndex++]; - rgbData[rgbaIndex++] = y + 1.402 * (cr - 128); // red - rgbData[rgbaIndex++] = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green - rgbData[rgbaIndex++] = y + 1.772 * (cb - 128); // blue + var nPixels = uncompressedData.length / 3; + var ybrIndex = 0; + var _rgbaIndex = 0; + for (var _i3 = 0; _i3 < nPixels; _i3++) { + var y = uncompressedData[ybrIndex++]; + var cb = uncompressedData[ybrIndex++]; + var cr = uncompressedData[ybrIndex++]; + rgbData[_rgbaIndex++] = y + 1.402 * (cr - 128); // red + rgbData[_rgbaIndex++] = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green + rgbData[_rgbaIndex++] = y + 1.772 * (cb - 128); // blue // rgbData[rgbaIndex++] = 255; //alpha } } else { - const error = new Error(`photometric interpolation not supported: ${photometricInterpretation}`); - throw error; + var _error2 = new Error('photometric interpolation not supported: ' + photometricInterpretation); + throw _error2; } return rgbData; - } + }; /** * Swap bytes in frame. */ - _swapFrame(frame) { + + + CornerstoneDataParser.prototype._swapFrame = function _swapFrame(frame) { // swap bytes ( if 8bits (1byte), nothing to swap) - let bitsAllocated = this.bitsAllocated(); + var bitsAllocated = this.bitsAllocated(); if (bitsAllocated === 16) { - for (let i = 0; i < frame.length; i++) { + for (var i = 0; i < frame.length; i++) { frame[i] = this._swap16(frame[i]); } } else if (bitsAllocated === 32) { - for (let i = 0; i < frame.length; i++) { - frame[i] = this._swap32(frame[i]); + for (var _i4 = 0; _i4 < frame.length; _i4++) { + frame[_i4] = this._swap32(frame[_i4]); } } return frame; - } + }; - _getUnitsName(value) { - const units = { + CornerstoneDataParser.prototype._getUnitsName = function _getUnitsName(value) { + var units = { 0: 'none', 1: 'percent', 2: 'dB', @@ -45543,20 +45757,26 @@ class CornerstoneDataParser { }; return units.hasOwnProperty(value) ? units[value] : 'none'; - } + }; + + CornerstoneDataParser.prototype.minMaxPixelData = function minMaxPixelData() { + var pixelData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - minMaxPixelData(pixelData = []) { - let minMax = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY]; - let numPixels = pixelData.length; - for (let index = 0; index < numPixels; index++) { - let spv = pixelData[index]; + var minMax = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY]; + var numPixels = pixelData.length; + for (var index = 0; index < numPixels; index++) { + var spv = pixelData[index]; minMax[0] = Math.min(minMax[0], spv); minMax[1] = Math.max(minMax[1], spv); } return minMax; - } -} + }; + + return CornerstoneDataParser; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (CornerstoneDataParser); /***/ }), @@ -45581,7 +45801,7 @@ __webpack_require__.r(__webpack_exports__); * @returns {*} */ function getNumberString(element, index, defaultValue) { - const value = Object(_getValue_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, index, defaultValue); + var value = Object(_getValue_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, index, defaultValue); if (value === undefined) { return; @@ -45607,7 +45827,7 @@ __webpack_require__.r(__webpack_exports__); function getNumberValue(element, index) { - const value = Object(_getValue_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, index); + var value = Object(_getValue_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, index); if (value === undefined) { return; @@ -45651,9 +45871,9 @@ function getNumberValues(element, minimumLength) { return; } - const values = []; + var values = []; - for (let i = 0; i < element.Value.length; i++) { + for (var i = 0; i < element.Value.length; i++) { values.push(parseFloat(element.Value[i])); } @@ -45755,71 +45975,88 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./widgets.base */ "./src/widgets/widgets.base.ts"); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_widgets_base__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _widgets_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./widgets.handle */ "./src/widgets/widgets.handle.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * @module widgets/angle */ -const widgetsAngle = (three = window.THREE) => { +var widgetsAngle = function widgetsAngle() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + _classCallCheck(this, _class); - this._widgetType = 'Angle'; + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); + + _this._widgetType = 'Angle'; // incoming parameters (optional: worldPosition) // outgoing values - this._opangle = null; + _this._opangle = null; - this._moving = false; - this._domHovered = false; - this._defaultAngle = true; + _this._moving = false; + _this._domHovered = false; + _this._defaultAngle = true; // mesh stuff - this._material = null; - this._geometry = null; - this._mesh = null; + _this._material = null; + _this._geometry = null; + _this._mesh = null; // dom stuff - this._line = null; - this._line2 = null; - this._label = null; + _this._line = null; + _this._line2 = null; + _this._label = null; // add handles - this._handles = []; + _this._handles = []; - let handle; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - for (let i = 0; i < 3; i++) { + var handle = void 0; + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + for (var i = 0; i < 3; i++) { handle = new WidgetsHandle(targetMesh, controls, params); - this.add(handle); - this._handles.push(handle); + _this.add(handle); + _this._handles.push(handle); } - this._handles[1].active = true; - this._handles[1].tracking = true; - this._handles[2].active = true; - this._handles[2].tracking = true; + _this._handles[1].active = true; + _this._handles[1].tracking = true; + _this._handles[2].active = true; + _this._handles[2].tracking = true; - this._moveHandle = new WidgetsHandle(targetMesh, controls, params); - this.add(this._moveHandle); - this._handles.push(this._moveHandle); - this._moveHandle.hide(); + _this._moveHandle = new WidgetsHandle(targetMesh, controls, params); + _this.add(_this._moveHandle); + _this._handles.push(_this._moveHandle); + _this._moveHandle.hide(); - this.create(); + _this.create(); - this.onMove = this.onMove.bind(this); - this.onHover = this.onHover.bind(this); - this.addEventListeners(); + _this.onMove = _this.onMove.bind(_this); + _this.onHover = _this.onHover.bind(_this); + _this.addEventListeners(); + return _this; } - addEventListeners() { + _class.prototype.addEventListeners = function addEventListeners() { this._container.addEventListener('wheel', this.onMove); this._line.addEventListener('mouseenter', this.onHover); @@ -45828,9 +46065,9 @@ const widgetsAngle = (three = window.THREE) => { this._line2.addEventListener('mouseleave', this.onHover); this._label.addEventListener('mouseenter', this.onHover); this._label.addEventListener('mouseleave', this.onHover); - } + }; - removeEventListeners() { + _class.prototype.removeEventListeners = function removeEventListeners() { this._container.removeEventListener('wheel', this.onMove); this._line.removeEventListener('mouseenter', this.onHover); @@ -45839,9 +46076,9 @@ const widgetsAngle = (three = window.THREE) => { this._line2.removeEventListener('mouseleave', this.onHover); this._label.removeEventListener('mouseenter', this.onHover); this._label.removeEventListener('mouseleave', this.onHover); - } + }; - onHover(evt) { + _class.prototype.onHover = function onHover(evt) { if (evt) { this.hoverDom(evt); } @@ -45850,17 +46087,17 @@ const widgetsAngle = (three = window.THREE) => { this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._handles[2].hovered || this._domHovered; this._container.style.cursor = this._hovered ? 'pointer' : 'default'; - } + }; - hoverMesh() { + _class.prototype.hoverMesh = function hoverMesh() { // check raycast intersection, do we want to hover on mesh or just css? - } + }; - hoverDom(evt) { + _class.prototype.hoverDom = function hoverDom(evt) { this._domHovered = evt.type === 'mouseenter'; - } + }; - onStart(evt) { + _class.prototype.onStart = function onStart(evt) { this._moveHandle.onMove(evt, true); this._handles[0].onStart(evt); @@ -45875,18 +46112,20 @@ const widgetsAngle = (three = window.THREE) => { } this.update(); - } + }; + + _class.prototype.onMove = function onMove(evt) { + var _this2 = this; - onMove(evt) { if (this._active) { - const prevPosition = this._moveHandle.worldPosition.clone(); + var prevPosition = this._moveHandle.worldPosition.clone(); this._dragged = true; this._moveHandle.onMove(evt, true); if (this._moving) { - this._handles.slice(0, -1).forEach(handle => { - handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition)); + this._handles.slice(0, -1).forEach(function (handle) { + handle.worldPosition.add(_this2._moveHandle.worldPosition.clone().sub(prevPosition)); }); } } else { @@ -45898,9 +46137,9 @@ const widgetsAngle = (three = window.THREE) => { this._handles[2].onMove(evt); this.update(); - } + }; - onEnd() { + _class.prototype.onEnd = function onEnd() { this._handles[0].onEnd(); // First Handle if (this._handles[1].tracking && this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10 || !this._handles[1].tracking && this._handles[2].tracking && this._handles[1].screenPosition.distanceTo(this._handles[2].screenPosition) < 10) { @@ -45936,14 +46175,14 @@ const widgetsAngle = (three = window.THREE) => { this._dragged = this._handles[2].tracking; this._moving = false; this.update(); - } + }; - create() { + _class.prototype.create = function create() { this.createMesh(); this.createDOM(); - } + }; - createMesh() { + _class.prototype.createMesh = function createMesh() { // geometry this._geometry = new three.Geometry(); this._geometry.vertices = [this._handles[0].worldPosition, this._handles[1].worldPosition, this._handles[1].worldPosition, this._handles[2].worldPosition]; @@ -45957,9 +46196,9 @@ const widgetsAngle = (three = window.THREE) => { this._mesh = new three.LineSegments(this._geometry, this._material); this._mesh.visible = true; this.add(this._mesh); - } + }; - createDOM() { + _class.prototype.createDOM = function createDOM() { this._line = document.createElement('div'); this._line.className = 'widgets-line'; this._container.appendChild(this._line); @@ -45973,17 +46212,19 @@ const widgetsAngle = (three = window.THREE) => { this._container.appendChild(this._label); this.updateDOMColor(); - } + }; - hideDOM() { + _class.prototype.hideDOM = function hideDOM() { this._line.style.display = 'none'; this._line2.style.display = 'none'; this._label.style.display = 'none'; - this._handles.forEach(elem => elem.hideDOM()); - } + this._handles.forEach(function (elem) { + return elem.hideDOM(); + }); + }; - showDOM() { + _class.prototype.showDOM = function showDOM() { this._line.style.display = ''; this._line2.style.display = ''; this._label.style.display = ''; @@ -45991,9 +46232,9 @@ const widgetsAngle = (three = window.THREE) => { this._handles[0].showDOM(); this._handles[1].showDOM(); this._handles[2].showDOM(); - } + }; - update() { + _class.prototype.update = function update() { this.updateColor(); this._handles[0].update(); @@ -46008,66 +46249,66 @@ const widgetsAngle = (three = window.THREE) => { this.updateMeshPosition(); this.updateDOM(); - } + }; - updateMeshColor() { + _class.prototype.updateMeshColor = function updateMeshColor() { if (this._material) { this._material.color.set(this._color); } - } + }; - updateMeshPosition() { + _class.prototype.updateMeshPosition = function updateMeshPosition() { if (this._geometry) { this._geometry.verticesNeedUpdate = true; } - } + }; - updateDOM() { + _class.prototype.updateDOM = function updateDOM() { this.updateDOMColor(); // update first line - const lineData = this.getLineData(this._handles[1].screenPosition, this._handles[0].screenPosition); + var lineData = this.getLineData(this._handles[1].screenPosition, this._handles[0].screenPosition); - this._line.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0) - rotate(${lineData.transformAngle}rad)`; + this._line.style.transform = 'translate3D(' + lineData.transformX + 'px, ' + lineData.transformY + 'px, 0)\n rotate(' + lineData.transformAngle + 'rad)'; this._line.style.width = lineData.length + 'px'; // update second line - const line2Data = this.getLineData(this._handles[1].screenPosition, this._handles[2].screenPosition); + var line2Data = this.getLineData(this._handles[1].screenPosition, this._handles[2].screenPosition); - this._line2.style.transform = `translate3D(${line2Data.transformX}px, ${line2Data.transformY}px, 0) - rotate(${line2Data.transformAngle}rad)`; + this._line2.style.transform = 'translate3D(' + line2Data.transformX + 'px, ' + line2Data.transformY + 'px, 0)\n rotate(' + line2Data.transformAngle + 'rad)'; this._line2.style.width = line2Data.length + 'px'; // update angle and label - this._label.innerHTML = `${this._opangle.toFixed(2)}°`; + this._label.innerHTML = this._opangle.toFixed(2) + '°'; - let paddingNormVector = lineData.line.clone().add(line2Data.line).normalize().negate(); - let normAngle = paddingNormVector.angleTo(new three.Vector3(1, 0, 0)); + var paddingNormVector = lineData.line.clone().add(line2Data.line).normalize().negate(); + var normAngle = paddingNormVector.angleTo(new three.Vector3(1, 0, 0)); if (normAngle > Math.PI / 2) { normAngle = Math.PI - normAngle; } - const labelPadding = Math.tan(normAngle) < this._label.offsetHeight / this._label.offsetWidth ? this._label.offsetWidth / 2 / Math.cos(normAngle) + 15 // 15px padding + var labelPadding = Math.tan(normAngle) < this._label.offsetHeight / this._label.offsetWidth ? this._label.offsetWidth / 2 / Math.cos(normAngle) + 15 // 15px padding : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - normAngle) + 15; - const paddingPoint = this._handles[1].screenPosition.clone().add(paddingNormVector.multiplyScalar(labelPadding)); - const transform = this.adjustLabelTransform(this._label, paddingPoint); + var paddingPoint = this._handles[1].screenPosition.clone().add(paddingNormVector.multiplyScalar(labelPadding)); + var transform = this.adjustLabelTransform(this._label, paddingPoint); - this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`; - } + this._label.style.transform = 'translate3D(' + transform.x + 'px, ' + transform.y + 'px, 0)'; + }; - updateDOMColor() { + _class.prototype.updateDOMColor = function updateDOMColor() { this._line.style.backgroundColor = this._color; this._line2.style.backgroundColor = this._color; this._label.style.borderColor = this._color; - } + }; + + _class.prototype.free = function free() { + var _this3 = this; - free() { this.removeEventListeners(); - this._handles.forEach(h => { - this.remove(h); + this._handles.forEach(function (h) { + _this3.remove(h); h.free(); }); this._handles = []; @@ -46091,39 +46332,46 @@ const widgetsAngle = (three = window.THREE) => { this._material.dispose(); this._material = null; - super.free(); - } + _Constructor.prototype.free.call(this); + }; - toggleDefaultAngle() { + _class.prototype.toggleDefaultAngle = function toggleDefaultAngle() { this._defaultAngle = !this._defaultAngle; - } - - get targetMesh() { - return this._targetMesh; - } - - set targetMesh(targetMesh) { - this._targetMesh = targetMesh; - this._handles.forEach(elem => elem.targetMesh = targetMesh); - this.update(); - } - - get worldPosition() { - return this._worldPosition; - } + }; - set worldPosition(worldPosition) { - this._handles[0].worldPosition.copy(worldPosition); - this._handles[1].worldPosition.copy(worldPosition); - this._handles[2].worldPosition.copy(worldPosition); - this._worldPosition.copy(worldPosition); - this.update(); - } + _createClass(_class, [{ + key: 'targetMesh', + get: function get() { + return this._targetMesh; + }, + set: function set(targetMesh) { + this._targetMesh = targetMesh; + this._handles.forEach(function (elem) { + return elem.targetMesh = targetMesh; + }); + this.update(); + } + }, { + key: 'worldPosition', + get: function get() { + return this._worldPosition; + }, + set: function set(worldPosition) { + this._handles[0].worldPosition.copy(worldPosition); + this._handles[1].worldPosition.copy(worldPosition); + this._handles[2].worldPosition.copy(worldPosition); + this._worldPosition.copy(worldPosition); + this.update(); + } + }, { + key: 'angle', + get: function get() { + return this._opangle; + } + }]); - get angle() { - return this._opangle; - } - }; + return _class; + }(Constructor); }; @@ -46144,6 +46392,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./widgets.base */ "./src/widgets/widgets.base.ts"); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_widgets_base__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _widgets_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./widgets.handle */ "./src/widgets/widgets.handle.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + @@ -46151,67 +46407,76 @@ __webpack_require__.r(__webpack_exports__); * @module widgets/annotation * @todo: add option to show only label (without mesh, dots and lines) */ -const widgetsAnnotation = (three = window.THREE) => { +var widgetsAnnotation = function widgetsAnnotation() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); - this._widgetType = 'Annotation'; + _this._widgetType = 'Annotation'; // incoming parameters (optional: worldPosition) - this._initialized = false; // set to true when the name of the label is entered - this._movinglabel = null; // bool that turns true when the label is moving with the mouse - this._labelmoved = false; // bool that turns true once the label is moved by the user (at least once) - this._labelhovered = false; - this._manuallabeldisplay = false; // Make true to force the label to be displayed + _this._initialized = false; // set to true when the name of the label is entered + _this._movinglabel = null; // bool that turns true when the label is moving with the mouse + _this._labelmoved = false; // bool that turns true once the label is moved by the user (at least once) + _this._labelhovered = false; + _this._manuallabeldisplay = false; // Make true to force the label to be displayed // mesh stuff - this._material = null; - this._geometry = null; - this._meshline = null; - this._cone = null; + _this._material = null; + _this._geometry = null; + _this._meshline = null; + _this._cone = null; // dom stuff - this._line = null; - this._dashline = null; - this._label = null; - this._labeltext = null; + _this._line = null; + _this._dashline = null; + _this._label = null; + _this._labeltext = null; // var - this._labelOffset = new three.Vector3(); // difference between label center and second handle - this._mouseLabelOffset = new three.Vector3(); // difference between mouse coordinates and label center + _this._labelOffset = new three.Vector3(); // difference between label center and second handle + _this._mouseLabelOffset = new three.Vector3(); // difference between mouse coordinates and label center // add handles - this._handles = []; + _this._handles = []; - let handle; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - for (let i = 0; i < 2; i++) { + var handle = void 0; + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + for (var i = 0; i < 2; i++) { handle = new WidgetsHandle(targetMesh, controls, params); - this.add(handle); - this._handles.push(handle); + _this.add(handle); + _this._handles.push(handle); } - this._handles[1].active = true; + _this._handles[1].active = true; - this.create(); - this.initOffsets(); + _this.create(); + _this.initOffsets(); - this.onResize = this.onResize.bind(this); - this.onMove = this.onMove.bind(this); - this.onHoverlabel = this.onHoverlabel.bind(this); - this.notonHoverlabel = this.notonHoverlabel.bind(this); - this.changelabeltext = this.changelabeltext.bind(this); + _this.onResize = _this.onResize.bind(_this); + _this.onMove = _this.onMove.bind(_this); + _this.onHoverlabel = _this.onHoverlabel.bind(_this); + _this.notonHoverlabel = _this.notonHoverlabel.bind(_this); + _this.changelabeltext = _this.changelabeltext.bind(_this); - this.addEventListeners(); + _this.addEventListeners(); + return _this; } - addEventListeners() { + _class.prototype.addEventListeners = function addEventListeners() { window.addEventListener('resize', this.onResize); this._label.addEventListener('mouseenter', this.onHoverlabel); @@ -46219,9 +46484,9 @@ const widgetsAnnotation = (three = window.THREE) => { this._label.addEventListener('dblclick', this.changelabeltext); this._container.addEventListener('wheel', this.onMove); - } + }; - removeEventListeners() { + _class.prototype.removeEventListeners = function removeEventListeners() { window.removeEventListener('resize', this.onResize); this._label.removeEventListener('mouseenter', this.onHoverlabel); @@ -46229,30 +46494,30 @@ const widgetsAnnotation = (three = window.THREE) => { this._label.removeEventListener('dblclick', this.changelabeltext); this._container.removeEventListener('wheel', this.onMove); - } + }; - onResize() { + _class.prototype.onResize = function onResize() { this.initOffsets(); - } + }; - onHoverlabel() { + _class.prototype.onHoverlabel = function onHoverlabel() { // this function is called when mouse enters the label with "mouseenter" event this._labelhovered = true; this._container.style.cursor = 'pointer'; - } + }; - notonHoverlabel() { + _class.prototype.notonHoverlabel = function notonHoverlabel() { // this function is called when mouse leaves the label with "mouseleave" event this._labelhovered = false; this._container.style.cursor = 'default'; - } + }; - onStart(evt) { + _class.prototype.onStart = function onStart(evt) { if (this._labelhovered) { // if label hovered then it should be moved // save mouse coordinates offset from label center - const offsets = this.getMouseOffsets(evt, this._container); - const paddingPoint = this._handles[1].screenPosition.clone().sub(this._labelOffset); + var offsets = this.getMouseOffsets(evt, this._container); + var paddingPoint = this._handles[1].screenPosition.clone().sub(this._labelOffset); this._mouseLabelOffset = new three.Vector3(offsets.screenX - paddingPoint.x, offsets.screenY - paddingPoint.y, 0); this._movinglabel = true; @@ -46265,11 +46530,11 @@ const widgetsAnnotation = (three = window.THREE) => { this._active = this._handles[0].active || this._handles[1].active || this._labelhovered; this.update(); - } + }; - onMove(evt) { + _class.prototype.onMove = function onMove(evt) { if (this._movinglabel) { - const offsets = this.getMouseOffsets(evt, this._container); + var offsets = this.getMouseOffsets(evt, this._container); this._labelOffset = new three.Vector3(this._handles[1].screenPosition.x - offsets.screenX + this._mouseLabelOffset.x, this._handles[1].screenPosition.y - offsets.screenY + this._mouseLabelOffset.y, 0); this._controls.enabled = false; @@ -46285,9 +46550,9 @@ const widgetsAnnotation = (three = window.THREE) => { this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._labelhovered; this.update(); - } + }; - onEnd() { + _class.prototype.onEnd = function onEnd() { this._handles[0].onEnd(); // First Handle // Second Handle @@ -46314,39 +46579,37 @@ const widgetsAnnotation = (three = window.THREE) => { this._dragged = false; this._movinglabel = false; this.update(); - } + }; - setlabeltext() { + _class.prototype.setlabeltext = function setlabeltext() { // called when the user creates a new arrow while (!this._labeltext) { this._labeltext = prompt('Please enter the annotation text', ''); } this.displaylabel(); - } + }; - changelabeltext() { + _class.prototype.changelabeltext = function changelabeltext() { // called when the user does double click in the label this._labeltext = prompt('Please enter a new annotation text', this._label.innerHTML); this.displaylabel(); - } + }; - displaylabel() { + _class.prototype.displaylabel = function displaylabel() { this._label.innerHTML = typeof this._labeltext === 'string' && this._labeltext.length > 0 // avoid error ? this._labeltext : ''; // empty string is passed or Cancel is pressed // show the label (in css an empty string is used to revert display=none) this._label.style.display = ''; this._dashline.style.display = ''; - this._label.style.transform = `translate3D( - ${this._handles[1].screenPosition.x - this._labelOffset.x - this._label.offsetWidth / 2}px, - ${this._handles[1].screenPosition.y - this._labelOffset.y - this._label.offsetHeight / 2 - this._container.offsetHeight}px, 0)`; - } + this._label.style.transform = 'translate3D(\n ' + (this._handles[1].screenPosition.x - this._labelOffset.x - this._label.offsetWidth / 2) + 'px,\n ' + (this._handles[1].screenPosition.y - this._labelOffset.y - this._label.offsetHeight / 2 - this._container.offsetHeight) + 'px, 0)'; + }; - create() { + _class.prototype.create = function create() { this.createMesh(); this.createDOM(); - } + }; - createMesh() { + _class.prototype.createMesh = function createMesh() { // material this._material = new three.LineBasicMaterial(); @@ -46373,9 +46636,9 @@ const widgetsAnnotation = (three = window.THREE) => { this._cone.visible = true; this.add(this._cone); - } + }; - createDOM() { + _class.prototype.createDOM = function createDOM() { this._line = document.createElement('div'); this._line.className = 'widgets-line'; this._container.appendChild(this._line); @@ -46391,9 +46654,9 @@ const widgetsAnnotation = (three = window.THREE) => { this._container.appendChild(this._label); this.updateDOMColor(); - } + }; - update() { + _class.prototype.update = function update() { this.updateColor(); this._handles[0].update(); @@ -46403,15 +46666,15 @@ const widgetsAnnotation = (three = window.THREE) => { this.updateMeshPosition(); this.updateDOM(); - } + }; - updateMeshColor() { + _class.prototype.updateMeshColor = function updateMeshColor() { if (this._material) { this._material.color.set(this._color); } - } + }; - updateMeshPosition() { + _class.prototype.updateMeshPosition = function updateMeshPosition() { if (this._geometry) { this._geometry.verticesNeedUpdate = true; } @@ -46420,25 +46683,24 @@ const widgetsAnnotation = (three = window.THREE) => { this._cone.position.copy(this._handles[1].worldPosition); this._cone.lookAt(this._handles[0].worldPosition); } - } + }; - updateDOM() { + _class.prototype.updateDOM = function updateDOM() { this.updateDOMColor(); // update line - const lineData = this.getLineData(this._handles[0].screenPosition, this._handles[1].screenPosition); + var lineData = this.getLineData(this._handles[0].screenPosition, this._handles[1].screenPosition); - this._line.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0) - rotate(${lineData.transformAngle}rad)`; + this._line.style.transform = 'translate3D(' + lineData.transformX + 'px, ' + lineData.transformY + 'px, 0)\n rotate(' + lineData.transformAngle + 'rad)'; this._line.style.width = lineData.length + 'px'; // update label - const paddingVector = lineData.line.multiplyScalar(0.5); - const paddingPoint = this._handles[1].screenPosition.clone().sub(this._labelmoved ? this._labelOffset // if the label is moved, then its position is defined by labelOffset + var paddingVector = lineData.line.multiplyScalar(0.5); + var paddingPoint = this._handles[1].screenPosition.clone().sub(this._labelmoved ? this._labelOffset // if the label is moved, then its position is defined by labelOffset : paddingVector); // otherwise it's placed in the center of the line - const labelPosition = this.adjustLabelTransform(this._label, paddingPoint); + var labelPosition = this.adjustLabelTransform(this._label, paddingPoint); - this._label.style.transform = `translate3D(${labelPosition.x}px, ${labelPosition.y}px, 0)`; + this._label.style.transform = 'translate3D(' + labelPosition.x + 'px, ' + labelPosition.y + 'px, 0)'; // create the label without the interaction of the user. Useful when we need to create the label manually if (this._manuallabeldisplay) { @@ -46446,9 +46708,9 @@ const widgetsAnnotation = (three = window.THREE) => { } // update dash line - let minLine = this.getLineData(this._handles[0].screenPosition, paddingPoint); - let lineCL = this.getLineData(lineData.center, paddingPoint); - let line1L = this.getLineData(this._handles[1].screenPosition, paddingPoint); + var minLine = this.getLineData(this._handles[0].screenPosition, paddingPoint); + var lineCL = this.getLineData(lineData.center, paddingPoint); + var line1L = this.getLineData(this._handles[1].screenPosition, paddingPoint); if (minLine.length > lineCL.length) { minLine = lineCL; @@ -46457,36 +46719,41 @@ const widgetsAnnotation = (three = window.THREE) => { minLine = line1L; } - this._dashline.style.transform = `translate3D(${minLine.transformX}px, ${minLine.transformY}px, 0) - rotate(${minLine.transformAngle}rad)`; + this._dashline.style.transform = 'translate3D(' + minLine.transformX + 'px, ' + minLine.transformY + 'px, 0)\n rotate(' + minLine.transformAngle + 'rad)'; this._dashline.style.width = minLine.length + 'px'; - } + }; - updateDOMColor() { + _class.prototype.updateDOMColor = function updateDOMColor() { this._line.style.backgroundColor = this._color; this._dashline.style.borderTop = '1.5px dashed ' + this._color; this._label.style.borderColor = this._color; - } + }; - hideDOM() { + _class.prototype.hideDOM = function hideDOM() { this._line.style.display = 'none'; this._dashline.style.display = 'none'; this._label.style.display = 'none'; - this._handles.forEach(elem => elem.hideDOM()); - } + this._handles.forEach(function (elem) { + return elem.hideDOM(); + }); + }; - showDOM() { + _class.prototype.showDOM = function showDOM() { this._line.style.display = ''; this._dashline.style.display = ''; this._label.style.display = ''; - this._handles.forEach(elem => elem.showDOM()); - } + this._handles.forEach(function (elem) { + return elem.showDOM(); + }); + }; + + _class.prototype.free = function free() { + var _this2 = this; - free() { this.removeEventListeners(); - this._handles.forEach(h => { - this.remove(h); + this._handles.forEach(function (h) { + _this2.remove(h); h.free(); }); this._handles = []; @@ -46518,30 +46785,36 @@ const widgetsAnnotation = (three = window.THREE) => { this._conegeometry.dispose(); this._conegeometry = null; - super.free(); - } - - get targetMesh() { - return this._targetMesh; - } - - set targetMesh(targetMesh) { - this._targetMesh = targetMesh; - this._handles.forEach(elem => elem.targetMesh = targetMesh); - this.update(); - } + _Constructor.prototype.free.call(this); + }; - get worldPosition() { - return this._worldPosition; - } + _createClass(_class, [{ + key: 'targetMesh', + get: function get() { + return this._targetMesh; + }, + set: function set(targetMesh) { + this._targetMesh = targetMesh; + this._handles.forEach(function (elem) { + return elem.targetMesh = targetMesh; + }); + this.update(); + } + }, { + key: 'worldPosition', + get: function get() { + return this._worldPosition; + }, + set: function set(worldPosition) { + this._handles[0].worldPosition.copy(worldPosition); + this._handles[1].worldPosition.copy(worldPosition); + this._worldPosition.copy(worldPosition); + this.update(); + } + }]); - set worldPosition(worldPosition) { - this._handles[0].worldPosition.copy(worldPosition); - this._handles[1].worldPosition.copy(worldPosition); - this._worldPosition.copy(worldPosition); - this.update(); - } - }; + return _class; + }(Constructor); }; @@ -47032,82 +47305,101 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./widgets.base */ "./src/widgets/widgets.base.ts"); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_widgets_base__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _widgets_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./widgets.handle */ "./src/widgets/widgets.handle.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * @module widgets/biruler */ -const widgetsBiruler = (three = window.THREE) => { +var widgetsBiruler = function widgetsBiruler() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); - this._widgetType = 'BiRuler'; + _this._widgetType = 'BiRuler'; // incoming parameters (optional: lps2IJK, pixelSpacing, ultrasoundRegions, worldPosition) - this._calibrationFactor = params.calibrationFactor || null; + _this._calibrationFactor = params.calibrationFactor || null; // outgoing values - this._distance = null; - this._distance2 = null; - this._units = !this._calibrationFactor && !params.pixelSpacing ? 'units' : 'mm'; + _this._distance = null; + _this._distance2 = null; + _this._units = !_this._calibrationFactor && !params.pixelSpacing ? 'units' : 'mm'; // mesh stuff - this._material = null; - this._geometry = null; - this._mesh = null; + _this._material = null; + _this._geometry = null; + _this._mesh = null; // dom stuff - this._line = null; - this._label = null; - this._line2 = null; - this._label2 = null; - this._dashline = null; + _this._line = null; + _this._label = null; + _this._line2 = null; + _this._label2 = null; + _this._dashline = null; // add handles - this._handles = []; + _this._handles = []; - let handle; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - for (let i = 0; i < 4; i++) { + var handle = void 0; + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + for (var i = 0; i < 4; i++) { handle = new WidgetsHandle(targetMesh, controls, params); - this.add(handle); - this._handles.push(handle); + _this.add(handle); + _this._handles.push(handle); } - this._handles[1].active = true; - this._handles[1].tracking = true; - this._handles[3].active = true; - this._handles[3].tracking = true; + _this._handles[1].active = true; + _this._handles[1].tracking = true; + _this._handles[3].active = true; + _this._handles[3].tracking = true; - this.create(); + _this.create(); - this.onMove = this.onMove.bind(this); - this.addEventListeners(); + _this.onMove = _this.onMove.bind(_this); + _this.addEventListeners(); + return _this; } - addEventListeners() { + _class.prototype.addEventListeners = function addEventListeners() { this._container.addEventListener('wheel', this.onMove); - } + }; - removeEventListeners() { + _class.prototype.removeEventListeners = function removeEventListeners() { this._container.removeEventListener('wheel', this.onMove); - } + }; - onStart(evt) { - this._handles.forEach(elem => elem.onStart(evt)); + _class.prototype.onStart = function onStart(evt) { + this._handles.forEach(function (elem) { + return elem.onStart(evt); + }); this._active = this._handles[0].active || this._handles[1].active || this._handles[2].active || this._handles[3].active; this.update(); - } + }; - onMove(evt) { + _class.prototype.onMove = function onMove(evt) { if (this._active) { this._dragged = true; } else { @@ -47115,12 +47407,14 @@ const widgetsBiruler = (three = window.THREE) => { this._container.style.cursor = this._hovered ? 'pointer' : 'default'; } - this._handles.forEach(elem => elem.onMove(evt)); + this._handles.forEach(function (elem) { + return elem.onMove(evt); + }); this.update(); - } + }; - onEnd() { + _class.prototype.onEnd = function onEnd() { this._handles[0].onEnd(); this._handles[2].onEnd(); @@ -47157,14 +47451,14 @@ const widgetsBiruler = (three = window.THREE) => { this._active = this._handles[0].active || this._handles[1].active || this._handles[2].active || this._handles[3].active; this._dragged = false; this.update(); - } + }; - create() { + _class.prototype.create = function create() { this.createMesh(); this.createDOM(); - } + }; - createMesh() { + _class.prototype.createMesh = function createMesh() { // geometry this._geometry = new three.Geometry(); this._geometry.vertices = [this._handles[0].worldPosition, this._handles[1].worldPosition, this._handles[2].worldPosition, this._handles[3].worldPosition]; @@ -47178,9 +47472,9 @@ const widgetsBiruler = (three = window.THREE) => { this._mesh = new three.LineSegments(this._geometry, this._material); this._mesh.visible = true; this.add(this._mesh); - } + }; - createDOM() { + _class.prototype.createDOM = function createDOM() { this._line = document.createElement('div'); this._line.className = 'widgets-line'; this._container.appendChild(this._line); @@ -47202,81 +47496,84 @@ const widgetsBiruler = (three = window.THREE) => { this._container.appendChild(this._dashline); this.updateDOMColor(); - } + }; - hideDOM() { + _class.prototype.hideDOM = function hideDOM() { this._line.style.display = 'none'; this._label.style.display = 'none'; this._line2.style.display = 'none'; this._label2.style.display = 'none'; this._dashline.style.display = 'none'; - this._handles.forEach(elem => elem.hideDOM()); - } + this._handles.forEach(function (elem) { + return elem.hideDOM(); + }); + }; - showDOM() { + _class.prototype.showDOM = function showDOM() { this._line.style.display = ''; this._label.style.display = ''; this._line2.style.display = ''; this._label2.style.display = ''; this._dashline.style.display = ''; - this._handles.forEach(elem => elem.showDOM()); - } + this._handles.forEach(function (elem) { + return elem.showDOM(); + }); + }; - update() { + _class.prototype.update = function update() { this.updateColor(); - this._handles.forEach(elem => elem.update()); + this._handles.forEach(function (elem) { + return elem.update(); + }); this.updateMeshColor(); this.updateMeshPosition(); this.updateDOM(); - } + }; - updateMeshColor() { + _class.prototype.updateMeshColor = function updateMeshColor() { if (this._material) { this._material.color.set(this._color); } - } + }; - updateMeshPosition() { + _class.prototype.updateMeshPosition = function updateMeshPosition() { if (this._geometry) { this._geometry.verticesNeedUpdate = true; } - } + }; - updateDOM() { + _class.prototype.updateDOM = function updateDOM() { this.updateDOMColor(); // update first line - const lineData = this.getLineData(this._handles[0].screenPosition, this._handles[1].screenPosition); + var lineData = this.getLineData(this._handles[0].screenPosition, this._handles[1].screenPosition); - this._line.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0) - rotate(${lineData.transformAngle}rad)`; + this._line.style.transform = 'translate3D(' + lineData.transformX + 'px, ' + lineData.transformY + 'px, 0)\n rotate(' + lineData.transformAngle + 'rad)'; this._line.style.width = lineData.length + 'px'; // update second line - const line2Data = this.getLineData(this._handles[2].screenPosition, this._handles[3].screenPosition); + var line2Data = this.getLineData(this._handles[2].screenPosition, this._handles[3].screenPosition); - this._line2.style.transform = `translate3D(${line2Data.transformX}px, ${line2Data.transformY}px, 0) - rotate(${line2Data.transformAngle}rad)`; + this._line2.style.transform = 'translate3D(' + line2Data.transformX + 'px, ' + line2Data.transformY + 'px, 0)\n rotate(' + line2Data.transformAngle + 'rad)'; this._line2.style.width = line2Data.length + 'px'; // update dash line - const line1Center = this._handles[0].worldPosition.clone().add(this._handles[1].worldPosition).multiplyScalar(0.5); - const line2Center = this._handles[2].worldPosition.clone().add(this._handles[3].worldPosition).multiplyScalar(0.5); - const dashLineData = this.getLineData(this.worldToScreen(line1Center), this.worldToScreen(line2Center)); + var line1Center = this._handles[0].worldPosition.clone().add(this._handles[1].worldPosition).multiplyScalar(0.5); + var line2Center = this._handles[2].worldPosition.clone().add(this._handles[3].worldPosition).multiplyScalar(0.5); + var dashLineData = this.getLineData(this.worldToScreen(line1Center), this.worldToScreen(line2Center)); - this._dashline.style.transform = `translate3D(${dashLineData.transformX}px, ${dashLineData.transformY}px, 0) - rotate(${dashLineData.transformAngle}rad)`; + this._dashline.style.transform = 'translate3D(' + dashLineData.transformX + 'px, ' + dashLineData.transformY + 'px, 0)\n rotate(' + dashLineData.transformAngle + 'rad)'; this._dashline.style.width = dashLineData.length + 'px'; // update labels - const distanceData = this.getDistanceData(this._handles[0].worldPosition, this._handles[1].worldPosition, this._calibrationFactor); - const distanceData2 = this.getDistanceData(this._handles[2].worldPosition, this._handles[3].worldPosition, this._calibrationFactor); - const title = 'Calibration is required to display the distance in mm'; + var distanceData = this.getDistanceData(this._handles[0].worldPosition, this._handles[1].worldPosition, this._calibrationFactor); + var distanceData2 = this.getDistanceData(this._handles[2].worldPosition, this._handles[3].worldPosition, this._calibrationFactor); + var title = 'Calibration is required to display the distance in mm'; this._distance = distanceData.distance; this._distance2 = distanceData2.distance; @@ -47305,37 +47602,37 @@ const widgetsBiruler = (three = window.THREE) => { this._label2.removeAttribute('title'); this._label2.style.color = this._colors.text; } - this._label.innerHTML = `${this._distance.toFixed(2)} ${distanceData.units}`; - this._label2.innerHTML = `${this._distance2.toFixed(2)} ${distanceData2.units}`; + this._label.innerHTML = this._distance.toFixed(2) + ' ' + distanceData.units; + this._label2.innerHTML = this._distance2.toFixed(2) + ' ' + distanceData2.units; - let angle = Math.abs(lineData.transformAngle); + var angle = Math.abs(lineData.transformAngle); if (angle > Math.PI / 2) { angle = Math.PI - angle; } - const labelPadding = Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding + var labelPadding = Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle) + 15; - const paddingVector = lineData.line.normalize().multiplyScalar(labelPadding); - const paddingPoint = lineData.length > labelPadding * 2 ? this._handles[1].screenPosition.clone().sub(paddingVector) : this._handles[1].screenPosition.clone().add(paddingVector); - const transform = this.adjustLabelTransform(this._label, paddingPoint); + var paddingVector = lineData.line.normalize().multiplyScalar(labelPadding); + var paddingPoint = lineData.length > labelPadding * 2 ? this._handles[1].screenPosition.clone().sub(paddingVector) : this._handles[1].screenPosition.clone().add(paddingVector); + var transform = this.adjustLabelTransform(this._label, paddingPoint); - this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`; + this._label.style.transform = 'translate3D(' + transform.x + 'px, ' + transform.y + 'px, 0)'; - let angle2 = Math.abs(line2Data.transformAngle); + var angle2 = Math.abs(line2Data.transformAngle); if (angle2 > Math.PI / 2) { angle2 = Math.PI - angle2; } - const label2Padding = Math.tan(angle2) < this._label2.offsetHeight / this._label2.offsetWidth ? this._label2.offsetWidth / 2 / Math.cos(angle2) + 15 // 5px for each handle + padding + var label2Padding = Math.tan(angle2) < this._label2.offsetHeight / this._label2.offsetWidth ? this._label2.offsetWidth / 2 / Math.cos(angle2) + 15 // 5px for each handle + padding : this._label2.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle2) + 15; - const paddingVector2 = line2Data.line.normalize().multiplyScalar(label2Padding); - const paddingPoint2 = line2Data.length > label2Padding * 2 ? this._handles[3].screenPosition.clone().sub(paddingVector2) : this._handles[3].screenPosition.clone().add(paddingVector2); - const transform2 = this.adjustLabelTransform(this._label2, paddingPoint2); + var paddingVector2 = line2Data.line.normalize().multiplyScalar(label2Padding); + var paddingPoint2 = line2Data.length > label2Padding * 2 ? this._handles[3].screenPosition.clone().sub(paddingVector2) : this._handles[3].screenPosition.clone().add(paddingVector2); + var transform2 = this.adjustLabelTransform(this._label2, paddingPoint2); - this._label2.style.transform = `translate3D(${transform2.x}px, ${transform2.y}px, 0)`; - } + this._label2.style.transform = 'translate3D(' + transform2.x + 'px, ' + transform2.y + 'px, 0)'; + }; - updateDOMColor() { + _class.prototype.updateDOMColor = function updateDOMColor() { this._line.style.backgroundColor = this._color; this._label.style.borderColor = this._color; @@ -47343,13 +47640,15 @@ const widgetsBiruler = (three = window.THREE) => { this._label2.style.borderColor = this._color; this._dashline.style.borderTop = '1.5px dashed ' + this._color; - } + }; + + _class.prototype.free = function free() { + var _this2 = this; - free() { this.removeEventListeners(); - this._handles.forEach(h => { - this.remove(h); + this._handles.forEach(function (h) { + _this2.remove(h); h.free(); }); this._handles = []; @@ -47375,56 +47674,68 @@ const widgetsBiruler = (three = window.THREE) => { this._material.dispose(); this._material = null; - super.free(); - } + _Constructor.prototype.free.call(this); + }; /** * Get length of rulers * * @return {Array} */ - getDistances() { - return [this._distance, this._distance2]; - } - get targetMesh() { - return this._targetMesh; - } - set targetMesh(targetMesh) { - this._targetMesh = targetMesh; - this._handles.forEach(elem => elem.targetMesh = targetMesh); - this.update(); - } - - get worldPosition() { - return this._worldPosition; - } - - set worldPosition(worldPosition) { - this._handles.forEach(elem => elem.worldPosition.copy(worldPosition)); - this._worldPosition.copy(worldPosition); - this.update(); - } - - get calibrationFactor() { - return this._calibrationFactor; - } - - set calibrationFactor(calibrationFactor) { - this._calibrationFactor = calibrationFactor; - this._units = 'mm'; - this.update(); - } + _class.prototype.getDistances = function getDistances() { + return [this._distance, this._distance2]; + }; - get shotestDistance() { - return this._distance < this._distance2 ? this._distance : this._distance2; - } + _createClass(_class, [{ + key: 'targetMesh', + get: function get() { + return this._targetMesh; + }, + set: function set(targetMesh) { + this._targetMesh = targetMesh; + this._handles.forEach(function (elem) { + return elem.targetMesh = targetMesh; + }); + this.update(); + } + }, { + key: 'worldPosition', + get: function get() { + return this._worldPosition; + }, + set: function set(worldPosition) { + this._handles.forEach(function (elem) { + return elem.worldPosition.copy(worldPosition); + }); + this._worldPosition.copy(worldPosition); + this.update(); + } + }, { + key: 'calibrationFactor', + get: function get() { + return this._calibrationFactor; + }, + set: function set(calibrationFactor) { + this._calibrationFactor = calibrationFactor; + this._units = 'mm'; + this.update(); + } + }, { + key: 'shotestDistance', + get: function get() { + return this._distance < this._distance2 ? this._distance : this._distance2; + } + }, { + key: 'longestDistance', + get: function get() { + return this._distance > this._distance2 ? this._distance : this._distance2; + } + }]); - get longestDistance() { - return this._distance > this._distance2 ? this._distance : this._distance2; - } - }; + return _class; + }(Constructor); }; @@ -47445,95 +47756,112 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./widgets.base */ "./src/widgets/widgets.base.ts"); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_widgets_base__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _widgets_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./widgets.handle */ "./src/widgets/widgets.handle.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * @module widgets/crossRuler */ -const widgetsCrossRuler = (three = window.THREE) => { +var widgetsCrossRuler = function widgetsCrossRuler() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - this._widgetType = 'CrossRuler'; + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); + + _this._widgetType = 'CrossRuler'; // incoming parameters (optional: lps2IJK, pixelSpacing, ultrasoundRegions, worldPosition) - this._calibrationFactor = params.calibrationFactor || null; + _this._calibrationFactor = params.calibrationFactor || null; - this._distances = null; // from intersection point to handles - this._line01 = null; // vector from 0 to 1st handle - this._normal = null; // normal vector to line01 + _this._distances = null; // from intersection point to handles + _this._line01 = null; // vector from 0 to 1st handle + _this._normal = null; // normal vector to line01 // outgoing values - this._distance = null; - this._distance2 = null; - this._units = !this._calibrationFactor && !params.pixelSpacing ? 'units' : 'mm'; + _this._distance = null; + _this._distance2 = null; + _this._units = !_this._calibrationFactor && !params.pixelSpacing ? 'units' : 'mm'; - this._domHovered = false; - this._moving = false; + _this._domHovered = false; + _this._moving = false; // mesh stuff - this._material = null; - this._geometry = null; - this._mesh = null; + _this._material = null; + _this._geometry = null; + _this._mesh = null; // dom stuff - this._line = null; - this._line2 = null; - this._label = null; - this._label2 = null; + _this._line = null; + _this._line2 = null; + _this._label = null; + _this._label2 = null; // add handles - this._handles = []; + _this._handles = []; - let handle; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - for (let i = 0; i < 4; i++) { + var handle = void 0; + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + for (var i = 0; i < 4; i++) { handle = new WidgetsHandle(targetMesh, controls, params); - this.add(handle); - this._handles.push(handle); + _this.add(handle); + _this._handles.push(handle); } - this._handles[1].active = true; - this._handles[1].tracking = true; + _this._handles[1].active = true; + _this._handles[1].tracking = true; - this._moveHandle = new WidgetsHandle(targetMesh, controls, params); - this.add(this._moveHandle); - this._handles.push(this._moveHandle); - this._moveHandle.hide(); + _this._moveHandle = new WidgetsHandle(targetMesh, controls, params); + _this.add(_this._moveHandle); + _this._handles.push(_this._moveHandle); + _this._moveHandle.hide(); - this.onHover = this.onHover.bind(this); - this.onMove = this.onMove.bind(this); + _this.onHover = _this.onHover.bind(_this); + _this.onMove = _this.onMove.bind(_this); - this.create(); + _this.create(); - this.addEventListeners(); + _this.addEventListeners(); + return _this; } - addEventListeners() { + _class.prototype.addEventListeners = function addEventListeners() { this._line.addEventListener('mouseenter', this.onHover); this._line.addEventListener('mouseleave', this.onHover); this._line2.addEventListener('mouseenter', this.onHover); this._line2.addEventListener('mouseleave', this.onHover); this._container.addEventListener('wheel', this.onMove); - } + }; - removeEventListeners() { + _class.prototype.removeEventListeners = function removeEventListeners() { this._line.removeEventListener('mouseenter', this.onHover); this._line.removeEventListener('mouseleave', this.onHover); this._line2.removeEventListener('mouseenter', this.onHover); this._line2.removeEventListener('mouseleave', this.onHover); this._container.removeEventListener('wheel', this.onMove); - } + }; - onHover(evt) { + _class.prototype.onHover = function onHover(evt) { if (evt) { this.hoverDom(evt); } @@ -47542,20 +47870,22 @@ const widgetsCrossRuler = (three = window.THREE) => { this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._handles[2].hovered || this._handles[3].hovered || this._domHovered; this._container.style.cursor = this._hovered ? 'pointer' : 'default'; - } + }; - hoverMesh() { + _class.prototype.hoverMesh = function hoverMesh() { // check raycast intersection, do we want to hover on mesh or just css? - } + }; - hoverDom(evt) { + _class.prototype.hoverDom = function hoverDom(evt) { this._domHovered = evt.type === 'mouseenter'; - } + }; - onStart(evt) { + _class.prototype.onStart = function onStart(evt) { this._moveHandle.onMove(evt, true); - this._handles.slice(0, -1).forEach(elem => elem.onStart(evt)); + this._handles.slice(0, -1).forEach(function (elem) { + return elem.onStart(evt); + }); this._active = this._handles[0].active || this._handles[1].active || this._handles[2].active || this._handles[3].active || this._domHovered; @@ -47565,25 +47895,29 @@ const widgetsCrossRuler = (three = window.THREE) => { } this.update(); - } + }; + + _class.prototype.onMove = function onMove(evt) { + var _this2 = this; - onMove(evt) { if (this._active) { - const prevPosition = this._moveHandle.worldPosition.clone(); + var prevPosition = this._moveHandle.worldPosition.clone(); this._dragged = true; this._moveHandle.onMove(evt, true); if (this._moving) { - this._handles.slice(0, -1).forEach(handle => { - handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition)); + this._handles.slice(0, -1).forEach(function (handle) { + handle.worldPosition.add(_this2._moveHandle.worldPosition.clone().sub(prevPosition)); }); } } else { this.onHover(null); } - this._handles.slice(0, -1).forEach(elem => elem.onMove(evt)); + this._handles.slice(0, -1).forEach(function (elem) { + return elem.onMove(evt); + }); if (this._distances) { if (this._handles[0].active || this._handles[1].active) { @@ -47593,9 +47927,9 @@ const widgetsCrossRuler = (three = window.THREE) => { } } this.update(); - } + }; - onEnd() { + _class.prototype.onEnd = function onEnd() { this._handles[0].onEnd(); this._handles[2].onEnd(); this._handles[3].onEnd(); @@ -47628,14 +47962,14 @@ const widgetsCrossRuler = (three = window.THREE) => { this.initOrtho(); } this.update(); - } + }; - create() { + _class.prototype.create = function create() { this.createMesh(); this.createDOM(); - } + }; - createMesh() { + _class.prototype.createMesh = function createMesh() { // geometry this._geometry = new three.Geometry(); this._geometry.vertices = [this._handles[0].worldPosition, this._handles[1].worldPosition, this._handles[2].worldPosition, this._handles[3].worldPosition]; @@ -47649,9 +47983,9 @@ const widgetsCrossRuler = (three = window.THREE) => { this._mesh = new three.LineSegments(this._geometry, this._material); this._mesh.visible = true; this.add(this._mesh); - } + }; - createDOM() { + _class.prototype.createDOM = function createDOM() { this._line = document.createElement('div'); this._line.className = 'widgets-line'; this._container.appendChild(this._line); @@ -47669,70 +48003,74 @@ const widgetsCrossRuler = (three = window.THREE) => { this._container.appendChild(this._label2); this.updateDOMColor(); - } + }; - hideDOM() { + _class.prototype.hideDOM = function hideDOM() { this._line.style.display = 'none'; this._line2.style.display = 'none'; this._label.style.display = 'none'; this._label2.style.display = 'none'; - this._handles.slice(0, -1).forEach(elem => elem.hideDOM()); - } + this._handles.slice(0, -1).forEach(function (elem) { + return elem.hideDOM(); + }); + }; - showDOM() { + _class.prototype.showDOM = function showDOM() { this._line.style.display = ''; this._line2.style.display = ''; this._label.style.display = ''; this._label2.style.display = ''; - this._handles.slice(0, -1).forEach(elem => elem.showDOM()); - } + this._handles.slice(0, -1).forEach(function (elem) { + return elem.showDOM(); + }); + }; - update() { + _class.prototype.update = function update() { this.updateColor(); - this._handles.slice(0, -1).forEach(elem => elem.update()); + this._handles.slice(0, -1).forEach(function (elem) { + return elem.update(); + }); this.updateMeshColor(); this.updateMeshPosition(); this.updateDOM(); - } + }; - updateMeshColor() { + _class.prototype.updateMeshColor = function updateMeshColor() { if (this._material) { this._material.color.set(this._color); } - } + }; - updateMeshPosition() { + _class.prototype.updateMeshPosition = function updateMeshPosition() { if (this._geometry) { this._geometry.verticesNeedUpdate = true; } - } + }; - updateDOM() { + _class.prototype.updateDOM = function updateDOM() { this.updateDOMColor(); // update first line - const lineData = this.getLineData(this._handles[0].screenPosition, this._handles[1].screenPosition); + var lineData = this.getLineData(this._handles[0].screenPosition, this._handles[1].screenPosition); - this._line.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0) - rotate(${lineData.transformAngle}rad)`; + this._line.style.transform = 'translate3D(' + lineData.transformX + 'px, ' + lineData.transformY + 'px, 0)\n rotate(' + lineData.transformAngle + 'rad)'; this._line.style.width = lineData.length + 'px'; // update second line - const line2Data = this.getLineData(this._handles[2].screenPosition, this._handles[3].screenPosition); + var line2Data = this.getLineData(this._handles[2].screenPosition, this._handles[3].screenPosition); - this._line2.style.transform = `translate3D(${line2Data.transformX}px, ${line2Data.transformY}px, 0) - rotate(${line2Data.transformAngle}rad)`; + this._line2.style.transform = 'translate3D(' + line2Data.transformX + 'px, ' + line2Data.transformY + 'px, 0)\n rotate(' + line2Data.transformAngle + 'rad)'; this._line2.style.width = line2Data.length + 'px'; // update labels - const distanceData = this.getDistanceData(this._handles[0].worldPosition, this._handles[1].worldPosition, this._calibrationFactor); - const distanceData2 = this.getDistanceData(this._handles[2].worldPosition, this._handles[3].worldPosition, this._calibrationFactor); - const title = 'Calibration is required to display the distance in mm'; + var distanceData = this.getDistanceData(this._handles[0].worldPosition, this._handles[1].worldPosition, this._calibrationFactor); + var distanceData2 = this.getDistanceData(this._handles[2].worldPosition, this._handles[3].worldPosition, this._calibrationFactor); + var title = 'Calibration is required to display the distance in mm'; this._distance = distanceData.distance; this._distance2 = distanceData2.distance; @@ -47761,48 +48099,50 @@ const widgetsCrossRuler = (three = window.THREE) => { this._label2.removeAttribute('title'); this._label2.style.color = this._colors.text; } - this._label.innerHTML = `${this._distance.toFixed(2)} ${distanceData.units}`; - this._label2.innerHTML = `${this._distance2.toFixed(2)} ${distanceData2.units}`; + this._label.innerHTML = this._distance.toFixed(2) + ' ' + distanceData.units; + this._label2.innerHTML = this._distance2.toFixed(2) + ' ' + distanceData2.units; - let angle = Math.abs(lineData.transformAngle); + var angle = Math.abs(lineData.transformAngle); if (angle > Math.PI / 2) { angle = Math.PI - angle; } - const labelPadding = Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding + var labelPadding = Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle) + 15, - paddingVector = lineData.line.normalize().multiplyScalar(labelPadding), - paddingPoint = lineData.length > labelPadding * 4 ? this._handles[1].screenPosition.clone().sub(paddingVector) : this._handles[1].screenPosition.clone().add(paddingVector), - transform = this.adjustLabelTransform(this._label, paddingPoint); + paddingVector = lineData.line.normalize().multiplyScalar(labelPadding), + paddingPoint = lineData.length > labelPadding * 4 ? this._handles[1].screenPosition.clone().sub(paddingVector) : this._handles[1].screenPosition.clone().add(paddingVector), + transform = this.adjustLabelTransform(this._label, paddingPoint); - this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`; + this._label.style.transform = 'translate3D(' + transform.x + 'px, ' + transform.y + 'px, 0)'; - let angle2 = Math.abs(line2Data.transformAngle); + var angle2 = Math.abs(line2Data.transformAngle); if (angle2 > Math.PI / 2) { angle2 = Math.PI - angle2; } - const label2Padding = Math.tan(angle2) < this._label2.offsetHeight / this._label2.offsetWidth ? this._label2.offsetWidth / 2 / Math.cos(angle2) + 15 // 5px for each handle + padding + var label2Padding = Math.tan(angle2) < this._label2.offsetHeight / this._label2.offsetWidth ? this._label2.offsetWidth / 2 / Math.cos(angle2) + 15 // 5px for each handle + padding : this._label2.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle2) + 15, - paddingVector2 = line2Data.line.normalize().multiplyScalar(label2Padding), - paddingPoint2 = line2Data.length > label2Padding * 4 ? this._handles[3].screenPosition.clone().sub(paddingVector2) : this._handles[3].screenPosition.clone().add(paddingVector2), - transform2 = this.adjustLabelTransform(this._label2, paddingPoint2); + paddingVector2 = line2Data.line.normalize().multiplyScalar(label2Padding), + paddingPoint2 = line2Data.length > label2Padding * 4 ? this._handles[3].screenPosition.clone().sub(paddingVector2) : this._handles[3].screenPosition.clone().add(paddingVector2), + transform2 = this.adjustLabelTransform(this._label2, paddingPoint2); - this._label2.style.transform = `translate3D(${transform2.x}px, ${transform2.y}px, 0)`; - } + this._label2.style.transform = 'translate3D(' + transform2.x + 'px, ' + transform2.y + 'px, 0)'; + }; - updateDOMColor() { + _class.prototype.updateDOMColor = function updateDOMColor() { this._line.style.backgroundColor = this._color; this._line2.style.backgroundColor = this._color; this._label.style.borderColor = this._color; this._label2.style.borderColor = this._color; - } + }; + + _class.prototype.free = function free() { + var _this3 = this; - free() { this.removeEventListeners(); - this._handles.forEach(h => { - this.remove(h); + this._handles.forEach(function (h) { + _this3.remove(h); h.free(); }); this._handles = []; @@ -47827,52 +48167,52 @@ const widgetsCrossRuler = (three = window.THREE) => { this._material.dispose(); this._material = null; - super.free(); - } + _Constructor.prototype.free.call(this); + }; - initLineAndNormal() { + _class.prototype.initLineAndNormal = function initLineAndNormal() { this._line01 = this._handles[1].worldPosition.clone().sub(this._handles[0].worldPosition); this._normal = this._line01.clone().cross(this._camera._direction).normalize(); - } + }; - initOrtho() { + _class.prototype.initOrtho = function initOrtho() { // called onEnd if distances are null this.initLineAndNormal(); - const center = this._handles[1].worldPosition.clone().add(this._handles[0].worldPosition).multiplyScalar(0.5); - const halfLength = this._line01.length() / 2; - const normLine = this._normal.clone().multiplyScalar(halfLength * 0.8); - const normLength = normLine.length(); + var center = this._handles[1].worldPosition.clone().add(this._handles[0].worldPosition).multiplyScalar(0.5); + var halfLength = this._line01.length() / 2; + var normLine = this._normal.clone().multiplyScalar(halfLength * 0.8); + var normLength = normLine.length(); this._handles[2].worldPosition.copy(center.clone().add(normLine)); this._handles[3].worldPosition.copy(center.clone().sub(normLine)); this._distances = [halfLength, halfLength, normLength, normLength]; - } + }; - repositionOrtho() { + _class.prototype.repositionOrtho = function repositionOrtho() { // called onMove if 0 or 1st handle is active this.initLineAndNormal(); this._distances[0] *= this._line01.length() / (this._distances[0] + this._distances[1]); this._distances[1] = this._line01.length() - this._distances[0]; - const intersect = this._handles[0].worldPosition.clone().add(this._line01.clone().normalize().multiplyScalar(this._distances[0])); + var intersect = this._handles[0].worldPosition.clone().add(this._line01.clone().normalize().multiplyScalar(this._distances[0])); this._handles[2].worldPosition.copy(intersect.clone().add(this._normal.clone().multiplyScalar(this._distances[2]))); this._handles[3].worldPosition.copy(intersect.clone().sub(this._normal.clone().multiplyScalar(this._distances[3]))); - } + }; - recalculateOrtho() { + _class.prototype.recalculateOrtho = function recalculateOrtho() { // called onMove if 2nd or 3rd handle is active - const activeInd = this._handles[2].active ? 2 : 3; - const lines = []; - const intersect = new three.Vector3(); + var activeInd = this._handles[2].active ? 2 : 3; + var lines = []; + var intersect = new three.Vector3(); lines[2] = this._handles[2].worldPosition.clone().sub(this._handles[0].worldPosition); lines[3] = this._handles[3].worldPosition.clone().sub(this._handles[0].worldPosition); new three.Ray(this._handles[0].worldPosition, this._line01.clone().normalize()).closestPointToPoint(this._handles[activeInd].worldPosition, intersect); - const isOutside = intersect.clone().sub(this._handles[0].worldPosition).length() > this._line01.length(); + var isOutside = intersect.clone().sub(this._handles[0].worldPosition).length() > this._line01.length(); // if intersection is outside of the line01 then change worldPosition of active handle if (isOutside || intersect.equals(this._handles[0].worldPosition)) { if (isOutside) { @@ -47898,25 +48238,29 @@ const widgetsCrossRuler = (three = window.THREE) => { this._distances[activeInd] = intersect.distanceTo(this._handles[activeInd].worldPosition); this._distances[0] = intersect.distanceTo(this._handles[0].worldPosition); this._distances[1] = intersect.distanceTo(this._handles[1].worldPosition); - } + }; /** * Get length of rulers * * @return {Array} */ - getDimensions() { + + + _class.prototype.getDimensions = function getDimensions() { return [this._distance, this._distance2]; - } + }; /** * Get CrossRuler handles position * * @return {Array.} First begin, first end, second begin, second end */ - getCoordinates() { + + + _class.prototype.getCoordinates = function getCoordinates() { return [this._handles[0].worldPosition, this._handles[1].worldPosition, this._handles[2].worldPosition, this._handles[3].worldPosition]; - } + }; /** * Set CrossRuler handles position @@ -47926,10 +48270,12 @@ const widgetsCrossRuler = (three = window.THREE) => { * @param {Vector3} third The beginning of the second line (clockwise relative to the first line) * @param {Vector3} fourth The end of the second line */ - initCoordinates(first, second, third, fourth) { - const intersectR = new three.Vector3(); - const intersectS = new three.Vector3(); - const ray = new three.Ray(first); + + + _class.prototype.initCoordinates = function initCoordinates(first, second, third, fourth) { + var intersectR = new three.Vector3(); + var intersectS = new three.Vector3(); + var ray = new three.Ray(first); ray.lookAt(second); ray.distanceSqToSegment(third, fourth, intersectR, intersectS); @@ -47954,38 +48300,46 @@ const widgetsCrossRuler = (three = window.THREE) => { this.initLineAndNormal(); this.update(); - } - - get targetMesh() { - return this._targetMesh; - } - - set targetMesh(targetMesh) { - this._targetMesh = targetMesh; - this._handles.forEach(elem => elem.targetMesh = targetMesh); - this.update(); - } - - get worldPosition() { - return this._worldPosition; - } - - set worldPosition(worldPosition) { - this._handles.slice(0, -1).forEach(elem => elem.worldPosition.copy(worldPosition)); - this._worldPosition.copy(worldPosition); - this.update(); - } + }; - get calibrationFactor() { - return this._calibrationFactor; - } + _createClass(_class, [{ + key: 'targetMesh', + get: function get() { + return this._targetMesh; + }, + set: function set(targetMesh) { + this._targetMesh = targetMesh; + this._handles.forEach(function (elem) { + return elem.targetMesh = targetMesh; + }); + this.update(); + } + }, { + key: 'worldPosition', + get: function get() { + return this._worldPosition; + }, + set: function set(worldPosition) { + this._handles.slice(0, -1).forEach(function (elem) { + return elem.worldPosition.copy(worldPosition); + }); + this._worldPosition.copy(worldPosition); + this.update(); + } + }, { + key: 'calibrationFactor', + get: function get() { + return this._calibrationFactor; + }, + set: function set(calibrationFactor) { + this._calibrationFactor = calibrationFactor; + this._units = 'mm'; + this.update(); + } + }]); - set calibrationFactor(calibrationFactor) { - this._calibrationFactor = calibrationFactor; - this._units = 'mm'; - this.update(); - } - }; + return _class; + }(Constructor); }; @@ -48002,70 +48356,29 @@ const widgetsCrossRuler = (three = window.THREE) => { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return WidgetsCss; }); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + /** * @module CSS Code for all Widgets */ -class WidgetsCss { - static get code() { - return ` - .widgets-handle { - position: absolute; - border: 1px solid; - border-radius: 50%; - width: 10px; - height: 10px; - margin: -6px; /* border + width / 2 */ - z-index: 3; - } - .widgets-line { - position: absolute; - width: 1px; - height: 1px; - margin-top: -0.5px; /* height / 2 */ - } - .widgets-dashline { - position: absolute; - border-top: 1px dashed; - margin-top: -0.5px; /* border / 2 */ - } - .widgets-line:before, - .widgets-dashline:before { /* for dragging */ - content: " "; - position: absolute; - height: 12px; - left: 0; - right: 0; - margin-top: -6px; - } - .widgets-rectangle { - position: absolute; - border: 1px solid; - margin: -1px; /* border */ - } - .widgets-rectangle-helper { - position: absolute; - border: 1px dashed; - margin: -1px; /* border */ - } - .widgets-ellipse { - position: absolute; - border: 1px solid; - border-radius: 50%; - margin: -1px; /* border */ - z-index: 2; - } - .widgets-label { - position: absolute; - border: 1px solid; - background-color: rgba(0, 0, 0, 0.7); - color: rgb(255, 255, 255); - padding: 4px; - z-index: 3; - } - `; +var WidgetsCss = function () { + function WidgetsCss() { + _classCallCheck(this, WidgetsCss); } -} + + _createClass(WidgetsCss, null, [{ + key: "code", + get: function get() { + return "\n .widgets-handle {\n position: absolute;\n border: 1px solid;\n border-radius: 50%;\n width: 10px;\n height: 10px;\n margin: -6px; /* border + width / 2 */\n z-index: 3;\n }\n .widgets-line {\n position: absolute;\n width: 1px;\n height: 1px;\n margin-top: -0.5px; /* height / 2 */\n }\n .widgets-dashline {\n position: absolute;\n border-top: 1px dashed;\n margin-top: -0.5px; /* border / 2 */\n }\n .widgets-line:before,\n .widgets-dashline:before { /* for dragging */\n content: \" \";\n position: absolute;\n height: 12px;\n left: 0;\n right: 0;\n margin-top: -6px;\n }\n .widgets-rectangle {\n position: absolute;\n border: 1px solid;\n margin: -1px; /* border */\n }\n .widgets-rectangle-helper {\n position: absolute;\n border: 1px dashed;\n margin: -1px; /* border */\n }\n .widgets-ellipse {\n position: absolute;\n border: 1px solid;\n border-radius: 50%;\n margin: -1px; /* border */\n z-index: 2;\n }\n .widgets-label {\n position: absolute;\n border: 1px solid;\n background-color: rgba(0, 0, 0, 0.7);\n color: rgb(255, 255, 255);\n padding: 4px;\n z-index: 3;\n }\n "; + } + }]); + + return WidgetsCss; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (WidgetsCss); /***/ }), @@ -48083,6 +48396,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_widgets_base__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _widgets_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./widgets.handle */ "./src/widgets/widgets.handle.js"); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + @@ -48090,65 +48411,74 @@ __webpack_require__.r(__webpack_exports__); /** * @module widgets/ellipse */ -const widgetsEllipse = (three = window.THREE) => { +var widgetsEllipse = function widgetsEllipse() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); - this._widgetType = 'Ellipse'; + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); + + _this._widgetType = 'Ellipse'; // incoming parameters (optional: frameIndex, worldPosition) - this._stack = params.stack; // required - this._calibrationFactor = params.calibrationFactor || null; + _this._stack = params.stack; // required + _this._calibrationFactor = params.calibrationFactor || null; // outgoing values - this._area = null; - this._units = !this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing ? 'units' : 'cm²'; + _this._area = null; + _this._units = !_this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing ? 'units' : 'cm²'; - this._moving = false; - this._domHovered = false; + _this._moving = false; + _this._domHovered = false; // mesh stuff - this._material = null; - this._geometry = null; - this._mesh = null; + _this._material = null; + _this._geometry = null; + _this._mesh = null; // dom stuff - this._rectangle = null; - this._ellipse = null; - this._label = null; + _this._rectangle = null; + _this._ellipse = null; + _this._label = null; // add handles - this._handles = []; + _this._handles = []; - let handle; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - for (let i = 0; i < 2; i++) { + var handle = void 0; + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + for (var i = 0; i < 2; i++) { handle = new WidgetsHandle(targetMesh, controls, params); - this.add(handle); - this._handles.push(handle); + _this.add(handle); + _this._handles.push(handle); } - this._handles[1].active = true; - this._handles[1].tracking = true; + _this._handles[1].active = true; + _this._handles[1].tracking = true; - this._moveHandle = new WidgetsHandle(targetMesh, controls, params); - this.add(this._moveHandle); - this._handles.push(this._moveHandle); - this._moveHandle.hide(); + _this._moveHandle = new WidgetsHandle(targetMesh, controls, params); + _this.add(_this._moveHandle); + _this._handles.push(_this._moveHandle); + _this._moveHandle.hide(); - this.create(); + _this.create(); - this.onMove = this.onMove.bind(this); - this.onHover = this.onHover.bind(this); - this.addEventListeners(); + _this.onMove = _this.onMove.bind(_this); + _this.onHover = _this.onHover.bind(_this); + _this.addEventListeners(); + return _this; } - addEventListeners() { + _class.prototype.addEventListeners = function addEventListeners() { this._container.addEventListener('wheel', this.onMove); this._rectangle.addEventListener('mouseenter', this.onHover); @@ -48157,9 +48487,9 @@ const widgetsEllipse = (three = window.THREE) => { this._ellipse.addEventListener('mouseleave', this.onHover); this._label.addEventListener('mouseenter', this.onHover); this._label.addEventListener('mouseleave', this.onHover); - } + }; - removeEventListeners() { + _class.prototype.removeEventListeners = function removeEventListeners() { this._container.removeEventListener('wheel', this.onMove); this._rectangle.removeEventListener('mouseenter', this.onHover); @@ -48168,9 +48498,9 @@ const widgetsEllipse = (three = window.THREE) => { this._ellipse.removeEventListener('mouseleave', this.onHover); this._label.removeEventListener('mouseenter', this.onHover); this._label.removeEventListener('mouseleave', this.onHover); - } + }; - onHover(evt) { + _class.prototype.onHover = function onHover(evt) { if (evt) { this.hoverDom(evt); } @@ -48179,17 +48509,17 @@ const widgetsEllipse = (three = window.THREE) => { this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._domHovered; this._container.style.cursor = this._hovered ? 'pointer' : 'default'; - } + }; - hoverMesh() { + _class.prototype.hoverMesh = function hoverMesh() { // check raycast intersection, if we want to hover on mesh instead of just css - } + }; - hoverDom(evt) { + _class.prototype.hoverDom = function hoverDom(evt) { this._domHovered = evt.type === 'mouseenter'; - } + }; - onStart(evt) { + _class.prototype.onStart = function onStart(evt) { this._moveHandle.onMove(evt, true); this._handles[0].onStart(evt); @@ -48203,18 +48533,20 @@ const widgetsEllipse = (three = window.THREE) => { } this.update(); - } + }; + + _class.prototype.onMove = function onMove(evt) { + var _this2 = this; - onMove(evt) { if (this._active) { - const prevPosition = this._moveHandle.worldPosition.clone(); + var prevPosition = this._moveHandle.worldPosition.clone(); this._dragged = true; this._moveHandle.onMove(evt, true); if (this._moving) { - this._handles.slice(0, -1).forEach(handle => { - handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition)); + this._handles.slice(0, -1).forEach(function (handle) { + handle.worldPosition.add(_this2._moveHandle.worldPosition.clone().sub(prevPosition)); }); } @@ -48227,9 +48559,9 @@ const widgetsEllipse = (three = window.THREE) => { this._handles[1].onMove(evt); this.update(); - } + }; - onEnd() { + _class.prototype.onEnd = function onEnd() { this._handles[0].onEnd(); // First Handle if (this._handles[1].tracking && this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10) { @@ -48256,37 +48588,39 @@ const widgetsEllipse = (three = window.THREE) => { this.updateRoI(); // TODO: if (this._dragged || !this._initialized) this.update(); - } + }; - hideDOM() { - this._handles.forEach(elem => elem.hideDOM()); + _class.prototype.hideDOM = function hideDOM() { + this._handles.forEach(function (elem) { + return elem.hideDOM(); + }); this._rectangle.style.display = 'none'; this._ellipse.style.display = 'none'; this._label.style.display = 'none'; - } + }; - showDOM() { + _class.prototype.showDOM = function showDOM() { this._handles[0].showDOM(); this._handles[1].showDOM(); this._rectangle.style.display = ''; this._ellipse.style.display = ''; this._label.style.display = ''; - } + }; - create() { + _class.prototype.create = function create() { this.createMaterial(); this.createDOM(); - } + }; - createMaterial() { + _class.prototype.createMaterial = function createMaterial() { this._material = new three.MeshBasicMaterial(); this._material.transparent = true; this._material.opacity = 0.2; - } + }; - createDOM() { + _class.prototype.createDOM = function createDOM() { this._rectangle = document.createElement('div'); this._rectangle.className = 'widgets-rectangle-helper'; this._container.appendChild(this._rectangle); @@ -48299,17 +48633,17 @@ const widgetsEllipse = (three = window.THREE) => { this._label.className = 'widgets-label'; // measurements - const measurementsContainer = document.createElement('div'); + var measurementsContainer = document.createElement('div'); // Mean / SD - let meanSDContainer = document.createElement('div'); + var meanSDContainer = document.createElement('div'); meanSDContainer.className = 'mean-sd'; measurementsContainer.appendChild(meanSDContainer); // Max / Min - let maxMinContainer = document.createElement('div'); + var maxMinContainer = document.createElement('div'); maxMinContainer.className = 'max-min'; measurementsContainer.appendChild(maxMinContainer); // Area - let areaContainer = document.createElement('div'); + var areaContainer = document.createElement('div'); areaContainer.className = 'area'; measurementsContainer.appendChild(areaContainer); @@ -48318,9 +48652,9 @@ const widgetsEllipse = (three = window.THREE) => { this._container.appendChild(this._label); this.updateDOMColor(); - } + }; - update() { + _class.prototype.update = function update() { this.updateColor(); this._handles[0].update(); @@ -48330,22 +48664,22 @@ const widgetsEllipse = (three = window.THREE) => { this.updateMeshPosition(); this.updateDOM(); - } + }; - updateMeshColor() { + _class.prototype.updateMeshColor = function updateMeshColor() { if (this._material) { this._material.color.set(this._color); } - } + }; - updateMeshPosition() { + _class.prototype.updateMeshPosition = function updateMeshPosition() { if (this._mesh) { this.remove(this._mesh); } - const vec01 = this._handles[1].worldPosition.clone().sub(this._handles[0].worldPosition); - const height = vec01.clone().projectOnVector(this._camera.up).length(); - const width = vec01.clone().projectOnVector(this._camera._right).length(); + var vec01 = this._handles[1].worldPosition.clone().sub(this._handles[0].worldPosition); + var height = vec01.clone().projectOnVector(this._camera.up).length(); + var width = vec01.clone().projectOnVector(this._camera._right).length(); if (width === 0 || height === 0) { return; @@ -48358,15 +48692,15 @@ const widgetsEllipse = (three = window.THREE) => { this._mesh.rotation.copy(this._camera.rotation); this._mesh.visible = true; this.add(this._mesh); - } + }; - updateRoI(clear) { + _class.prototype.updateRoI = function updateRoI(clear) { if (!this._geometry) { return; } - const meanSDContainer = this._label.querySelector('.mean-sd'); - const maxMinContainer = this._label.querySelector('.max-min'); + var meanSDContainer = this._label.querySelector('.mean-sd'); + var maxMinContainer = this._label.querySelector('.max-min'); if (clear) { meanSDContainer.innerHTML = ''; @@ -48375,38 +48709,38 @@ const widgetsEllipse = (three = window.THREE) => { return; } - const roi = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].getRoI(this._mesh, this._camera, this._stack); + var roi = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].getRoI(this._mesh, this._camera, this._stack); if (roi !== null) { - meanSDContainer.innerHTML = `Mean: ${roi.mean.toFixed(1)} / SD: ${roi.sd.toFixed(1)}`; - maxMinContainer.innerHTML = `Max: ${roi.max.toFixed()} / Min: ${roi.min.toFixed()}`; + meanSDContainer.innerHTML = 'Mean: ' + roi.mean.toFixed(1) + ' / SD: ' + roi.sd.toFixed(1); + maxMinContainer.innerHTML = 'Max: ' + roi.max.toFixed() + ' / Min: ' + roi.min.toFixed(); } else { meanSDContainer.innerHTML = ''; maxMinContainer.innerHTML = ''; } - } + }; - updateDOMColor() { + _class.prototype.updateDOMColor = function updateDOMColor() { this._rectangle.style.borderColor = this._color; this._ellipse.style.borderColor = this._color; this._label.style.borderColor = this._color; - } + }; - updateDOM() { + _class.prototype.updateDOM = function updateDOM() { if (!this._geometry) { return; } this.updateDOMColor(); - const regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || []; + var regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || []; this._area = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].getGeometryArea(this._geometry); if (this._calibrationFactor) { this._area *= Math.pow(this._calibrationFactor, 2); } else if (regions && regions.length > 0 && this._stack.lps2IJK) { - const region0 = this.getRegionByXY(regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._stack.lps2IJK, this._handles[0].worldPosition)); - const region1 = this.getRegionByXY(regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._stack.lps2IJK, this._handles[1].worldPosition)); + var region0 = this.getRegionByXY(regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._stack.lps2IJK, this._handles[0].worldPosition)); + var region1 = this.getRegionByXY(regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._stack.lps2IJK, this._handles[1].worldPosition)); if (region0 !== null && region1 !== null && region0 === region1 && regions[region0].unitsX === 'cm' && regions[region0].unitsY === 'cm') { this._area *= Math.pow(regions[region0].deltaX, 2); @@ -48428,30 +48762,32 @@ const widgetsEllipse = (three = window.THREE) => { this._label.removeAttribute('title'); this._label.style.color = this._colors.text; } - this._label.querySelector('.area').innerHTML = `Area: ${this._area.toFixed(2)} ${this._units}`; + this._label.querySelector('.area').innerHTML = 'Area: ' + this._area.toFixed(2) + ' ' + this._units; - const rectData = this.getRectData(this._handles[0].screenPosition, this._handles[1].screenPosition); - const labelTransform = this.adjustLabelTransform(this._label, this._handles[1].screenPosition.clone().add(rectData.paddingVector.multiplyScalar(15 + this._label.offsetHeight / 2))); + var rectData = this.getRectData(this._handles[0].screenPosition, this._handles[1].screenPosition); + var labelTransform = this.adjustLabelTransform(this._label, this._handles[1].screenPosition.clone().add(rectData.paddingVector.multiplyScalar(15 + this._label.offsetHeight / 2))); // update rectangle - this._rectangle.style.transform = `translate3D(${rectData.transformX}px, ${rectData.transformY}px, 0)`; + this._rectangle.style.transform = 'translate3D(' + rectData.transformX + 'px, ' + rectData.transformY + 'px, 0)'; this._rectangle.style.width = rectData.width + 'px'; this._rectangle.style.height = rectData.height + 'px'; // update ellipse - this._ellipse.style.transform = `translate3D(${rectData.transformX}px, ${rectData.transformY}px, 0)`; + this._ellipse.style.transform = 'translate3D(' + rectData.transformX + 'px, ' + rectData.transformY + 'px, 0)'; this._ellipse.style.width = rectData.width + 'px'; this._ellipse.style.height = rectData.height + 'px'; // update label this._label.style.transform = 'translate3D(' + labelTransform.x + 'px,' + labelTransform.y + 'px, 0)'; - } + }; + + _class.prototype.free = function free() { + var _this3 = this; - free() { this.removeEventListeners(); - this._handles.forEach(h => { - this.remove(h); + this._handles.forEach(function (h) { + _this3.remove(h); h.free(); }); this._handles = []; @@ -48481,47 +48817,53 @@ const widgetsEllipse = (three = window.THREE) => { this._stack = null; - super.free(); - } + _Constructor.prototype.free.call(this); + }; - getMeasurements() { + _class.prototype.getMeasurements = function getMeasurements() { return { area: this._area, units: this._units }; - } - - get targetMesh() { - return this._targetMesh; - } - - set targetMesh(targetMesh) { - this._targetMesh = targetMesh; - this._handles.forEach(elem => elem.targetMesh = targetMesh); - this.update(); - } - - get worldPosition() { - return this._worldPosition; - } - - set worldPosition(worldPosition) { - this._handles[0].worldPosition.copy(worldPosition); - this._handles[1].worldPosition.copy(worldPosition); - this._worldPosition.copy(worldPosition); - this.update(); - } + }; - get calibrationFactor() { - return this._calibrationFactor; - } + _createClass(_class, [{ + key: 'targetMesh', + get: function get() { + return this._targetMesh; + }, + set: function set(targetMesh) { + this._targetMesh = targetMesh; + this._handles.forEach(function (elem) { + return elem.targetMesh = targetMesh; + }); + this.update(); + } + }, { + key: 'worldPosition', + get: function get() { + return this._worldPosition; + }, + set: function set(worldPosition) { + this._handles[0].worldPosition.copy(worldPosition); + this._handles[1].worldPosition.copy(worldPosition); + this._worldPosition.copy(worldPosition); + this.update(); + } + }, { + key: 'calibrationFactor', + get: function get() { + return this._calibrationFactor; + }, + set: function set(calibrationFactor) { + this._calibrationFactor = calibrationFactor; + this._units = 'cm²'; + this.update(); + } + }]); - set calibrationFactor(calibrationFactor) { - this._calibrationFactor = calibrationFactor; - this._units = 'cm²'; - this.update(); - } - }; + return _class; + }(Constructor); }; @@ -48543,6 +48885,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_widgets_base__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _widgets_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./widgets.handle */ "./src/widgets/widgets.handle.js"); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + @@ -48550,101 +48900,112 @@ __webpack_require__.r(__webpack_exports__); /** * @module widgets/freehand */ -const widgetsFreehand = (three = window.THREE) => { +var widgetsFreehand = function widgetsFreehand() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + _classCallCheck(this, _class); - this._widgetType = 'Freehand'; + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); + + _this._widgetType = 'Freehand'; // incoming parameters (optional: frameIndex, worldPosition) - this._stack = params.stack; // required - this._calibrationFactor = params.calibrationFactor || null; + _this._stack = params.stack; // required + _this._calibrationFactor = params.calibrationFactor || null; // outgoing values - this._area = null; - this._units = !this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing ? 'units' : 'cm²'; + _this._area = null; + _this._units = !_this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing ? 'units' : 'cm²'; - this._initialized = false; // set to true onEnd if number of handles > 2 - this._moving = false; - this._domHovered = false; + _this._initialized = false; // set to true onEnd if number of handles > 2 + _this._moving = false; + _this._domHovered = false; // mesh stuff - this._material = null; - this._geometry = null; - this._mesh = null; + _this._material = null; + _this._geometry = null; + _this._mesh = null; // dom stuff - this._lines = []; - this._label = null; + _this._lines = []; + _this._label = null; // add handles - this._handles = []; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + _this._handles = []; + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - let handle = new WidgetsHandle(targetMesh, controls, params); - this.add(handle); - this._handles.push(handle); + var handle = new WidgetsHandle(targetMesh, controls, params); + _this.add(handle); + _this._handles.push(handle); - this._moveHandle = new WidgetsHandle(targetMesh, controls, params); - this.add(this._moveHandle); - this._moveHandle.hide(); + _this._moveHandle = new WidgetsHandle(targetMesh, controls, params); + _this.add(_this._moveHandle); + _this._moveHandle.hide(); - this.onMove = this.onMove.bind(this); - this.onHover = this.onHover.bind(this); + _this.onMove = _this.onMove.bind(_this); + _this.onHover = _this.onHover.bind(_this); - this.create(); + _this.create(); - this.addEventListeners(); + _this.addEventListeners(); + return _this; } - addEventListeners() { + _class.prototype.addEventListeners = function addEventListeners() { this._container.addEventListener('wheel', this.onMove); this._label.addEventListener('mouseenter', this.onHover); this._label.addEventListener('mouseleave', this.onHover); - } + }; - removeEventListeners() { + _class.prototype.removeEventListeners = function removeEventListeners() { this._container.removeEventListener('wheel', this.onMove); this._label.removeEventListener('mouseenter', this.onHover); this._label.removeEventListener('mouseleave', this.onHover); - } + }; - onHover(evt) { + _class.prototype.onHover = function onHover(evt) { if (evt) { this.hoverDom(evt); } this.hoverMesh(); - let hovered = false; + var hovered = false; - this._handles.forEach(elem => hovered = hovered || elem.hovered); + this._handles.forEach(function (elem) { + return hovered = hovered || elem.hovered; + }); this._hovered = hovered || this._domHovered; this._container.style.cursor = this._hovered ? 'pointer' : 'default'; - } + }; - hoverMesh() { + _class.prototype.hoverMesh = function hoverMesh() { // check raycast intersection, if we want to hover on mesh instead of just css - } + }; - hoverDom(evt) { + _class.prototype.hoverDom = function hoverDom(evt) { this._domHovered = evt.type === 'mouseenter'; - } + }; - onStart(evt) { - let active = false; + _class.prototype.onStart = function onStart(evt) { + var active = false; this._moveHandle.onMove(evt, true); - this._handles.forEach(elem => { + this._handles.forEach(function (elem) { elem.onStart(evt); active = active || elem.active; }); @@ -48657,10 +49018,12 @@ const widgetsFreehand = (three = window.THREE) => { } this.update(); - } + }; - onMove(evt) { - let hovered = false; + _class.prototype.onMove = function onMove(evt) { + var _this2 = this; + + var hovered = false; if (this.active) { this._dragged = true; @@ -48670,8 +49033,8 @@ const widgetsFreehand = (three = window.THREE) => { this._handles[this._handles.length - 1].active = false; this._handles[this._handles.length - 1].tracking = false; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - let handle = new WidgetsHandle(this._targetMesh, this._controls, this._params); + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + var handle = new WidgetsHandle(this._targetMesh, this._controls, this._params); handle.hovered = true; handle.active = true; @@ -48681,7 +49044,7 @@ const widgetsFreehand = (three = window.THREE) => { this.createLine(); } else { - const prevPosition = this._moveHandle.worldPosition.clone(); + var prevPosition = this._moveHandle.worldPosition.clone(); this._moveHandle.onMove(evt, true); if (this._mesh) { @@ -48689,14 +49052,14 @@ const widgetsFreehand = (three = window.THREE) => { } this.updateDOMContent(true); if (this._moving) { - this._handles.forEach(handle => { - handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition)); + this._handles.forEach(function (handle) { + handle.worldPosition.add(_this2._moveHandle.worldPosition.clone().sub(prevPosition)); }); } } } - this._handles.forEach(elem => { + this._handles.forEach(function (elem) { elem.onMove(evt); hovered = hovered || elem.hovered; }); @@ -48709,16 +49072,18 @@ const widgetsFreehand = (three = window.THREE) => { } this.update(); - } + }; + + _class.prototype.onEnd = function onEnd() { + var _this3 = this; - onEnd() { if (this._handles.length < 3) { return; } - let active = false; + var active = false; - this._handles.slice(0, -1).forEach(elem => { + this._handles.slice(0, -1).forEach(function (elem) { elem.onEnd(); active = active || elem.active; }); @@ -48742,7 +49107,9 @@ const widgetsFreehand = (three = window.THREE) => { if (!this._dragged && this._active) { this._selected = !this._selected; // change state if there was no dragging - this._handles.forEach(elem => elem.selected = this._selected); + this._handles.forEach(function (elem) { + return elem.selected = _this3._selected; + }); } this._active = active || this._handles[this._handles.length - 1].active; this._dragged = false; @@ -48750,35 +49117,35 @@ const widgetsFreehand = (three = window.THREE) => { this._initialized = true; this.update(); - } + }; - create() { + _class.prototype.create = function create() { this.createMaterial(); this.createDOM(); - } + }; - createMaterial() { + _class.prototype.createMaterial = function createMaterial() { this._material = new three.MeshBasicMaterial({ side: three.DoubleSide }); this._material.transparent = true; this._material.opacity = 0.2; - } + }; - createDOM() { + _class.prototype.createDOM = function createDOM() { this._label = document.createElement('div'); this._label.className = 'widgets-label'; // measurements - const measurementsContainer = document.createElement('div'); + var measurementsContainer = document.createElement('div'); // Mean / SD - let meanSDContainer = document.createElement('div'); + var meanSDContainer = document.createElement('div'); meanSDContainer.className = 'mean-sd'; measurementsContainer.appendChild(meanSDContainer); // Max / Min - let maxMinContainer = document.createElement('div'); + var maxMinContainer = document.createElement('div'); maxMinContainer.className = 'max-min'; measurementsContainer.appendChild(maxMinContainer); // Area - let areaContainer = document.createElement('div'); + var areaContainer = document.createElement('div'); areaContainer.className = 'area'; measurementsContainer.appendChild(areaContainer); @@ -48787,37 +49154,47 @@ const widgetsFreehand = (three = window.THREE) => { this._container.appendChild(this._label); this.updateDOMColor(); - } + }; - createLine() { - const line = document.createElement('div'); + _class.prototype.createLine = function createLine() { + var line = document.createElement('div'); line.className = 'widgets-line'; line.addEventListener('mouseenter', this.onHover); line.addEventListener('mouseleave', this.onHover); this._lines.push(line); this._container.appendChild(line); - } + }; - hideDOM() { - this._handles.forEach(elem => elem.hideDOM()); + _class.prototype.hideDOM = function hideDOM() { + this._handles.forEach(function (elem) { + return elem.hideDOM(); + }); - this._lines.forEach(elem => elem.style.display = 'none'); + this._lines.forEach(function (elem) { + return elem.style.display = 'none'; + }); this._label.style.display = 'none'; - } + }; - showDOM() { - this._handles.forEach(elem => elem.showDOM()); + _class.prototype.showDOM = function showDOM() { + this._handles.forEach(function (elem) { + return elem.showDOM(); + }); - this._lines.forEach(elem => elem.style.display = ''); + this._lines.forEach(function (elem) { + return elem.style.display = ''; + }); this._label.style.display = ''; - } + }; - update() { + _class.prototype.update = function update() { this.updateColor(); // update handles - this._handles.forEach(elem => elem.update()); + this._handles.forEach(function (elem) { + return elem.update(); + }); // mesh stuff this.updateMeshColor(); @@ -48826,34 +49203,36 @@ const widgetsFreehand = (three = window.THREE) => { // DOM stuff this.updateDOMColor(); this.updateDOMPosition(); - } + }; - updateMesh() { + _class.prototype.updateMesh = function updateMesh() { if (this._mesh) { this.remove(this._mesh); } - let points = []; + var points = []; - this._handles.forEach(elem => points.push(elem.worldPosition)); + this._handles.forEach(function (elem) { + return points.push(elem.worldPosition); + }); - let center = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].centerOfMass(points); + var center = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].centerOfMass(points); // direction from first point to center - let referenceDirection = new three.Vector3().subVectors(points[0], center).normalize(); - let direction = new three.Vector3().crossVectors(new three.Vector3().subVectors(points[0], center), // side 1 + var referenceDirection = new three.Vector3().subVectors(points[0], center).normalize(); + var direction = new three.Vector3().crossVectors(new three.Vector3().subVectors(points[0], center), // side 1 new three.Vector3().subVectors(points[1], center) // side 2 ); - let base = new three.Vector3().crossVectors(referenceDirection, direction).normalize(); - let orderedpoints = []; + var base = new three.Vector3().crossVectors(referenceDirection, direction).normalize(); + var orderedpoints = []; // other lines // if inter, return location + angle - for (let j = 0; j < points.length; j++) { - let point = new three.Vector3(points[j].x, points[j].y, points[j].z); + for (var j = 0; j < points.length; j++) { + var point = new three.Vector3(points[j].x, points[j].y, points[j].z); point.direction = new three.Vector3().subVectors(points[j], center).normalize(); - let x = referenceDirection.dot(point.direction); - let y = base.dot(point.direction); - point.xy = { x, y }; + var x = referenceDirection.dot(point.direction); + var y = base.dot(point.direction); + point.xy = { x: x, y: y }; point.angle = Math.atan2(y, x) * (180 / Math.PI); orderedpoints.push(point); @@ -48861,8 +49240,12 @@ const widgetsFreehand = (three = window.THREE) => { // override to catch console.warn "THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()" this._shapeWarn = false; - const oldWarn = console.warn; - console.warn = function (...rest) { + var oldWarn = console.warn; + console.warn = function () { + for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) { + rest[_key] = arguments[_key]; + } + if (rest[0] === 'three.ShapeUtils: Unable to triangulate polygon! in triangulate()') { this._shapeWarn = true; } @@ -48870,12 +49253,12 @@ const widgetsFreehand = (three = window.THREE) => { }.bind(this); // create the shape - let shape = new three.Shape(); + var shape = new three.Shape(); // move to first point! shape.moveTo(orderedpoints[0].xy.x, orderedpoints[0].xy.y); // loop through all points! - for (let l = 1; l < orderedpoints.length; l++) { + for (var l = 1; l < orderedpoints.length; l++) { // project each on plane! shape.lineTo(orderedpoints[l].xy.x, orderedpoints[l].xy.y); } @@ -48896,32 +49279,32 @@ const widgetsFreehand = (three = window.THREE) => { this._mesh = new three.Mesh(this._geometry, this._material); this._mesh.visible = true; this.add(this._mesh); - } + }; - updateMeshColor() { + _class.prototype.updateMeshColor = function updateMeshColor() { if (this._material) { this._material.color.set(this._color); } - } + }; - updateMeshPosition() { + _class.prototype.updateMeshPosition = function updateMeshPosition() { if (this._geometry) { this._geometry.verticesNeedUpdate = true; } - } + }; - isPointOnLine(pointA, pointB, pointToCheck) { - let c = new three.Vector3(); + _class.prototype.isPointOnLine = function isPointOnLine(pointA, pointB, pointToCheck) { + var c = new three.Vector3(); c.crossVectors(pointA.clone().sub(pointToCheck), pointB.clone().sub(pointToCheck)); return !c.length(); - } + }; - pushPopHandle() { - let handle0 = this._handles[this._handles.length - 3]; - let handle1 = this._handles[this._handles.length - 2]; - let newhandle = this._handles[this._handles.length - 1]; + _class.prototype.pushPopHandle = function pushPopHandle() { + var handle0 = this._handles[this._handles.length - 3]; + var handle1 = this._handles[this._handles.length - 2]; + var newhandle = this._handles[this._handles.length - 1]; - let isOnLine = this.isPointOnLine(handle0.worldPosition, handle1.worldPosition, newhandle.worldPosition); + var isOnLine = this.isPointOnLine(handle0.worldPosition, handle1.worldPosition, newhandle.worldPosition); if (isOnLine || handle0.screenPosition.distanceTo(newhandle.screenPosition) < 25) { this.remove(handle1); @@ -48934,19 +49317,25 @@ const widgetsFreehand = (three = window.THREE) => { } return isOnLine; - } + }; + + _class.prototype.updateDOMColor = function updateDOMColor() { + var _this4 = this; - updateDOMColor() { if (this._handles.length >= 2) { - this._lines.forEach(elem => elem.style.backgroundColor = this._color); + this._lines.forEach(function (elem) { + return elem.style.backgroundColor = _this4._color; + }); } this._label.style.borderColor = this._color; - } + }; + + _class.prototype.updateDOMContent = function updateDOMContent(clear) { + var _this5 = this; - updateDOMContent(clear) { - const meanSDContainer = this._label.querySelector('.mean-sd'); - const maxMinContainer = this._label.querySelector('.max-min'); - const areaContainer = this._label.querySelector('.area'); + var meanSDContainer = this._label.querySelector('.mean-sd'); + var maxMinContainer = this._label.querySelector('.max-min'); + var areaContainer = this._label.querySelector('.area'); if (clear) { meanSDContainer.innerHTML = ''; @@ -48956,18 +49345,18 @@ const widgetsFreehand = (three = window.THREE) => { return; } - const regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || []; + var regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || []; this._area = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].getGeometryArea(this._geometry); // this.getArea result is changed on dragging if (this._calibrationFactor) { this._area *= Math.pow(this._calibrationFactor, 2); } else if (regions && regions.length > 0 && this._stack.lps2IJK) { - let same = true; - let cRegion; - let pRegion; + var same = true; + var cRegion = void 0; + var pRegion = void 0; - this._handles.forEach(elem => { - cRegion = this.getRegionByXY(regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._stack.lps2IJK, elem.worldPosition)); + this._handles.forEach(function (elem) { + cRegion = _this5.getRegionByXY(regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(_this5._stack.lps2IJK, elem.worldPosition)); if (cRegion === null || regions[cRegion].unitsX !== 'cm' || pRegion !== undefined && pRegion !== cRegion) { same = false; } @@ -48987,7 +49376,7 @@ const widgetsFreehand = (three = window.THREE) => { this._area /= 100; } - let title = this._units === 'units' ? 'Calibration is required to display the area in cm². ' : ''; + var title = this._units === 'units' ? 'Calibration is required to display the area in cm². ' : ''; if (this._shapeWarn) { title += 'Values may be incorrect due to triangulation error.'; @@ -49000,34 +49389,35 @@ const widgetsFreehand = (three = window.THREE) => { this._label.style.color = this._colors.text; } - const roi = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].getRoI(this._mesh, this._camera, this._stack); + var roi = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].getRoI(this._mesh, this._camera, this._stack); if (roi !== null) { - meanSDContainer.innerHTML = `Mean: ${roi.mean.toFixed(1)} / SD: ${roi.sd.toFixed(1)}`; - maxMinContainer.innerHTML = `Max: ${roi.max.toFixed()} / Min: ${roi.min.toFixed()}`; + meanSDContainer.innerHTML = 'Mean: ' + roi.mean.toFixed(1) + ' / SD: ' + roi.sd.toFixed(1); + maxMinContainer.innerHTML = 'Max: ' + roi.max.toFixed() + ' / Min: ' + roi.min.toFixed(); } else { meanSDContainer.innerHTML = ''; maxMinContainer.innerHTML = ''; } - areaContainer.innerHTML = `Area: ${this._area.toFixed(2)} ${this._units}`; - } + areaContainer.innerHTML = 'Area: ' + this._area.toFixed(2) + ' ' + this._units; + }; + + _class.prototype.updateDOMPosition = function updateDOMPosition() { + var _this6 = this; - updateDOMPosition() { if (this._handles.length < 2) { return; } // update lines and get coordinates of lowest handle - let labelPosition = null; + var labelPosition = null; - this._lines.forEach((elem, ind) => { - const lineData = this.getLineData(this._handles[ind].screenPosition, this._handles[ind + 1 === this._handles.length ? 0 : ind + 1].screenPosition); + this._lines.forEach(function (elem, ind) { + var lineData = _this6.getLineData(_this6._handles[ind].screenPosition, _this6._handles[ind + 1 === _this6._handles.length ? 0 : ind + 1].screenPosition); - elem.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0) - rotate(${lineData.transformAngle}rad)`; + elem.style.transform = 'translate3D(' + lineData.transformX + 'px, ' + lineData.transformY + 'px, 0)\n rotate(' + lineData.transformAngle + 'rad)'; elem.style.width = lineData.length + 'px'; - if (labelPosition === null || labelPosition.y < this._handles[ind].screenPosition.y) { - labelPosition = this._handles[ind].screenPosition.clone(); + if (labelPosition === null || labelPosition.y < _this6._handles[ind].screenPosition.y) { + labelPosition = _this6._handles[ind].screenPosition.clone(); } }); @@ -49039,14 +49429,16 @@ const widgetsFreehand = (three = window.THREE) => { labelPosition.y += 15 + this._label.offsetHeight / 2; labelPosition = this.adjustLabelTransform(this._label, labelPosition); - this._label.style.transform = `translate3D(${labelPosition.x}px, ${labelPosition.y}px, 0)`; - } + this._label.style.transform = 'translate3D(' + labelPosition.x + 'px, ' + labelPosition.y + 'px, 0)'; + }; + + _class.prototype.free = function free() { + var _this7 = this; - free() { this.removeEventListeners(); - this._handles.forEach(h => { - this.remove(h); + this._handles.forEach(function (h) { + _this7.remove(h); h.free(); }); this._handles = []; @@ -49055,10 +49447,10 @@ const widgetsFreehand = (three = window.THREE) => { this._moveHandle.free(); this._moveHandle = null; - this._lines.forEach(elem => { - elem.removeEventListener('mouseenter', this.onHover); - elem.removeEventListener('mouseleave', this.onHover); - this._container.removeChild(elem); + this._lines.forEach(function (elem) { + elem.removeEventListener('mouseenter', _this7.onHover); + elem.removeEventListener('mouseleave', _this7.onHover); + _this7._container.removeChild(elem); }); this._lines = []; this._container.removeChild(this._label); @@ -49084,47 +49476,55 @@ const widgetsFreehand = (three = window.THREE) => { this._stack = null; - super.free(); - } + _Constructor.prototype.free.call(this); + }; - getMeasurements() { + _class.prototype.getMeasurements = function getMeasurements() { return { area: this._area, units: this._units }; - } - - get targetMesh() { - return this._targetMesh; - } - - set targetMesh(targetMesh) { - this._targetMesh = targetMesh; - this._handles.forEach(elem => elem.targetMesh = targetMesh); - this._moveHandle.targetMesh = targetMesh; - this.update(); - } - - get worldPosition() { - return this._worldPosition; - } - - set worldPosition(worldPosition) { - this._handles.forEach(elem => elem._worldPosition.copy(worldPosition)); - this._worldPosition.copy(worldPosition); - this.update(); - } + }; - get calibrationFactor() { - return this._calibrationFactor; - } + _createClass(_class, [{ + key: 'targetMesh', + get: function get() { + return this._targetMesh; + }, + set: function set(targetMesh) { + this._targetMesh = targetMesh; + this._handles.forEach(function (elem) { + return elem.targetMesh = targetMesh; + }); + this._moveHandle.targetMesh = targetMesh; + this.update(); + } + }, { + key: 'worldPosition', + get: function get() { + return this._worldPosition; + }, + set: function set(worldPosition) { + this._handles.forEach(function (elem) { + return elem._worldPosition.copy(worldPosition); + }); + this._worldPosition.copy(worldPosition); + this.update(); + } + }, { + key: 'calibrationFactor', + get: function get() { + return this._calibrationFactor; + }, + set: function set(calibrationFactor) { + this._calibrationFactor = calibrationFactor; + this._units = 'cm²'; + this.update(); + } + }]); - set calibrationFactor(calibrationFactor) { - this._calibrationFactor = calibrationFactor; - this._units = 'cm²'; - this.update(); - } - }; + return _class; + }(Constructor); }; @@ -49145,90 +49545,107 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./widgets.base */ "./src/widgets/widgets.base.ts"); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_widgets_base__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _core_core_intersections__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/core.intersections */ "./src/core/core.intersections.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * @module widgets/handle */ -const widgetsHandle = (three = window.THREE) => { +var widgetsHandle = function widgetsHandle() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); - this._widgetType = 'Handle'; + _this._widgetType = 'Handle'; // incoming parameters (optional: worldPosition) if (params.hideHandleMesh === true) { - this.visible = false; + _this.visible = false; } // if no target mesh, use plane for FREE dragging. - this._plane = { + _this._plane = { position: new three.Vector3(), direction: new three.Vector3() }; - this._offset = new three.Vector3(); - this._raycaster = new three.Raycaster(); + _this._offset = new three.Vector3(); + _this._raycaster = new three.Raycaster(); - this._active = false; - this._hovered = false; - this._tracking = false; + _this._active = false; + _this._hovered = false; + _this._tracking = false; - this._mouse = new three.Vector2(); + _this._mouse = new three.Vector2(); - this._initialized = false; + _this._initialized = false; // mesh stuff - this._material = null; - this._geometry = null; - this._mesh = null; - this._meshHovered = false; + _this._material = null; + _this._geometry = null; + _this._mesh = null; + _this._meshHovered = false; // dom stuff - this._dom = null; - this._domHovered = false; + _this._dom = null; + _this._domHovered = false; - this._screenPosition = this.worldToScreen(this._worldPosition); + _this._screenPosition = _this.worldToScreen(_this._worldPosition); - this.create(); - this.initOffsets(); + _this.create(); + _this.initOffsets(); // event listeners - this.onResize = this.onResize.bind(this); - this.onMove = this.onMove.bind(this); - this.onHover = this.onHover.bind(this); - this.addEventListeners(); + _this.onResize = _this.onResize.bind(_this); + _this.onMove = _this.onMove.bind(_this); + _this.onHover = _this.onHover.bind(_this); + _this.addEventListeners(); + return _this; } - addEventListeners() { + _class.prototype.addEventListeners = function addEventListeners() { window.addEventListener('resize', this.onResize); this._dom.addEventListener('mouseenter', this.onHover); this._dom.addEventListener('mouseleave', this.onHover); this._container.addEventListener('wheel', this.onMove); - } + }; - removeEventListeners() { + _class.prototype.removeEventListeners = function removeEventListeners() { window.removeEventListener('resize', this.onResize); this._dom.removeEventListener('mouseenter', this.onHover); this._dom.removeEventListener('mouseleave', this.onHover); this._container.removeEventListener('wheel', this.onMove); - } + }; - onResize() { + _class.prototype.onResize = function onResize() { this.initOffsets(); - } + }; - onHover(evt) { + _class.prototype.onHover = function onHover(evt) { if (evt) { this.hoverDom(evt); } @@ -49237,20 +49654,20 @@ const widgetsHandle = (three = window.THREE) => { this._hovered = this._meshHovered || this._domHovered; this._container.style.cursor = this._hovered ? 'pointer' : 'default'; - } + }; - hoverMesh() { + _class.prototype.hoverMesh = function hoverMesh() { // check raycast intersection, do we want to hover on mesh or just css? - let intersectsHandle = this._raycaster.intersectObject(this._mesh); + var intersectsHandle = this._raycaster.intersectObject(this._mesh); this._meshHovered = intersectsHandle.length > 0; - } + }; - hoverDom(evt) { + _class.prototype.hoverDom = function hoverDom(evt) { this._domHovered = evt.type === 'mouseenter'; - } + }; - onStart(evt) { - const offsets = this.getMouseOffsets(evt, this._container); + _class.prototype.onStart = function onStart(evt) { + var offsets = this.getMouseOffsets(evt, this._container); this._mouse.set(offsets.x, offsets.y); // update raycaster @@ -49262,14 +49679,14 @@ const widgetsHandle = (three = window.THREE) => { this._controls.enabled = false; if (this._targetMesh) { - let intersectsTarget = this._raycaster.intersectObject(this._targetMesh); + var intersectsTarget = this._raycaster.intersectObject(this._targetMesh); if (intersectsTarget.length > 0) { this._offset.copy(intersectsTarget[0].point).sub(this._worldPosition); } } else { this._plane.position.copy(this._worldPosition); this._plane.direction.copy(this._camera.getWorldDirection()); - let intersection = _core_core_intersections__WEBPACK_IMPORTED_MODULE_1__["default"].rayPlane(this._raycaster.ray, this._plane); + var intersection = _core_core_intersections__WEBPACK_IMPORTED_MODULE_1__["default"].rayPlane(this._raycaster.ray, this._plane); if (intersection !== null) { this._offset.copy(intersection).sub(this._plane.position); } @@ -49277,14 +49694,16 @@ const widgetsHandle = (three = window.THREE) => { this.update(); } - } + }; /** * @param {Object} evt - Browser event * @param {Boolean} forced - true to move inactive handles */ - onMove(evt, forced) { - const offsets = this.getMouseOffsets(evt, this._container); + + + _class.prototype.onMove = function onMove(evt, forced) { + var offsets = this.getMouseOffsets(evt, this._container); this._mouse.set(offsets.x, offsets.y); // update raycaster @@ -49296,7 +49715,7 @@ const widgetsHandle = (three = window.THREE) => { this._dragged = true; if (this._targetMesh !== null) { - let intersectsTarget = this._raycaster.intersectObject(this._targetMesh); + var intersectsTarget = this._raycaster.intersectObject(this._targetMesh); if (intersectsTarget.length > 0) { this._worldPosition.copy(intersectsTarget[0].point.sub(this._offset)); } @@ -49307,7 +49726,7 @@ const widgetsHandle = (three = window.THREE) => { this._plane.direction.copy(this._camera.getWorldDirection()); } - let intersection = _core_core_intersections__WEBPACK_IMPORTED_MODULE_1__["default"].rayPlane(this._raycaster.ray, this._plane); + var intersection = _core_core_intersections__WEBPACK_IMPORTED_MODULE_1__["default"].rayPlane(this._raycaster.ray, this._plane); if (intersection !== null) { this._worldPosition.copy(intersection.sub(this._offset)); } @@ -49317,9 +49736,9 @@ const widgetsHandle = (three = window.THREE) => { } this.update(); - } + }; - onEnd() { + _class.prototype.onEnd = function onEnd() { if (this._tracking === true) { // stay active and keep controls disabled return; @@ -49335,14 +49754,14 @@ const widgetsHandle = (three = window.THREE) => { this._controls.enabled = true; this.update(); - } + }; - create() { + _class.prototype.create = function create() { this.createMesh(); this.createDOM(); - } + }; - createMesh() { + _class.prototype.createMesh = function createMesh() { // geometry this._geometry = new three.SphereGeometry(1, 16, 16); @@ -49360,22 +49779,20 @@ const widgetsHandle = (three = window.THREE) => { this._mesh.visible = true; this.add(this._mesh); - } + }; - createDOM() { + _class.prototype.createDOM = function createDOM() { this._dom = document.createElement('div'); this._dom.className = 'widgets-handle'; - this._dom.style.transform = `translate3D( - ${this._screenPosition.x}px, - ${this._screenPosition.y - this._container.offsetHeight}px, 0)`; + this._dom.style.transform = 'translate3D(\n ' + this._screenPosition.x + 'px,\n ' + (this._screenPosition.y - this._container.offsetHeight) + 'px, 0)'; this.updateDOMColor(); this._container.appendChild(this._dom); - } + }; - update() { + _class.prototype.update = function update() { // general update this.updateColor(); @@ -49389,40 +49806,39 @@ const widgetsHandle = (three = window.THREE) => { // DOM stuff this.updateDOMColor(); this.updateDOMPosition(); - } + }; - updateMeshColor() { + _class.prototype.updateMeshColor = function updateMeshColor() { if (this._material) { this._material.color.set(this._color); } - } + }; - updateMeshPosition() { + _class.prototype.updateMeshPosition = function updateMeshPosition() { if (this._mesh) { this._mesh.position.copy(this._worldPosition); } - } + }; - updateDOMPosition() { + _class.prototype.updateDOMPosition = function updateDOMPosition() { if (this._dom) { - this._dom.style.transform = `translate3D(${this._screenPosition.x}px, - ${this._screenPosition.y - this._container.offsetHeight}px, 0)`; + this._dom.style.transform = 'translate3D(' + this._screenPosition.x + 'px,\n ' + (this._screenPosition.y - this._container.offsetHeight) + 'px, 0)'; } - } + }; - updateDOMColor() { + _class.prototype.updateDOMColor = function updateDOMColor() { this._dom.style.borderColor = this._color; - } + }; - showMesh() { + _class.prototype.showMesh = function showMesh() { if (this._params.hideMesh === true || this._params.hideHandleMesh === true) { return; } this.visible = true; - } + }; - free() { + _class.prototype.free = function free() { // events this.removeEventListeners(); // dom @@ -49442,46 +49858,50 @@ const widgetsHandle = (three = window.THREE) => { this._material.dispose(); this._material = null; - super.free(); - } + _Constructor.prototype.free.call(this); + }; - hideDOM() { + _class.prototype.hideDOM = function hideDOM() { this._dom.style.display = 'none'; - } + }; - showDOM() { + _class.prototype.showDOM = function showDOM() { this._dom.style.display = ''; - } - - get screenPosition() { - return this._screenPosition; - } - - set screenPosition(screenPosition) { - this._screenPosition = screenPosition; - } - - get active() { - return this._active; - } - - set active(active) { - this._active = active; - // this._tracking = this._active; - this._controls.enabled = !this._active; + }; - this.update(); - } + _createClass(_class, [{ + key: 'screenPosition', + get: function get() { + return this._screenPosition; + }, + set: function set(screenPosition) { + this._screenPosition = screenPosition; + } + }, { + key: 'active', + get: function get() { + return this._active; + }, + set: function set(active) { + this._active = active; + // this._tracking = this._active; + this._controls.enabled = !this._active; - get tracking() { - return this._tracking; - } + this.update(); + } + }, { + key: 'tracking', + get: function get() { + return this._tracking; + }, + set: function set(tracking) { + this._tracking = tracking; + this.update(); + } + }]); - set tracking(tracking) { - this._tracking = tracking; - this.update(); - } - }; + return _class; + }(Constructor); }; @@ -49606,6 +50026,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_widgets_base__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _widgets_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./widgets.handle */ "./src/widgets/widgets.handle.js"); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + @@ -49613,92 +50041,101 @@ __webpack_require__.r(__webpack_exports__); /** * @module widgets/peakVelocity (Gradient) */ -const widgetsPeakVelocity = (three = window.THREE) => { +var widgetsPeakVelocity = function widgetsPeakVelocity() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + + return function (_Constructor) { + _inherits(_class, _Constructor); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - this._widgetType = 'PeakVelocity'; + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); + + _this._widgetType = 'PeakVelocity'; // incoming parameters (required: lps2IJK, worldPosition) - this._regions = params.ultrasoundRegions || []; // required - if (this._regions.length < 1) { + _this._regions = params.ultrasoundRegions || []; // required + if (_this._regions.length < 1) { throw new Error('Ultrasound regions should not be empty!'); } // outgoing values - this._velocity = null; - this._gradient = null; - - this._container.style.cursor = 'pointer'; - this._controls.enabled = false; // controls should be disabled for widgets with a single handle - this._initialized = false; // set to true onEnd - this._active = true; - this._domHovered = false; - this._initialRegion = this.getRegionByXY(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(params.lps2IJK, params.worldPosition)); - if (this._initialRegion === null) { + _this._velocity = null; + _this._gradient = null; + + _this._container.style.cursor = 'pointer'; + _this._controls.enabled = false; // controls should be disabled for widgets with a single handle + _this._initialized = false; // set to true onEnd + _this._active = true; + _this._domHovered = false; + _this._initialRegion = _this.getRegionByXY(_this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(params.lps2IJK, params.worldPosition)); + if (_this._initialRegion === null) { throw new Error('Invalid initial UltraSound region!'); } // dom stuff - this._line = null; - this._label = null; + _this._line = null; + _this._label = null; // handle (represent line) - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - this._handle = new WidgetsHandle(targetMesh, controls, params); - this.add(this._handle); + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + _this._handle = new WidgetsHandle(targetMesh, controls, params); + _this.add(_this._handle); - this._moveHandle = new WidgetsHandle(targetMesh, controls, params); - this.add(this._moveHandle); - this._moveHandle.hide(); + _this._moveHandle = new WidgetsHandle(targetMesh, controls, params); + _this.add(_this._moveHandle); + _this._moveHandle.hide(); - this.create(); + _this.create(); // event listeners - this.onMove = this.onMove.bind(this); - this.onHover = this.onHover.bind(this); - this.addEventListeners(); + _this.onMove = _this.onMove.bind(_this); + _this.onHover = _this.onHover.bind(_this); + _this.addEventListeners(); + return _this; } - addEventListeners() { + _class.prototype.addEventListeners = function addEventListeners() { this._container.addEventListener('wheel', this.onMove); this._line.addEventListener('mouseenter', this.onHover); this._line.addEventListener('mouseleave', this.onHover); this._label.addEventListener('mouseenter', this.onHover); this._label.addEventListener('mouseleave', this.onHover); - } + }; - removeEventListeners() { + _class.prototype.removeEventListeners = function removeEventListeners() { this._container.removeEventListener('wheel', this.onMove); this._line.removeEventListener('mouseenter', this.onHover); this._line.removeEventListener('mouseleave', this.onHover); this._label.removeEventListener('mouseenter', this.onHover); this._label.removeEventListener('mouseleave', this.onHover); - } + }; - onHover(evt) { + _class.prototype.onHover = function onHover(evt) { if (evt) { this.hoverDom(evt); } this._hovered = this._handle.hovered || this._domHovered; this._container.style.cursor = this._hovered ? 'pointer' : 'default'; - } + }; - hoverDom(evt) { + _class.prototype.hoverDom = function hoverDom(evt) { this._domHovered = evt.type === 'mouseenter'; - } + }; - onStart(evt) { + _class.prototype.onStart = function onStart(evt) { this._moveHandle.onMove(evt, true); this._handle.onStart(evt); @@ -49709,15 +50146,15 @@ const widgetsPeakVelocity = (three = window.THREE) => { } this.update(); - } + }; - onMove(evt) { + _class.prototype.onMove = function onMove(evt) { if (this._active) { - const prevPosition = this._moveHandle.worldPosition.clone(); + var prevPosition = this._moveHandle.worldPosition.clone(); this._moveHandle.onMove(evt, true); - const shift = this._moveHandle.worldPosition.clone().sub(prevPosition); + var shift = this._moveHandle.worldPosition.clone().sub(prevPosition); if (!this.isCorrectRegion(shift)) { this._moveHandle.worldPosition.copy(prevPosition); @@ -49735,9 +50172,9 @@ const widgetsPeakVelocity = (three = window.THREE) => { this._handle.onMove(evt); this.update(); - } + }; - onEnd() { + _class.prototype.onEnd = function onEnd() { this._handle.onEnd(); if (!this._dragged && this._active && this._initialized) { @@ -49750,19 +50187,19 @@ const widgetsPeakVelocity = (three = window.THREE) => { this._dragged = false; this.update(); - } + }; - isCorrectRegion(shift) { - const region = this.getRegionByXY(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handle.worldPosition.clone().add(shift))); + _class.prototype.isCorrectRegion = function isCorrectRegion(shift) { + var region = this.getRegionByXY(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handle.worldPosition.clone().add(shift))); return region !== null && region === this._initialRegion && this._regions[region].unitsY === 'cm/sec'; - } + }; - create() { + _class.prototype.create = function create() { this.createDOM(); - } + }; - createDOM() { + _class.prototype.createDOM = function createDOM() { this._line = document.createElement('div'); this._line.className = 'widgets-dashline'; this._container.appendChild(this._line); @@ -49771,13 +50208,13 @@ const widgetsPeakVelocity = (three = window.THREE) => { this._label.className = 'widgets-label'; // Measurements - let measurementsContainer = document.createElement('div'); + var measurementsContainer = document.createElement('div'); // Peak Velocity - let pvContainer = document.createElement('div'); + var pvContainer = document.createElement('div'); pvContainer.className = 'peakVelocity'; measurementsContainer.appendChild(pvContainer); // Gradient - let gradientContainer = document.createElement('div'); + var gradientContainer = document.createElement('div'); gradientContainer.className = 'gradient'; measurementsContainer.appendChild(gradientContainer); @@ -49785,57 +50222,57 @@ const widgetsPeakVelocity = (three = window.THREE) => { this._container.appendChild(this._label); this.updateDOMColor(); - } + }; - update() { + _class.prototype.update = function update() { this.updateColor(); this._handle.update(); this._worldPosition.copy(this._handle.worldPosition); this.updateDOM(); - } + }; - updateDOM() { + _class.prototype.updateDOM = function updateDOM() { this.updateDOMColor(); - const point = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._worldPosition); - const region = this._regions[this.getRegionByXY(this._regions, point)]; - const usPosition = this.getPointInRegion(region, point); + var point = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._worldPosition); + var region = this._regions[this.getRegionByXY(this._regions, point)]; + var usPosition = this.getPointInRegion(region, point); this._velocity = Math.abs(usPosition.y / 100); this._gradient = 4 * Math.pow(this._velocity, 2); // content - this._label.querySelector('.peakVelocity').innerHTML = `${this._velocity.toFixed(2)} m/s`; - this._label.querySelector('.gradient').innerHTML = `${this._gradient.toFixed(2)} mmhg`; + this._label.querySelector('.peakVelocity').innerHTML = this._velocity.toFixed(2) + ' m/s'; + this._label.querySelector('.gradient').innerHTML = this._gradient.toFixed(2) + ' mmhg'; // position - const transform = this.adjustLabelTransform(this._label, this._handle.screenPosition, true); + var transform = this.adjustLabelTransform(this._label, this._handle.screenPosition, true); - this._line.style.transform = `translate3D(${transform.x - (point.x - region.x0) * this._camera.zoom}px, ${transform.y}px, 0)`; + this._line.style.transform = 'translate3D(' + (transform.x - (point.x - region.x0) * this._camera.zoom) + 'px, ' + transform.y + 'px, 0)'; this._line.style.width = (region.x1 - region.x0) * this._camera.zoom + 'px'; - this._label.style.transform = `translate3D(${transform.x + 10}px, ${transform.y + 10}px, 0)`; - } + this._label.style.transform = 'translate3D(' + (transform.x + 10) + 'px, ' + (transform.y + 10) + 'px, 0)'; + }; - updateDOMColor() { + _class.prototype.updateDOMColor = function updateDOMColor() { this._line.style.backgroundColor = this._color; this._label.style.borderColor = this._color; - } + }; - hideDOM() { + _class.prototype.hideDOM = function hideDOM() { this._line.style.display = 'none'; this._label.style.display = 'none'; this._handle.hideDOM(); - } + }; - showDOM() { + _class.prototype.showDOM = function showDOM() { this._line.style.display = ''; this._label.style.display = ''; this._handle.showDOM(); - } + }; - free() { + _class.prototype.free = function free() { this.removeEventListeners(); this.remove(this._handle); @@ -49848,49 +50285,53 @@ const widgetsPeakVelocity = (three = window.THREE) => { this._container.removeChild(this._line); this._container.removeChild(this._label); - super.free(); - } + _Constructor.prototype.free.call(this); + }; - getMeasurements() { + _class.prototype.getMeasurements = function getMeasurements() { return { velocity: this._velocity, gradient: this._gradient }; - } - - get targetMesh() { - return this._targetMesh; - } - - set targetMesh(targetMesh) { - this._targetMesh = targetMesh; - this._handle.targetMesh = targetMesh; - this._moveHandle.targetMesh = targetMesh; - this.update(); - } - - get worldPosition() { - return this._worldPosition; - } - - set worldPosition(worldPosition) { - this._handle.worldPosition.copy(worldPosition); - this._moveHandle.worldPosition.copy(worldPosition); - this._worldPosition.copy(worldPosition); - this.update(); - } + }; - get active() { - return this._active; - } + _createClass(_class, [{ + key: 'targetMesh', + get: function get() { + return this._targetMesh; + }, + set: function set(targetMesh) { + this._targetMesh = targetMesh; + this._handle.targetMesh = targetMesh; + this._moveHandle.targetMesh = targetMesh; + this.update(); + } + }, { + key: 'worldPosition', + get: function get() { + return this._worldPosition; + }, + set: function set(worldPosition) { + this._handle.worldPosition.copy(worldPosition); + this._moveHandle.worldPosition.copy(worldPosition); + this._worldPosition.copy(worldPosition); + this.update(); + } + }, { + key: 'active', + get: function get() { + return this._active; + }, + set: function set(active) { + this._active = active; + this._controls.enabled = !this._active; - set active(active) { - this._active = active; - this._controls.enabled = !this._active; + this.update(); + } + }]); - this.update(); - } - }; + return _class; + }(Constructor); }; @@ -49912,6 +50353,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_widgets_base__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _widgets_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./widgets.handle */ "./src/widgets/widgets.handle.js"); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + @@ -49919,104 +50368,115 @@ __webpack_require__.r(__webpack_exports__); /** * @module widgets/polygon */ -const widgetsPolygon = (three = window.THREE) => { +var widgetsPolygon = function widgetsPolygon() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); - this._widgetType = 'Polygon'; + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); + + _this._widgetType = 'Polygon'; // incoming parameters (optional: frameIndex, worldPosition) - this._stack = params.stack; // required - this._calibrationFactor = params.calibrationFactor || null; + _this._stack = params.stack; // required + _this._calibrationFactor = params.calibrationFactor || null; // outgoing values - this._area = null; - this._units = !this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing ? 'units' : 'cm²'; + _this._area = null; + _this._units = !_this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing ? 'units' : 'cm²'; - this._initialized = false; // set to true onDblClick if number of handles > 2 - this._newHandleRequired = true; // should handle be created onMove? - this._moving = false; - this._domHovered = false; + _this._initialized = false; // set to true onDblClick if number of handles > 2 + _this._newHandleRequired = true; // should handle be created onMove? + _this._moving = false; + _this._domHovered = false; // mesh stuff - this._material = null; - this._geometry = null; - this._mesh = null; + _this._material = null; + _this._geometry = null; + _this._mesh = null; // dom stuff - this._lines = []; - this._label = null; + _this._lines = []; + _this._label = null; // add handles - this._handles = []; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + _this._handles = []; + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - let handle = new WidgetsHandle(targetMesh, controls, params); - this.add(handle); - this._handles.push(handle); + var handle = new WidgetsHandle(targetMesh, controls, params); + _this.add(handle); + _this._handles.push(handle); - this._moveHandle = new WidgetsHandle(targetMesh, controls, params); - this.add(this._moveHandle); - this._moveHandle.hide(); + _this._moveHandle = new WidgetsHandle(targetMesh, controls, params); + _this.add(_this._moveHandle); + _this._moveHandle.hide(); - this.onDoubleClick = this.onDoubleClick.bind(this); - this.onMove = this.onMove.bind(this); - this.onHover = this.onHover.bind(this); + _this.onDoubleClick = _this.onDoubleClick.bind(_this); + _this.onMove = _this.onMove.bind(_this); + _this.onHover = _this.onHover.bind(_this); - this.create(); + _this.create(); - this.addEventListeners(); + _this.addEventListeners(); + return _this; } - addEventListeners() { + _class.prototype.addEventListeners = function addEventListeners() { this._container.addEventListener('dblclick', this.onDoubleClick); this._container.addEventListener('wheel', this.onMove); this._label.addEventListener('mouseenter', this.onHover); this._label.addEventListener('mouseleave', this.onHover); - } + }; - removeEventListeners() { + _class.prototype.removeEventListeners = function removeEventListeners() { this._container.removeEventListener('dblclick', this.onDoubleClick); this._container.removeEventListener('wheel', this.onMove); this._label.removeEventListener('mouseenter', this.onHover); this._label.removeEventListener('mouseleave', this.onHover); - } + }; - onHover(evt) { + _class.prototype.onHover = function onHover(evt) { if (evt) { this.hoverDom(evt); } this.hoverMesh(); - let hovered = false; + var hovered = false; - this._handles.forEach(elem => hovered = hovered || elem.hovered); + this._handles.forEach(function (elem) { + return hovered = hovered || elem.hovered; + }); this._hovered = hovered || this._domHovered; this._container.style.cursor = this._hovered ? 'pointer' : 'default'; - } + }; - hoverMesh() { + _class.prototype.hoverMesh = function hoverMesh() { // check raycast intersection, if we want to hover on mesh instead of just css - } + }; - hoverDom(evt) { + _class.prototype.hoverDom = function hoverDom(evt) { this._domHovered = evt.type === 'mouseenter'; - } + }; - onStart(evt) { - let active = false; + _class.prototype.onStart = function onStart(evt) { + var active = false; - this._handles.forEach(elem => { + this._handles.forEach(function (elem) { elem.onStart(evt); active = active || elem.active; }); @@ -50034,10 +50494,12 @@ const widgetsPolygon = (three = window.THREE) => { } this.update(); - } + }; - onMove(evt) { - let hovered = false; + _class.prototype.onMove = function onMove(evt) { + var _this2 = this; + + var hovered = false; if (this.active) { this._dragged = true; @@ -50047,8 +50509,8 @@ const widgetsPolygon = (three = window.THREE) => { this._handles[this._handles.length - 1].active = false; this._handles[this._handles.length - 1].tracking = false; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - let handle = new WidgetsHandle(this._targetMesh, this._controls, this._params); + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + var handle = new WidgetsHandle(this._targetMesh, this._controls, this._params); handle.hovered = true; handle.active = true; @@ -50059,7 +50521,7 @@ const widgetsPolygon = (three = window.THREE) => { this.createLine(); this._newHandleRequired = false; } else { - const prevPosition = this._moveHandle.worldPosition.clone(); + var prevPosition = this._moveHandle.worldPosition.clone(); this._moveHandle.onMove(evt, true); if (this._mesh) { @@ -50067,14 +50529,14 @@ const widgetsPolygon = (three = window.THREE) => { } this.updateDOMContent(true); if (this._moving) { - this._handles.forEach(handle => { - handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition)); + this._handles.forEach(function (handle) { + handle.worldPosition.add(_this2._moveHandle.worldPosition.clone().sub(prevPosition)); }); } } } - this._handles.forEach(elem => { + this._handles.forEach(function (elem) { elem.onMove(evt); hovered = hovered || elem.hovered; }); @@ -50083,17 +50545,19 @@ const widgetsPolygon = (three = window.THREE) => { this._container.style.cursor = this._hovered ? 'pointer' : 'default'; this.update(); - } + }; + + _class.prototype.onEnd = function onEnd() { + var _this3 = this; - onEnd() { - let numHandles = this._handles.length; - let active = false; + var numHandles = this._handles.length; + var active = false; if (!this._initialized && numHandles > 1 && this._handles[numHandles - 2].screenPosition.distanceTo(this._handles[numHandles - 1].screenPosition) < 10) { return; } - this._handles.forEach(elem => { + this._handles.forEach(function (elem) { elem.onEnd(); active = active || elem.active; }); @@ -50111,24 +50575,28 @@ const widgetsPolygon = (three = window.THREE) => { if (!this._dragged && this._active) { this._selected = !this._selected; // change state if there was no dragging - this._handles.forEach(elem => elem.selected = this._selected); + this._handles.forEach(function (elem) { + return elem.selected = _this3._selected; + }); } this._active = active || this._handles[numHandles - 1].active; this._dragged = false; this._moving = false; this.update(); - } + }; - onDoubleClick() { - let numHandles = this._handles.length; + _class.prototype.onDoubleClick = function onDoubleClick() { + var numHandles = this._handles.length; if (numHandles < 3 || this._initialized || numHandles > 1 && this._handles[numHandles - 2].screenPosition.distanceTo(this._handles[numHandles - 1].screenPosition) < 10) { return; } this._handles[numHandles - 1].tracking = false; - this._handles.forEach(elem => elem.onEnd()); + this._handles.forEach(function (elem) { + return elem.onEnd(); + }); this._active = false; this._dragged = false; @@ -50138,37 +50606,37 @@ const widgetsPolygon = (three = window.THREE) => { this.updateMesh(); this.updateDOMContent(); this.update(); - } + }; - create() { + _class.prototype.create = function create() { this.createMaterial(); this.createDOM(); - } + }; - createMaterial() { + _class.prototype.createMaterial = function createMaterial() { this._material = new three.MeshBasicMaterial({ side: THREE.DoubleSide }); this._material.transparent = true; this._material.opacity = 0.2; - } + }; - createDOM() { + _class.prototype.createDOM = function createDOM() { this.createLine(); this._label = document.createElement('div'); this._label.className = 'widgets-label'; // measurements - const measurementsContainer = document.createElement('div'); + var measurementsContainer = document.createElement('div'); // Mean / SD - let meanSDContainer = document.createElement('div'); + var meanSDContainer = document.createElement('div'); meanSDContainer.className = 'mean-sd'; measurementsContainer.appendChild(meanSDContainer); // Max / Min - let maxMinContainer = document.createElement('div'); + var maxMinContainer = document.createElement('div'); maxMinContainer.className = 'max-min'; measurementsContainer.appendChild(maxMinContainer); // Area - let areaContainer = document.createElement('div'); + var areaContainer = document.createElement('div'); areaContainer.className = 'area'; measurementsContainer.appendChild(areaContainer); @@ -50177,37 +50645,47 @@ const widgetsPolygon = (three = window.THREE) => { this._container.appendChild(this._label); this.updateDOMColor(); - } + }; - createLine() { - const line = document.createElement('div'); + _class.prototype.createLine = function createLine() { + var line = document.createElement('div'); line.className = 'widgets-line'; line.addEventListener('mouseenter', this.onHover); line.addEventListener('mouseleave', this.onHover); this._lines.push(line); this._container.appendChild(line); - } + }; - hideDOM() { - this._handles.forEach(elem => elem.hideDOM()); + _class.prototype.hideDOM = function hideDOM() { + this._handles.forEach(function (elem) { + return elem.hideDOM(); + }); - this._lines.forEach(elem => elem.style.display = 'none'); + this._lines.forEach(function (elem) { + return elem.style.display = 'none'; + }); this._label.style.display = 'none'; - } + }; - showDOM() { - this._handles.forEach(elem => elem.showDOM()); + _class.prototype.showDOM = function showDOM() { + this._handles.forEach(function (elem) { + return elem.showDOM(); + }); - this._lines.forEach(elem => elem.style.display = ''); + this._lines.forEach(function (elem) { + return elem.style.display = ''; + }); this._label.style.display = ''; - } + }; - update() { + _class.prototype.update = function update() { this.updateColor(); // update handles - this._handles.forEach(elem => elem.update()); + this._handles.forEach(function (elem) { + return elem.update(); + }); // mesh stuff this.updateMeshColor(); @@ -50216,36 +50694,38 @@ const widgetsPolygon = (three = window.THREE) => { // DOM stuff this.updateDOMColor(); this.updateDOMPosition(); - } + }; - updateMesh() { + _class.prototype.updateMesh = function updateMesh() { if (this._mesh) { this.remove(this._mesh); } - let points = []; + var points = []; - this._handles.forEach(elem => points.push(elem.worldPosition)); + this._handles.forEach(function (elem) { + return points.push(elem.worldPosition); + }); - let center = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].centerOfMass(points); + var center = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].centerOfMass(points); // direction from first point to center - let referenceDirection = new three.Vector3().subVectors(points[0], center).normalize(); - let direction = new three.Vector3().crossVectors(new three.Vector3().subVectors(points[0], center), // side 1 + var referenceDirection = new three.Vector3().subVectors(points[0], center).normalize(); + var direction = new three.Vector3().crossVectors(new three.Vector3().subVectors(points[0], center), // side 1 new three.Vector3().subVectors(points[1], center) // side 2 ); - let base = new three.Vector3().crossVectors(referenceDirection, direction).normalize(); - let orderedpoints = []; + var base = new three.Vector3().crossVectors(referenceDirection, direction).normalize(); + var orderedpoints = []; // other lines // if inter, return location + angle - for (let j = 0; j < points.length; j++) { - let point = new three.Vector3(points[j].x, points[j].y, points[j].z); + for (var j = 0; j < points.length; j++) { + var point = new three.Vector3(points[j].x, points[j].y, points[j].z); point.direction = new three.Vector3().subVectors(points[j], center).normalize(); - let x = referenceDirection.dot(point.direction); - let y = base.dot(point.direction); + var x = referenceDirection.dot(point.direction); + var y = base.dot(point.direction); - point.xy = { x, y }; + point.xy = { x: x, y: y }; point.angle = Math.atan2(y, x) * (180 / Math.PI); orderedpoints.push(point); @@ -50253,8 +50733,12 @@ const widgetsPolygon = (three = window.THREE) => { // override to catch console.warn "THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()" this._shapeWarn = false; - const oldWarn = console.warn; - console.warn = function (...rest) { + var oldWarn = console.warn; + console.warn = function () { + for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) { + rest[_key] = arguments[_key]; + } + if (rest[0] === 'THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()') { this._shapeWarn = true; } @@ -50262,12 +50746,12 @@ const widgetsPolygon = (three = window.THREE) => { }.bind(this); // create the shape - let shape = new three.Shape(); + var shape = new three.Shape(); // move to first point! shape.moveTo(orderedpoints[0].xy.x, orderedpoints[0].xy.y); // loop through all points! - for (let l = 1; l < orderedpoints.length; l++) { + for (var l = 1; l < orderedpoints.length; l++) { // project each on plane! shape.lineTo(orderedpoints[l].xy.x, orderedpoints[l].xy.y); } @@ -50288,29 +50772,35 @@ const widgetsPolygon = (three = window.THREE) => { this._mesh = new three.Mesh(this._geometry, this._material); this._mesh.visible = true; this.add(this._mesh); - } + }; - updateMeshColor() { + _class.prototype.updateMeshColor = function updateMeshColor() { if (this._material) { this._material.color.set(this._color); } - } + }; - updateMeshPosition() { + _class.prototype.updateMeshPosition = function updateMeshPosition() { if (this._geometry) { this._geometry.verticesNeedUpdate = true; } - } + }; + + _class.prototype.updateDOMColor = function updateDOMColor() { + var _this4 = this; - updateDOMColor() { - this._lines.forEach(elem => elem.style.backgroundColor = this._color); + this._lines.forEach(function (elem) { + return elem.style.backgroundColor = _this4._color; + }); this._label.style.borderColor = this._color; - } + }; + + _class.prototype.updateDOMContent = function updateDOMContent(clear) { + var _this5 = this; - updateDOMContent(clear) { - const meanSDContainer = this._label.querySelector('.mean-sd'); - const maxMinContainer = this._label.querySelector('.max-min'); - const areaContainer = this._label.querySelector('.area'); + var meanSDContainer = this._label.querySelector('.mean-sd'); + var maxMinContainer = this._label.querySelector('.max-min'); + var areaContainer = this._label.querySelector('.area'); if (clear) { meanSDContainer.innerHTML = ''; @@ -50320,18 +50810,18 @@ const widgetsPolygon = (three = window.THREE) => { return; } - const regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || []; + var regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || []; this._area = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].getGeometryArea(this._geometry); // this.getArea result is changed on dragging if (this._calibrationFactor) { this._area *= Math.pow(this._calibrationFactor, 2); } else if (regions && regions.length > 0 && this._stack.lps2IJK) { - let same = true; - let cRegion; - let pRegion; + var same = true; + var cRegion = void 0; + var pRegion = void 0; - this._handles.forEach(elem => { - cRegion = this.getRegionByXY(regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._stack.lps2IJK, elem.worldPosition)); + this._handles.forEach(function (elem) { + cRegion = _this5.getRegionByXY(regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(_this5._stack.lps2IJK, elem.worldPosition)); if (cRegion === null || regions[cRegion].unitsX !== 'cm' || pRegion !== undefined && pRegion !== cRegion) { same = false; } @@ -50351,7 +50841,7 @@ const widgetsPolygon = (three = window.THREE) => { this._area /= 100; } - let title = this._units === 'units' ? 'Calibration is required to display the area in cm². ' : ''; + var title = this._units === 'units' ? 'Calibration is required to display the area in cm². ' : ''; if (this._shapeWarn) { title += 'Values may be incorrect due to triangulation error.'; @@ -50364,31 +50854,32 @@ const widgetsPolygon = (three = window.THREE) => { this._label.style.color = this._colors.text; } - const roi = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].getRoI(this._mesh, this._camera, this._stack); + var roi = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].getRoI(this._mesh, this._camera, this._stack); if (roi !== null) { - meanSDContainer.innerHTML = `Mean: ${roi.mean.toFixed(1)} / SD: ${roi.sd.toFixed(1)}`; - maxMinContainer.innerHTML = `Max: ${roi.max.toFixed()} / Min: ${roi.min.toFixed()}`; + meanSDContainer.innerHTML = 'Mean: ' + roi.mean.toFixed(1) + ' / SD: ' + roi.sd.toFixed(1); + maxMinContainer.innerHTML = 'Max: ' + roi.max.toFixed() + ' / Min: ' + roi.min.toFixed(); } else { meanSDContainer.innerHTML = ''; maxMinContainer.innerHTML = ''; } - areaContainer.innerHTML = `Area: ${this._area.toFixed(2)} ${this._units}`; - } + areaContainer.innerHTML = 'Area: ' + this._area.toFixed(2) + ' ' + this._units; + }; + + _class.prototype.updateDOMPosition = function updateDOMPosition() { + var _this6 = this; - updateDOMPosition() { // update lines and get coordinates of lowest handle - let labelPosition = null; + var labelPosition = null; - this._lines.forEach((elem, ind) => { - const lineData = this.getLineData(this._handles[ind].screenPosition, this._handles[ind + 1 === this._handles.length ? 0 : ind + 1].screenPosition); + this._lines.forEach(function (elem, ind) { + var lineData = _this6.getLineData(_this6._handles[ind].screenPosition, _this6._handles[ind + 1 === _this6._handles.length ? 0 : ind + 1].screenPosition); - elem.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0) - rotate(${lineData.transformAngle}rad)`; + elem.style.transform = 'translate3D(' + lineData.transformX + 'px, ' + lineData.transformY + 'px, 0)\n rotate(' + lineData.transformAngle + 'rad)'; elem.style.width = lineData.length + 'px'; - if (labelPosition === null || labelPosition.y < this._handles[ind].screenPosition.y) { - labelPosition = this._handles[ind].screenPosition.clone(); + if (labelPosition === null || labelPosition.y < _this6._handles[ind].screenPosition.y) { + labelPosition = _this6._handles[ind].screenPosition.clone(); } }); @@ -50400,14 +50891,16 @@ const widgetsPolygon = (three = window.THREE) => { labelPosition.y += 15 + this._label.offsetHeight / 2; labelPosition = this.adjustLabelTransform(this._label, labelPosition); - this._label.style.transform = `translate3D(${labelPosition.x}px, ${labelPosition.y}px, 0)`; - } + this._label.style.transform = 'translate3D(' + labelPosition.x + 'px, ' + labelPosition.y + 'px, 0)'; + }; + + _class.prototype.free = function free() { + var _this7 = this; - free() { this.removeEventListeners(); - this._handles.forEach(h => { - this.remove(h); + this._handles.forEach(function (h) { + _this7.remove(h); h.free(); }); this._handles = []; @@ -50416,10 +50909,10 @@ const widgetsPolygon = (three = window.THREE) => { this._moveHandle.free(); this._moveHandle = null; - this._lines.forEach(elem => { - elem.removeEventListener('mouseenter', this.onHover); - elem.removeEventListener('mouseleave', this.onHover); - this._container.removeChild(elem); + this._lines.forEach(function (elem) { + elem.removeEventListener('mouseenter', _this7.onHover); + elem.removeEventListener('mouseleave', _this7.onHover); + _this7._container.removeChild(elem); }); this._lines = []; this._container.removeChild(this._label); @@ -50445,47 +50938,55 @@ const widgetsPolygon = (three = window.THREE) => { this._stack = null; - super.free(); - } + _Constructor.prototype.free.call(this); + }; - getMeasurements() { + _class.prototype.getMeasurements = function getMeasurements() { return { area: this._area, units: this._units }; - } - - get targetMesh() { - return this._targetMesh; - } - - set targetMesh(targetMesh) { - this._targetMesh = targetMesh; - this._handles.forEach(elem => elem.targetMesh = targetMesh); - this._moveHandle.targetMesh = targetMesh; - this.update(); - } - - get worldPosition() { - return this._worldPosition; - } - - set worldPosition(worldPosition) { - this._handles.forEach(elem => elem.worldPosition.copy(worldPosition)); - this._worldPosition.copy(worldPosition); - this.update(); - } + }; - get calibrationFactor() { - return this._calibrationFactor; - } + _createClass(_class, [{ + key: 'targetMesh', + get: function get() { + return this._targetMesh; + }, + set: function set(targetMesh) { + this._targetMesh = targetMesh; + this._handles.forEach(function (elem) { + return elem.targetMesh = targetMesh; + }); + this._moveHandle.targetMesh = targetMesh; + this.update(); + } + }, { + key: 'worldPosition', + get: function get() { + return this._worldPosition; + }, + set: function set(worldPosition) { + this._handles.forEach(function (elem) { + return elem.worldPosition.copy(worldPosition); + }); + this._worldPosition.copy(worldPosition); + this.update(); + } + }, { + key: 'calibrationFactor', + get: function get() { + return this._calibrationFactor; + }, + set: function set(calibrationFactor) { + this._calibrationFactor = calibrationFactor; + this._units = 'cm²'; + this.update(); + } + }]); - set calibrationFactor(calibrationFactor) { - this._calibrationFactor = calibrationFactor; - this._units = 'cm²'; - this.update(); - } - }; + return _class; + }(Constructor); }; @@ -50507,6 +51008,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_widgets_base__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _widgets_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./widgets.handle */ "./src/widgets/widgets.handle.js"); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + @@ -50514,92 +51023,101 @@ __webpack_require__.r(__webpack_exports__); /** * @module widgets/pressureHalfTime */ -const widgetsPressureHalfTime = (three = window.THREE) => { +var widgetsPressureHalfTime = function widgetsPressureHalfTime() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + return function (_Constructor) { + _inherits(_class, _Constructor); - this._widgetType = 'PressureHalfTime'; + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); + + _this._widgetType = 'PressureHalfTime'; // incoming parameters (required: lps2IJK, worldPosition) - this._regions = params.ultrasoundRegions || []; // required - if (this._regions.length < 1) { + _this._regions = params.ultrasoundRegions || []; // required + if (_this._regions.length < 1) { throw new Error('Ultrasound regions should not be empty!'); } // outgoing values - this._vMax = null; // Maximum Velocity (Vmax) - this._gMax = null; // Maximum Gradient (Gmax) - this._pht = null; // Pressure Half Time (PHT) - this._mva = null; // Mitral Valve Area (MVA) - this._dt = null; // Deceleration Time (DT) - this._ds = null; // Deceleration Slope (DS) - - this._domHovered = false; - this._initialRegion = this.getRegionByXY(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(params.lps2IJK, params.worldPosition)); - if (this._initialRegion === null) { + _this._vMax = null; // Maximum Velocity (Vmax) + _this._gMax = null; // Maximum Gradient (Gmax) + _this._pht = null; // Pressure Half Time (PHT) + _this._mva = null; // Mitral Valve Area (MVA) + _this._dt = null; // Deceleration Time (DT) + _this._ds = null; // Deceleration Slope (DS) + + _this._domHovered = false; + _this._initialRegion = _this.getRegionByXY(_this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(params.lps2IJK, params.worldPosition)); + if (_this._initialRegion === null) { throw new Error('Invalid initial UltraSound region!'); } // mesh stuff - this._material = null; - this._geometry = null; - this._mesh = null; + _this._material = null; + _this._geometry = null; + _this._mesh = null; // dom stuff - this._line = null; - this._label = null; + _this._line = null; + _this._label = null; // add handles - this._handles = []; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + _this._handles = []; + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - let handle; - for (let i = 0; i < 2; i++) { + var handle = void 0; + for (var i = 0; i < 2; i++) { handle = new WidgetsHandle(targetMesh, controls, params); - this.add(handle); - this._handles.push(handle); + _this.add(handle); + _this._handles.push(handle); } - this._handles[1].active = true; - this._handles[1].tracking = true; + _this._handles[1].active = true; + _this._handles[1].tracking = true; - this._moveHandle = new WidgetsHandle(targetMesh, controls, params); - this.add(this._moveHandle); - this._handles.push(this._moveHandle); - this._moveHandle.hide(); + _this._moveHandle = new WidgetsHandle(targetMesh, controls, params); + _this.add(_this._moveHandle); + _this._handles.push(_this._moveHandle); + _this._moveHandle.hide(); - this.create(); + _this.create(); - this.onMove = this.onMove.bind(this); - this.onHover = this.onHover.bind(this); - this.addEventListeners(); + _this.onMove = _this.onMove.bind(_this); + _this.onHover = _this.onHover.bind(_this); + _this.addEventListeners(); + return _this; } - addEventListeners() { + _class.prototype.addEventListeners = function addEventListeners() { this._container.addEventListener('wheel', this.onMove); this._line.addEventListener('mouseenter', this.onHover); this._line.addEventListener('mouseleave', this.onHover); this._label.addEventListener('mouseenter', this.onHover); this._label.addEventListener('mouseleave', this.onHover); - } + }; - removeEventListeners() { + _class.prototype.removeEventListeners = function removeEventListeners() { this._container.removeEventListener('wheel', this.onMove); this._line.removeEventListener('mouseenter', this.onHover); this._line.removeEventListener('mouseleave', this.onHover); this._label.removeEventListener('mouseenter', this.onHover); this._label.removeEventListener('mouseleave', this.onHover); - } + }; - onHover(evt) { + _class.prototype.onHover = function onHover(evt) { if (evt) { this.hoverDom(evt); } @@ -50608,17 +51126,17 @@ const widgetsPressureHalfTime = (three = window.THREE) => { this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._domHovered; this._container.style.cursor = this._hovered ? 'pointer' : 'default'; - } + }; - hoverMesh() { + _class.prototype.hoverMesh = function hoverMesh() { // check raycast intersection, do we want to hover on mesh or just css? - } + }; - hoverDom(evt) { + _class.prototype.hoverDom = function hoverDom(evt) { this._domHovered = evt.type === 'mouseenter'; - } + }; - onStart(evt) { + _class.prototype.onStart = function onStart(evt) { this._moveHandle.onMove(evt, true); this._handles[0].onStart(evt); @@ -50631,15 +51149,15 @@ const widgetsPressureHalfTime = (three = window.THREE) => { } this.update(); - } + }; - onMove(evt) { + _class.prototype.onMove = function onMove(evt) { if (this._active) { - const prevPosition = this._moveHandle.worldPosition.clone(); + var prevPosition = this._moveHandle.worldPosition.clone(); this._moveHandle.onMove(evt, true); - const shift = this._moveHandle.worldPosition.clone().sub(prevPosition); + var shift = this._moveHandle.worldPosition.clone().sub(prevPosition); if (!this.isCorrectRegion(shift)) { this._moveHandle.worldPosition.copy(prevPosition); @@ -50648,7 +51166,7 @@ const widgetsPressureHalfTime = (three = window.THREE) => { } if (!this._handles[0].active && !this._handles[1].active) { - this._handles.slice(0, -1).forEach(handle => { + this._handles.slice(0, -1).forEach(function (handle) { handle.worldPosition.add(shift); }); } @@ -50660,9 +51178,9 @@ const widgetsPressureHalfTime = (three = window.THREE) => { this._handles[0].onMove(evt); this._handles[1].onMove(evt); this.update(); - } + }; - onEnd() { + _class.prototype.onEnd = function onEnd() { this._handles[0].onEnd(); // First Handle if (this._handles[1].tracking && this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10) { @@ -50687,11 +51205,11 @@ const widgetsPressureHalfTime = (three = window.THREE) => { this._dragged = false; this.update(); - } + }; - isCorrectRegion(shift) { - const inActive = !(this._handles[0].active || this._handles[1].active); - let isCorrect = true; + _class.prototype.isCorrectRegion = function isCorrectRegion(shift) { + var inActive = !(this._handles[0].active || this._handles[1].active); + var isCorrect = true; if (this._handles[0].active || inActive) { isCorrect = isCorrect && this.checkHandle(0, shift); @@ -50701,20 +51219,20 @@ const widgetsPressureHalfTime = (three = window.THREE) => { } return isCorrect; - } + }; - checkHandle(index, shift) { - const region = this.getRegionByXY(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[index].worldPosition.clone().add(shift))); + _class.prototype.checkHandle = function checkHandle(index, shift) { + var region = this.getRegionByXY(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[index].worldPosition.clone().add(shift))); return region !== null && region === this._initialRegion && this._regions[region].unitsY === 'cm/sec'; - } + }; - create() { + _class.prototype.create = function create() { this.createMesh(); this.createDOM(); - } + }; - createMesh() { + _class.prototype.createMesh = function createMesh() { // geometry this._geometry = new three.Geometry(); this._geometry.vertices = [this._handles[0].worldPosition, this._handles[1].worldPosition]; @@ -50729,9 +51247,9 @@ const widgetsPressureHalfTime = (three = window.THREE) => { this._mesh.visible = true; this.add(this._mesh); - } + }; - createDOM() { + _class.prototype.createDOM = function createDOM() { this._line = document.createElement('div'); this._line.className = 'widgets-line'; this._container.appendChild(this._line); @@ -50739,10 +51257,10 @@ const widgetsPressureHalfTime = (three = window.THREE) => { this._label = document.createElement('div'); this._label.className = 'widgets-label'; - const measurementsContainer = document.createElement('div'); + var measurementsContainer = document.createElement('div'); - ['vmax', 'gmax', 'pht', 'mva', 'dt', 'ds'].forEach(name => { - const div = document.createElement('div'); + ['vmax', 'gmax', 'pht', 'mva', 'dt', 'ds'].forEach(function (name) { + var div = document.createElement('div'); div.className = name; measurementsContainer.appendChild(div); @@ -50752,22 +51270,24 @@ const widgetsPressureHalfTime = (three = window.THREE) => { this._container.appendChild(this._label); this.updateDOMColor(); - } + }; - hideDOM() { + _class.prototype.hideDOM = function hideDOM() { this._line.style.display = 'none'; this._label.style.display = 'none'; - this._handles.forEach(elem => elem.hideDOM()); - } + this._handles.forEach(function (elem) { + return elem.hideDOM(); + }); + }; - showDOM() { + _class.prototype.showDOM = function showDOM() { this._line.style.display = ''; this._label.style.display = ''; this._handles[0].showDOM(); this._handles[1].showDOM(); - } + }; - update() { + _class.prototype.update = function update() { this.updateColor(); this._handles[0].update(); @@ -50779,85 +51299,86 @@ const widgetsPressureHalfTime = (three = window.THREE) => { this.updateMeshPosition(); this.updateDOM(); - } + }; - updateValues() { - const usPosition0 = this.getUsPoint(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[0].worldPosition)); - const usPosition1 = this.getUsPoint(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[1].worldPosition)); - const velocity0 = Math.abs(usPosition0.y / 100); - const velocity1 = Math.abs(usPosition1.y / 100); - const time0 = Math.abs(usPosition0.x); - const time1 = Math.abs(usPosition1.x); - const vMaxTime = this._vMax === velocity0 ? time0 : time1; + _class.prototype.updateValues = function updateValues() { + var usPosition0 = this.getUsPoint(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[0].worldPosition)); + var usPosition1 = this.getUsPoint(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[1].worldPosition)); + var velocity0 = Math.abs(usPosition0.y / 100); + var velocity1 = Math.abs(usPosition1.y / 100); + var time0 = Math.abs(usPosition0.x); + var time1 = Math.abs(usPosition1.x); + var vMaxTime = this._vMax === velocity0 ? time0 : time1; this._vMax = Math.max(velocity0, velocity1); this._gMax = 4 * Math.pow(this._vMax, 2); - const phtVelocity = this._vMax / Math.sqrt(2); - const phtKoeff = (velocity0 - phtVelocity) / (velocity1 - phtVelocity); - const dtKoeff = velocity0 / velocity1; + var phtVelocity = this._vMax / Math.sqrt(2); + var phtKoeff = (velocity0 - phtVelocity) / (velocity1 - phtVelocity); + var dtKoeff = velocity0 / velocity1; this._pht = phtKoeff === 1 ? Number.POSITIVE_INFINITY : Math.abs(vMaxTime - (time0 - phtKoeff * time1) / (1 - phtKoeff)) * 1000; this._mva = 220 / this._pht; this._dt = dtKoeff === 1 ? Number.POSITIVE_INFINITY : Math.abs(vMaxTime - (time0 - dtKoeff * time1) / (1 - dtKoeff)) * 1000; this._ds = this._dt === 0 ? Number.POSITIVE_INFINITY : this._vMax / this._dt * 1000; - } + }; - updateMeshColor() { + _class.prototype.updateMeshColor = function updateMeshColor() { if (this._material) { this._material.color.set(this._color); } - } + }; - updateMeshPosition() { + _class.prototype.updateMeshPosition = function updateMeshPosition() { if (this._geometry) { this._geometry.verticesNeedUpdate = true; } - } + }; - updateDOM() { + _class.prototype.updateDOM = function updateDOM() { this.updateDOMColor(); // update line - const lineData = this.getLineData(this._handles[0].screenPosition, this._handles[1].screenPosition); + var lineData = this.getLineData(this._handles[0].screenPosition, this._handles[1].screenPosition); - this._line.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0) - rotate(${lineData.transformAngle}rad)`; + this._line.style.transform = 'translate3D(' + lineData.transformX + 'px, ' + lineData.transformY + 'px, 0)\n rotate(' + lineData.transformAngle + 'rad)'; this._line.style.width = lineData.length + 'px'; // update label - this._label.querySelector('.vmax').innerHTML = `Vmax: ${this._vMax.toFixed(2)} m/s`; - this._label.querySelector('.gmax').innerHTML = `Gmax: ${this._gMax.toFixed(2)} mmhg`; - this._label.querySelector('.pht').innerHTML = `PHT: ${this._pht.toFixed(1)} ms`; - this._label.querySelector('.mva').innerHTML = `MVA: ${this._mva.toFixed(2)} cm²`; - this._label.querySelector('.dt').innerHTML = `DT: ${this._dt.toFixed(1)} ms`; - this._label.querySelector('.ds').innerHTML = `DS: ${this._ds.toFixed(2)} m/s²`; + this._label.querySelector('.vmax').innerHTML = 'Vmax: ' + this._vMax.toFixed(2) + ' m/s'; + this._label.querySelector('.gmax').innerHTML = 'Gmax: ' + this._gMax.toFixed(2) + ' mmhg'; + this._label.querySelector('.pht').innerHTML = 'PHT: ' + this._pht.toFixed(1) + ' ms'; + this._label.querySelector('.mva').innerHTML = 'MVA: ' + this._mva.toFixed(2) + ' cm\xB2'; + this._label.querySelector('.dt').innerHTML = 'DT: ' + this._dt.toFixed(1) + ' ms'; + this._label.querySelector('.ds').innerHTML = 'DS: ' + this._ds.toFixed(2) + ' m/s\xB2'; - let angle = Math.abs(lineData.transformAngle); + var angle = Math.abs(lineData.transformAngle); if (angle > Math.PI / 2) { angle = Math.PI - angle; } - const labelPadding = Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding + var labelPadding = Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle) + 15; - const paddingVector = lineData.line.normalize().multiplyScalar(labelPadding); - const paddingPoint = lineData.length > labelPadding * 2 ? this._handles[1].screenPosition.clone().sub(paddingVector) : this._handles[1].screenPosition.clone().add(paddingVector); - const transform = this.adjustLabelTransform(this._label, paddingPoint); + var paddingVector = lineData.line.normalize().multiplyScalar(labelPadding); + var paddingPoint = lineData.length > labelPadding * 2 ? this._handles[1].screenPosition.clone().sub(paddingVector) : this._handles[1].screenPosition.clone().add(paddingVector); + var transform = this.adjustLabelTransform(this._label, paddingPoint); - this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`; - } + this._label.style.transform = 'translate3D(' + transform.x + 'px, ' + transform.y + 'px, 0)'; + }; - updateDOMColor() { + _class.prototype.updateDOMColor = function updateDOMColor() { this._line.style.backgroundColor = this._color; this._label.style.borderColor = this._color; - } + }; + + _class.prototype.free = function free() { + var _this2 = this; - free() { this.removeEventListeners(); - this._handles.forEach(h => { - this.remove(h); + this._handles.forEach(function (h) { + _this2.remove(h); h.free(); }); this._handles = []; @@ -50880,10 +51401,10 @@ const widgetsPressureHalfTime = (three = window.THREE) => { this._material.dispose(); this._material = null; - super.free(); - } + _Constructor.prototype.free.call(this); + }; - getMeasurements() { + _class.prototype.getMeasurements = function getMeasurements() { return { vMax: this._vMax, gMax: this._gMax, @@ -50892,29 +51413,35 @@ const widgetsPressureHalfTime = (three = window.THREE) => { dt: this._dt, ds: this._ds }; - } - - get targetMesh() { - return this._targetMesh; - } - - set targetMesh(targetMesh) { - this._targetMesh = targetMesh; - this._handles.forEach(elem => elem.targetMesh = targetMesh); - this.update(); - } + }; - get worldPosition() { - return this._worldPosition; - } + _createClass(_class, [{ + key: 'targetMesh', + get: function get() { + return this._targetMesh; + }, + set: function set(targetMesh) { + this._targetMesh = targetMesh; + this._handles.forEach(function (elem) { + return elem.targetMesh = targetMesh; + }); + this.update(); + } + }, { + key: 'worldPosition', + get: function get() { + return this._worldPosition; + }, + set: function set(worldPosition) { + this._handles[0].worldPosition.copy(worldPosition); + this._handles[1].worldPosition.copy(worldPosition); + this._worldPosition.copy(worldPosition); + this.update(); + } + }]); - set worldPosition(worldPosition) { - this._handles[0].worldPosition.copy(worldPosition); - this._handles[1].worldPosition.copy(worldPosition); - this._worldPosition.copy(worldPosition); - this.update(); - } - }; + return _class; + }(Constructor); }; @@ -50936,6 +51463,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_widgets_base__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _widgets_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./widgets.handle */ "./src/widgets/widgets.handle.js"); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + @@ -50943,82 +51478,91 @@ __webpack_require__.r(__webpack_exports__); /** * @module widgets/rectangle */ -const widgetsRectangle = (three = window.THREE) => { +var widgetsRectangle = function widgetsRectangle() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - this._widgetType = 'Rectangle'; + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); + + _this._widgetType = 'Rectangle'; // incoming parameters (optional: frameIndex, worldPosition) - this._stack = params.stack; // required - this._calibrationFactor = params.calibrationFactor || null; + _this._stack = params.stack; // required + _this._calibrationFactor = params.calibrationFactor || null; // outgoing values - this._area = null; - this._units = !this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing ? 'units' : 'cm²'; + _this._area = null; + _this._units = !_this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing ? 'units' : 'cm²'; - this._moving = false; - this._domHovered = false; + _this._moving = false; + _this._domHovered = false; // mesh stuff - this._material = null; - this._geometry = null; - this._mesh = null; + _this._material = null; + _this._geometry = null; + _this._mesh = null; // dom stuff - this._rectangle = null; - this._label = null; + _this._rectangle = null; + _this._label = null; // add handles - this._handles = []; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + _this._handles = []; + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - let handle; - for (let i = 0; i < 2; i++) { + var handle = void 0; + for (var i = 0; i < 2; i++) { handle = new WidgetsHandle(targetMesh, controls, params); - this.add(handle); - this._handles.push(handle); + _this.add(handle); + _this._handles.push(handle); } - this._handles[1].active = true; - this._handles[1].tracking = true; + _this._handles[1].active = true; + _this._handles[1].tracking = true; - this._moveHandle = new WidgetsHandle(targetMesh, controls, params); - this.add(this._moveHandle); - this._handles.push(this._moveHandle); - this._moveHandle.hide(); + _this._moveHandle = new WidgetsHandle(targetMesh, controls, params); + _this.add(_this._moveHandle); + _this._handles.push(_this._moveHandle); + _this._moveHandle.hide(); - this.create(); + _this.create(); - this.onMove = this.onMove.bind(this); - this.onHover = this.onHover.bind(this); - this.addEventListeners(); + _this.onMove = _this.onMove.bind(_this); + _this.onHover = _this.onHover.bind(_this); + _this.addEventListeners(); + return _this; } - addEventListeners() { + _class.prototype.addEventListeners = function addEventListeners() { this._container.addEventListener('wheel', this.onMove); this._rectangle.addEventListener('mouseenter', this.onHover); this._rectangle.addEventListener('mouseleave', this.onHover); this._label.addEventListener('mouseenter', this.onHover); this._label.addEventListener('mouseleave', this.onHover); - } + }; - removeEventListeners() { + _class.prototype.removeEventListeners = function removeEventListeners() { this._container.removeEventListener('wheel', this.onMove); this._rectangle.removeEventListener('mouseenter', this.onHover); this._rectangle.removeEventListener('mouseleave', this.onHover); this._label.removeEventListener('mouseenter', this.onHover); this._label.removeEventListener('mouseleave', this.onHover); - } + }; - onHover(evt) { + _class.prototype.onHover = function onHover(evt) { if (evt) { this.hoverDom(evt); } @@ -51027,17 +51571,17 @@ const widgetsRectangle = (three = window.THREE) => { this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._domHovered; this._container.style.cursor = this._hovered ? 'pointer' : 'default'; - } + }; - hoverMesh() { + _class.prototype.hoverMesh = function hoverMesh() { // check raycast intersection, if we want to hover on mesh instead of just css - } + }; - hoverDom(evt) { + _class.prototype.hoverDom = function hoverDom(evt) { this._domHovered = evt.type === 'mouseenter'; - } + }; - onStart(evt) { + _class.prototype.onStart = function onStart(evt) { this._moveHandle.onMove(evt, true); this._handles[0].onStart(evt); @@ -51051,18 +51595,20 @@ const widgetsRectangle = (three = window.THREE) => { } this.update(); - } + }; + + _class.prototype.onMove = function onMove(evt) { + var _this2 = this; - onMove(evt) { if (this._active) { - const prevPosition = this._moveHandle.worldPosition.clone(); + var prevPosition = this._moveHandle.worldPosition.clone(); this._dragged = true; this._moveHandle.onMove(evt, true); if (this._moving) { - this._handles.slice(0, -1).forEach(handle => { - handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition)); + this._handles.slice(0, -1).forEach(function (handle) { + handle.worldPosition.add(_this2._moveHandle.worldPosition.clone().sub(prevPosition)); }); } @@ -51075,9 +51621,9 @@ const widgetsRectangle = (three = window.THREE) => { this._handles[1].onMove(evt); this.update(); - } + }; - onEnd() { + _class.prototype.onEnd = function onEnd() { this._handles[0].onEnd(); // First Handle if (this._handles[1].tracking && this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10) { @@ -51104,29 +51650,31 @@ const widgetsRectangle = (three = window.THREE) => { this.updateRoI(); // TODO: if (this._dragged || !this._initialized) this.update(); - } + }; - hideDOM() { - this._handles.forEach(elem => elem.hideDOM()); + _class.prototype.hideDOM = function hideDOM() { + this._handles.forEach(function (elem) { + return elem.hideDOM(); + }); this._rectangle.style.display = 'none'; this._label.style.display = 'none'; - } + }; - showDOM() { + _class.prototype.showDOM = function showDOM() { this._handles[0].showDOM(); this._handles[1].showDOM(); this._rectangle.style.display = ''; this._label.style.display = ''; - } + }; - create() { + _class.prototype.create = function create() { this.createMesh(); this.createDOM(); - } + }; - createMesh() { + _class.prototype.createMesh = function createMesh() { this._geometry = new three.PlaneGeometry(1, 1); this._material = new three.MeshBasicMaterial({ side: three.DoubleSide }); @@ -51139,9 +51687,9 @@ const widgetsRectangle = (three = window.THREE) => { this._mesh.visible = true; this.add(this._mesh); - } + }; - createDOM() { + _class.prototype.createDOM = function createDOM() { this._rectangle = document.createElement('div'); this._rectangle.className = 'widgets-rectangle'; this._container.appendChild(this._rectangle); @@ -51150,17 +51698,17 @@ const widgetsRectangle = (three = window.THREE) => { this._label.className = 'widgets-label'; // measurements - const measurementsContainer = document.createElement('div'); + var measurementsContainer = document.createElement('div'); // Mean / SD - let meanSDContainer = document.createElement('div'); + var meanSDContainer = document.createElement('div'); meanSDContainer.className = 'mean-sd'; measurementsContainer.appendChild(meanSDContainer); // Max / Min - let maxMinContainer = document.createElement('div'); + var maxMinContainer = document.createElement('div'); maxMinContainer.className = 'max-min'; measurementsContainer.appendChild(maxMinContainer); // Area - let areaContainer = document.createElement('div'); + var areaContainer = document.createElement('div'); areaContainer.className = 'area'; measurementsContainer.appendChild(areaContainer); @@ -51169,9 +51717,9 @@ const widgetsRectangle = (three = window.THREE) => { this._container.appendChild(this._label); this.updateDOMColor(); - } + }; - update() { + _class.prototype.update = function update() { this.updateColor(); this._handles[0].update(); @@ -51181,17 +51729,17 @@ const widgetsRectangle = (three = window.THREE) => { this.updateMeshPosition(); this.updateDOM(); - } + }; - updateMeshColor() { + _class.prototype.updateMeshColor = function updateMeshColor() { if (this._material) { this._material.color.set(this._color); } - } + }; - updateMeshPosition() { + _class.prototype.updateMeshPosition = function updateMeshPosition() { if (this._geometry) { - const progection = new three.Vector3().subVectors(this._handles[1].worldPosition, this._handles[0].worldPosition).projectOnVector(this._camera.up); + var progection = new three.Vector3().subVectors(this._handles[1].worldPosition, this._handles[0].worldPosition).projectOnVector(this._camera.up); this._geometry.vertices[0].copy(this._handles[0].worldPosition); this._geometry.vertices[1].copy(new three.Vector3().addVectors(this._handles[0].worldPosition, progection)); @@ -51201,11 +51749,11 @@ const widgetsRectangle = (three = window.THREE) => { this._geometry.verticesNeedUpdate = true; this._geometry.computeBoundingSphere(); } - } + }; - updateRoI(clear) { - const meanSDContainer = this._label.querySelector('.mean-sd'); - const maxMinContainer = this._label.querySelector('.max-min'); + _class.prototype.updateRoI = function updateRoI(clear) { + var meanSDContainer = this._label.querySelector('.mean-sd'); + var maxMinContainer = this._label.querySelector('.max-min'); if (clear) { meanSDContainer.innerHTML = ''; @@ -51214,33 +51762,33 @@ const widgetsRectangle = (three = window.THREE) => { return; } - const roi = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].getRoI(this._mesh, this._camera, this._stack); + var roi = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].getRoI(this._mesh, this._camera, this._stack); if (roi !== null) { - meanSDContainer.innerHTML = `Mean: ${roi.mean.toFixed(1)} / SD: ${roi.sd.toFixed(1)}`; - maxMinContainer.innerHTML = `Max: ${roi.max.toFixed()} / Min: ${roi.min.toFixed()}`; + meanSDContainer.innerHTML = 'Mean: ' + roi.mean.toFixed(1) + ' / SD: ' + roi.sd.toFixed(1); + maxMinContainer.innerHTML = 'Max: ' + roi.max.toFixed() + ' / Min: ' + roi.min.toFixed(); } else { meanSDContainer.innerHTML = ''; maxMinContainer.innerHTML = ''; } - } + }; - updateDOMColor() { + _class.prototype.updateDOMColor = function updateDOMColor() { this._rectangle.style.borderColor = this._color; this._label.style.borderColor = this._color; - } + }; - updateDOM() { + _class.prototype.updateDOM = function updateDOM() { this.updateDOMColor(); - const regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || []; + var regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || []; this._area = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].getGeometryArea(this._geometry); if (this._calibrationFactor) { this._area *= Math.pow(this._calibrationFactor, 2); } else if (regions && regions.length > 0 && this._stack.lps2IJK) { - const region0 = this.getRegionByXY(regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._stack.lps2IJK, this._handles[0].worldPosition)); - const region1 = this.getRegionByXY(regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._stack.lps2IJK, this._handles[1].worldPosition)); + var region0 = this.getRegionByXY(regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._stack.lps2IJK, this._handles[0].worldPosition)); + var region1 = this.getRegionByXY(regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._stack.lps2IJK, this._handles[1].worldPosition)); if (region0 !== null && region1 !== null && region0 === region1 && regions[region0].unitsX === 'cm' && regions[region0].unitsY === 'cm') { this._area *= Math.pow(regions[region0].deltaX, 2); @@ -51262,25 +51810,27 @@ const widgetsRectangle = (three = window.THREE) => { this._label.removeAttribute('title'); this._label.style.color = this._colors.text; } - this._label.querySelector('.area').innerHTML = `Area: ${this._area.toFixed(2)} ${this._units}`; + this._label.querySelector('.area').innerHTML = 'Area: ' + this._area.toFixed(2) + ' ' + this._units; - const rectData = this.getRectData(this._handles[0].screenPosition, this._handles[1].screenPosition); - const labelTransform = this.adjustLabelTransform(this._label, this._handles[1].screenPosition.clone().add(rectData.paddingVector.multiplyScalar(15 + this._label.offsetHeight / 2))); + var rectData = this.getRectData(this._handles[0].screenPosition, this._handles[1].screenPosition); + var labelTransform = this.adjustLabelTransform(this._label, this._handles[1].screenPosition.clone().add(rectData.paddingVector.multiplyScalar(15 + this._label.offsetHeight / 2))); // update rectangle - this._rectangle.style.transform = `translate3D(${rectData.transformX}px, ${rectData.transformY}px, 0)`; + this._rectangle.style.transform = 'translate3D(' + rectData.transformX + 'px, ' + rectData.transformY + 'px, 0)'; this._rectangle.style.width = rectData.width + 'px'; this._rectangle.style.height = rectData.height + 'px'; // update label this._label.style.transform = 'translate3D(' + labelTransform.x + 'px,' + labelTransform.y + 'px, 0)'; - } + }; + + _class.prototype.free = function free() { + var _this3 = this; - free() { this.removeEventListeners(); - this._handles.forEach(h => { - this.remove(h); + this._handles.forEach(function (h) { + _this3.remove(h); h.free(); }); this._handles = []; @@ -51305,47 +51855,53 @@ const widgetsRectangle = (three = window.THREE) => { this._stack = null; - super.free(); - } + _Constructor.prototype.free.call(this); + }; - getMeasurements() { + _class.prototype.getMeasurements = function getMeasurements() { return { area: this._area, units: this._units }; - } - - get targetMesh() { - return this._targetMesh; - } - - set targetMesh(targetMesh) { - this._targetMesh = targetMesh; - this._handles.forEach(elem => elem.targetMesh = targetMesh); - this.update(); - } - - get worldPosition() { - return this._worldPosition; - } - - set worldPosition(worldPosition) { - this._handles[0].worldPosition.copy(worldPosition); - this._handles[1].worldPosition.copy(worldPosition); - this._worldPosition.copy(worldPosition); - this.update(); - } + }; - get calibrationFactor() { - return this._calibrationFactor; - } + _createClass(_class, [{ + key: 'targetMesh', + get: function get() { + return this._targetMesh; + }, + set: function set(targetMesh) { + this._targetMesh = targetMesh; + this._handles.forEach(function (elem) { + return elem.targetMesh = targetMesh; + }); + this.update(); + } + }, { + key: 'worldPosition', + get: function get() { + return this._worldPosition; + }, + set: function set(worldPosition) { + this._handles[0].worldPosition.copy(worldPosition); + this._handles[1].worldPosition.copy(worldPosition); + this._worldPosition.copy(worldPosition); + this.update(); + } + }, { + key: 'calibrationFactor', + get: function get() { + return this._calibrationFactor; + }, + set: function set(calibrationFactor) { + this._calibrationFactor = calibrationFactor; + this._units = 'cm²'; + this.update(); + } + }]); - set calibrationFactor(calibrationFactor) { - this._calibrationFactor = calibrationFactor; - this._units = 'cm²'; - this.update(); - } - }; + return _class; + }(Constructor); }; @@ -51366,87 +51922,104 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./widgets.base */ "./src/widgets/widgets.base.ts"); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_widgets_base__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _widgets_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./widgets.handle */ "./src/widgets/widgets.handle.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + /** * @module widgets/ruler */ -const widgetsRuler = (three = window.THREE) => { +var widgetsRuler = function widgetsRuler() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - this._widgetType = 'Ruler'; + _classCallCheck(this, _class); + + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); + + _this._widgetType = 'Ruler'; // incoming parameters (optional: lps2IJK, pixelSpacing, ultrasoundRegions, worldPosition) - this._calibrationFactor = params.calibrationFactor || null; + _this._calibrationFactor = params.calibrationFactor || null; // outgoing values - this._distance = null; - this._units = !this._calibrationFactor && !params.pixelSpacing ? 'units' : 'mm'; + _this._distance = null; + _this._units = !_this._calibrationFactor && !params.pixelSpacing ? 'units' : 'mm'; - this._moving = false; - this._domHovered = false; + _this._moving = false; + _this._domHovered = false; // mesh stuff - this._material = null; - this._geometry = null; - this._mesh = null; + _this._material = null; + _this._geometry = null; + _this._mesh = null; // dom stuff - this._line = null; - this._label = null; + _this._line = null; + _this._label = null; // add handles - this._handles = []; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + _this._handles = []; + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - let handle; - for (let i = 0; i < 2; i++) { + var handle = void 0; + for (var i = 0; i < 2; i++) { handle = new WidgetsHandle(targetMesh, controls, params); - this.add(handle); - this._handles.push(handle); + _this.add(handle); + _this._handles.push(handle); } - this._handles[1].active = true; - this._handles[1].tracking = true; + _this._handles[1].active = true; + _this._handles[1].tracking = true; - this._moveHandle = new WidgetsHandle(targetMesh, controls, params); - this.add(this._moveHandle); - this._handles.push(this._moveHandle); - this._moveHandle.hide(); + _this._moveHandle = new WidgetsHandle(targetMesh, controls, params); + _this.add(_this._moveHandle); + _this._handles.push(_this._moveHandle); + _this._moveHandle.hide(); - this.create(); + _this.create(); - this.onMove = this.onMove.bind(this); - this.onHover = this.onHover.bind(this); - this.addEventListeners(); + _this.onMove = _this.onMove.bind(_this); + _this.onHover = _this.onHover.bind(_this); + _this.addEventListeners(); + return _this; } - addEventListeners() { + _class.prototype.addEventListeners = function addEventListeners() { this._container.addEventListener('wheel', this.onMove); this._line.addEventListener('mouseenter', this.onHover); this._line.addEventListener('mouseleave', this.onHover); this._label.addEventListener('mouseenter', this.onHover); this._label.addEventListener('mouseleave', this.onHover); - } + }; - removeEventListeners() { + _class.prototype.removeEventListeners = function removeEventListeners() { this._container.removeEventListener('wheel', this.onMove); this._line.removeEventListener('mouseenter', this.onHover); this._line.removeEventListener('mouseleave', this.onHover); this._label.removeEventListener('mouseenter', this.onHover); this._label.removeEventListener('mouseleave', this.onHover); - } + }; - onHover(evt) { + _class.prototype.onHover = function onHover(evt) { if (evt) { this.hoverDom(evt); } @@ -51455,17 +52028,17 @@ const widgetsRuler = (three = window.THREE) => { this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._domHovered; this._container.style.cursor = this._hovered ? 'pointer' : 'default'; - } + }; - hoverMesh() { + _class.prototype.hoverMesh = function hoverMesh() { // check raycast intersection, do we want to hover on mesh or just css? - } + }; - hoverDom(evt) { + _class.prototype.hoverDom = function hoverDom(evt) { this._domHovered = evt.type === 'mouseenter'; - } + }; - onStart(evt) { + _class.prototype.onStart = function onStart(evt) { this._moveHandle.onMove(evt, true); this._handles[0].onStart(evt); @@ -51479,18 +52052,20 @@ const widgetsRuler = (three = window.THREE) => { } this.update(); - } + }; + + _class.prototype.onMove = function onMove(evt) { + var _this2 = this; - onMove(evt) { if (this._active) { - const prevPosition = this._moveHandle.worldPosition.clone(); + var prevPosition = this._moveHandle.worldPosition.clone(); this._dragged = true; this._moveHandle.onMove(evt, true); if (this._moving) { - this._handles.slice(0, -1).forEach(handle => { - handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition)); + this._handles.slice(0, -1).forEach(function (handle) { + handle.worldPosition.add(_this2._moveHandle.worldPosition.clone().sub(prevPosition)); }); } } else { @@ -51501,9 +52076,9 @@ const widgetsRuler = (three = window.THREE) => { this._handles[1].onMove(evt); this.update(); - } + }; - onEnd() { + _class.prototype.onEnd = function onEnd() { this._handles[0].onEnd(); // First Handle if (this._handles[1].tracking && this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10) { @@ -51529,14 +52104,14 @@ const widgetsRuler = (three = window.THREE) => { this._moving = false; this.update(); - } + }; - create() { + _class.prototype.create = function create() { this.createMesh(); this.createDOM(); - } + }; - createMesh() { + _class.prototype.createMesh = function createMesh() { // geometry this._geometry = new three.Geometry(); this._geometry.vertices.push(this._handles[0].worldPosition); @@ -51552,9 +52127,9 @@ const widgetsRuler = (three = window.THREE) => { this._mesh.visible = true; this.add(this._mesh); - } + }; - createDOM() { + _class.prototype.createDOM = function createDOM() { this._line = document.createElement('div'); this._line.className = 'widgets-line'; this._container.appendChild(this._line); @@ -51564,29 +52139,31 @@ const widgetsRuler = (three = window.THREE) => { this._container.appendChild(this._label); this.updateDOMColor(); - } + }; - hideDOM() { + _class.prototype.hideDOM = function hideDOM() { this._line.style.display = 'none'; this._label.style.display = 'none'; - this._handles.forEach(elem => elem.hideDOM()); - } + this._handles.forEach(function (elem) { + return elem.hideDOM(); + }); + }; - showDOM() { + _class.prototype.showDOM = function showDOM() { this._line.style.display = ''; this._label.style.display = ''; this._handles[0].showDOM(); this._handles[1].showDOM(); - } + }; - update() { + _class.prototype.update = function update() { this.updateColor(); this._handles[0].update(); this._handles[1].update(); // calculate values - const distanceData = this.getDistanceData(this._handles[0].worldPosition, this._handles[1].worldPosition, this._calibrationFactor); + var distanceData = this.getDistanceData(this._handles[0].worldPosition, this._handles[1].worldPosition, this._calibrationFactor); this._distance = distanceData.distance; if (distanceData.units) { @@ -51597,28 +52174,27 @@ const widgetsRuler = (three = window.THREE) => { this.updateMeshPosition(); this.updateDOM(); - } + }; - updateMeshColor() { + _class.prototype.updateMeshColor = function updateMeshColor() { if (this._material) { this._material.color.set(this._color); } - } + }; - updateMeshPosition() { + _class.prototype.updateMeshPosition = function updateMeshPosition() { if (this._geometry) { this._geometry.verticesNeedUpdate = true; } - } + }; - updateDOM() { + _class.prototype.updateDOM = function updateDOM() { this.updateDOMColor(); // update line - const lineData = this.getLineData(this._handles[0].screenPosition, this._handles[1].screenPosition); + var lineData = this.getLineData(this._handles[0].screenPosition, this._handles[1].screenPosition); - this._line.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0) - rotate(${lineData.transformAngle}rad)`; + this._line.style.transform = 'translate3D(' + lineData.transformX + 'px, ' + lineData.transformY + 'px, 0)\n rotate(' + lineData.transformAngle + 'rad)'; this._line.style.width = lineData.length + 'px'; // update label @@ -51629,32 +52205,34 @@ const widgetsRuler = (three = window.THREE) => { this._label.removeAttribute('title'); this._label.style.color = this._colors.text; } - this._label.innerHTML = `${this._distance.toFixed(2)} ${this._units}`; + this._label.innerHTML = this._distance.toFixed(2) + ' ' + this._units; - let angle = Math.abs(lineData.transformAngle); + var angle = Math.abs(lineData.transformAngle); if (angle > Math.PI / 2) { angle = Math.PI - angle; } - const labelPadding = Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding + var labelPadding = Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle) + 15; - const paddingVector = lineData.line.normalize().multiplyScalar(labelPadding); - const paddingPoint = lineData.length > labelPadding * 2 ? this._handles[1].screenPosition.clone().sub(paddingVector) : this._handles[1].screenPosition.clone().add(paddingVector); - const transform = this.adjustLabelTransform(this._label, paddingPoint); + var paddingVector = lineData.line.normalize().multiplyScalar(labelPadding); + var paddingPoint = lineData.length > labelPadding * 2 ? this._handles[1].screenPosition.clone().sub(paddingVector) : this._handles[1].screenPosition.clone().add(paddingVector); + var transform = this.adjustLabelTransform(this._label, paddingPoint); - this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`; - } + this._label.style.transform = 'translate3D(' + transform.x + 'px, ' + transform.y + 'px, 0)'; + }; - updateDOMColor() { + _class.prototype.updateDOMColor = function updateDOMColor() { this._line.style.backgroundColor = this._color; this._label.style.borderColor = this._color; - } + }; + + _class.prototype.free = function free() { + var _this3 = this; - free() { this.removeEventListeners(); - this._handles.forEach(h => { - this.remove(h); + this._handles.forEach(function (h) { + _this3.remove(h); h.free(); }); this._handles = []; @@ -51677,47 +52255,53 @@ const widgetsRuler = (three = window.THREE) => { this._material.dispose(); this._material = null; - super.free(); - } + _Constructor.prototype.free.call(this); + }; - getMeasurements() { + _class.prototype.getMeasurements = function getMeasurements() { return { distance: this._distance, units: this._units }; - } - - get targetMesh() { - return this._targetMesh; - } - - set targetMesh(targetMesh) { - this._targetMesh = targetMesh; - this._handles.forEach(elem => elem.targetMesh = targetMesh); - this.update(); - } - - get worldPosition() { - return this._worldPosition; - } - - set worldPosition(worldPosition) { - this._handles[0].worldPosition.copy(worldPosition); - this._handles[1].worldPosition.copy(worldPosition); - this._worldPosition.copy(worldPosition); - this.update(); - } + }; - get calibrationFactor() { - return this._calibrationFactor; - } + _createClass(_class, [{ + key: 'targetMesh', + get: function get() { + return this._targetMesh; + }, + set: function set(targetMesh) { + this._targetMesh = targetMesh; + this._handles.forEach(function (elem) { + return elem.targetMesh = targetMesh; + }); + this.update(); + } + }, { + key: 'worldPosition', + get: function get() { + return this._worldPosition; + }, + set: function set(worldPosition) { + this._handles[0].worldPosition.copy(worldPosition); + this._handles[1].worldPosition.copy(worldPosition); + this._worldPosition.copy(worldPosition); + this.update(); + } + }, { + key: 'calibrationFactor', + get: function get() { + return this._calibrationFactor; + }, + set: function set(calibrationFactor) { + this._calibrationFactor = calibrationFactor; + this._units = 'mm'; + this.update(); + } + }]); - set calibrationFactor(calibrationFactor) { - this._calibrationFactor = calibrationFactor; - this._units = 'mm'; - this.update(); - } - }; + return _class; + }(Constructor); }; @@ -51739,6 +52323,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_base__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_widgets_base__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _widgets_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./widgets.handle */ "./src/widgets/widgets.handle.js"); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + @@ -51746,113 +52338,124 @@ __webpack_require__.r(__webpack_exports__); /** * @module widgets/velocityTimeIntegral */ -const widgetsVelocityTimeIntegral = (three = window.THREE) => { +var widgetsVelocityTimeIntegral = function widgetsVelocityTimeIntegral() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; + if (three === undefined || three.Object3D === undefined) { return null; } - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); + + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + _classCallCheck(this, _class); - this._widgetType = 'VelocityTimeIntegral'; + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); + + _this._widgetType = 'VelocityTimeIntegral'; // incoming parameters (+ ijk2LPS, lps2IJK, worldPosition) - this._regions = params.ultrasoundRegions || []; // required - if (this._regions.length < 1) { + _this._regions = params.ultrasoundRegions || []; // required + if (_this._regions.length < 1) { throw new Error('Ultrasound regions should not be empty!'); } // outgoing values - this._vMax = null; // Maximum Velocity (Vmax) - this._vMean = null; // Mean Velocity (Vmean) - this._gMax = null; // Maximum Gradient (Gmax) - this._gMean = null; // Mean Gradient (Gmean) - this._envTi = null; // Envelope Duration (Env.Ti) - this._vti = null; // Velocity Time Integral (VTI) - this._extraInfo = null; // extra information which is added to label - - this._initialized = false; // set to true onEnd if number of handles > 2 - this._isHandleActive = true; - this._domHovered = false; - this._initialRegion = this.getRegionByXY(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(params.lps2IJK, params.worldPosition)); - if (this._initialRegion === null) { + _this._vMax = null; // Maximum Velocity (Vmax) + _this._vMean = null; // Mean Velocity (Vmean) + _this._gMax = null; // Maximum Gradient (Gmax) + _this._gMean = null; // Mean Gradient (Gmean) + _this._envTi = null; // Envelope Duration (Env.Ti) + _this._vti = null; // Velocity Time Integral (VTI) + _this._extraInfo = null; // extra information which is added to label + + _this._initialized = false; // set to true onEnd if number of handles > 2 + _this._isHandleActive = true; + _this._domHovered = false; + _this._initialRegion = _this.getRegionByXY(_this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(params.lps2IJK, params.worldPosition)); + if (_this._initialRegion === null) { throw new Error('Invalid initial UltraSound region!'); } - this._usPoints = []; + _this._usPoints = []; // mesh stuff - this._material = null; - this._geometry = null; - this._mesh = null; + _this._material = null; + _this._geometry = null; + _this._mesh = null; // dom stuff - this._lines = []; - this._label = null; + _this._lines = []; + _this._label = null; // add handles - this._handles = []; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + _this._handles = []; + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - let handle = new WidgetsHandle(targetMesh, controls, params); - this.add(handle); - this._handles.push(handle); + var handle = new WidgetsHandle(targetMesh, controls, params); + _this.add(handle); + _this._handles.push(handle); - this._moveHandle = new WidgetsHandle(targetMesh, controls, params); - this.add(this._moveHandle); - this._moveHandle.hide(); + _this._moveHandle = new WidgetsHandle(targetMesh, controls, params); + _this.add(_this._moveHandle); + _this._moveHandle.hide(); - this.onMove = this.onMove.bind(this); - this.onHover = this.onHover.bind(this); + _this.onMove = _this.onMove.bind(_this); + _this.onHover = _this.onHover.bind(_this); - this.create(); + _this.create(); - this.addEventListeners(); + _this.addEventListeners(); + return _this; } - addEventListeners() { + _class.prototype.addEventListeners = function addEventListeners() { this._container.addEventListener('wheel', this.onMove); this._label.addEventListener('mouseenter', this.onHover); this._label.addEventListener('mouseleave', this.onHover); - } + }; - removeEventListeners() { + _class.prototype.removeEventListeners = function removeEventListeners() { this._container.removeEventListener('wheel', this.onMove); this._label.removeEventListener('mouseenter', this.onHover); this._label.removeEventListener('mouseleave', this.onHover); - } + }; - onHover(evt) { + _class.prototype.onHover = function onHover(evt) { if (evt) { this.hoverDom(evt); } this.hoverMesh(); - let hovered = false; + var hovered = false; - this._handles.forEach(elem => hovered = hovered || elem.hovered); + this._handles.forEach(function (elem) { + return hovered = hovered || elem.hovered; + }); this._hovered = hovered || this._domHovered; this._container.style.cursor = this._hovered ? 'pointer' : 'default'; - } + }; - hoverMesh() { + _class.prototype.hoverMesh = function hoverMesh() { // check raycast intersection, if we want to hover on mesh instead of just css - } + }; - hoverDom(evt) { + _class.prototype.hoverDom = function hoverDom(evt) { this._domHovered = evt.type === 'mouseenter'; - } + }; - onStart(evt) { - let active = false; + _class.prototype.onStart = function onStart(evt) { + var active = false; this._moveHandle.onMove(evt, true); - this._handles.forEach(elem => { + this._handles.forEach(function (elem) { elem.onStart(evt); active = active || elem.active; }); @@ -51865,15 +52468,15 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { } this.update(); - } + }; - onMove(evt) { + _class.prototype.onMove = function onMove(evt) { if (this.active) { - const prevPosition = this._moveHandle.worldPosition.clone(); + var prevPosition = this._moveHandle.worldPosition.clone(); this._moveHandle.onMove(evt, true); - const shift = this._moveHandle.worldPosition.clone().sub(prevPosition); + var shift = this._moveHandle.worldPosition.clone().sub(prevPosition); if (!this.isCorrectRegion(shift)) { this._moveHandle.worldPosition.copy(prevPosition); @@ -51886,8 +52489,8 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { this._handles[this._handles.length - 1].active = false; this._handles[this._handles.length - 1].tracking = false; - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - let handle = new WidgetsHandle(this._targetMesh, this._controls, this._params); + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + var handle = new WidgetsHandle(this._targetMesh, this._controls, this._params); handle.hovered = true; handle.active = true; @@ -51900,7 +52503,7 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { this.updateDOMContent(true); if (!this._isHandleActive || this._handles[this._handles.length - 2].active || this._handles[this._handles.length - 1].active) { - this._handles.forEach(handle => { + this._handles.forEach(function (handle) { handle.worldPosition.add(shift); }); this._isHandleActive = false; @@ -51914,23 +52517,25 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { this.onHover(null); } - this._handles.forEach(elem => { + this._handles.forEach(function (elem) { elem.onMove(evt); }); if (this.active && this._handles.length > 2) { this.pushPopHandle(); } this.update(); - } + }; + + _class.prototype.onEnd = function onEnd() { + var _this2 = this; - onEnd() { if (this._handles.length < 3) { return; } - let active = false; + var active = false; - this._handles.slice(0, -1).forEach(elem => { + this._handles.slice(0, -1).forEach(function (elem) { elem.onEnd(); active = active || elem.active; }); @@ -51950,7 +52555,9 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { if (!this._dragged && this._active) { this._selected = !this._selected; // change state if there was no dragging - this._handles.forEach(elem => elem.selected = this._selected); + this._handles.forEach(function (elem) { + return elem.selected = _this2._selected; + }); } this._active = active || this._handles[this._handles.length - 1].active; this._isHandleActive = active; @@ -51958,43 +52565,45 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { this._initialized = true; this.update(); - } + }; - isCorrectRegion(shift) { - let isCorrect = true; + _class.prototype.isCorrectRegion = function isCorrectRegion(shift) { + var _this3 = this; - this._handles.forEach((handle, index) => { - if (handle.active || !this._isHandleActive) { - isCorrect = isCorrect && this.checkHandle(index, shift); + var isCorrect = true; + + this._handles.forEach(function (handle, index) { + if (handle.active || !_this3._isHandleActive) { + isCorrect = isCorrect && _this3.checkHandle(index, shift); } }); return isCorrect; - } + }; - checkHandle(index, shift) { - const region = this.getRegionByXY(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[index].worldPosition.clone().add(shift))); + _class.prototype.checkHandle = function checkHandle(index, shift) { + var region = this.getRegionByXY(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[index].worldPosition.clone().add(shift))); return region !== null && region === this._initialRegion && this._regions[region].unitsY === 'cm/sec'; - } + }; - create() { + _class.prototype.create = function create() { this.createMaterial(); this.createDOM(); - } + }; - createMaterial() { + _class.prototype.createMaterial = function createMaterial() { this._material = new three.LineBasicMaterial(); - } + }; - createDOM() { + _class.prototype.createDOM = function createDOM() { this._label = document.createElement('div'); this._label.className = 'widgets-label'; - const measurementsContainer = document.createElement('div'); + var measurementsContainer = document.createElement('div'); - ['vmax', 'vmean', 'gmax', 'gmean', 'envti', 'vti', 'info'].forEach(name => { - const div = document.createElement('div'); + ['vmax', 'vmean', 'gmax', 'gmean', 'envti', 'vti', 'info'].forEach(function (name) { + var div = document.createElement('div'); div.className = name; measurementsContainer.appendChild(div); @@ -52004,23 +52613,23 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { this._container.appendChild(this._label); this.updateDOMColor(); - } + }; - createLine() { - const line = document.createElement('div'); + _class.prototype.createLine = function createLine() { + var line = document.createElement('div'); line.className = 'widgets-line'; line.addEventListener('mouseenter', this.onHover); line.addEventListener('mouseleave', this.onHover); this._lines.push(line); this._container.appendChild(line); - } + }; - pushPopHandle() { - let handle0 = this._handles[this._handles.length - 3]; - let handle1 = this._handles[this._handles.length - 2]; - let newhandle = this._handles[this._handles.length - 1]; - let isOnLine = this.isPointOnLine(handle0.worldPosition, handle1.worldPosition, newhandle.worldPosition); + _class.prototype.pushPopHandle = function pushPopHandle() { + var handle0 = this._handles[this._handles.length - 3]; + var handle1 = this._handles[this._handles.length - 2]; + var newhandle = this._handles[this._handles.length - 1]; + var isOnLine = this.isPointOnLine(handle0.worldPosition, handle1.worldPosition, newhandle.worldPosition); if (isOnLine || handle0.screenPosition.distanceTo(newhandle.screenPosition) < 25) { this.remove(handle1); @@ -52033,28 +52642,30 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { } return isOnLine; - } + }; - isPointOnLine(pointA, pointB, pointToCheck) { + _class.prototype.isPointOnLine = function isPointOnLine(pointA, pointB, pointToCheck) { return !new three.Vector3().crossVectors(pointA.clone().sub(pointToCheck), pointB.clone().sub(pointToCheck)).length(); - } + }; + + _class.prototype.finalize = function finalize() { + var _this4 = this; - finalize() { if (this._initialized) { // remove old axis handles - this._handles.splice(-2).forEach(elem => { - this.remove(elem); + this._handles.splice(-2).forEach(function (elem) { + _this4.remove(elem); elem.free(); }); } - const pointF = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[0]._worldPosition); - const pointL = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[this._handles.length - 1]._worldPosition); - const region = this._regions[this.getRegionByXY(this._regions, pointF)]; - const axisY = region.y0 + (region.axisY || 0); // data coordinate equal to US region's zero Y coordinate + var pointF = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[0]._worldPosition); + var pointL = _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[this._handles.length - 1]._worldPosition); + var region = this._regions[this.getRegionByXY(this._regions, pointF)]; + var axisY = region.y0 + (region.axisY || 0); // data coordinate equal to US region's zero Y coordinate - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - const params = { hideHandleMesh: this._params.hideHandleMesh || false }; + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + var params = { hideHandleMesh: this._params.hideHandleMesh || false }; pointF.y = axisY; pointL.y = axisY; @@ -52071,13 +52682,15 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { while (this._lines.length < this._handles.length) { this.createLine(); } - } + }; - update() { + _class.prototype.update = function update() { this.updateColor(); // update handles - this._handles.forEach(elem => elem.update()); + this._handles.forEach(function (elem) { + return elem.update(); + }); // mesh stuff this.updateMesh(); @@ -52085,32 +52698,34 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { // DOM stuff this.updateDOMColor(); this.updateDOMPosition(); - } + }; + + _class.prototype.updateValues = function updateValues() { + var _this5 = this; - updateValues() { - const region = this._regions[this.getRegionByXY(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[0]._worldPosition))]; - const boundaries = { + var region = this._regions[this.getRegionByXY(this._regions, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, this._handles[0]._worldPosition))]; + var boundaries = { xMin: Number.POSITIVE_INFINITY, xMax: Number.NEGATIVE_INFINITY, yMin: Number.POSITIVE_INFINITY, yMax: Number.NEGATIVE_INFINITY }; - let pVelocity; - let pGradient; - let pTime; - let totalTime = 0; + var pVelocity = void 0; + var pGradient = void 0; + var pTime = void 0; + var totalTime = 0; this._vMax = 0; this._vMean = 0; this._gMean = 0; this._usPoints.splice(2); - this._handles.slice(0, -2).forEach(elem => { - const usPosition = this.getPointInRegion(region, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(this._params.lps2IJK, elem._worldPosition)); - const velocity = Math.abs(usPosition.y / 100); - const gradient = 4 * Math.pow(velocity, 2); + this._handles.slice(0, -2).forEach(function (elem) { + var usPosition = _this5.getPointInRegion(region, _core_core_utils__WEBPACK_IMPORTED_MODULE_2__["default"].worldToData(_this5._params.lps2IJK, elem._worldPosition)); + var velocity = Math.abs(usPosition.y / 100); + var gradient = 4 * Math.pow(velocity, 2); - if (this._vMax === null || velocity > this._vMax) { - this._vMax = velocity; + if (_this5._vMax === null || velocity > _this5._vMax) { + _this5._vMax = velocity; } boundaries.xMin = Math.min(usPosition.x, boundaries.xMin); boundaries.xMax = Math.max(usPosition.x, boundaries.xMax); @@ -52118,17 +52733,17 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { boundaries.yMax = Math.max(usPosition.y, boundaries.yMax); if (pTime) { - const length = Math.abs(usPosition.x - pTime); + var length = Math.abs(usPosition.x - pTime); totalTime += length; - this._vMean += length * (pVelocity + velocity) / 2; - this._gMean += length * (pGradient + gradient) / 2; + _this5._vMean += length * (pVelocity + velocity) / 2; + _this5._gMean += length * (pGradient + gradient) / 2; } pVelocity = velocity; pGradient = gradient; pTime = usPosition.x; - this._usPoints.push(usPosition); + _this5._usPoints.push(usPosition); }); this._gMax = 4 * Math.pow(this._vMax, 2); @@ -52138,15 +52753,19 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { this._vti = this.getArea(this._usPoints); this._shapeWarn = boundaries.xMax - boundaries.xMin !== totalTime || boundaries.yMin < 0 !== boundaries.yMax < 0; - } + }; + + _class.prototype.updateMesh = function updateMesh() { + var _this6 = this; - updateMesh() { if (this._mesh) { this.remove(this._mesh); } this._geometry = new three.Geometry(); - this._handles.forEach(elem => this._geometry.vertices.push(elem.worldPosition)); + this._handles.forEach(function (elem) { + return _this6._geometry.vertices.push(elem.worldPosition); + }); this._geometry.vertices.push(this._handles[0].worldPosition); this._geometry.verticesNeedUpdate = true; @@ -52155,29 +52774,33 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { this._mesh = new three.Line(this._geometry, this._material); this._mesh.visible = true; this.add(this._mesh); - } + }; - updateMeshColor() { + _class.prototype.updateMeshColor = function updateMeshColor() { if (this._material) { this._material.color.set(this._color); } - } + }; + + _class.prototype.updateDOMColor = function updateDOMColor() { + var _this7 = this; - updateDOMColor() { if (this._handles.length >= 2) { - this._lines.forEach(elem => elem.style.backgroundColor = this._color); + this._lines.forEach(function (elem) { + return elem.style.backgroundColor = _this7._color; + }); } this._label.style.borderColor = this._color; - } + }; - updateDOMContent(clear) { - const vMaxContainer = this._label.querySelector('.vmax'); - const vMeanContainer = this._label.querySelector('.vmean'); - const gMaxContainer = this._label.querySelector('.gmax'); - const gMeanContainer = this._label.querySelector('.gmean'); - const envTiContainer = this._label.querySelector('.envti'); - const vtiContainer = this._label.querySelector('.vti'); - const infoContainer = this._label.querySelector('.info'); + _class.prototype.updateDOMContent = function updateDOMContent(clear) { + var vMaxContainer = this._label.querySelector('.vmax'); + var vMeanContainer = this._label.querySelector('.vmean'); + var gMaxContainer = this._label.querySelector('.gmax'); + var gMeanContainer = this._label.querySelector('.gmean'); + var envTiContainer = this._label.querySelector('.envti'); + var vtiContainer = this._label.querySelector('.vti'); + var infoContainer = this._label.querySelector('.info'); if (clear) { vMaxContainer.innerHTML = ''; @@ -52201,31 +52824,32 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { this._label.style.color = this._colors.text; } - vMaxContainer.innerHTML = `Vmax: ${this._vMax.toFixed(2)} m/s`; - vMeanContainer.innerHTML = `Vmean: ${this._vMean.toFixed(2)} m/s`; - gMaxContainer.innerHTML = `Gmax: ${this._gMax.toFixed(2)} mmhg`; - gMeanContainer.innerHTML = `Gmean: ${this._gMean.toFixed(2)} mmhg`; - envTiContainer.innerHTML = `Env.Ti: ${this._envTi.toFixed(1)} ms`; - vtiContainer.innerHTML = `VTI: ${this._vti.toFixed(2)} cm`; + vMaxContainer.innerHTML = 'Vmax: ' + this._vMax.toFixed(2) + ' m/s'; + vMeanContainer.innerHTML = 'Vmean: ' + this._vMean.toFixed(2) + ' m/s'; + gMaxContainer.innerHTML = 'Gmax: ' + this._gMax.toFixed(2) + ' mmhg'; + gMeanContainer.innerHTML = 'Gmean: ' + this._gMean.toFixed(2) + ' mmhg'; + envTiContainer.innerHTML = 'Env.Ti: ' + this._envTi.toFixed(1) + ' ms'; + vtiContainer.innerHTML = 'VTI: ' + this._vti.toFixed(2) + ' cm'; infoContainer.innerHTML = this._extraInfo; - } + }; + + _class.prototype.updateDOMPosition = function updateDOMPosition() { + var _this8 = this; - updateDOMPosition() { if (this._handles.length < 2) { return; } // update lines and get coordinates of lowest handle - let labelPosition = null; + var labelPosition = null; - this._lines.forEach((elem, ind) => { - const lineData = this.getLineData(this._handles[ind].screenPosition, this._handles[ind + 1 === this._handles.length ? 0 : ind + 1].screenPosition); + this._lines.forEach(function (elem, ind) { + var lineData = _this8.getLineData(_this8._handles[ind].screenPosition, _this8._handles[ind + 1 === _this8._handles.length ? 0 : ind + 1].screenPosition); - elem.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0) - rotate(${lineData.transformAngle}rad)`; + elem.style.transform = 'translate3D(' + lineData.transformX + 'px, ' + lineData.transformY + 'px, 0)\n rotate(' + lineData.transformAngle + 'rad)'; elem.style.width = lineData.length + 'px'; - if (labelPosition === null || labelPosition.y < this._handles[ind].screenPosition.y) { - labelPosition = this._handles[ind].screenPosition.clone(); + if (labelPosition === null || labelPosition.y < _this8._handles[ind].screenPosition.y) { + labelPosition = _this8._handles[ind].screenPosition.clone(); } }); @@ -52237,28 +52861,38 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { labelPosition.y += 15 + this._label.offsetHeight / 2; labelPosition = this.adjustLabelTransform(this._label, labelPosition); - this._label.style.transform = `translate3D(${labelPosition.x}px, ${labelPosition.y}px, 0)`; - } + this._label.style.transform = 'translate3D(' + labelPosition.x + 'px, ' + labelPosition.y + 'px, 0)'; + }; - hideDOM() { - this._handles.forEach(elem => elem.hideDOM()); + _class.prototype.hideDOM = function hideDOM() { + this._handles.forEach(function (elem) { + return elem.hideDOM(); + }); - this._lines.forEach(elem => elem.style.display = 'none'); + this._lines.forEach(function (elem) { + return elem.style.display = 'none'; + }); this._label.style.display = 'none'; - } + }; - showDOM() { - this._handles.forEach(elem => elem.showDOM()); + _class.prototype.showDOM = function showDOM() { + this._handles.forEach(function (elem) { + return elem.showDOM(); + }); - this._lines.forEach(elem => elem.style.display = ''); + this._lines.forEach(function (elem) { + return elem.style.display = ''; + }); this._label.style.display = ''; - } + }; + + _class.prototype.free = function free() { + var _this9 = this; - free() { this.removeEventListeners(); - this._handles.forEach(elem => { - this.remove(elem); + this._handles.forEach(function (elem) { + _this9.remove(elem); elem.free(); }); this._handles = []; @@ -52268,10 +52902,10 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { this._moveHandle.free(); this._moveHandle = null; - this._lines.forEach(elem => { - elem.removeEventListener('mouseenter', this.onHover); - elem.removeEventListener('mouseleave', this.onHover); - this._container.removeChild(elem); + this._lines.forEach(function (elem) { + elem.removeEventListener('mouseenter', _this9.onHover); + elem.removeEventListener('mouseleave', _this9.onHover); + _this9._container.removeChild(elem); }); this._lines = []; this._container.removeChild(this._label); @@ -52295,10 +52929,10 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { this._material.dispose(); this._material = null; - super.free(); - } + _Constructor.prototype.free.call(this); + }; - getMeasurements() { + _class.prototype.getMeasurements = function getMeasurements() { return { vMax: this._vMax, vMean: this._vMean, @@ -52307,38 +52941,46 @@ const widgetsVelocityTimeIntegral = (three = window.THREE) => { envTi: this._envTi, vti: this._vti }; - } - - get targetMesh() { - return this._targetMesh; - } - - set targetMesh(targetMesh) { - this._targetMesh = targetMesh; - this._handles.forEach(elem => elem.targetMesh = targetMesh); - this._moveHandle.targetMesh = targetMesh; - this.update(); - } - - get worldPosition() { - return this._worldPosition; - } - - set worldPosition(worldPosition) { - this._handles.forEach(elem => elem._worldPosition.copy(worldPosition)); - this._worldPosition.copy(worldPosition); - this.update(); - } + }; - get extraInfo() { - return this._extraInfo; - } + _createClass(_class, [{ + key: 'targetMesh', + get: function get() { + return this._targetMesh; + }, + set: function set(targetMesh) { + this._targetMesh = targetMesh; + this._handles.forEach(function (elem) { + return elem.targetMesh = targetMesh; + }); + this._moveHandle.targetMesh = targetMesh; + this.update(); + } + }, { + key: 'worldPosition', + get: function get() { + return this._worldPosition; + }, + set: function set(worldPosition) { + this._handles.forEach(function (elem) { + return elem._worldPosition.copy(worldPosition); + }); + this._worldPosition.copy(worldPosition); + this.update(); + } + }, { + key: 'extraInfo', + get: function get() { + return this._extraInfo; + }, + set: function set(info) { + this._extraInfo = info; + this._label.querySelector('.info').innerHTML = info; + } + }]); - set extraInfo(info) { - this._extraInfo = info; - this._label.querySelector('.info').innerHTML = info; - } - }; + return _class; + }(Constructor); }; @@ -52361,6 +53003,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _widgets_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./widgets.handle */ "./src/widgets/widgets.handle.js"); /* harmony import */ var _models_models_voxel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../models/models.voxel */ "./src/models/models.voxel.js"); /* harmony import */ var _core_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/core.utils */ "./src/core/core.utils.js"); +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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + @@ -52369,269 +53019,276 @@ __webpack_require__.r(__webpack_exports__); /** * @module widgets/voxelProbe */ -const widgetsVoxelprobe = (three = window.THREE) => { - if (three === undefined || three.Object3D === undefined) { - return null; - } +var widgetsVoxelprobe = function widgetsVoxelprobe() { + var three = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.THREE; - const Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); - return class extends Constructor { - constructor(targetMesh, controls, params = {}) { - super(targetMesh, controls, params); + if (three === undefined || three.Object3D === undefined) { + return null; + } - this._widgetType = 'VoxelProbe'; + var Constructor = Object(_widgets_base__WEBPACK_IMPORTED_MODULE_0__["widgetsBase"])(three); + return function (_Constructor) { + _inherits(_class, _Constructor); - // incoming parameters (optional: worldPosition) - this._stack = params.stack; // required + function _class(targetMesh, controls) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - this._container.style.cursor = 'pointer'; - this._controls.enabled = false; // controls should be disabled for widgets with a single handle - this._initialized = false; // set to true onEnd - this._active = true; - this._moving = true; - this._domHovered = false; + _classCallCheck(this, _class); - // dom stuff - this._label = null; + var _this = _possibleConstructorReturn(this, _Constructor.call(this, targetMesh, controls, params)); - // handle (represent voxel) - const WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); - this._handle = new WidgetsHandle(targetMesh, controls, params); - this.add(this._handle); + _this._widgetType = 'VoxelProbe'; - this._moveHandle = new WidgetsHandle(targetMesh, controls, params); - this.add(this._moveHandle); - this._moveHandle.hide(); + // incoming parameters (optional: worldPosition) + _this._stack = params.stack; // required - this.create(); + _this._container.style.cursor = 'pointer'; + _this._controls.enabled = false; // controls should be disabled for widgets with a single handle + _this._initialized = false; // set to true onEnd + _this._active = true; + _this._moving = true; + _this._domHovered = false; - // event listeners - this.onMove = this.onMove.bind(this); - this.onHover = this.onHover.bind(this); - this.addEventListeners(); - } + // dom stuff + _this._label = null; - addEventListeners() { - this._label.addEventListener('mouseenter', this.onHover); - this._label.addEventListener('mouseleave', this.onHover); + // handle (represent voxel) + var WidgetsHandle = Object(_widgets_handle__WEBPACK_IMPORTED_MODULE_1__["widgetsHandle"])(three); + _this._handle = new WidgetsHandle(targetMesh, controls, params); + _this.add(_this._handle); - this._container.addEventListener('wheel', this.onMove); - } + _this._moveHandle = new WidgetsHandle(targetMesh, controls, params); + _this.add(_this._moveHandle); + _this._moveHandle.hide(); - removeEventListeners() { - this._label.removeEventListener('mouseenter', this.onHover); - this._label.removeEventListener('mouseleave', this.onHover); + _this.create(); - this._container.removeEventListener('wheel', this.onMove); - } + // event listeners + _this.onMove = _this.onMove.bind(_this); + _this.onHover = _this.onHover.bind(_this); + _this.addEventListeners(); + return _this; + } - onStart(evt) { - this._moveHandle.onMove(evt, true); - this._handle.onStart(evt); + _class.prototype.addEventListeners = function addEventListeners() { + this._label.addEventListener('mouseenter', this.onHover); + this._label.addEventListener('mouseleave', this.onHover); - this._active = this._handle.active || this._domHovered; + this._container.addEventListener('wheel', this.onMove); + }; - if (this._domHovered) { - this._moving = true; - this._controls.enabled = false; - } + _class.prototype.removeEventListeners = function removeEventListeners() { + this._label.removeEventListener('mouseenter', this.onHover); + this._label.removeEventListener('mouseleave', this.onHover); - this.update(); - } + this._container.removeEventListener('wheel', this.onMove); + }; - onMove(evt) { - if (this._active) { - const prevPosition = this._moveHandle.worldPosition.clone(); + _class.prototype.onStart = function onStart(evt) { + this._moveHandle.onMove(evt, true); + this._handle.onStart(evt); - this._dragged = true; - this._moveHandle.onMove(evt, true); + this._active = this._handle.active || this._domHovered; - if (this._moving) { - this._handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition)); - } - } else { - this.onHover(null); - } + if (this._domHovered) { + this._moving = true; + this._controls.enabled = false; + } - this._handle.onMove(evt); + this.update(); + }; - this.update(); - } + _class.prototype.onMove = function onMove(evt) { + if (this._active) { + var prevPosition = this._moveHandle.worldPosition.clone(); - onEnd() { - this._handle.onEnd(); + this._dragged = true; + this._moveHandle.onMove(evt, true); - if (!this._dragged && this._active && this._initialized) { - this._selected = !this._selected; // change state if there was no dragging - this._handle.selected = this._selected; - } + if (this._moving) { + this._handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition)); + } + } else { + this.onHover(null); + } - this._initialized = true; - this._active = this._handle.active; - this._dragged = false; - this._moving = false; + this._handle.onMove(evt); - this.update(); - } + this.update(); + }; - onHover(evt) { - if (evt) { - this.hoverDom(evt); - } + _class.prototype.onEnd = function onEnd() { + this._handle.onEnd(); - this._hovered = this._handle.hovered || this._domHovered; - this._container.style.cursor = this._hovered ? 'pointer' : 'default'; - } + if (!this._dragged && this._active && this._initialized) { + this._selected = !this._selected; // change state if there was no dragging + this._handle.selected = this._selected; + } - hoverDom(evt) { - this._domHovered = evt.type === 'mouseenter'; - } + this._initialized = true; + this._active = this._handle.active; + this._dragged = false; + this._moving = false; - create() { - this.createVoxel(); - this.createDOM(); - } + this.update(); + }; - createVoxel() { - this._voxel = new _models_models_voxel__WEBPACK_IMPORTED_MODULE_2__["default"](); - this._voxel.id = this.id; - } + _class.prototype.onHover = function onHover(evt) { + if (evt) { + this.hoverDom(evt); + } - createDOM() { - this._label = document.createElement('div'); - this._label.className = 'widgets-label'; - - // measurements - let measurementsContainer = document.createElement('div'); - // LPS - let lpsContainer = document.createElement('div'); - lpsContainer.className = 'lpsPosition'; - measurementsContainer.appendChild(lpsContainer); - // IJK - let ijkContainer = document.createElement('div'); - ijkContainer.className = 'ijkPosition'; - measurementsContainer.appendChild(ijkContainer); - // Value - let valueContainer = document.createElement('div'); - valueContainer.className = 'value'; - measurementsContainer.appendChild(valueContainer); - - this._label.appendChild(measurementsContainer); - - this._container.appendChild(this._label); - - this.updateDOMColor(); - } + this._hovered = this._handle.hovered || this._domHovered; + this._container.style.cursor = this._hovered ? 'pointer' : 'default'; + }; - update() { - this.updateColor(); + _class.prototype.hoverDom = function hoverDom(evt) { + this._domHovered = evt.type === 'mouseenter'; + }; - this._handle.update(); - this._worldPosition.copy(this._handle.worldPosition); + _class.prototype.create = function create() { + this.createVoxel(); + this.createDOM(); + }; - this.updateVoxel(); // set data coordinates && value + _class.prototype.createVoxel = function createVoxel() { + this._voxel = new _models_models_voxel__WEBPACK_IMPORTED_MODULE_2__["default"](); + this._voxel.id = this.id; + }; - this.updateDOM(); - } + _class.prototype.createDOM = function createDOM() { + this._label = document.createElement('div'); + this._label.className = 'widgets-label'; - updateVoxel() { - this._voxel.worldCoordinates = this._worldPosition; - this._voxel.dataCoordinates = _core_core_utils__WEBPACK_IMPORTED_MODULE_3__["default"].worldToData(this._stack.lps2IJK, this._worldPosition); + // measurements + var measurementsContainer = document.createElement('div'); + // LPS + var lpsContainer = document.createElement('div'); + lpsContainer.className = 'lpsPosition'; + measurementsContainer.appendChild(lpsContainer); + // IJK + var ijkContainer = document.createElement('div'); + ijkContainer.className = 'ijkPosition'; + measurementsContainer.appendChild(ijkContainer); + // Value + var valueContainer = document.createElement('div'); + valueContainer.className = 'value'; + measurementsContainer.appendChild(valueContainer); - // update value - let value = _core_core_utils__WEBPACK_IMPORTED_MODULE_3__["default"].getPixelData(this._stack, this._voxel.dataCoordinates); + this._label.appendChild(measurementsContainer); - this._voxel.value = value === null || this._stack.numberOfChannels > 1 ? 'NA' // coordinates outside the image or RGB - : _core_core_utils__WEBPACK_IMPORTED_MODULE_3__["default"].rescaleSlopeIntercept(value, this._stack.rescaleSlope, this._stack.rescaleIntercept).toFixed(); - } + this._container.appendChild(this._label); - updateDOM() { - const rasContainer = this._label.querySelector('.lpsPosition'); - const ijkContainer = this._label.querySelector('.ijkPosition'); - const valueContainer = this._label.querySelector('.value'); + this.updateDOMColor(); + }; - rasContainer.innerHTML = `LPS: - ${this._voxel.worldCoordinates.x.toFixed(2)} : - ${this._voxel.worldCoordinates.y.toFixed(2)} : - ${this._voxel.worldCoordinates.z.toFixed(2)}`; - ijkContainer.innerHTML = `IJK: - ${this._voxel.dataCoordinates.x} : - ${this._voxel.dataCoordinates.y} : - ${this._voxel.dataCoordinates.z}`; - valueContainer.innerHTML = `Value: ${this._voxel.value}`; + _class.prototype.update = function update() { + this.updateColor(); - this.updateDOMColor(); + this._handle.update(); + this._worldPosition.copy(this._handle.worldPosition); - const transform = this.adjustLabelTransform(this._label, this._handle.screenPosition, true); + this.updateVoxel(); // set data coordinates && value - this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`; - } + this.updateDOM(); + }; - updateDOMColor() { - this._label.style.borderColor = this._color; - } + _class.prototype.updateVoxel = function updateVoxel() { + this._voxel.worldCoordinates = this._worldPosition; + this._voxel.dataCoordinates = _core_core_utils__WEBPACK_IMPORTED_MODULE_3__["default"].worldToData(this._stack.lps2IJK, this._worldPosition); - free() { - this.removeEventListeners(); + // update value + var value = _core_core_utils__WEBPACK_IMPORTED_MODULE_3__["default"].getPixelData(this._stack, this._voxel.dataCoordinates); - this.remove(this._handle); - this._handle.free(); - this._handle = null; - this.remove(this._moveHandle); - this._moveHandle.free(); - this._moveHandle = null; + this._voxel.value = value === null || this._stack.numberOfChannels > 1 ? 'NA' // coordinates outside the image or RGB + : _core_core_utils__WEBPACK_IMPORTED_MODULE_3__["default"].rescaleSlopeIntercept(value, this._stack.rescaleSlope, this._stack.rescaleIntercept).toFixed(); + }; - this._container.removeChild(this._label); + _class.prototype.updateDOM = function updateDOM() { + var rasContainer = this._label.querySelector('.lpsPosition'); + var ijkContainer = this._label.querySelector('.ijkPosition'); + var valueContainer = this._label.querySelector('.value'); - this._stack = null; - this._voxel = null; + rasContainer.innerHTML = 'LPS: \n ' + this._voxel.worldCoordinates.x.toFixed(2) + ' :\n ' + this._voxel.worldCoordinates.y.toFixed(2) + ' :\n ' + this._voxel.worldCoordinates.z.toFixed(2); + ijkContainer.innerHTML = 'IJK: \n ' + this._voxel.dataCoordinates.x + ' :\n ' + this._voxel.dataCoordinates.y + ' :\n ' + this._voxel.dataCoordinates.z; + valueContainer.innerHTML = 'Value: ' + this._voxel.value; - super.free(); - } + this.updateDOMColor(); - hideDOM() { - this._label.style.display = 'none'; - this._handle.hideDOM(); - } + var transform = this.adjustLabelTransform(this._label, this._handle.screenPosition, true); - showDOM() { - this._label.style.display = ''; - this._handle.showDOM(); - } + this._label.style.transform = 'translate3D(' + transform.x + 'px, ' + transform.y + 'px, 0)'; + }; - get targetMesh() { - return this._targetMesh; - } + _class.prototype.updateDOMColor = function updateDOMColor() { + this._label.style.borderColor = this._color; + }; - set targetMesh(targetMesh) { - this._targetMesh = targetMesh; - this._handle.targetMesh = targetMesh; - this._moveHandle.targetMesh = targetMesh; - this.update(); - } + _class.prototype.free = function free() { + this.removeEventListeners(); - get worldPosition() { - return this._worldPosition; - } + this.remove(this._handle); + this._handle.free(); + this._handle = null; + this.remove(this._moveHandle); + this._moveHandle.free(); + this._moveHandle = null; - set worldPosition(worldPosition) { - this._handle.worldPosition.copy(worldPosition); - this._moveHandle.worldPosition.copy(worldPosition); - this._worldPosition.copy(worldPosition); - this.update(); - } + this._container.removeChild(this._label); - get active() { - return this._active; - } + this._stack = null; + this._voxel = null; - set active(active) { - this._active = active; - this._controls.enabled = !this._active; + _Constructor.prototype.free.call(this); + }; - this.update(); - } - }; + _class.prototype.hideDOM = function hideDOM() { + this._label.style.display = 'none'; + this._handle.hideDOM(); + }; + + _class.prototype.showDOM = function showDOM() { + this._label.style.display = ''; + this._handle.showDOM(); + }; + + _createClass(_class, [{ + key: 'targetMesh', + get: function get() { + return this._targetMesh; + }, + set: function set(targetMesh) { + this._targetMesh = targetMesh; + this._handle.targetMesh = targetMesh; + this._moveHandle.targetMesh = targetMesh; + this.update(); + } + }, { + key: 'worldPosition', + get: function get() { + return this._worldPosition; + }, + set: function set(worldPosition) { + this._handle.worldPosition.copy(worldPosition); + this._moveHandle.worldPosition.copy(worldPosition); + this._worldPosition.copy(worldPosition); + this.update(); + } + }, { + key: 'active', + get: function get() { + return this._active; + }, + set: function set(active) { + this._active = active; + this._controls.enabled = !this._active; + + this.update(); + } + }]); + + return _class; + }(Constructor); }; diff --git a/build/ami.js.map b/build/ami.js.map index a934341..6feb624 100644 --- a/build/ami.js.map +++ b/build/ami.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://AMI/webpack/universalModuleDefinition","webpack://AMI/webpack/bootstrap","webpack://AMI/./external/scripts/jpeg.js","webpack://AMI/./external/scripts/jpx.js","webpack://AMI/./node_modules/OpenJPEG.js/dist/openJPEG-DynamicMemory-browser.js","webpack://AMI/./node_modules/assert/assert.js","webpack://AMI/./node_modules/base64-js/index.js","webpack://AMI/./node_modules/const-ninf-float32/lib/index.js","webpack://AMI/./node_modules/const-pinf-float32/lib/index.js","webpack://AMI/./node_modules/dicom-parser/dist/dicomParser.min.js","webpack://AMI/./node_modules/ieee754/index.js","webpack://AMI/./node_modules/isarray/index.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/component-spec.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/data-stream.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/decoder.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/frame-header.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/huffman-table.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/main.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/quantization-table.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/scan-component.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/scan-header.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/utils.js","webpack://AMI/./node_modules/math-abs/lib/index.js","webpack://AMI/./node_modules/math-ceil/lib/index.js","webpack://AMI/./node_modules/math-float32-to-binary-string/lib/div2.js","webpack://AMI/./node_modules/math-float32-to-binary-string/lib/index.js","webpack://AMI/./node_modules/math-float32-to-binary-string/lib/mult2.js","webpack://AMI/./node_modules/math-floor/lib/index.js","webpack://AMI/./node_modules/nifti-reader-js/src/nifti.js","webpack://AMI/./node_modules/nifti-reader-js/src/nifti1.js","webpack://AMI/./node_modules/nifti-reader-js/src/nifti2.js","webpack://AMI/./node_modules/nifti-reader-js/src/utilities.js","webpack://AMI/./node_modules/node-libs-browser/node_modules/buffer/index.js","webpack://AMI/./node_modules/node-libs-browser/node_modules/events/events.js","webpack://AMI/./node_modules/node-libs-browser/node_modules/inherits/inherits_browser.js","webpack://AMI/./node_modules/node-libs-browser/node_modules/util/support/isBufferBrowser.js","webpack://AMI/./node_modules/node-libs-browser/node_modules/util/util.js","webpack://AMI/./node_modules/nrrd-js/nrrd.js","webpack://AMI/./node_modules/object-assign/index.js","webpack://AMI/./node_modules/pako/index.js","webpack://AMI/./node_modules/pako/lib/deflate.js","webpack://AMI/./node_modules/pako/lib/inflate.js","webpack://AMI/./node_modules/pako/lib/utils/common.js","webpack://AMI/./node_modules/pako/lib/utils/strings.js","webpack://AMI/./node_modules/pako/lib/zlib/adler32.js","webpack://AMI/./node_modules/pako/lib/zlib/constants.js","webpack://AMI/./node_modules/pako/lib/zlib/crc32.js","webpack://AMI/./node_modules/pako/lib/zlib/deflate.js","webpack://AMI/./node_modules/pako/lib/zlib/gzheader.js","webpack://AMI/./node_modules/pako/lib/zlib/inffast.js","webpack://AMI/./node_modules/pako/lib/zlib/inflate.js","webpack://AMI/./node_modules/pako/lib/zlib/inftrees.js","webpack://AMI/./node_modules/pako/lib/zlib/messages.js","webpack://AMI/./node_modules/pako/lib/zlib/trees.js","webpack://AMI/./node_modules/pako/lib/zlib/zstream.js","webpack://AMI/./node_modules/path-browserify/index.js","webpack://AMI/./node_modules/process/browser.js","webpack://AMI/./node_modules/three/src/constants.js","webpack://AMI/./node_modules/three/src/core/Raycaster.js","webpack://AMI/./node_modules/three/src/math/Box3.js","webpack://AMI/./node_modules/three/src/math/Math.js","webpack://AMI/./node_modules/three/src/math/Matrix4.js","webpack://AMI/./node_modules/three/src/math/Quaternion.js","webpack://AMI/./node_modules/three/src/math/Ray.js","webpack://AMI/./node_modules/three/src/math/Triangle.js","webpack://AMI/./node_modules/three/src/math/Vector2.js","webpack://AMI/./node_modules/three/src/math/Vector3.js","webpack://AMI/./node_modules/utils-left-pad-string/lib/index.js","webpack://AMI/./node_modules/utils-repeat-string/lib/index.js","webpack://AMI/./node_modules/utils-right-pad-string/lib/index.js","webpack://AMI/./node_modules/validate.io-integer/lib/index.js","webpack://AMI/./node_modules/validate.io-nonnegative-integer/lib/index.js","webpack://AMI/./node_modules/validate.io-number/lib/index.js","webpack://AMI/./node_modules/validate.io-string-primitive/lib/index.js","webpack://AMI/(webpack)/buildin/global.js","webpack://AMI/./src/ami.ts","webpack://AMI/./src/cameras/cameras.js","webpack://AMI/./src/cameras/cameras.orthographic.js","webpack://AMI/./src/controls/controls.js","webpack://AMI/./src/controls/controls.orbit.js","webpack://AMI/./src/controls/controls.trackball.js","webpack://AMI/./src/controls/controls.trackballortho.js","webpack://AMI/./src/core/core.colors.ts","webpack://AMI/./src/core/core.intersections.js","webpack://AMI/./src/core/core.js","webpack://AMI/./src/core/core.utils.js","webpack://AMI/./src/core/core.validators.js","webpack://AMI/./src/decoders/decoders.rle.js","webpack://AMI/./src/geometries/geometries.js","webpack://AMI/./src/geometries/geometries.slice.js","webpack://AMI/./src/geometries/geometries.voxel.js","webpack://AMI/./src/helpers/helpers.border.js","webpack://AMI/./src/helpers/helpers.boundingbox.js","webpack://AMI/./src/helpers/helpers.contour.js","webpack://AMI/./src/helpers/helpers.js","webpack://AMI/./src/helpers/helpers.localizer.js","webpack://AMI/./src/helpers/helpers.lut.js","webpack://AMI/./src/helpers/helpers.material.mixin.js","webpack://AMI/./src/helpers/helpers.progressbar.eventbased.js","webpack://AMI/./src/helpers/helpers.progressbar.js","webpack://AMI/./src/helpers/helpers.segmentationlut.js","webpack://AMI/./src/helpers/helpers.slice.js","webpack://AMI/./src/helpers/helpers.stack.js","webpack://AMI/./src/helpers/helpers.volumerendering.js","webpack://AMI/./src/loaders/loaders.base.js","webpack://AMI/./src/loaders/loaders.cornerstone.js","webpack://AMI/./src/loaders/loaders.js","webpack://AMI/./src/loaders/loaders.volume.js","webpack://AMI/./src/models/models.base.js","webpack://AMI/./src/models/models.frame.js","webpack://AMI/./src/models/models.js","webpack://AMI/./src/models/models.series.js","webpack://AMI/./src/models/models.stack.js","webpack://AMI/./src/models/models.voxel.js","webpack://AMI/./src/parsers/parsers.dicom.js","webpack://AMI/./src/parsers/parsers.js","webpack://AMI/./src/parsers/parsers.mgh.js","webpack://AMI/./src/parsers/parsers.mhd.js","webpack://AMI/./src/parsers/parsers.nifti.js","webpack://AMI/./src/parsers/parsers.nrrd.js","webpack://AMI/./src/parsers/parsers.volume.js","webpack://AMI/./src/presets/presets.js","webpack://AMI/./src/presets/presets.segmentation.freesurfer.js","webpack://AMI/./src/presets/presets.segmentation.js","webpack://AMI/./src/shaders/helpers/shaders.helpers.intersectBox.js","webpack://AMI/./src/shaders/helpers/shaders.helpers.texture3d.js","webpack://AMI/./src/shaders/helpers/shaders.helpers.unpack.js","webpack://AMI/./src/shaders/interpolation/shaders.interpolation.identity.js","webpack://AMI/./src/shaders/interpolation/shaders.interpolation.js","webpack://AMI/./src/shaders/interpolation/shaders.interpolation.trilinear.js","webpack://AMI/./src/shaders/shaders.base.js","webpack://AMI/./src/shaders/shaders.contour.fragment.js","webpack://AMI/./src/shaders/shaders.contour.uniform.js","webpack://AMI/./src/shaders/shaders.contour.vertex.js","webpack://AMI/./src/shaders/shaders.data.fragment.js","webpack://AMI/./src/shaders/shaders.data.uniform.js","webpack://AMI/./src/shaders/shaders.data.vertex.js","webpack://AMI/./src/shaders/shaders.js","webpack://AMI/./src/shaders/shaders.layer.fragment.js","webpack://AMI/./src/shaders/shaders.layer.uniform.js","webpack://AMI/./src/shaders/shaders.layer.vertex.js","webpack://AMI/./src/shaders/shaders.localizer.fragment.js","webpack://AMI/./src/shaders/shaders.localizer.uniform.js","webpack://AMI/./src/shaders/shaders.localizer.vertex.js","webpack://AMI/./src/shaders/shaders.vr.fragment.js","webpack://AMI/./src/shaders/shaders.vr.uniform.js","webpack://AMI/./src/shaders/shaders.vr.vertex.js","webpack://AMI/./src/utils/cornerstoneDataParser.js","webpack://AMI/./src/utils/getNumberString.js","webpack://AMI/./src/utils/getNumberValue.js","webpack://AMI/./src/utils/getNumberValues.js","webpack://AMI/./src/utils/getValue.js","webpack://AMI/./src/utils/index.js","webpack://AMI/./src/widgets/widgets.angle.js","webpack://AMI/./src/widgets/widgets.annotation.js","webpack://AMI/./src/widgets/widgets.base.ts","webpack://AMI/./src/widgets/widgets.biruler.js","webpack://AMI/./src/widgets/widgets.crossRuler.js","webpack://AMI/./src/widgets/widgets.css.js","webpack://AMI/./src/widgets/widgets.ellipse.js","webpack://AMI/./src/widgets/widgets.freehand.js","webpack://AMI/./src/widgets/widgets.handle.js","webpack://AMI/./src/widgets/widgets.js","webpack://AMI/./src/widgets/widgets.peakVelocity.js","webpack://AMI/./src/widgets/widgets.polygon.js","webpack://AMI/./src/widgets/widgets.pressureHalfTime.js","webpack://AMI/./src/widgets/widgets.rectangle.js","webpack://AMI/./src/widgets/widgets.ruler.js","webpack://AMI/./src/widgets/widgets.velocityTimeIntegral.js","webpack://AMI/./src/widgets/widgets.voxelProbe.js"],"names":["camerasOrthographic","three","window","THREE","undefined","OrthographicCamera","Constructor","constructor","left","right","top","bottom","near","far","_front","_back","_directions","Vector3","_directionsLabel","_orientation","_convention","_stackOrientation","_right","_up","_direction","_controls","_box","_canvas","width","height","_fromFront","_angle","init","xCosine","yCosine","zCosine","controls","box","canvas","console","warn","Validators","vector3","log","_adjustTopDirection","crossVectors","ray","position","center","direction","intersections","_orderIntersections","Intersections","rayBox","up","set","x","y","z","_updateCanvas","_updatePositionAndTarget","_updateMatrices","_updateDirections","update","_getMaxIndex","leftIndex","leftDirection","posteriorIndex","posteriorDirection","superiorIndex","superiorDirection","negate","_findMaxIndex","invertRows","multiplyScalar","invertColumns","oppositePosition","_oppositePosition","clone","rotate","angle","rotationToApply","rotation","Matrix4","makeRotationAxis","Math","PI","applyMatrix4","fitBox","factor","zoom","_computeZoom","min","horizontalDirection","verticalDirection","vMaxIndex","getComponent","vector","maxValue","abs","index","directions","target","maxIndices","_getMaxIndices","i","length","indices","push","ordered","dot","camFactor","handleResize","sub","add","dimension","distanceTo","lookAt","updateProjectionMatrix","updateMatrixWorld","_updateLabels","_vector2Label","scaledDirection","divideScalar","delta","label","pLocal","pWorld","matrixWorld","normalize","convention","orientation","directionsLabel","stackOrientation","maxIndex","orbit","EventDispatcher","OrbitControls","object","domElement","document","enabled","preventDefault","minDistance","maxDistance","Infinity","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","panSpeed","screenSpacePanning","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","keys","LEFT","UP","RIGHT","BOTTOM","mouseButtons","MOUSE","MIDDLE","target0","position0","zoom0","getPolarAngle","spherical","phi","getAzimuthalAngle","theta","saveState","scope","copy","reset","dispatchEvent","changeEvent","state","STATE","NONE","offset","quat","Quaternion","setFromUnitVectors","quatInverse","inverse","lastPosition","lastQuaternion","applyQuaternion","setFromVector3","rotateLeft","getAutoRotationAngle","sphericalDelta","max","makeSafe","radius","scale","panOffset","setFromSpherical","zoomChanged","distanceToSquared","EPS","quaternion","dispose","removeEventListener","onContextMenu","onMouseDown","onMouseWheel","onTouchStart","onTouchEnd","onTouchMove","onMouseMove","onMouseUp","onKeyDown","type","startEvent","endEvent","ROTATE","DOLLY","PAN","TOUCH_ROTATE","TOUCH_DOLLY_PAN","Spherical","rotateStart","Vector2","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","pow","rotateUp","panLeft","v","distance","objectMatrix","setFromMatrixColumn","panUp","pan","deltaX","deltaY","element","body","isPerspectiveCamera","targetDistance","tan","fov","clientHeight","matrix","isOrthographicCamera","clientWidth","dollyIn","dollyScale","dollyOut","handleMouseDownRotate","event","clientX","clientY","handleMouseDownDolly","handleMouseDownPan","handleMouseMoveRotate","subVectors","handleMouseMoveDolly","handleMouseMovePan","handleMouseUp","handleMouseWheel","handleKeyDown","keyCode","handleTouchStartRotate","touches","pageX","pageY","handleTouchStartDollyPan","dx","dy","sqrt","handleTouchMoveRotate","handleTouchMoveDollyPan","handleTouchEnd","button","ctrlKey","metaKey","shiftKey","addEventListener","stopPropagation","prototype","Object","create","defineProperties","get","noZoom","value","noRotate","noPan","noKeys","staticMoving","dynamicDampingFactor","trackball","_this","ZOOM","TOUCH_ZOOM","TOUCH_PAN","CUSTOM","screen","noCustom","forceState","_state","_prevState","_eye","_movePrev","_moveCurr","_lastAxis","_lastAngle","_zoomStart","_zoomEnd","_touchZoomDistanceStart","_touchZoomDistanceEnd","_panStart","_panEnd","_customStart","_customEnd","up0","innerWidth","innerHeight","getBoundingClientRect","d","ownerDocument","documentElement","pageXOffset","clientLeft","pageYOffset","clientTop","handleEvent","getMouseOnScreen","getMouseOnCircle","rotateCamera","axis","eyeDirection","objectUpDirection","objectSidewaysDirection","moveDirection","setLength","setFromAxisAngle","zoomCamera","panCamera","mouseChange","objectUp","lengthSq","cross","checkDistances","addVectors","custom","setState","targetState","customStart","customEnd","keydown","keyup","mousedown","mousemove","mouseup","mousewheel","deltaMode","touchstart","touchmove","touchend","contextmenu","trackballOrtho","SCROLL","TOUCH_ZOOM_PAN","_changed","left0","right0","top0","bottom0","scale_x","scale_y","aabbPlane","aabb","plane","validateAabb","validatePlane","fromAABB","getInverse","toAABB","t1","t0","planeAABB","posdir","bbox","CoreUtils","halfDimensions","rayPlaneInBBox","ray2","ray3","ray4","ray5","map","rayPlane","t","intersection","inBBox","find","findIntersection","myintersection","found","array","point","epsilon","matrix4","minMax","data","numPixels","spv","isElement","obj","HTMLElement","e","nodeType","style","isString","str","String","parseUrl","url","parsedUrl","URL","filename","searchParams","extension","pathname","query","search","split","pop","splittedName","skipExt","isNaN","indexOf","includes","ijk2LPS","xCos","yCos","zCos","spacing","origin","registrationMatrix","premultiply","aabb2LPS","worldToData","lps2IJK","worldCoordinates","dataCoordinate","addScalar","floor","stack","coordinate","getPixelData","_frame","setPixelData","rescaleSlopeIntercept","slope","intercept","centerOfMass","points","orderIntersections","reference","referenceDirection","base","orderedpoints","j","xy","atan2","sort","a","b","noDups","getRoI","mesh","camera","geometry","computeBoundingBox","Box3","setFromObject","project","offsetWidth","offsetHeight","rayCaster","Raycaster","values","round","intersect","setFromCamera","intersectObject","numberOfChannels","rescaleSlope","rescaleIntercept","avg","reduce","sum","val","prev","mean","sd","getGeometryArea","faces","area","vertices","forEach","elem","Triangle","c","getArea","stringToNumber","numberAsString","number","Number","dots","match","commas","replaceBy","stringWithoutComma","replace","error","objectToTest","hasOwnProperty","elements","identity","determinant","decodeRLE","imageFrame","pixelData","bitsAllocated","planarConfiguration","decode8Planar","decode8","decode16","Error","frameData","frameSize","rows","columns","outFrame","ArrayBuffer","samplesPerPixel","header","DataView","buffer","byteOffset","Int8Array","out","outIndex","numSegments","getInt32","s","inIndex","endOfSegment","n","Uint8Array","highByte","pixelRepresentation","Uint16Array","Int16Array","RLEDecoder","geometriesSlice","ShapeBufferGeometry","coreIntersections","err","coreUtils","shape","Shape","moveTo","positions","Float32Array","toArray","lineTo","addAttribute","Float32BufferAttribute","geometriesVoxel","BoxGeometry","dataPosition","_location","applyMatrix","makeTranslation","verticesNeedUpdate","resetVertices","location","helpersBorder","Object3D","helpersSlice","_helpersSlice","_visible","_color","_material","_geometry","_mesh","_create","_update","visible","color","LineBasicMaterial","linewidth","BufferGeometry","nbOfVertices","attributes","Line","aabbSpace","remove","material","helpersBoundingBox","_stack","_meshStack","dimensions","dimensionsIJK","halfDimensionsIJK","MeshBasicMaterial","wireframe","Mesh","BoxHelper","helpersContour","texture","_textureToFilter","_contourWidth","_contourOpacity","_canvasWidth","_canvasHeight","_shadersFragment","ShadersFragment","_shadersVertex","ShadersVertex","_uniforms","ShadersUniform","uniforms","_prepareMaterial","_ijk2LPS","uWidth","uOpacity","uCanvasWidth","uCanvasHeight","fs","vs","ShaderMaterial","side","DoubleSide","vertexShader","compute","fragmentShader","transparent","textureToFilter","uTextureFilled","needsUpdate","contourOpacity","contourWidth","canvasWidth","canvasHeight","helpersLocalizer","referencePlane","_referencePlane","_plane1","_color1","_plane2","_color2","_plane3","_color3","uSlice","uPlane1","uPlaneColor1","uPlane2","uPlaneColor2","uPlane3","uPlaneColor3","plane1","color1","plane2","color2","plane3","color3","helpersLut","domTarget","lut","lutO","opacity","discrete","_dom","getElementById","_discrete","_lut","_luts","_opacity","_lutO","_lutsO","initCanvas","paintCanvas","_canvasContainer","initCanvasContainer","_canvasBg","createCanvas","appendChild","dom","canvasContainer","border","createElement","ctx","getContext","clearRect","globalCompositeOperation","createLinearGradient","addColorStop","fillStyle","fillRect","lineWidth","currentPos","nextPos","previousPos","from","to","beginPath","strokeStyle","stroke","closePath","Texture","mapping","UVMapping","wrapS","wrapT","ClampToEdgeWrapping","magFilter","minFilter","NearestFilter","premultiplyAlpha","targetLUT","luts","newLuts","targetLUTO","lutsO","newLutsO","lutsAvailable","available","presetLuts","default","spectrum","hot_and_cold","gold","red","green","blue","walking_dead","random","muscle_bone","presetLutsO","linear","lowpass","bandpass","highpass","flat","linear_full","helpersMaterialMixin","_createMaterial","extraOptions","globalOptions","options","assign","_updateMaterial","_prepareTexture","_textures","m","_rawData","tex","DataTexture","rawData","textureSize","textureType","UnsignedByteType","flipY","HelpersProgressBarEventBased","emitter","_isFunction","emit","_emitter","initContainerDom","initEventListenner","loaded","totalFile","fn","toString","call","self","on","totalFiles","files","_domTotalFile","innerHTML","fetchLi","fileTag","file","append","className","id","marginBottom","fetchprogress","_domProcessList","fileFetchDom","total","liParent","result","parseprogress","fileParseDom","parsed","_domCurrentFile","_domCurrentProgress","containerDom","wrap","HelpersProgressBar","container","_container","_modes","load","name","parse","requestAnimationFrameID","_mode","_value","_total","_totalFiles","free","progressContainers","getElementsByClassName","parentNode","removeChild","cancelAnimationFrame","progressContainer","_domContainer","mode","bar","_domBar","updateUI","requestAnimationFrame","progress","progressBar","borderColor","classList","backgroundColor","zIndex","defaultSegmentation","HelpersSegmentationLut","segmentation","_segmentation","xCoord","yCoord","_invert","invert","_lutTexture","_intensityAuto","_interpolation","_index","_windowWidth","_windowCenter","_rescaleSlope","_rescaleIntercept","_spacing","_thickness","_thicknessMethod","_lowerThreshold","_upperThreshold","_borderColor","_planePosition","_planeDirection","_aaBBspace","_init","uSpacing","thickness","uThickness","thicknessMethod","uThicknessMethod","windowWidth","updateIntensitySettingsUniforms","windowCenter","upperThreshold","lowerThreshold","lutTexture","intensityAuto","updateIntensitySettings","interpolation","planePosition","planeDirection","_halfDimensions","_center","uBorderColor","Color","_prepared","_packed","_toAABB","aaBBox","AABBox","centerAABBox","lps2AABB","prepared","packed","SliceGeometryContructor","uTextureSize","uDataDimensions","uWorldToData","uNumberOfChannels","uPixelType","pixelType","uBitsAllocated","uPackedPerPixel","packedPerPixel","uTextureContainer","textureUnits","updateIntensitySetting","_minMax","uRescaleSlopeIntercept","uWindowCenterWidth","uLowerUpperThreshold","uInvert","uInterpolation","uLut","uTextureLUT","setting","frame","cartesianEquation","Vector4","dataToWorld","p1","p2","p3","v1","v2","normal","helpersStack","_bBox","_slice","_border","_dummy","_autoWindowLevel","_outOfBounds","_orientationMaxIndex","_orientationSpacing","slice","_prepareSlicePosition","_isIndexOutOfBounds","_computeOrientationMaxIndex","_computeOrientationSpacing","_prepareDirection","outOfBounds","orientationMaxIndex","orientationSpacing","_prepareStack","_prepareBBox","_prepareSlice","_prepareBorder","prepare","pack","HelpersBoundingBoxConstructor","HelpersBorderContructor","_prepareSliceIndex","SliceHelperConstructor","rPosition","helpersVolumeRendering","_algorithm","_alphaCorrection","_shading","_shininess","_steps","_offset","_prepareGeometry","uWorldBBox","worldBoundingBox","uAlphaCorrection","uShading","uShininess","uSteps","uAlgorithm","BackSide","worldBBox","centerLPS","worldCenter","steps","alphaCorrection","shading","shininess","algorithm","LoadersBase","EventEmitter","ProgressBar","_loaded","_totalLoaded","_parsed","_totalParsed","_data","_progressBar","fetch","requests","Promise","resolve","reject","request","XMLHttpRequest","open","crossOrigin","responseType","onloadstart","time","Date","onload","status","response","totalLoaded","statusText","onerror","onabort","ontimeout","onprogress","onloadend","Map","send","loadSequenceGroup","fetchSequence","all","then","rawdata","catch","loadSequence","Array","isArray","loadSequences","PAKO","require","LoadersVolumesCornerstone","cornerstone","loader","loadAndCacheImage","image","cornerstoneImage","setTimeout","imageId","metaData","metaDataAll","dataParser","CornerstoneDataParser","volumeParser","series","ModelsSeries","seriesInstanceUID","transferSyntaxUID","seriesDate","seriesDescription","studyDate","studyDescription","numberOfFrames","modality","segmentationType","patientID","patientName","patientAge","patientBirthdate","patientSex","ModelsStack","spacingBetweenSlices","segmentationSegments","parseFrameClosure","parseFrame","ModelsFrame","sopInstanceUID","frameTime","ultrasoundRegions","pixelPaddingValue","pixelSpacing","sliceThickness","imageOrientation","imagePosition","instanceNumber","minMaxPixelData","referencedSegmentNumber","LoadersVolumes","dataset","_preprocess","mhdFile","filter","_filterByExtension","bind","rawFile","mhdBuffer","rawBuffer","Parser","_parser","rawHeader","extractPixelData","rightHanded","dimensionIndexValues","toUpperCase","ParsersNifti","ParsersDicom","ParsersMhd","ParsersNrrd","ParsersMgh","gzcompressed","shift","decompressedData","inflate","item","ModelsBase","_id","mergeModels","referenceArray","targetArray","_validateModelArray","targetLength","refLength","merge","model","validate","modelArray","_sopInstanceUID","_url","_stackID","_frameTime","_ultrasoundRegions","_rows","_columns","_dimensionIndexValues","_imagePosition","_imageOrientation","_rightHanded","_sliceThickness","_spacingBetweenSlices","_pixelPaddingValue","_pixelRepresentation","_pixelType","_pixelSpacing","_pixelAspectRatio","_pixelData","_instanceNumber","_bitsAllocated","_numberOfChannels","_dist","_referencedSegmentNumber","cosines","spacingXY","_compareArrays","pixelAspectRatio","column","row","getImageDataUrl","context","imageData","createImageData","_frameToCanvas","putImageData","toDataURL","params","padding","range","normalized","_pixelTo8Bit","packedValue","join","dist","_concatenationUID","_seriesInstanceUID","_transferSyntaxUID","_seriesNumber","_seriesDescription","_seriesDate","_studyDescription","_studyDate","_accessionNumber","_modality","_dimensionIndexSequence","_numberOfFrames","_rawHeader","_patientID","_patientName","_patientAge","_patientBirthdate","_patientSex","_segmentationType","_segmentationSegments","mergeSeries","computeNumberOfFrames","computeCosines","seriesContainer","transferSyntaxUIDLabel","binaryString","_uid","_textureSize","_textureUnits","POSITIVE_INFINITY","NEGATIVE_INFINITY","_regMatrix","_lps2IJK","_aabb2LPS","_lps2AABB","_dimensionsIJK","_halfDimensionsIJK","_origin","_xCosine","_yCosine","_zCosine","_packedPerPixel","_segmentationDefaultColor","_frameSegment","_segmentationLUT","_segmentationLUTO","prepareSegmentation","mergedFrames","_computeDistanceArrayMap","_sortDistanceArraySort","prevIndex","k","dict","parseInt","segmentNumber","recommendedDisplayCIELab","CoreColors","cielab2RGB","rgb","orderFrames","computeSpacing","_arrayToVector3","computeIJK2LPS","computeLPS2AABB","middleFrameIndex","middleFrame","computeMinMaxIntensities","packEchos","echos","packedEcho","_orderFrameOnDimensionIndicesArraySort","_sortInstanceNumberArraySort","_sortSopInstanceUIDArraySort","xySpacing","zSpacing","stackID","equals","nbVoxels","textureDimension","requiredTextures","ceil","voxelIndexStart","voxelIndexStop","ii","_packTo8Bits","_textureType","channels","startVoxel","stopVoxel","packIndex","frameIndex","inFrameIndex","frameDimension","channelOffset","raw","RGBAFormat","bitString","bitStringArray","RGBFormat","dims","world","world0","world7","minBBox","centerBBox","indexInDimensions","regMatrix","segmentationLUT","segmentationLUTO","valueRescaleSlopeIntercept","ModelsVoxel","_worldCoordinates","_dataCoordinates","_screenCoordinates","dataCoordinates","screenCoordinates","DicomParser","Jpeg","JpegBaseline","Jpx","openJPEG","ParsersVolume","_arrayBuffer","byteArray","_dataSet","parseDicom","string","studyInstanceUID","segmentSequence","x00620002","items","_recommendedDisplayCIELab","segmentationCode","_segmentationCode","dataSet","uint16","segmentLabel","segmentAlgorithmType","segmentationCodeDesignator","segmentationCodeValue","segmentationCodeMeaning","segment","x00082218","x0062000d","dataOffset","CIELabScaled","CIELabNormalized","_findStringEverywhere","photometricInterpretation","intString","UtilsCore","referencedSegmentNumberElement","_findInGroupSequence","perFrameFunctionnalGroupSequence","x52009230","x2005140f","planeOrientationSequence","splittedSpacing","sequence","x0","uint32","y0","x1","y1","axisX","int32","axisY","unitsX","_getUnitsName","unitsY","double","frameIncrementPointer","frameRate","floatString","int16","highBit","_findFloatStringInFrameGroupSequence","frameContentSequence","x00209111","dimensionIndexValuesElt","x00209157","nbValues","inStackPositionNumber","philipsPrivateSequence","_decodePixelData","_convertColorSpace","subsequence","functionalGroupSequence","inSequence","_findStringInGroupSequence","tag","_findStringInFrameGroupSequence","targetString","petModule","_findStringInSequence","sequenceTag","_findFloatStringInGroupSequence","dataInGroupSequence","_decodeJ2K","_decodeRLE","_decodeJPEGLossless","_decodeJPEGBaseline","_decodeUncompressed","_swapFrame","framesAreFragmented","pixelDataElement","x7fe00010","fragments","getEncapsulatedImageFrame","basicOffsetTable","readEncapsulatedImageFrame","createJPEGBasicOffsetTable","readEncapsulatedPixelDataFromFragments","_decodeJpx","jpxImage","componentsCount","tiles","_decodeOpenJPEG","encodedPixelData","bytesPerPixel","signed","dataPtr","_malloc","writeArrayToMemory","imagePtrPtr","imageSizePtr","imageSizeXPtr","imageSizeYPtr","imageSizeCompPtr","ret","ccall","imagePtr","getValue","_free","src32","Int32Array","HEAP32","OpenJPEG","_jp2_decode","decoded","byteOutput","decoder","lossless","Decoder","decode","jpegBaseline","getData","getData16","pixelDataOffset","frameOffset","Uint32Array","newBuffer","newArray","bitStart","bitEnd","byteStart","bitStartOffset","byteEnd","targetBuffer","_interpretAsRGB","rgbLikeTypes","uncompressedData","rgbData","interpretAsRGB","rgbaIndex","rIndex","gIndex","bIndex","nPixels","ybrIndex","cb","cr","_swap16","_swap32","units","_buffer","_bufferPos","_dataPos","_version","_width","_height","_depth","_nframes","_type","MRI_UCHAR","_dof","_goodRASFlag","_spacingXYZ","_Xras","_Yras","_Zras","_Cras","_tr","_flipAngle","_te","_ti","_fov","_tags","_imageOrient","_readInt","_swapEndian","_readShort","_readFloat","dataSize","vSize","_readUChar","MRI_INT","MRI_FLOAT","MRI_SHORT","enc","TextDecoder","_tagReadStart","tagType","tagLen","tagValue","TAG_OLD_MGH_XFORM","TAG_MGH_XFORM","_readChar","first","fromArray","second","crossFirstSecond","third","angleTo","fcx","fcy","fcz","ui","sliceSize","len","tempBuff","getInt16","_readLong","shiftHigh","shiftLow","_swapendian","high","low","getInt8","getUint8","getFloat32","byteLength","TAG_OLD_SURF_GEOM","TAG_OLD_USEREALRAS","TAG_OLD_COLORTABLE","MRI_LONG","MRI_BITMAP","MRI_TENSOR","MRI_FLOAT_COMPLEX","MRI_DOUBLE_COMPLEX","MRI_RGB","TAG_CMDLINE","TAG_USEREALRAS","TAG_COLORTABLE","TAG_GCAMORPH_GEOM","TAG_GCAMORPH_TYPE","TAG_GCAMORPH_LABELS","TAG_SURF_GEOM","TAG_GROUP_AVG_SURFACE_AREA","TAG_AUTO_ALIGN","TAG_SCALAR_DOUBLE","TAG_PEDIR","TAG_MRI_FRAME","TAG_FIELDSTRENGTH","ParsersMHD","_header","lines","line","keyvalue","trim","DimSize","ElementSpacing","TransformMatrix","Offset","anatomicalOrientation","AnatomicalOrientation","ElementType","parseFloat","invertX","invertY","_decompressUncompressed","_niftiHeader","_niftiImage","_ordered","_orderedData","_qfac","NiftiReader","isNIFTI","readHeader","readImage","datatypeCode","numBitsPerVoxel","pixDims","qform_code","quatern_b","quatern_c","quatern_d","sform_code","rowX","affine","rowY","qoffset_x","qoffset_y","qoffset_z","scl_slope","scl_inter","_reorderData","totalNumPixels","tmp","numPixels2","pako","NrrdReader","_unpackedData","space","sizes","spaceDirections","spaceOrigin","encoding","unpackedData","segmentationFs","PresetsSegmentation","presetID","_presetID","_presets","presetSegs","preset","targetPreset","fetchPreset","presets","addPreset","presetObj","presetsAvailable","Freesurfer","freesurferSegmentation","IntersectBox","ShadersBase","_rayOrigin","_rayDirection","_aabbMin","_aabbMax","_tNear","_tFar","_intersect","api","baseFragment","_base","rayOrigin","rayDirection","aabbMin","aabbMax","tNear","tFar","computeDefinition","_functions","_name","_definition","Texture3d","_dataValue","dataValue","content","Unpack","_packedData","packedData","upack8","upack16","upack32","upackIdentity","uInt8","uInt16","uInt32","uFloat32","InterpolationIdentity","_currentVoxel","currentVoxel","shadersInterpolation","gradient","InterpolationTrilinear","_gradient","_main","functions","main","property","uniform","typeGLSL","shaderInterpolation","uLutSegmentation","uTextureLUTSegmentation","uBorderWidth","uBorderMargin","uBorderDashLength","uTextureBackTest0","uTextureBackTest1","uOpacity0","uOpacity1","uType0","uType1","uTrackMouse","uMouse","shadersIntersectBox","uFrequence","uAmplitude","uAmbient","uAmbientColor","uSampleColorToAmbient","uSpecular","uSpecularColor","uDiffuse","uDiffuseColor","uSampleColorToDiffuse","uLightPosition","uLightPositionInCamera","uIntensity","getNumberValue","getNumberValues","getNumberString","defaultValue","minimumLength","Value","widgetsAngle","widgetsBase","targetMesh","_widgetType","_opangle","_moving","_domHovered","_defaultAngle","_line","_line2","_label","_handles","handle","WidgetsHandle","widgetsHandleFactory","active","tracking","_moveHandle","hide","onMove","onHover","addEventListeners","removeEventListeners","evt","hoverDom","hoverMesh","_hovered","hovered","cursor","onStart","_active","prevPosition","worldPosition","_dragged","onEnd","screenPosition","_selected","selected","createMesh","createDOM","Geometry","updateMeshColor","LineSegments","updateDOMColor","hideDOM","display","showDOM","updateColor","updateMeshPosition","updateDOM","lineData","getLineData","transform","transformX","transformY","transformAngle","line2Data","toFixed","paddingNormVector","normAngle","labelPadding","cos","paddingPoint","adjustLabelTransform","h","toggleDefaultAngle","_targetMesh","_worldPosition","widgetsAnnotation","_initialized","_movinglabel","_labelmoved","_labelhovered","_manuallabeldisplay","_meshline","_cone","_dashline","_labeltext","_labelOffset","_mouseLabelOffset","initOffsets","onResize","onHoverlabel","notonHoverlabel","changelabeltext","offsets","getMouseOffsets","screenX","screenY","setlabeltext","prompt","displaylabel","_conegeometry","CylinderGeometry","translate","rotateX","paddingVector","labelPosition","minLine","lineCL","line1L","borderTop","widgetsBiruler","_calibrationFactor","calibrationFactor","_distance","_distance2","_units","_label2","line1Center","line2Center","dashLineData","worldToScreen","distanceData","getDistanceData","distanceData2","title","hasAttribute","setAttribute","_colors","removeAttribute","text","angle2","label2Padding","paddingVector2","paddingPoint2","transform2","getDistances","shotestDistance","longestDistance","widgetsCrossRuler","_distances","_line01","_normal","repositionOrtho","recalculateOrtho","initOrtho","initLineAndNormal","_camera","halfLength","normLine","normLength","activeInd","Ray","closestPointToPoint","isOutside","projectOnVector","getDimensions","getCoordinates","initCoordinates","fourth","intersectR","intersectS","distanceSqToSegment","setDefaultColor","WidgetsCss","code","widgetsEllipse","_area","_rectangle","_ellipse","updateRoI","createMaterial","measurementsContainer","meanSDContainer","maxMinContainer","areaContainer","vec01","ShapeGeometry","EllipseCurve","getPoints","clear","querySelector","roi","regions","_params","region0","getRegionByXY","region1","rectData","getRectData","labelTransform","getMeasurements","widgetsFreehand","_lines","createLine","updateDOMContent","pushPopHandle","updateMesh","updateDOMPosition","_shapeWarn","oldWarn","rest","apply","l","elementsNeedUpdate","isPointOnLine","pointA","pointB","pointToCheck","handle0","handle1","newhandle","isOnLine","same","cRegion","pRegion","ind","widgetsHandle","hideHandleMesh","_plane","_raycaster","_tracking","_mouse","_meshHovered","_screenPosition","intersectsHandle","intersectsTarget","getWorldDirection","CoreIntersections","forced","SphereGeometry","wireframeLinewidth","showMesh","hideMesh","widgetsPeakVelocity","_regions","_velocity","_initialRegion","_handle","isCorrectRegion","region","pvContainer","gradientContainer","usPosition","getPointInRegion","velocity","widgetsPolygon","_newHandleRequired","onDoubleClick","numHandles","widgetsPressureHalfTime","_vMax","_gMax","_pht","_mva","_dt","_ds","inActive","isCorrect","checkHandle","div","updateValues","usPosition0","getUsPoint","usPosition1","velocity0","velocity1","time0","time1","vMaxTime","phtVelocity","phtKoeff","dtKoeff","vMax","gMax","pht","mva","dt","ds","widgetsRectangle","PlaneGeometry","progection","computeBoundingSphere","widgetsRuler","widgetsVelocityTimeIntegral","_vMean","_gMean","_envTi","_vti","_extraInfo","_isHandleActive","_usPoints","finalize","splice","pointF","pointL","boundaries","xMin","xMax","yMin","yMax","pVelocity","pGradient","pTime","totalTime","vMaxContainer","vMeanContainer","gMaxContainer","gMeanContainer","envTiContainer","vtiContainer","infoContainer","vMean","gMean","envTi","vti","extraInfo","info","widgetsVoxelprobe","createVoxel","_voxel","lpsContainer","ijkContainer","valueContainer","updateVoxel","rasContainer"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;AClFA;;AAEA,kBAAkB,cAAc,uBAAuB;AACvD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB;AACrB,oBAAoB;AACpB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB,sBAAsB;AACtB,wBAAwB;;AAExB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,uBAAuB;AACtC;AACA,eAAe,YAAY;AAC3B,iBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA,OAAO;AACP,mBAAmB,mBAAmB;AACtC,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD;AACjD;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,QAAQ;AACvB;AACA;;AAEA;AACA,eAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,4BAA4B;AACtD,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,6BAA6B;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0DAA0D;AAC1D;AACA,4BAA4B,qCAAqC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA,eAAe,+CAA+C;AAC9D,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qBAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B,4BAA4B;AAC1D;AACA,gCAAgC,0BAA0B;AAC1D;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,YAAY;AAC/B,qBAAqB,WAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B,4BAA4B;AAC1D;AACA,gCAAgC,0BAA0B;AAC1D;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,YAAY;AAC/B,qBAAqB,WAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA,C;;;;;;;;;;;;AC1/BA;AACA,kBAAkB,cAAc,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,6CAA6C;AAC7C,8CAA8C;AAC9C,8CAA8C;AAC9C;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yCAAyC,QAAQ;AACjD;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,UAAU;AAC5B,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA,6CAA6C,QAAQ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;;AAEA;;AAEA;AACA;AACA,YAAY,iBAAiB;AAC7B,cAAc,kCAAkC;AAChD,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;;AAEA;;AAEA;AACA;AACA,YAAY,kCAAkC;AAC9C,cAAc,iBAAiB;AAC/B,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kCAAkC;AACjD;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,kCAAkC;AAC9C,cAAc,+BAA+B;AAC7C,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,yCAAyC;AACrD,cAAc,yCAAyC;AACvD,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA,kBAAkB,+BAA+B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA,cAAc,yCAAyC;AACvD,gBAAgB,yCAAyC;AACzD,kBAAkB,+BAA+B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,QAAQ;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2CAA2C,QAAQ;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;;AAEhC;AACA;AACA;AACA,mCAAmC,QAAQ;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,QAAQ;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC,uCAAuC;AACvC;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,+BAA+B;AAClD;;AAEA;AACA;AACA;AACA;;AAEA,sDAAsD,QAAQ;AAC9D;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA,OAAO,OAAO;AACd,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;AAC3D;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kBAAkB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,qBAAqB,kBAAkB;AACvC;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,aAAa;AACrC,yBAAyB,WAAW;AACpC;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAuC,iBAAiB;AACxD;AACA,yBAAyB,WAAW;AACpC,wCAAwC,mBAAmB;;AAE3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA,yBAAyB,WAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,SAAS;AACxC;AACA;;AAEA;AACA;AACA,6BAA6B,WAAW;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,QAAQ;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,cAAc;AACtC;AACA,mBAAmB,aAAa;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B,YAAY;AACxC;AACA;AACA;AACA,OAAO;AACP,0BAA0B,YAAY;AACtC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,WAAW;AAChC;AACA;AACA;AACA,OAAO;AACP,mBAAmB,WAAW;AAC9B;AACA;AACA;AACA,0CAA0C,QAAQ;AAClD,yBAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,QAAQ;AAC3C,yBAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,uBAAuB,KAAK;AAC5B;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,KAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,KAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,KAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,KAAK;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,mCAAmC,KAAK;AACxC;AACA;;AAEA,mCAAmC,KAAK;AACxC;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA,CAAC;;;AAGD,kBAAkB,cAAc,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,4CAA4C;AACjD,KAAK,4CAA4C;AACjD,KAAK,4CAA4C;AACjD,KAAK,6CAA6C;AAClD,KAAK,6CAA6C;AAClD,KAAK,8CAA8C;AACnD,KAAK,4CAA4C;AACjD,KAAK,6CAA6C;AAClD,KAAK,6CAA6C;AAClD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED,kBAAkB,cAAc,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA,sDAAsD;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;AACD;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,MAAM;AAC3B,mBAAmB,OAAO;AAC1B,sBAAsB,OAAO;AAC7B,qBAAqB,OAAO;AAC5B,qBAAqB,OAAO;AAC5B,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,aAAa,aAAa;AAC/C;AACA;AACA,oBAAoB,aAAa,aAAa;AAC9C;AACA;AACA,oBAAoB,cAAc,cAAc;AAChD;AACA;AACA;AACA,oBAAoB,aAAa,aAAa;AAC9C;AACA;;AAEA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB;AACA,aAAa;AACb,aAAa;AACb;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,oBAAoB,MAAM;AAC1B,iBAAiB,MAAM;AACvB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA,GAAG;AACH,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB,cAAc,QAAQ;AACtB,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB;;AAEA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,gBAAgB,EAAE;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA,0BAA0B;AAC1B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA,qBAAqB,qCAAqC;AAC1D;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qCAAqC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,2CAA2C,gBAAgB,EAAE;AAC7D;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,mDAAmD,gBAAgB,EAAE;AACrE;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,6BAA6B,oBAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,2CAA2C;AAC3C,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,aAAa,OAAO;AACpB,aAAa,KAAK;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,KAAK;AAClB,aAAa,MAAM;AACnB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA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A;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,8BAA8B;AAC9B;AACA,mDAAmD;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,gDAAgD;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gCAAgC,oBAAoB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACzfY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,SAAS;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA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,0BAA0B,WAAW,+NAA+N,iBAAiB,aAAa,sCAAsC,SAAS,+rBAA+rB,iQAAiQ,cAAc,0BAA0B,WAAW,OAAO,0hCAA0hC,qmCAAqmC,GAAG;AAC9glG,2C;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,QAAQ,WAAW;;AAEnB;AACA;AACA,QAAQ,UAAU;;AAElB;AACA;;;;;;;;;;;;ACnFA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;;;AAGA;AACA;AACA,mBAAmB;AACnB,2BAA2B;AAC3B,mBAAmB;AACnB;;;AAGA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;AACA,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,6DAA6D,KAA8B,IAAI,mBAAO,CAAC,wFAAoB,IAAI,SAAI;AACnI,uEAAuE,KAA8B,IAAI,mBAAO,CAAC,kGAAyB,IAAI,SAAI;AAClJ,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,2DAA2D,KAA8B,IAAI,mBAAO,CAAC,sFAAmB,IAAI,SAAI;AAChI,+CAA+C,KAA8B,IAAI,mBAAO,CAAC,wEAAY,IAAI,SAAI;;;AAG7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA,qBAAqB;AACrB,wDAAwD;AACxD,wDAAwD;AACxD,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;;;AAIA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,6BAA6B;AAC7B;AACA;;AAEA;;AAEA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,sBAAsB;AACtB;AACA;;AAEA,uBAAuB,QAAQ;AAC/B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sBAAsB;AACtB;;AAEA,4BAA4B,+BAA+B;AAC3D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA,sDAAsD;AACtD;AACA;AACA;AACA,KAAK;;AAEL;AACA;;;;AAIA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA,mBAAmB,uBAAuB;AAC1C,uBAAuB,6BAA6B;AACpD;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAuB,QAAQ;AAC/B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,eAAe,oBAAoB;AACnC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;;AAEA;AACA,mEAAmE;AACnE;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AC1zBA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;AACA,+DAA+D,KAA8B,IAAI,mBAAO,CAAC,0FAAqB,IAAI,SAAI;AACtI,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;;;AAG7H;AACA;AACA,yBAAyB;AACzB,kBAAkB;AAClB,kBAAkB;AAClB,qBAAqB;AACrB,uBAAuB;AACvB;;;;AAIA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;AACA,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,+CAA+C,KAA8B,IAAI,mBAAO,CAAC,wEAAY,IAAI,SAAI;;;AAG7G;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;;AAEA;;;AAGA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,QAAQ;AAC3B;AACA;AACA;;AAEA,mBAAmB,QAAQ;AAC3B,uBAAuB,qBAAqB;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,eAAe,OAAO,QAAQ;AAC9B,mBAAmB,UAAU;AAC7B,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;;AAEA,eAAe,SAAS;AACxB;AACA;;AAEA;AACA;;AAEA,eAAe,QAAQ,QAAQ;AAC/B,mBAAmB,UAAU;AAC7B,uBAAuB,uBAAuB;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACzLA;AACA;;AAEa;;AAEb;AACA;AACA;AACA,+DAA+D,KAA8B,IAAI,mBAAO,CAAC,0FAAqB,IAAI,SAAI;AACtI,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,mDAAmD,KAA8B,IAAI,mBAAO,CAAC,4EAAc,IAAI,SAAI;AACnH,2DAA2D,KAA8B,IAAI,mBAAO,CAAC,sFAAmB,IAAI,SAAI;AAChI,6DAA6D,KAA8B,IAAI,mBAAO,CAAC,wFAAoB,IAAI,SAAI;AACnI,uEAAuE,KAA8B,IAAI,mBAAO,CAAC,kGAAyB,IAAI,SAAI;AAClJ,+DAA+D,KAA8B,IAAI,mBAAO,CAAC,0FAAqB,IAAI,SAAI;AACtI,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,+CAA+C,KAA8B,IAAI,mBAAO,CAAC,wEAAY,IAAI,SAAI;;;AAG7G;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;AACA,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,+CAA+C,KAA8B,IAAI,mBAAO,CAAC,wEAAY,IAAI,SAAI;;;AAG7G;AACA;AACA,wBAAwB;AACxB,iBAAiB;AACjB,8DAA8D;;AAE9D;AACA;AACA;AACA;AACA;;;;AAIA;;AAEA;AACA;;AAEA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,QAAQ;AACvB;AACA;AACA;;;AAGA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT,uBAAuB,QAAQ;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;;;AAGA;AACA;AACA,sBAAsB;AACtB,sBAAsB;AACtB,yBAAyB;AACzB;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;AACA,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,+DAA+D,KAA8B,IAAI,mBAAO,CAAC,0FAAqB,IAAI,SAAI;;;AAGtI;AACA;AACA;AACA;AACA,qBAAqB;AACrB,uBAAuB;AACvB,yBAAyB;AACzB;AACA;;;AAGA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA,eAAe,kBAAkB;AACjC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;;;AAGA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,yBAAyB;AAC5C;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AC3Fa;;AAEb;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;ACtBa;;AAEb;;AAEA;;;;;;;;;;;;;ACJa;;AAEb;;AAEA,YAAY,mBAAO,EAAE,0DAAY;;;AAGjC;;AAEA;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;ACpCa;;AAEb;;AAEA,WAAW,mBAAO,EAAE,0EAAoB;AACxC,WAAW,mBAAO,EAAE,0EAAoB;AACxC,UAAU,mBAAO,EAAE,sDAAU;AAC7B,YAAY,mBAAO,EAAE,0DAAY;AACjC,WAAW,mBAAO,EAAE,kFAAwB;AAC5C,WAAW,mBAAO,EAAE,gFAAuB;AAC3C,aAAa,mBAAO,EAAE,4EAAqB;AAC3C,WAAW,mBAAO,EAAE,2EAAW;AAC/B,YAAY,mBAAO,EAAE,6EAAY;;;AAGjC;;AAEA,eAAe;;;AAGf;;AAEA;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,0BAA0B;AAC1B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;ACxHa;;AAEb;;AAEA,mBAAmB;AACnB,kBAAkB;;;AAGlB;;AAEA;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gEAAgE;AAChE,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;ACrDa;;AAEb;;AAEA;;;;;;;;;;;;;;ACHA;AACA;;AAEa;;AAEb;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA,iCAAiC,KAA8B,IAAI,mBAAO,CAAC,iEAAa,IAAI,SAAI;AAChG,iCAAiC,KAA8B,IAAI,mBAAO,CAAC,iEAAa,IAAI,SAAI;AAChG,+BAA+B,KAA8B,IAAI,mBAAO,CAAC,uEAAgB,IAAI,SAAI;;AAEjG,qBAAqB,KAA8B,IAAI,mBAAO,CAAC,0CAAM,IAAI,SAAI;;;;AAI7E;;AAEA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA,WAAW,0BAA0B;AACrC,aAAa;AACb;AACA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,0BAA0B;AACrC,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,0BAA0B;AACrC,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA,WAAW,0BAA0B;AACrC,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;AChNA;AACA;;AAEa;;AAEb;;AAEA;AACA,+BAA+B,KAA8B,IAAI,mBAAO,CAAC,uEAAgB,IAAI,SAAI;;;;AAIjG;;AAEA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB,cAAc,SAAS;AACvB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,SAAS;AACvB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,uBAAuB;AACrC,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,cAAc,SAAS;AACvB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+CAA+C;AAC/C,gDAAgD;AAChD;;;AAGA;;AAEA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uDAAuD;AACvD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,YAAY;AAChC,uBAAuB,WAAW;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;;AAGA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;;AAGA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;;AAGA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB;;AAExB;AACA;AACA;AACA,eAAe;AACf,gBAAgB;AAChB,KAAK;;AAEL,yBAAyB;AACzB;;AAEA;AACA,+BAA+B;AAC/B;AACA;;AAEA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA,WAAW,uBAAuB;AAClC,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iEAAiE;;AAEjE,iCAAiC;;AAEjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,qDAAqD;AACrD,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,uBAAuB;AACvB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,eAAe,QAAQ,UAAU;AACjC,mBAAmB,QAAQ,UAAU;AACrC;AACA,2BAA2B,QAAQ,UAAU;AAC7C;AACA;AACA,oCAAoC,QAAQ,UAAU;AACtD,wCAAwC,QAAQ,UAAU;AAC1D,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA,sEAAsE;AACtE;AACA;;AAEA;AACA;;AAEA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0CAA0C,mBAAmB;;AAE7D;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB,mBAAmB,OAAO;AAC1B;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;;AAGA;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;AC/1BA;AACA;;AAEa;;AAEb;;AAEA;AACA,+BAA+B,KAA8B,IAAI,mBAAO,CAAC,uEAAgB,IAAI,SAAI;AACjG,iCAAiC,KAA8B,IAAI,mBAAO,CAAC,iEAAa,IAAI,SAAI;;;AAGhG;;AAEA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB,cAAc,SAAS;AACvB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,SAAS;AACvB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,uBAAuB;AACrC,cAAc,OAAO;AACrB,cAAc,SAAS;AACvB,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;;AAEA;AACA;AACA,0EAA0E;;;;AAI1E;;AAEA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uDAAuD;AACvD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,YAAY;AAChC,uBAAuB,WAAW;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;;AAIA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,WAAW,uBAAuB;AAClC,aAAa;AACb;AACA;;;;AAIA;;;;AAIA;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;AC1YA;AACA;;AAEa;;AAEb;;AAEA;AACA;;;;AAIA;;AAEA;AACA;AACA;;;;AAIA;;AAEA;AACA;;AAEA,qBAAqB,WAAW;AAChC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;;AAEA,gCAAgC,UAAU;AAC1C;AACA;;AAEA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA,mBAAmB,yBAAyB;AAC5C;AACA;;AAEA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AC7JA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,aAAa,mBAAO,CAAC,oDAAW;AAChC,cAAc,mBAAO,CAAC,gDAAS;AAC/B,cAAc,mBAAO,CAAC,gDAAS;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,mDAAmD;AACxE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD,EAAE;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wBAAwB,QAAQ;AAChC;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA,GAAG;AACH;AACA,eAAe,SAAS;AACxB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;AC5vDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA,QAAQ,yBAAyB;AACjC;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;;;;;;;;;;;AC/bA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,uBAAuB,SAAS;AAChC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA4C,KAAK;;AAEjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,mBAAO,CAAC,yGAAoB;;AAE/C;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA,WAAW,SAAS;AACpB;AACA,mBAAmB,mBAAO,CAAC,4FAAU;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kCAAkC;AAC7D,2BAA2B,mDAAmD;AAC9E;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC9rBa;AACb,aAAa,mBAAO,CAAC,+CAAQ;;AAE7B;AACA,2BAA2B,EAAE;AAC7B;AACA;;AAEA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,+CAA+C;;AAE/C;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC;AACjC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,2BAA2B;AAC3B;;AAEA;AACA;AACA,YAAY,qBAAqB;AACjC;AACA,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA,+CAA+C;AAC/C,kDAAkD;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA,KAAK;AACL,uBAAuB;AACvB;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qCAAqC,0FAA0F,qBAAqB;AACpJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,4BAA4B;AAC5B,0EAA0E;AAC1E;AACA;AACA,aAAa;AACb,oBAAoB;AACpB;AACA,SAAS,0BAA0B;AACnC,gBAAgB;AAChB,SAAS;AACT,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uCAAuC,kCAAkC,EAAE,EAAE;AAC7E;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;;AAEA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS,6BAA6B;AACtC;AACA,SAAS;AACT,2DAA2D;AAC3D;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,8GAA8G,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,8GAA8G,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA,sCAAsC,8GAA8G,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,8GAA8G,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,6HAA6H,EAAE;AACvL,SAAS;AACT,0DAA0D,4DAA4D,EAAE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,6HAA6H,EAAE;AACvL,SAAS;AACT,0DAA0D,4DAA4D,EAAE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uCAAuC;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,OAAO;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,sBAAsB,YAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,YAAY;AAClC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA,YAAY,cAAc;AAC1B;AACA;AACA;AACA;;;;;;;;;;;;;AC7tCA;AACA;AACA;AACA;AACA;;AAEa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,sBAAsB;AACtC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACzFA;AACa;;AAEb,gBAAgB,mBAAO,CAAC,mEAAoB;;AAE5C,gBAAgB,mBAAO,CAAC,yDAAe;AACvC,gBAAgB,mBAAO,CAAC,yDAAe;AACvC,gBAAgB,mBAAO,CAAC,uEAAsB;;AAE9C;;AAEA;;AAEA;;;;;;;;;;;;;ACba;;;AAGb,mBAAmB,mBAAO,CAAC,+DAAgB;AAC3C,mBAAmB,mBAAO,CAAC,+DAAgB;AAC3C,mBAAmB,mBAAO,CAAC,iEAAiB;AAC5C,mBAAmB,mBAAO,CAAC,iEAAiB;AAC5C,mBAAmB,mBAAO,CAAC,+DAAgB;;AAE3C;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA,8BAA8B;AAC9B;AACA,qBAAqB,8BAA8B;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,eAAe;;AAElB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB;AAClB,mBAAmB;AACnB,sBAAsB;AACtB,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,cAAc;;AAEjC;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,qBAAqB,oBAAoB;;AAEzC;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;;;;;;;;;;;AC/Ya;;;AAGb,mBAAmB,mBAAO,CAAC,+DAAgB;AAC3C,mBAAmB,mBAAO,CAAC,+DAAgB;AAC3C,mBAAmB,mBAAO,CAAC,iEAAiB;AAC5C,mBAAmB,mBAAO,CAAC,mEAAkB;AAC7C,mBAAmB,mBAAO,CAAC,iEAAiB;AAC5C,mBAAmB,mBAAO,CAAC,+DAAgB;AAC3C,mBAAmB,mBAAO,CAAC,iEAAiB;;AAE5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA,8BAA8B;AAC9B;AACA,qBAAqB,8BAA8B;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG,eAAe;;AAElB;;AAEA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB,mBAAmB;AACnB,sBAAsB;AACtB,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,cAAc;AACjC;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sDAAsD;;AAEtD;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,kEAAkE;;AAEvF;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,qBAAqB,oBAAoB;;AAEzC;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;;;;;;;;;;;ACjaa;;;AAGb;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,kBAAkB,UAAU;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,4BAA4B,YAAY;AACxC,qBAAqB,8BAA8B;AACnD;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,OAAO;AACzC;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,OAAO;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACrGA;AACa;;;AAGb,YAAY,mBAAO,CAAC,yDAAU;;;AAG9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK,wCAAwC,EAAE,aAAa,sBAAsB;AAClF,KAAK,oDAAoD,EAAE,aAAa,0BAA0B;;;AAGlG;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA,kCAAkC;;;AAGlC;AACA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA,mBAAmB,qBAAqB,UAAU;;AAElD;AACA;AACA,oBAAoB,0BAA0B,gBAAgB,UAAU;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,0BAA0B,UAAU;;AAExD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,kBAAkB;;AAE3C;AACA;AACA,kDAAkD,OAAO;;AAEzD;AACA;AACA,gBAAgB,YAAY;;AAE5B;AACA;AACA,kBAAkB,YAAY;;AAE9B;AACA;;;;;;;;;;;;;ACxLa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;;AAGA;;;;;;;;;;;;;AC/Ba;;;AAGb;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACjDa;;AAEb;AACA;AACA;;;AAGA;AACA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;;AAEA,mBAAmB,SAAS;AAC5B;AACA;;AAEA,sBAAsB;AACtB;;;AAGA;;;;;;;;;;;;;ACxCa;;AAEb,cAAc,mBAAO,CAAC,gEAAiB;AACvC,cAAc,mBAAO,CAAC,sDAAS;AAC/B,cAAc,mBAAO,CAAC,0DAAW;AACjC,cAAc,mBAAO,CAAC,sDAAS;AAC/B,cAAc,mBAAO,CAAC,4DAAY;;AAElC;AACA;;;AAGA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;;;AAGA;AACA;;AAEA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;AAC1B,0BAA0B;AAC1B,0BAA0B;;AAE1B,mBAAmB;;AAEnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,sBAAsB,qBAAqB,cAAc,EAAE;;;AAG/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,YAAY;AAC/B,kBAAkB,UAAU;;AAE5B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,wBAAwB;AACxB,YAAY;AACZ,UAAU;AACV,+BAA+B;AAC/B,gCAAgC;AAChC;AACA;;AAEA,sBAAsB;;AAEtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;;AAE3D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,aAAa;;AAEb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;;AAEnE;AACA,yDAAyD;AACzD;;AAEA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,0DAA0D;AAC1D;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,aAAa;;AAEb;;AAEA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,OAAO,EAAE;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;;AAEA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX,mBAAmB;;AAEnB;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,OAAO,EAAE;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oEAAoE;AACpE;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,0DAA0D;AAC1D;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB;AACrB,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,mBAAmB;AACnB,kBAAkB;AAClB,0BAA0B;AAC1B,4BAA4B;AAC5B,uBAAuB;AACvB,mBAAmB;AACnB,gBAAgB;AAChB,qBAAqB;AACrB,mBAAmB;AACnB,2BAA2B;AAC3B,uBAAuB;;AAEvB,kBAAkB;AAClB,kBAAkB;AAClB,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;;AAEnB,iBAAiB;AACjB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB,sBAAsB;AACtB,2BAA2B;AAC3B,oBAAoB;AACpB,uBAAuB;AACvB,qBAAqB;;AAErB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB,oBAAoB;;AAEpB;AACA;;AAEA,sBAAsB;;AAEtB;;AAEA;;AAEA,2CAA2C;AAC3C,6CAA6C;AAC7C,4CAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;;AAEvB;AACA;AACA;;AAEA,0BAA0B;AAC1B,+CAA+C;AAC/C;;AAEA,oBAAoB;AACpB,oBAAoB;AACpB;AACA;AACA;;AAEA,gDAAgD;AAChD;AACA;AACA;;AAEA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB,sBAAsB;AACtB,mBAAmB;AACnB,kBAAkB;;;AAGlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,6BAA6B,uBAAuB;AACpD,8BAA8B,uBAAuB;AACrD;AACA;AACA;;;AAGA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;;AAEA;AACA,aAAa;AACb;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB;;AAErB,sCAAsC;;AAEtC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB,qBAAqB;AACrB;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,6BAA6B,uBAAuB;AACpD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;;AAEnC;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA,8BAA8B;;AAE9B,2BAA2B,aAAa;AACxC,oBAAoB,qBAAqB;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oDAAoD;AACpD;AACA;;AAEA,aAAa;;AAEb;AACA;AACA,qBAAqB;AACrB,yBAAyB;AACzB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvzDa;;;AAGb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACvCa;;AAEb;AACA,aAAa;AACb,cAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,WAAW;AACX,WAAW;AACX,UAAU;AACV,UAAU;AACV;AACA,WAAW;AACX;AACA,YAAY;AACZ,YAAY;AACZ,YAAY;AACZ;AACA,eAAe;AACf,WAAW;AACX,WAAW;AACX,YAAY;AACZ,YAAY;AACZ,YAAY;AACZ,YAAY;AACZ,WAAW;AACX,SAAS;AACT;AACA,UAAU;AACV,WAAW;AACX,WAAW;AACX;;;AAGA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,GAAG;AAClB;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,4BAA4B;AAC5B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA,gCAAgC;AAChC;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,mBAAmB;AACnB,qCAAqC;AACrC;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,mBAAmB;AACnB;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA,qBAAqB;AACrB,uCAAuC;AACvC;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,mBAAmB;AACnB,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,kBAAkB;AAClB;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY;AACZ;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrUa;;;AAGb,oBAAoB,mBAAO,CAAC,gEAAiB;AAC7C,oBAAoB,mBAAO,CAAC,0DAAW;AACvC,oBAAoB,mBAAO,CAAC,sDAAS;AACrC,oBAAoB,mBAAO,CAAC,0DAAW;AACvC,oBAAoB,mBAAO,CAAC,4DAAY;;AAExC;AACA;AACA;;AAEA;AACA;;;AAGA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;;AAGA,gBAAgB;AAChB,iBAAiB;AACjB,gBAAgB;AAChB,cAAc;AACd,iBAAiB;AACjB,iBAAiB;AACjB,gBAAgB;AAChB,mBAAmB;AACnB,gBAAgB;AAChB,mBAAmB;AACnB,iBAAiB;AACjB,qBAAqB;AACrB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,qBAAqB;AACrB,sBAAsB;AACtB,wBAAwB;AACxB,yBAAyB;AACzB,yBAAyB;AACzB,wBAAwB;AACxB,2BAA2B;AAC3B,yBAAyB;AACzB,4BAA4B;AAC5B,0BAA0B;AAC1B,wBAAwB;AACxB,kBAAkB;AAClB,mBAAmB;AACnB,iBAAiB;AACjB,gBAAgB;AAChB,gBAAgB;AAChB,iBAAiB;;AAEjB;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,gBAAgB;AAChB,oBAAoB;AACpB,gBAAgB;AAChB,wBAAwB;AACxB,iBAAiB;AACjB,gBAAgB;AAChB,iBAAiB;AACjB,iBAAiB;AACjB;AACA,mBAAmB;;AAEnB;AACA,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,qBAAqB;;AAErB;AACA,gBAAgB;AAChB,gBAAgB;;AAEhB;AACA,kBAAkB;AAClB,kBAAkB;;AAElB;AACA,iBAAiB;;AAEjB;AACA,sBAAsB;AACtB,uBAAuB;AACvB,mBAAmB;AACnB,oBAAoB;;AAEpB;AACA,iBAAiB;AACjB,gBAAgB;AAChB,iBAAiB;AACjB,gBAAgB;AAChB,mBAAmB;;AAEnB,mCAAmC;AACnC,mCAAmC;;AAEnC;AACA;AACA;AACA;AACA,yCAAyC;AACzC,qBAAqB;AACrB,sBAAsB;AACtB,gBAAgB;AAChB,gBAAgB;AAChB,eAAe;AACf;;AAEA;AACA;;AAEA,6BAA6B,uBAAuB;AACpD;AACA;AACA,gBAAgB;AAChB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6BAA6B,uBAAuB;AACpD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,6BAA6B,uBAAuB;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAc,uBAAuB;AACrC,sBAAsB;;AAEtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB;;AAEpB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uBAAuB,uBAAuB;AAC9C,uBAAuB,uBAAuB;AAC9C,uBAAuB,uBAAuB;AAC9C,uBAAuB,uBAAuB;;AAE9C,uEAAuE,UAAU;;AAEjF;AACA;AACA,sBAAsB,uBAAuB;;AAE7C,uEAAuE,UAAU;;AAEjF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,iBAAiB;AACzD,sCAAsC,qBAAqB;AAC3D;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;AACpB,WAAW;AACX,UAAU;AACV,iBAAiB;AACjB,WAAW;AACX,WAAW;AACX,gBAAgB;AAChB,WAAW;AACX,WAAW;AACX;AACA,eAAe;AACf,mCAAmC;AACnC,aAAa;AACb,mCAAmC;AACnC,UAAU;AACV,UAAU;AACV,+BAA+B;AAC/B;;AAEA,QAAQ;;AAER;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B,qBAAqB,EAAE;;;AAGnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,aAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,iBAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,aAAa;AACvC,0BAA0B,aAAa;AACvC,yBAAyB,iBAAiB;AAC1C,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,kEAAkE;AAClE;AACA;AACA;;AAEA,oCAAoC,OAAO;AAC3C;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,OAAO;;AAEtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gEAAgE;AAChE;AACA;AACA;;AAEA,gCAAgC,OAAO;AACvC;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA,gDAAgD,OAAO;AACvD;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kEAAkE;AAClE;AACA;AACA;;AAEA,kCAAkC,OAAO;AACzC;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA,gDAAgD,OAAO;AACvD;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB;AAC3D,8BAA8B,aAAa;AAC3C;AACA;AACA;AACA;AACA,aAAa;AACb,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA;AACA,OAAO;AACP,+BAA+B,kBAAkB;AACjD;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B,uBAAuB;AACpD;AACA,+BAA+B,uBAAuB;;AAEtD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6DAA6D,uBAAuB;AACpF;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjgDa;;;AAGb,YAAY,mBAAO,CAAC,gEAAiB;;AAErC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;;AAEzB,cAAc;AACd,cAAc;AACd,uBAAuB;AACvB,eAAe;AACf,eAAe;AACf,eAAe;AACf,eAAe;AACf,eAAe;AACf,eAAe;AACf,WAAW;AACX,WAAW;AACX,UAAU;AACV,WAAW;AACX,WAAW;AACX,kBAAkB;AAClB;AACA,iBAAiB;AACjB,UAAU;AACV,2CAA2C,eAAe;AAC1D,0CAA0C,eAAe;AACzD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA,eAAe,aAAa;AAC5B;AACA;;AAEA;AACA;AACA,qBAAqB,UAAU;AAC/B,2BAA2B,OAAO;AAClC;AACA;AACA;AACA;AACA,kBAAkB;AAClB,sCAAsC,2BAA2B;AACjE,uCAAuC;AACvC,wCAAwC;AACxC;;;AAGA;AACA;AACA;AACA;;AAEA;AACA,aAAa;AACb;AACA,eAAe,WAAW;AAC1B,2BAA2B,OAAO;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA,eAAe,eAAe;AAC9B;AACA;;AAEA;AACA,eAAe,aAAa;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA,GAAG,OAAO;AACV;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX,UAAU;AACV,YAAY;AACZ,qBAAqB;AACrB,cAAc;AACd,WAAW;AACX,WAAW;AACX,mBAAmB;AACnB,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACtUa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACZa;;;AAGb,YAAY,mBAAO,CAAC,gEAAiB;;AAErC;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B;AAC9B;;AAEA;;;AAGA,oBAAoB,sBAAsB,qBAAqB,cAAc,EAAE;;AAE/E;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA,kCAAkC;AAClC,iCAAiC;AACjC,iCAAiC;AACjC,4BAA4B;AAC5B,iCAAiC;;AAEjC;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA,2BAA2B;AAC3B,oBAAoB;AACpB,6BAA6B;AAC7B;;;;AAIA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,WAAW;AACX,WAAW;AACX,YAAY;AACZ,QAAQ;AACR,mBAAmB;;AAEnB,gBAAgB,kBAAkB;AAClC;AACA;;AAEA;AACA;AACA;AACA,+CAA+C;;AAE/C,0BAA0B,eAAe;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,UAAU,EAAE;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;;AAE/B;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C,uBAAuB;AACvB,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,yBAAyB,YAAY;AACrC;AACA;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,mBAAmB;AACnB,qBAAqB;AACrB;AACA,0CAA0C;AAC1C,eAAe;AACf,WAAW;AACX,QAAQ;;AAER;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gBAAgB;AAC7B;AACA,oBAAoB,UAAU;AAC9B;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,QAAQ;AACR,WAAW;AACX,aAAa;AACb,WAAW;AACX,WAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA,eAAe,8BAA8B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA,eAAe,8BAA8B;AAC7C;AACA;AACA;AACA;AACA,aAAa;AACb,QAAQ,gBAAgB;AACxB;AACA,eAAe,oCAAoC;AACnD;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,kBAAkB;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,aAAa;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA,QAAQ;;AAER;AACA,aAAa,aAAa,QAAQ,iCAAiC;AACnE,aAAa,aAAa,QAAQ,iCAAiC;AACnE,aAAa,cAAc,OAAO,+BAA+B;;AAEjE;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,eAAe;AACf,kBAAkB;AAClB;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,YAAY;AACZ;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,OAAO;;AAEtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA,WAAW;AACX,SAAS;AACT,aAAa;AACb,WAAW;AACX,YAAY;;AAEZ;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC;AAChC;AACA,OAAO;AACP;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA,kCAAkC;AAClC;AACA,eAAe;AACf;AACA;;AAEA,kCAAkC;AAClC;AACA;AACA;AACA,oCAAoC;AACpC;AACA,OAAO;;AAEP;AACA;AACA;;AAEA,KAAK;AACL;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,oBAAoB;AACpB,WAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,WAAW;AACxB;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uCAAuC,QAAQ,OAAO,wBAAwB;;AAE9E;AACA;AACA;AACA,eAAe;AACf;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA,8BAA8B;;AAE9B,6BAA6B;AAC7B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,mBAAmB;AACnB;AACA,QAAQ;AACR,mBAAmB;AACnB,aAAa;;AAEb,wCAAwC;;AAExC,gBAAgB;AAChB,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA,gDAAgD;;AAEhD,aAAa,eAAe;AAC5B;AACA;;AAEA;AACA;;AAEA,KAAK;AACL;;AAEA,KAAK;;AAEL,+BAA+B,kCAAkC;AACjE;;AAEA,KAAK;AACL;;AAEA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,mBAAmB;AACnB;AACA,QAAQ;AACR,mBAAmB;AACnB,aAAa;;AAEb,wCAAwC;;AAExC,gBAAgB;AAChB,oBAAoB;AACpB,oBAAoB;;AAEpB,+BAA+B;AAC/B;AACA;AACA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;;AAEA;AACA;;AAEA,KAAK;AACL,UAAU,iCAAiC,EAAE;;AAE7C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC,kBAAkB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,gCAAgC;AAChC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA,wCAAwC;AACxC;;AAEA,wCAAwC;AACxC;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,IAAI,MAAM,GAAG,MAAM,GAAG;AAChD;AACA;AACA;AACA,SAAS,IAAI,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,MAAM,IAAI;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,iBAAiB;AACjB,WAAW;AACX;AACA,wDAAwD;AACxD,uCAAuC;AACvC;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,iBAAiB;AACjB,WAAW;AACX;AACA,4BAA4B;AAC5B,sBAAsB;;AAEtB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kCAAkC,wBAAwB;;AAE1D,GAAG;AACH;AACA,4CAA4C;AAC5C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,kBAAkB;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjrCa;;;AAGb;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,MAAM;AAChB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,8BAA8B;AAClE;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,oBAAoB;AAC9B;AACA;;AAEA;AACA,UAAU,UAAU;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,sBAAsB;AACrD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7SA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;;;;;;;;;;;;;;;;;;ACvLtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC/IP;AAAA;AAAA;AAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;;AAEA,gBAAgB,gDAAG;AACnB;;AAEA;AACA;;AAEA;AACA,UAAU;AACV,UAAU;AACV,SAAS;AACT,WAAW,eAAe;AAC1B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uCAAuC,OAAO;;AAE9C;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;AACA;;AAEA,GAAG;;AAEH,8HAA8H;AAC9H;AACA;;AAEA,GAAG;;AAEH;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA,sCAAsC,OAAO;;AAE7C;;AAEA;;AAEA;;AAEA;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EA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,0BAA0B;AAC1B,0BAA0B;AAC1B;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;;AAGkB;;;;;;;;;;;;;AC3enB;AAAA;AAAA;AAAA;AAAkC;AACW;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,0BAA0B;AAC1B,0BAA0B;AAC1B,0BAA0B;AAC1B;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA,uBAAuB,yDAAU;;AAEjC;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA,uBAAuB,yDAAU;;AAEjC;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,oBAAoB,8CAAK;;AAEzB,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;;AAGkB;;;;;;;;;;;;;AChtBN;;AAEb;;AAEA,eAAe,mBAAO,EAAE,8FAA8B;AACtD,2BAA2B,mBAAO,EAAE,oGAAiC;AACrE,WAAW,mBAAO,EAAE,wDAAW;AAC/B,aAAa,mBAAO,EAAE,4EAAqB;;;AAG3C;;AAEA,wCAAwC;;;AAGxC;;AAEA;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,UAAU,OAAO;AACjB,UAAU,OAAO;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;AC5Da;;AAEb;;AAEA,eAAe,mBAAO,EAAE,8FAA8B;AACtD,2BAA2B,mBAAO,EAAE,oGAAiC;;;AAGrE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA,wCAAwC;;;AAGxC;;AAEA;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,UAAU,OAAO;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,EAAE;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;AC1Fa;;AAEb;;AAEA,eAAe,mBAAO,EAAE,8FAA8B;AACtD,2BAA2B,mBAAO,EAAE,oGAAiC;AACrE,WAAW,mBAAO,EAAE,wDAAW;AAC/B,aAAa,mBAAO,EAAE,4EAAqB;;;AAG3C;;AAEA,wCAAwC;;;AAGxC;;AAEA;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,UAAU,OAAO;AACjB,UAAU,OAAO;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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","file":"ami.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"AMI\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"AMI\"] = factory();\n\telse\n\t\troot[\"AMI\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","// jshint ignore: start\r\n\r\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /\r\n /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\r\n/*\r\n Copyright 2011 notmasteryet\r\n\r\n Licensed under the Apache License, Version 2.0 (the \"License\");\r\n you may not use this file except in compliance with the License.\r\n You may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n Unless required by applicable law or agreed to in writing, software\r\n distributed under the License is distributed on an \"AS IS\" BASIS,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n See the License for the specific language governing permissions and\r\n limitations under the License.\r\n */\r\n\r\n// - The JPEG specification can be found in the ITU CCITT Recommendation T.81\r\n// (www.w3.org/Graphics/JPEG/itu-t81.pdf)\r\n// - The JFIF specification can be found in the JPEG File Interchange Format\r\n// (www.w3.org/Graphics/JPEG/jfif3.pdf)\r\n// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters\r\n// in PostScript Level 2, Technical Note #5116\r\n// (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)\r\n\r\nvar ColorSpace = {Unkown: 0, Grayscale: 1, AdobeRGB: 2, RGB: 3, CYMK: 4};\r\nvar JpegImage = (function jpegImage() {\r\n \"use strict\";\r\n var dctZigZag = new Int32Array([\r\n 0,\r\n 1, 8,\r\n 16, 9, 2,\r\n 3, 10, 17, 24,\r\n 32, 25, 18, 11, 4,\r\n 5, 12, 19, 26, 33, 40,\r\n 48, 41, 34, 27, 20, 13, 6,\r\n 7, 14, 21, 28, 35, 42, 49, 56,\r\n 57, 50, 43, 36, 29, 22, 15,\r\n 23, 30, 37, 44, 51, 58,\r\n 59, 52, 45, 38, 31,\r\n 39, 46, 53, 60,\r\n 61, 54, 47,\r\n 55, 62,\r\n 63\r\n ]);\r\n\r\n var dctCos1 = 4017; // cos(pi/16)\r\n var dctSin1 = 799; // sin(pi/16)\r\n var dctCos3 = 3406; // cos(3*pi/16)\r\n var dctSin3 = 2276; // sin(3*pi/16)\r\n var dctCos6 = 1567; // cos(6*pi/16)\r\n var dctSin6 = 3784; // sin(6*pi/16)\r\n var dctSqrt2 = 5793; // sqrt(2)\r\n var dctSqrt1d2 = 2896; // sqrt(2) / 2\r\n\r\n function constructor() {\r\n }\r\n\r\n function buildHuffmanTable(codeLengths, values) {\r\n var k = 0, code = [], i, j, length = 16;\r\n while (length > 0 && !codeLengths[length - 1])\r\n length--;\r\n code.push({children: [], index: 0});\r\n var p = code[0], q;\r\n for (i = 0; i < length; i++) {\r\n for (j = 0; j < codeLengths[i]; j++) {\r\n p = code.pop();\r\n p.children[p.index] = values[k];\r\n while (p.index > 0) {\r\n p = code.pop();\r\n }\r\n p.index++;\r\n code.push(p);\r\n while (code.length <= i) {\r\n code.push(q = {children: [], index: 0});\r\n p.children[p.index] = q.children;\r\n p = q;\r\n }\r\n k++;\r\n }\r\n if (i + 1 < length) {\r\n // p here points to last code\r\n code.push(q = {children: [], index: 0});\r\n p.children[p.index] = q.children;\r\n p = q;\r\n }\r\n }\r\n return code[0].children;\r\n }\r\n\r\n function getBlockBufferOffset(component, row, col) {\r\n return 64 * ((component.blocksPerLine + 1) * row + col);\r\n }\r\n\r\n function decodeScan(data, offset,\r\n frame, components, resetInterval,\r\n spectralStart, spectralEnd,\r\n successivePrev, successive) {\r\n var precision = frame.precision;\r\n var samplesPerLine = frame.samplesPerLine;\r\n var scanLines = frame.scanLines;\r\n var mcusPerLine = frame.mcusPerLine;\r\n var progressive = frame.progressive;\r\n var maxH = frame.maxH, maxV = frame.maxV;\r\n\r\n var startOffset = offset, bitsData = 0, bitsCount = 0;\r\n\r\n function readBit() {\r\n if (bitsCount > 0) {\r\n bitsCount--;\r\n return (bitsData >> bitsCount) & 1;\r\n }\r\n bitsData = data[offset++];\r\n if (bitsData == 0xFF) {\r\n var nextByte = data[offset++];\r\n if (nextByte) {\r\n throw \"unexpected marker: \" + ((bitsData << 8) | nextByte).toString(16);\r\n }\r\n // unstuff 0\r\n }\r\n bitsCount = 7;\r\n return bitsData >>> 7;\r\n }\r\n\r\n function decodeHuffman(tree) {\r\n var node = tree;\r\n var bit;\r\n while ((bit = readBit()) !== null) {\r\n node = node[bit];\r\n if (typeof node === 'number')\r\n return node;\r\n if (typeof node !== 'object')\r\n throw \"invalid huffman sequence\";\r\n }\r\n return null;\r\n }\r\n\r\n function receive(length) {\r\n var n = 0;\r\n while (length > 0) {\r\n var bit = readBit();\r\n if (bit === null)\r\n return;\r\n n = (n << 1) | bit;\r\n length--;\r\n }\r\n return n;\r\n }\r\n\r\n function receiveAndExtend(length) {\r\n var n = receive(length);\r\n if (n >= 1 << (length - 1))\r\n return n;\r\n return n + (-1 << length) + 1;\r\n }\r\n\r\n function decodeBaseline(component, offset) {\r\n var t = decodeHuffman(component.huffmanTableDC);\r\n var diff = t === 0 ? 0 : receiveAndExtend(t);\r\n component.blockData[offset] = (component.pred += diff);\r\n var k = 1;\r\n while (k < 64) {\r\n var rs = decodeHuffman(component.huffmanTableAC);\r\n var s = rs & 15, r = rs >> 4;\r\n if (s === 0) {\r\n if (r < 15)\r\n break;\r\n k += 16;\r\n continue;\r\n }\r\n k += r;\r\n var z = dctZigZag[k];\r\n component.blockData[offset + z] = receiveAndExtend(s);\r\n k++;\r\n }\r\n }\r\n\r\n function decodeDCFirst(component, offset) {\r\n var t = decodeHuffman(component.huffmanTableDC);\r\n var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive);\r\n component.blockData[offset] = (component.pred += diff);\r\n }\r\n\r\n function decodeDCSuccessive(component, offset) {\r\n component.blockData[offset] |= readBit() << successive;\r\n }\r\n\r\n var eobrun = 0;\r\n function decodeACFirst(component, offset) {\r\n if (eobrun > 0) {\r\n eobrun--;\r\n return;\r\n }\r\n var k = spectralStart, e = spectralEnd;\r\n while (k <= e) {\r\n var rs = decodeHuffman(component.huffmanTableAC);\r\n var s = rs & 15, r = rs >> 4;\r\n if (s === 0) {\r\n if (r < 15) {\r\n eobrun = receive(r) + (1 << r) - 1;\r\n break;\r\n }\r\n k += 16;\r\n continue;\r\n }\r\n k += r;\r\n var z = dctZigZag[k];\r\n component.blockData[offset + z] = receiveAndExtend(s) * (1 << successive);\r\n k++;\r\n }\r\n }\r\n\r\n var successiveACState = 0, successiveACNextValue;\r\n function decodeACSuccessive(component, offset) {\r\n var k = spectralStart, e = spectralEnd, r = 0;\r\n while (k <= e) {\r\n var z = dctZigZag[k];\r\n switch (successiveACState) {\r\n case 0: // initial state\r\n var rs = decodeHuffman(component.huffmanTableAC);\r\n var s = rs & 15;\r\n r = rs >> 4;\r\n if (s === 0) {\r\n if (r < 15) {\r\n eobrun = receive(r) + (1 << r);\r\n successiveACState = 4;\r\n } else {\r\n r = 16;\r\n successiveACState = 1;\r\n }\r\n } else {\r\n if (s !== 1)\r\n throw \"invalid ACn encoding\";\r\n successiveACNextValue = receiveAndExtend(s);\r\n successiveACState = r ? 2 : 3;\r\n }\r\n continue;\r\n case 1: // skipping r zero items\r\n case 2:\r\n if (component.blockData[offset + z]) {\r\n component.blockData[offset + z] += (readBit() << successive);\r\n } else {\r\n r--;\r\n if (r === 0)\r\n successiveACState = successiveACState == 2 ? 3 : 0;\r\n }\r\n break;\r\n case 3: // set value for a zero item\r\n if (component.blockData[offset + z]) {\r\n component.blockData[offset + z] += (readBit() << successive);\r\n } else {\r\n component.blockData[offset + z] = successiveACNextValue << successive;\r\n successiveACState = 0;\r\n }\r\n break;\r\n case 4: // eob\r\n if (component.blockData[offset + z]) {\r\n component.blockData[offset + z] += (readBit() << successive);\r\n }\r\n break;\r\n }\r\n k++;\r\n }\r\n if (successiveACState === 4) {\r\n eobrun--;\r\n if (eobrun === 0)\r\n successiveACState = 0;\r\n }\r\n }\r\n\r\n function decodeMcu(component, decode, mcu, row, col) {\r\n var mcuRow = (mcu / mcusPerLine) | 0;\r\n var mcuCol = mcu % mcusPerLine;\r\n var blockRow = mcuRow * component.v + row;\r\n var blockCol = mcuCol * component.h + col;\r\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\r\n decode(component, offset);\r\n }\r\n\r\n function decodeBlock(component, decode, mcu) {\r\n var blockRow = (mcu / component.blocksPerLine) | 0;\r\n var blockCol = mcu % component.blocksPerLine;\r\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\r\n decode(component, offset);\r\n }\r\n\r\n var componentsLength = components.length;\r\n var component, i, j, k, n;\r\n var decodeFn;\r\n if (progressive) {\r\n if (spectralStart === 0)\r\n decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\r\n else\r\n decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\r\n } else {\r\n decodeFn = decodeBaseline;\r\n }\r\n\r\n var mcu = 0, marker;\r\n var mcuExpected;\r\n if (componentsLength == 1) {\r\n mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\r\n } else {\r\n mcuExpected = mcusPerLine * frame.mcusPerColumn;\r\n }\r\n if (!resetInterval) {\r\n resetInterval = mcuExpected;\r\n }\r\n\r\n var h, v;\r\n while (mcu < mcuExpected) {\r\n // reset interval stuff\r\n for (i = 0; i < componentsLength; i++) {\r\n components[i].pred = 0;\r\n }\r\n eobrun = 0;\r\n\r\n if (componentsLength == 1) {\r\n component = components[0];\r\n for (n = 0; n < resetInterval; n++) {\r\n decodeBlock(component, decodeFn, mcu);\r\n mcu++;\r\n }\r\n } else {\r\n for (n = 0; n < resetInterval; n++) {\r\n for (i = 0; i < componentsLength; i++) {\r\n component = components[i];\r\n h = component.h;\r\n v = component.v;\r\n for (j = 0; j < v; j++) {\r\n for (k = 0; k < h; k++) {\r\n decodeMcu(component, decodeFn, mcu, j, k);\r\n }\r\n }\r\n }\r\n mcu++;\r\n }\r\n }\r\n\r\n // find marker\r\n bitsCount = 0;\r\n marker = (data[offset] << 8) | data[offset + 1];\r\n if (marker <= 0xFF00) {\r\n throw \"marker was not found\";\r\n }\r\n\r\n if (marker >= 0xFFD0 && marker <= 0xFFD7) { // RSTx\r\n offset += 2;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return offset - startOffset;\r\n }\r\n\r\n // A port of poppler's IDCT method which in turn is taken from:\r\n // Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\r\n // \"Practical Fast 1-D DCT Algorithms with 11 Multiplications\",\r\n // IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\r\n // 988-991.\r\n function quantizeAndInverse(component, blockBufferOffset, p) {\r\n var qt = component.quantizationTable;\r\n var v0, v1, v2, v3, v4, v5, v6, v7, t;\r\n var i;\r\n\r\n // dequant\r\n for (i = 0; i < 64; i++) {\r\n p[i] = component.blockData[blockBufferOffset + i] * qt[i];\r\n }\r\n\r\n // inverse DCT on rows\r\n for (i = 0; i < 8; ++i) {\r\n var row = 8 * i;\r\n\r\n // check for all-zero AC coefficients\r\n if (p[1 + row] === 0 && p[2 + row] === 0 && p[3 + row] === 0 &&\r\n p[4 + row] === 0 && p[5 + row] === 0 && p[6 + row] === 0 &&\r\n p[7 + row] === 0) {\r\n t = (dctSqrt2 * p[0 + row] + 512) >> 10;\r\n p[0 + row] = t;\r\n p[1 + row] = t;\r\n p[2 + row] = t;\r\n p[3 + row] = t;\r\n p[4 + row] = t;\r\n p[5 + row] = t;\r\n p[6 + row] = t;\r\n p[7 + row] = t;\r\n continue;\r\n }\r\n\r\n // stage 4\r\n v0 = (dctSqrt2 * p[0 + row] + 128) >> 8;\r\n v1 = (dctSqrt2 * p[4 + row] + 128) >> 8;\r\n v2 = p[2 + row];\r\n v3 = p[6 + row];\r\n v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8;\r\n v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8;\r\n v5 = p[3 + row] << 4;\r\n v6 = p[5 + row] << 4;\r\n\r\n // stage 3\r\n t = (v0 - v1 + 1) >> 1;\r\n v0 = (v0 + v1 + 1) >> 1;\r\n v1 = t;\r\n t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\r\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\r\n v3 = t;\r\n t = (v4 - v6 + 1) >> 1;\r\n v4 = (v4 + v6 + 1) >> 1;\r\n v6 = t;\r\n t = (v7 + v5 + 1) >> 1;\r\n v5 = (v7 - v5 + 1) >> 1;\r\n v7 = t;\r\n\r\n // stage 2\r\n t = (v0 - v3 + 1) >> 1;\r\n v0 = (v0 + v3 + 1) >> 1;\r\n v3 = t;\r\n t = (v1 - v2 + 1) >> 1;\r\n v1 = (v1 + v2 + 1) >> 1;\r\n v2 = t;\r\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\r\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\r\n v7 = t;\r\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\r\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\r\n v6 = t;\r\n\r\n // stage 1\r\n p[0 + row] = v0 + v7;\r\n p[7 + row] = v0 - v7;\r\n p[1 + row] = v1 + v6;\r\n p[6 + row] = v1 - v6;\r\n p[2 + row] = v2 + v5;\r\n p[5 + row] = v2 - v5;\r\n p[3 + row] = v3 + v4;\r\n p[4 + row] = v3 - v4;\r\n }\r\n\r\n // inverse DCT on columns\r\n for (i = 0; i < 8; ++i) {\r\n var col = i;\r\n\r\n // check for all-zero AC coefficients\r\n if (p[1 * 8 + col] === 0 && p[2 * 8 + col] === 0 && p[3 * 8 + col] === 0 &&\r\n p[4 * 8 + col] === 0 && p[5 * 8 + col] === 0 && p[6 * 8 + col] === 0 &&\r\n p[7 * 8 + col] === 0) {\r\n t = (dctSqrt2 * p[i + 0] + 8192) >> 14;\r\n p[0 * 8 + col] = t;\r\n p[1 * 8 + col] = t;\r\n p[2 * 8 + col] = t;\r\n p[3 * 8 + col] = t;\r\n p[4 * 8 + col] = t;\r\n p[5 * 8 + col] = t;\r\n p[6 * 8 + col] = t;\r\n p[7 * 8 + col] = t;\r\n continue;\r\n }\r\n\r\n // stage 4\r\n v0 = (dctSqrt2 * p[0 * 8 + col] + 2048) >> 12;\r\n v1 = (dctSqrt2 * p[4 * 8 + col] + 2048) >> 12;\r\n v2 = p[2 * 8 + col];\r\n v3 = p[6 * 8 + col];\r\n v4 = (dctSqrt1d2 * (p[1 * 8 + col] - p[7 * 8 + col]) + 2048) >> 12;\r\n v7 = (dctSqrt1d2 * (p[1 * 8 + col] + p[7 * 8 + col]) + 2048) >> 12;\r\n v5 = p[3 * 8 + col];\r\n v6 = p[5 * 8 + col];\r\n\r\n // stage 3\r\n t = (v0 - v1 + 1) >> 1;\r\n v0 = (v0 + v1 + 1) >> 1;\r\n v1 = t;\r\n t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\r\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\r\n v3 = t;\r\n t = (v4 - v6 + 1) >> 1;\r\n v4 = (v4 + v6 + 1) >> 1;\r\n v6 = t;\r\n t = (v7 + v5 + 1) >> 1;\r\n v5 = (v7 - v5 + 1) >> 1;\r\n v7 = t;\r\n\r\n // stage 2\r\n t = (v0 - v3 + 1) >> 1;\r\n v0 = (v0 + v3 + 1) >> 1;\r\n v3 = t;\r\n t = (v1 - v2 + 1) >> 1;\r\n v1 = (v1 + v2 + 1) >> 1;\r\n v2 = t;\r\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\r\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\r\n v7 = t;\r\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\r\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\r\n v6 = t;\r\n\r\n // stage 1\r\n p[0 * 8 + col] = v0 + v7;\r\n p[7 * 8 + col] = v0 - v7;\r\n p[1 * 8 + col] = v1 + v6;\r\n p[6 * 8 + col] = v1 - v6;\r\n p[2 * 8 + col] = v2 + v5;\r\n p[5 * 8 + col] = v2 - v5;\r\n p[3 * 8 + col] = v3 + v4;\r\n p[4 * 8 + col] = v3 - v4;\r\n }\r\n\r\n // convert to 8-bit integers\r\n for (i = 0; i < 64; ++i) {\r\n var index = blockBufferOffset + i;\r\n var q = p[i];\r\n q = (q <= -2056 / component.bitConversion) ? 0 :\r\n (q >= 2024 / component.bitConversion) ? 255 / component.bitConversion :\r\n (q + 2056 / component.bitConversion) >> 4;\r\n component.blockData[index] = q;\r\n }\r\n }\r\n\r\n function buildComponentData(frame, component) {\r\n var lines = [];\r\n var blocksPerLine = component.blocksPerLine;\r\n var blocksPerColumn = component.blocksPerColumn;\r\n var samplesPerLine = blocksPerLine << 3;\r\n var computationBuffer = new Int32Array(64);\r\n\r\n var i, j, ll = 0;\r\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\r\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\r\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\r\n quantizeAndInverse(component, offset, computationBuffer);\r\n }\r\n }\r\n return component.blockData;\r\n }\r\n\r\n function clampToUint8(a) {\r\n return a <= 0 ? 0 : a >= 255 ? 255 : a | 0;\r\n }\r\n\r\n constructor.prototype = {\r\n load: function load(path) {\r\n var handleData = (function (data) {\r\n this.parse(data);\r\n if (this.onload)\r\n this.onload();\r\n }).bind(this);\r\n\r\n if (path.indexOf(\"data:\") > -1) {\r\n var offset = path.indexOf(\"base64,\") + 7;\r\n var data = atob(path.substring(offset));\r\n var arr = new Uint8Array(data.length);\r\n for (var i = data.length - 1; i >= 0; i--) {\r\n arr[i] = data.charCodeAt(i);\r\n }\r\n handleData(data);\r\n } else {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open(\"GET\", path, true);\r\n xhr.responseType = \"arraybuffer\";\r\n xhr.onload = (function () {\r\n // TODO catch parse error\r\n var data = new Uint8Array(xhr.response);\r\n handleData(data);\r\n }).bind(this);\r\n xhr.send(null);\r\n }\r\n },\r\n parse: function parse(data) {\r\n\r\n function readUint16() {\r\n var value = (data[offset] << 8) | data[offset + 1];\r\n offset += 2;\r\n return value;\r\n }\r\n\r\n function readDataBlock() {\r\n var length = readUint16();\r\n var array = data.subarray(offset, offset + length - 2);\r\n offset += array.length;\r\n return array;\r\n }\r\n\r\n function prepareComponents(frame) {\r\n var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\r\n var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\r\n for (var i = 0; i < frame.components.length; i++) {\r\n component = frame.components[i];\r\n var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH);\r\n var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV);\r\n var blocksPerLineForMcu = mcusPerLine * component.h;\r\n var blocksPerColumnForMcu = mcusPerColumn * component.v;\r\n\r\n var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);\r\n component.blockData = new Int16Array(blocksBufferSize);\r\n component.blocksPerLine = blocksPerLine;\r\n component.blocksPerColumn = blocksPerColumn;\r\n }\r\n frame.mcusPerLine = mcusPerLine;\r\n frame.mcusPerColumn = mcusPerColumn;\r\n }\r\n\r\n var offset = 0, length = data.length;\r\n var jfif = null;\r\n var adobe = null;\r\n var pixels = null;\r\n var frame, resetInterval;\r\n var quantizationTables = [];\r\n var huffmanTablesAC = [], huffmanTablesDC = [];\r\n var fileMarker = readUint16();\r\n if (fileMarker != 0xFFD8) { // SOI (Start of Image)\r\n throw \"SOI not found\";\r\n }\r\n\r\n fileMarker = readUint16();\r\n while (fileMarker != 0xFFD9) { // EOI (End of image)\r\n var i, j, l;\r\n switch (fileMarker) {\r\n case 0xFFE0: // APP0 (Application Specific)\r\n case 0xFFE1: // APP1\r\n case 0xFFE2: // APP2\r\n case 0xFFE3: // APP3\r\n case 0xFFE4: // APP4\r\n case 0xFFE5: // APP5\r\n case 0xFFE6: // APP6\r\n case 0xFFE7: // APP7\r\n case 0xFFE8: // APP8\r\n case 0xFFE9: // APP9\r\n case 0xFFEA: // APP10\r\n case 0xFFEB: // APP11\r\n case 0xFFEC: // APP12\r\n case 0xFFED: // APP13\r\n case 0xFFEE: // APP14\r\n case 0xFFEF: // APP15\r\n case 0xFFFE: // COM (Comment)\r\n var appData = readDataBlock();\r\n\r\n if (fileMarker === 0xFFE0) {\r\n if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 &&\r\n appData[3] === 0x46 && appData[4] === 0) { // 'JFIF\\x00'\r\n jfif = {\r\n version: {major: appData[5], minor: appData[6]},\r\n densityUnits: appData[7],\r\n xDensity: (appData[8] << 8) | appData[9],\r\n yDensity: (appData[10] << 8) | appData[11],\r\n thumbWidth: appData[12],\r\n thumbHeight: appData[13],\r\n thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])\r\n };\r\n }\r\n }\r\n // TODO APP1 - Exif\r\n if (fileMarker === 0xFFEE) {\r\n if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F &&\r\n appData[3] === 0x62 && appData[4] === 0x65 && appData[5] === 0) { // 'Adobe\\x00'\r\n adobe = {\r\n version: appData[6],\r\n flags0: (appData[7] << 8) | appData[8],\r\n flags1: (appData[9] << 8) | appData[10],\r\n transformCode: appData[11]\r\n };\r\n }\r\n }\r\n break;\r\n\r\n case 0xFFDB: // DQT (Define Quantization Tables)\r\n var quantizationTablesLength = readUint16();\r\n var quantizationTablesEnd = quantizationTablesLength + offset - 2;\r\n while (offset < quantizationTablesEnd) {\r\n var quantizationTableSpec = data[offset++];\r\n var tableData = new Int32Array(64);\r\n if ((quantizationTableSpec >> 4) === 0) { // 8 bit values\r\n for (j = 0; j < 64; j++) {\r\n var z = dctZigZag[j];\r\n tableData[z] = data[offset++];\r\n }\r\n } else if ((quantizationTableSpec >> 4) === 1) { //16 bit\r\n for (j = 0; j < 64; j++) {\r\n var zz = dctZigZag[j];\r\n tableData[zz] = readUint16();\r\n }\r\n } else\r\n throw \"DQT: invalid table spec\";\r\n quantizationTables[quantizationTableSpec & 15] = tableData;\r\n }\r\n break;\r\n\r\n case 0xFFC0: // SOF0 (Start of Frame, Baseline DCT)\r\n case 0xFFC1: // SOF1 (Start of Frame, Extended DCT)\r\n case 0xFFC2: // SOF2 (Start of Frame, Progressive DCT)\r\n if (frame) {\r\n throw \"Only single frame JPEGs supported\";\r\n }\r\n readUint16(); // skip data length\r\n frame = {};\r\n frame.extended = (fileMarker === 0xFFC1);\r\n frame.progressive = (fileMarker === 0xFFC2);\r\n frame.precision = data[offset++];\r\n frame.scanLines = readUint16();\r\n frame.samplesPerLine = readUint16();\r\n frame.components = [];\r\n frame.componentIds = {};\r\n var componentsCount = data[offset++], componentId;\r\n var maxH = 0, maxV = 0;\r\n for (i = 0; i < componentsCount; i++) {\r\n componentId = data[offset];\r\n var h = data[offset + 1] >> 4;\r\n var v = data[offset + 1] & 15;\r\n if (maxH < h)\r\n maxH = h;\r\n if (maxV < v)\r\n maxV = v;\r\n var qId = data[offset + 2];\r\n l = frame.components.push({\r\n h: h,\r\n v: v,\r\n quantizationTable: quantizationTables[qId],\r\n quantizationTableId: qId,\r\n bitConversion: 255 / ((1 << frame.precision) - 1)\r\n });\r\n frame.componentIds[componentId] = l - 1;\r\n offset += 3;\r\n }\r\n frame.maxH = maxH;\r\n frame.maxV = maxV;\r\n prepareComponents(frame);\r\n break;\r\n\r\n case 0xFFC4: // DHT (Define Huffman Tables)\r\n var huffmanLength = readUint16();\r\n for (i = 2; i < huffmanLength; ) {\r\n var huffmanTableSpec = data[offset++];\r\n var codeLengths = new Uint8Array(16);\r\n var codeLengthSum = 0;\r\n for (j = 0; j < 16; j++, offset++)\r\n codeLengthSum += (codeLengths[j] = data[offset]);\r\n var huffmanValues = new Uint8Array(codeLengthSum);\r\n for (j = 0; j < codeLengthSum; j++, offset++)\r\n huffmanValues[j] = data[offset];\r\n i += 17 + codeLengthSum;\r\n\r\n ((huffmanTableSpec >> 4) === 0 ?\r\n huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] =\r\n buildHuffmanTable(codeLengths, huffmanValues);\r\n }\r\n break;\r\n\r\n case 0xFFDD: // DRI (Define Restart Interval)\r\n readUint16(); // skip data length\r\n resetInterval = readUint16();\r\n break;\r\n\r\n case 0xFFDA: // SOS (Start of Scan)\r\n var scanLength = readUint16();\r\n var selectorsCount = data[offset++];\r\n var components = [], component;\r\n for (i = 0; i < selectorsCount; i++) {\r\n var componentIndex = frame.componentIds[data[offset++]];\r\n component = frame.components[componentIndex];\r\n var tableSpec = data[offset++];\r\n component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\r\n component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\r\n components.push(component);\r\n }\r\n var spectralStart = data[offset++];\r\n var spectralEnd = data[offset++];\r\n var successiveApproximation = data[offset++];\r\n var processed = decodeScan(data, offset,\r\n frame, components, resetInterval,\r\n spectralStart, spectralEnd,\r\n successiveApproximation >> 4, successiveApproximation & 15);\r\n offset += processed;\r\n break;\r\n default:\r\n if (data[offset - 3] == 0xFF &&\r\n data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) {\r\n // could be incorrect encoding -- last 0xFF byte of the previous\r\n // block was eaten by the encoder\r\n offset -= 3;\r\n break;\r\n }\r\n throw \"unknown JPEG marker \" + fileMarker.toString(16);\r\n }\r\n fileMarker = readUint16();\r\n }\r\n\r\n this.width = frame.samplesPerLine;\r\n this.height = frame.scanLines;\r\n this.jfif = jfif;\r\n this.adobe = adobe;\r\n this.components = [];\r\n switch (frame.components.length)\r\n {\r\n case 1:\r\n this.colorspace = ColorSpace.Grayscale;\r\n break;\r\n case 3:\r\n if (this.adobe)\r\n this.colorspace = ColorSpace.AdobeRGB;\r\n else\r\n this.colorspace = ColorSpace.RGB;\r\n break;\r\n case 4:\r\n this.colorspace = ColorSpace.CYMK;\r\n break;\r\n default:\r\n this.colorspace = ColorSpace.Unknown;\r\n }\r\n for (var i = 0; i < frame.components.length; i++) {\r\n var component = frame.components[i];\r\n if (!component.quantizationTable && component.quantizationTableId !== null)\r\n component.quantizationTable = quantizationTables[component.quantizationTableId];\r\n this.components.push({\r\n output: buildComponentData(frame, component),\r\n scaleX: component.h / frame.maxH,\r\n scaleY: component.v / frame.maxV,\r\n blocksPerLine: component.blocksPerLine,\r\n blocksPerColumn: component.blocksPerColumn,\r\n bitConversion: component.bitConversion\r\n });\r\n }\r\n },\r\n getData16: function getData16(width, height) {\r\n if (this.components.length !== 1)\r\n throw 'Unsupported color mode';\r\n var scaleX = this.width / width, scaleY = this.height / height;\r\n\r\n var component, componentScaleX, componentScaleY;\r\n var x, y, i;\r\n var offset = 0;\r\n var numComponents = this.components.length;\r\n var dataLength = width * height * numComponents;\r\n var data = new Uint16Array(dataLength);\r\n var componentLine;\r\n\r\n // lineData is reused for all components. Assume first component is\r\n // the biggest\r\n var lineData = new Uint16Array((this.components[0].blocksPerLine << 3) *\r\n this.components[0].blocksPerColumn * 8);\r\n\r\n // First construct image data ...\r\n for (i = 0; i < numComponents; i++) {\r\n component = this.components[i];\r\n var blocksPerLine = component.blocksPerLine;\r\n var blocksPerColumn = component.blocksPerColumn;\r\n var samplesPerLine = blocksPerLine << 3;\r\n\r\n var j, k, ll = 0;\r\n var lineOffset = 0;\r\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\r\n var scanLine = blockRow << 3;\r\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\r\n var bufferOffset = getBlockBufferOffset(component, blockRow, blockCol);\r\n var offset = 0, sample = blockCol << 3;\r\n for (j = 0; j < 8; j++) {\r\n var lineOffset = (scanLine + j) * samplesPerLine;\r\n for (k = 0; k < 8; k++) {\r\n lineData[lineOffset + sample + k] =\r\n component.output[bufferOffset + offset++];\r\n }\r\n }\r\n }\r\n }\r\n\r\n componentScaleX = component.scaleX * scaleX;\r\n componentScaleY = component.scaleY * scaleY;\r\n offset = i;\r\n\r\n var cx, cy;\r\n var index;\r\n for (y = 0; y < height; y++) {\r\n for (x = 0; x < width; x++) {\r\n cy = 0 | (y * componentScaleY);\r\n cx = 0 | (x * componentScaleX);\r\n index = cy * samplesPerLine + cx;\r\n data[offset] = lineData[index];\r\n offset += numComponents;\r\n }\r\n }\r\n }\r\n return data;\r\n },\r\n getData: function getData(width, height) {\r\n var scaleX = this.width / width, scaleY = this.height / height;\r\n\r\n var component, componentScaleX, componentScaleY;\r\n var x, y, i;\r\n var offset = 0;\r\n var Y, Cb, Cr, K, C, M, Ye, R, G, B;\r\n var colorTransform;\r\n var numComponents = this.components.length;\r\n var dataLength = width * height * numComponents;\r\n var data = new Uint8Array(dataLength);\r\n var componentLine;\r\n\r\n // lineData is reused for all components. Assume first component is\r\n // the biggest\r\n var lineData = new Uint8Array((this.components[0].blocksPerLine << 3) *\r\n this.components[0].blocksPerColumn * 8);\r\n\r\n // First construct image data ...\r\n for (i = 0; i < numComponents; i++) {\r\n component = this.components[i];\r\n var blocksPerLine = component.blocksPerLine;\r\n var blocksPerColumn = component.blocksPerColumn;\r\n var samplesPerLine = blocksPerLine << 3;\r\n\r\n var j, k, ll = 0;\r\n var lineOffset = 0;\r\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\r\n var scanLine = blockRow << 3;\r\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\r\n var bufferOffset = getBlockBufferOffset(component, blockRow, blockCol);\r\n var offset = 0, sample = blockCol << 3;\r\n for (j = 0; j < 8; j++) {\r\n var lineOffset = (scanLine + j) * samplesPerLine;\r\n for (k = 0; k < 8; k++) {\r\n lineData[lineOffset + sample + k] =\r\n component.output[bufferOffset + offset++] * component.bitConversion;\r\n }\r\n }\r\n }\r\n }\r\n\r\n componentScaleX = component.scaleX * scaleX;\r\n componentScaleY = component.scaleY * scaleY;\r\n offset = i;\r\n\r\n var cx, cy;\r\n var index;\r\n for (y = 0; y < height; y++) {\r\n for (x = 0; x < width; x++) {\r\n cy = 0 | (y * componentScaleY);\r\n cx = 0 | (x * componentScaleX);\r\n index = cy * samplesPerLine + cx;\r\n data[offset] = lineData[index];\r\n offset += numComponents;\r\n }\r\n }\r\n }\r\n\r\n // ... then transform colors, if necessary\r\n switch (numComponents) {\r\n case 1:\r\n case 2:\r\n break;\r\n // no color conversion for one or two compoenents\r\n\r\n case 3:\r\n // The default transform for three components is true\r\n colorTransform = true;\r\n // The adobe transform marker overrides any previous setting\r\n if (this.adobe && this.adobe.transformCode)\r\n colorTransform = true;\r\n else if (typeof this.colorTransform !== 'undefined')\r\n colorTransform = !!this.colorTransform;\r\n\r\n if (colorTransform) {\r\n for (i = 0; i < dataLength; i += numComponents) {\r\n Y = data[i ];\r\n Cb = data[i + 1];\r\n Cr = data[i + 2];\r\n\r\n R = clampToUint8(Y - 179.456 + 1.402 * Cr);\r\n G = clampToUint8(Y + 135.459 - 0.344 * Cb - 0.714 * Cr);\r\n B = clampToUint8(Y - 226.816 + 1.772 * Cb);\r\n\r\n data[i ] = R;\r\n data[i + 1] = G;\r\n data[i + 2] = B;\r\n }\r\n }\r\n break;\r\n case 4:\r\n if (!this.adobe)\r\n throw 'Unsupported color mode (4 components)';\r\n // The default transform for four components is false\r\n colorTransform = false;\r\n // The adobe transform marker overrides any previous setting\r\n if (this.adobe && this.adobe.transformCode)\r\n colorTransform = true;\r\n else if (typeof this.colorTransform !== 'undefined')\r\n colorTransform = !!this.colorTransform;\r\n\r\n if (colorTransform) {\r\n for (i = 0; i < dataLength; i += numComponents) {\r\n Y = data[i];\r\n Cb = data[i + 1];\r\n Cr = data[i + 2];\r\n\r\n C = clampToUint8(434.456 - Y - 1.402 * Cr);\r\n M = clampToUint8(119.541 - Y + 0.344 * Cb + 0.714 * Cr);\r\n Y = clampToUint8(481.816 - Y - 1.772 * Cb);\r\n\r\n data[i ] = C;\r\n data[i + 1] = M;\r\n data[i + 2] = Y;\r\n // K is unchanged\r\n }\r\n }\r\n break;\r\n default:\r\n throw 'Unsupported color mode';\r\n }\r\n return data;\r\n }\r\n };\r\n\r\n return constructor;\r\n})();\r\n\r\nvar moduleType = typeof module;\r\nif ((moduleType !== 'undefined') && module.exports) {\r\n module.exports = JpegImage;\r\n}","/*! image-JPEG2000 - v0.3.1 - 2015-08-26 | https://github.com/OHIF/image-JPEG2000 */\r\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\r\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\r\n/* Copyright 2012 Mozilla Foundation\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/* globals ArithmeticDecoder, globalScope, log2, readUint16, readUint32,\r\n info, warn */\r\n\r\n'use strict';\r\n\r\nvar JpxImage = (function JpxImageClosure() {\r\n // Table E.1\r\n var SubbandsGainLog2 = {\r\n 'LL': 0,\r\n 'LH': 1,\r\n 'HL': 1,\r\n 'HH': 2\r\n };\r\n function JpxImage() {\r\n this.failOnCorruptedImage = false;\r\n }\r\n JpxImage.prototype = {\r\n parse: function JpxImage_parse(data) {\r\n\r\n var head = readUint16(data, 0);\r\n // No box header, immediate start of codestream (SOC)\r\n if (head === 0xFF4F) {\r\n this.parseCodestream(data, 0, data.length);\r\n return;\r\n }\r\n\r\n var position = 0, length = data.length;\r\n while (position < length) {\r\n var headerSize = 8;\r\n var lbox = readUint32(data, position);\r\n var tbox = readUint32(data, position + 4);\r\n position += headerSize;\r\n if (lbox === 1) {\r\n // XLBox: read UInt64 according to spec.\r\n // JavaScript's int precision of 53 bit should be sufficient here.\r\n lbox = readUint32(data, position) * 4294967296 +\r\n readUint32(data, position + 4);\r\n position += 8;\r\n headerSize += 8;\r\n }\r\n if (lbox === 0) {\r\n lbox = length - position + headerSize;\r\n }\r\n if (lbox < headerSize) {\r\n throw new Error('JPX Error: Invalid box field size');\r\n }\r\n var dataLength = lbox - headerSize;\r\n var jumpDataLength = true;\r\n switch (tbox) {\r\n case 0x6A703268: // 'jp2h'\r\n jumpDataLength = false; // parsing child boxes\r\n break;\r\n case 0x636F6C72: // 'colr'\r\n // Colorspaces are not used, the CS from the PDF is used.\r\n var method = data[position];\r\n var precedence = data[position + 1];\r\n var approximation = data[position + 2];\r\n if (method === 1) {\r\n // enumerated colorspace\r\n var colorspace = readUint32(data, position + 3);\r\n switch (colorspace) {\r\n case 16: // this indicates a sRGB colorspace\r\n case 17: // this indicates a grayscale colorspace\r\n case 18: // this indicates a YUV colorspace\r\n break;\r\n default:\r\n warn('Unknown colorspace ' + colorspace);\r\n break;\r\n }\r\n } else if (method === 2) {\r\n info('ICC profile not supported');\r\n }\r\n break;\r\n case 0x6A703263: // 'jp2c'\r\n this.parseCodestream(data, position, position + dataLength);\r\n break;\r\n case 0x6A502020: // 'jP\\024\\024'\r\n if (0x0d0a870a !== readUint32(data, position)) {\r\n warn('Invalid JP2 signature');\r\n }\r\n break;\r\n // The following header types are valid but currently not used:\r\n case 0x6A501A1A: // 'jP\\032\\032'\r\n case 0x66747970: // 'ftyp'\r\n case 0x72726571: // 'rreq'\r\n case 0x72657320: // 'res '\r\n case 0x69686472: // 'ihdr'\r\n break;\r\n default:\r\n var headerType = String.fromCharCode((tbox >> 24) & 0xFF,\r\n (tbox >> 16) & 0xFF,\r\n (tbox >> 8) & 0xFF,\r\n tbox & 0xFF);\r\n warn('Unsupported header type ' + tbox + ' (' + headerType + ')');\r\n break;\r\n }\r\n if (jumpDataLength) {\r\n position += dataLength;\r\n }\r\n }\r\n },\r\n parseImageProperties: function JpxImage_parseImageProperties(stream) {\r\n var newByte = stream.getByte();\r\n while (newByte >= 0) {\r\n var oldByte = newByte;\r\n newByte = stream.getByte();\r\n var code = (oldByte << 8) | newByte;\r\n // Image and tile size (SIZ)\r\n if (code === 0xFF51) {\r\n stream.skip(4);\r\n var Xsiz = stream.getInt32() >>> 0; // Byte 4\r\n var Ysiz = stream.getInt32() >>> 0; // Byte 8\r\n var XOsiz = stream.getInt32() >>> 0; // Byte 12\r\n var YOsiz = stream.getInt32() >>> 0; // Byte 16\r\n stream.skip(16);\r\n var Csiz = stream.getUint16(); // Byte 36\r\n this.width = Xsiz - XOsiz;\r\n this.height = Ysiz - YOsiz;\r\n this.componentsCount = Csiz;\r\n // Results are always returned as Uint8Arrays\r\n this.bitsPerComponent = 8;\r\n return;\r\n }\r\n }\r\n throw new Error('JPX Error: No size marker found in JPX stream');\r\n },\r\n parseCodestream: function JpxImage_parseCodestream(data, start, end) {\r\n var context = {};\r\n try {\r\n var doNotRecover = false;\r\n var position = start;\r\n while (position + 1 < end) {\r\n var code = readUint16(data, position);\r\n position += 2;\r\n\r\n var length = 0, j, sqcd, spqcds, spqcdSize, scalarExpounded, tile;\r\n switch (code) {\r\n case 0xFF4F: // Start of codestream (SOC)\r\n context.mainHeader = true;\r\n break;\r\n case 0xFFD9: // End of codestream (EOC)\r\n break;\r\n case 0xFF51: // Image and tile size (SIZ)\r\n length = readUint16(data, position);\r\n var siz = {};\r\n siz.Xsiz = readUint32(data, position + 4);\r\n siz.Ysiz = readUint32(data, position + 8);\r\n siz.XOsiz = readUint32(data, position + 12);\r\n siz.YOsiz = readUint32(data, position + 16);\r\n siz.XTsiz = readUint32(data, position + 20);\r\n siz.YTsiz = readUint32(data, position + 24);\r\n siz.XTOsiz = readUint32(data, position + 28);\r\n siz.YTOsiz = readUint32(data, position + 32);\r\n var componentsCount = readUint16(data, position + 36);\r\n siz.Csiz = componentsCount;\r\n var components = [];\r\n j = position + 38;\r\n for (var i = 0; i < componentsCount; i++) {\r\n var component = {\r\n precision: (data[j] & 0x7F) + 1,\r\n isSigned: !!(data[j] & 0x80),\r\n XRsiz: data[j + 1],\r\n YRsiz: data[j + 1]\r\n };\r\n calculateComponentDimensions(component, siz);\r\n components.push(component);\r\n }\r\n context.SIZ = siz;\r\n context.components = components;\r\n calculateTileGrids(context, components);\r\n context.QCC = [];\r\n context.COC = [];\r\n break;\r\n case 0xFF5C: // Quantization default (QCD)\r\n length = readUint16(data, position);\r\n var qcd = {};\r\n j = position + 2;\r\n sqcd = data[j++];\r\n switch (sqcd & 0x1F) {\r\n case 0:\r\n spqcdSize = 8;\r\n scalarExpounded = true;\r\n break;\r\n case 1:\r\n spqcdSize = 16;\r\n scalarExpounded = false;\r\n break;\r\n case 2:\r\n spqcdSize = 16;\r\n scalarExpounded = true;\r\n break;\r\n default:\r\n throw new Error('JPX Error: Invalid SQcd value ' + sqcd);\r\n }\r\n qcd.noQuantization = (spqcdSize === 8);\r\n qcd.scalarExpounded = scalarExpounded;\r\n qcd.guardBits = sqcd >> 5;\r\n spqcds = [];\r\n while (j < length + position) {\r\n var spqcd = {};\r\n if (spqcdSize === 8) {\r\n spqcd.epsilon = data[j++] >> 3;\r\n spqcd.mu = 0;\r\n } else {\r\n spqcd.epsilon = data[j] >> 3;\r\n spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1];\r\n j += 2;\r\n }\r\n spqcds.push(spqcd);\r\n }\r\n qcd.SPqcds = spqcds;\r\n if (context.mainHeader) {\r\n context.QCD = qcd;\r\n } else {\r\n context.currentTile.QCD = qcd;\r\n context.currentTile.QCC = [];\r\n }\r\n break;\r\n case 0xFF5D: // Quantization component (QCC)\r\n length = readUint16(data, position);\r\n var qcc = {};\r\n j = position + 2;\r\n var cqcc;\r\n if (context.SIZ.Csiz < 257) {\r\n cqcc = data[j++];\r\n } else {\r\n cqcc = readUint16(data, j);\r\n j += 2;\r\n }\r\n sqcd = data[j++];\r\n switch (sqcd & 0x1F) {\r\n case 0:\r\n spqcdSize = 8;\r\n scalarExpounded = true;\r\n break;\r\n case 1:\r\n spqcdSize = 16;\r\n scalarExpounded = false;\r\n break;\r\n case 2:\r\n spqcdSize = 16;\r\n scalarExpounded = true;\r\n break;\r\n default:\r\n throw new Error('JPX Error: Invalid SQcd value ' + sqcd);\r\n }\r\n qcc.noQuantization = (spqcdSize === 8);\r\n qcc.scalarExpounded = scalarExpounded;\r\n qcc.guardBits = sqcd >> 5;\r\n spqcds = [];\r\n while (j < (length + position)) {\r\n spqcd = {};\r\n if (spqcdSize === 8) {\r\n spqcd.epsilon = data[j++] >> 3;\r\n spqcd.mu = 0;\r\n } else {\r\n spqcd.epsilon = data[j] >> 3;\r\n spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1];\r\n j += 2;\r\n }\r\n spqcds.push(spqcd);\r\n }\r\n qcc.SPqcds = spqcds;\r\n if (context.mainHeader) {\r\n context.QCC[cqcc] = qcc;\r\n } else {\r\n context.currentTile.QCC[cqcc] = qcc;\r\n }\r\n break;\r\n case 0xFF52: // Coding style default (COD)\r\n length = readUint16(data, position);\r\n var cod = {};\r\n j = position + 2;\r\n var scod = data[j++];\r\n cod.entropyCoderWithCustomPrecincts = !!(scod & 1);\r\n cod.sopMarkerUsed = !!(scod & 2);\r\n cod.ephMarkerUsed = !!(scod & 4);\r\n cod.progressionOrder = data[j++];\r\n cod.layersCount = readUint16(data, j);\r\n j += 2;\r\n cod.multipleComponentTransform = data[j++];\r\n\r\n cod.decompositionLevelsCount = data[j++];\r\n cod.xcb = (data[j++] & 0xF) + 2;\r\n cod.ycb = (data[j++] & 0xF) + 2;\r\n var blockStyle = data[j++];\r\n cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);\r\n cod.resetContextProbabilities = !!(blockStyle & 2);\r\n cod.terminationOnEachCodingPass = !!(blockStyle & 4);\r\n cod.verticalyStripe = !!(blockStyle & 8);\r\n cod.predictableTermination = !!(blockStyle & 16);\r\n cod.segmentationSymbolUsed = !!(blockStyle & 32);\r\n cod.reversibleTransformation = data[j++];\r\n if (cod.entropyCoderWithCustomPrecincts) {\r\n var precinctsSizes = [];\r\n while (j < length + position) {\r\n var precinctsSize = data[j++];\r\n precinctsSizes.push({\r\n PPx: precinctsSize & 0xF,\r\n PPy: precinctsSize >> 4\r\n });\r\n }\r\n cod.precinctsSizes = precinctsSizes;\r\n }\r\n var unsupported = [];\r\n if (cod.selectiveArithmeticCodingBypass) {\r\n unsupported.push('selectiveArithmeticCodingBypass');\r\n }\r\n if (cod.resetContextProbabilities) {\r\n unsupported.push('resetContextProbabilities');\r\n }\r\n if (cod.terminationOnEachCodingPass) {\r\n unsupported.push('terminationOnEachCodingPass');\r\n }\r\n if (cod.verticalyStripe) {\r\n unsupported.push('verticalyStripe');\r\n }\r\n if (cod.predictableTermination) {\r\n unsupported.push('predictableTermination');\r\n }\r\n if (unsupported.length > 0) {\r\n doNotRecover = true;\r\n throw new Error('JPX Error: Unsupported COD options (' +\r\n unsupported.join(', ') + ')');\r\n }\r\n if (context.mainHeader) {\r\n context.COD = cod;\r\n } else {\r\n context.currentTile.COD = cod;\r\n context.currentTile.COC = [];\r\n }\r\n break;\r\n case 0xFF90: // Start of tile-part (SOT)\r\n length = readUint16(data, position);\r\n tile = {};\r\n tile.index = readUint16(data, position + 2);\r\n tile.length = readUint32(data, position + 4);\r\n tile.dataEnd = tile.length + position - 2;\r\n tile.partIndex = data[position + 8];\r\n tile.partsCount = data[position + 9];\r\n\r\n context.mainHeader = false;\r\n if (tile.partIndex === 0) {\r\n // reset component specific settings\r\n tile.COD = context.COD;\r\n tile.COC = context.COC.slice(0); // clone of the global COC\r\n tile.QCD = context.QCD;\r\n tile.QCC = context.QCC.slice(0); // clone of the global COC\r\n }\r\n context.currentTile = tile;\r\n break;\r\n case 0xFF93: // Start of data (SOD)\r\n tile = context.currentTile;\r\n if (tile.partIndex === 0) {\r\n initializeTile(context, tile.index);\r\n buildPackets(context);\r\n }\r\n\r\n // moving to the end of the data\r\n length = tile.dataEnd - position;\r\n parseTilePackets(context, data, position, length);\r\n break;\r\n case 0xFF55: // Tile-part lengths, main header (TLM)\r\n case 0xFF57: // Packet length, main header (PLM)\r\n case 0xFF58: // Packet length, tile-part header (PLT)\r\n case 0xFF64: // Comment (COM)\r\n length = readUint16(data, position);\r\n // skipping content\r\n break;\r\n case 0xFF53: // Coding style component (COC)\r\n throw new Error('JPX Error: Codestream code 0xFF53 (COC) is ' +\r\n 'not implemented');\r\n default:\r\n throw new Error('JPX Error: Unknown codestream code: ' +\r\n code.toString(16));\r\n }\r\n position += length;\r\n }\r\n } catch (e) {\r\n if (doNotRecover || this.failOnCorruptedImage) {\r\n throw e;\r\n } else {\r\n warn('Trying to recover from ' + e.message);\r\n }\r\n }\r\n this.tiles = transformComponents(context);\r\n this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;\r\n this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;\r\n this.componentsCount = context.SIZ.Csiz;\r\n }\r\n };\r\n function calculateComponentDimensions(component, siz) {\r\n // Section B.2 Component mapping\r\n component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);\r\n component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);\r\n component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);\r\n component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);\r\n component.width = component.x1 - component.x0;\r\n component.height = component.y1 - component.y0;\r\n }\r\n function calculateTileGrids(context, components) {\r\n var siz = context.SIZ;\r\n // Section B.3 Division into tile and tile-components\r\n var tile, tiles = [];\r\n var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);\r\n var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);\r\n for (var q = 0; q < numYtiles; q++) {\r\n for (var p = 0; p < numXtiles; p++) {\r\n tile = {};\r\n tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);\r\n tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);\r\n tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);\r\n tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);\r\n tile.width = tile.tx1 - tile.tx0;\r\n tile.height = tile.ty1 - tile.ty0;\r\n tile.components = [];\r\n tiles.push(tile);\r\n }\r\n }\r\n context.tiles = tiles;\r\n\r\n var componentsCount = siz.Csiz;\r\n for (var i = 0, ii = componentsCount; i < ii; i++) {\r\n var component = components[i];\r\n for (var j = 0, jj = tiles.length; j < jj; j++) {\r\n var tileComponent = {};\r\n tile = tiles[j];\r\n tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);\r\n tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);\r\n tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);\r\n tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);\r\n tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;\r\n tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;\r\n tile.components[i] = tileComponent;\r\n }\r\n }\r\n }\r\n function getBlocksDimensions(context, component, r) {\r\n var codOrCoc = component.codingStyleParameters;\r\n var result = {};\r\n if (!codOrCoc.entropyCoderWithCustomPrecincts) {\r\n result.PPx = 15;\r\n result.PPy = 15;\r\n } else {\r\n result.PPx = codOrCoc.precinctsSizes[r].PPx;\r\n result.PPy = codOrCoc.precinctsSizes[r].PPy;\r\n }\r\n // calculate codeblock size as described in section B.7\r\n result.xcb_ = (r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) :\r\n Math.min(codOrCoc.xcb, result.PPx));\r\n result.ycb_ = (r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) :\r\n Math.min(codOrCoc.ycb, result.PPy));\r\n return result;\r\n }\r\n function buildPrecincts(context, resolution, dimensions) {\r\n // Section B.6 Division resolution to precincts\r\n var precinctWidth = 1 << dimensions.PPx;\r\n var precinctHeight = 1 << dimensions.PPy;\r\n // Jasper introduces codeblock groups for mapping each subband codeblocks\r\n // to precincts. Precinct partition divides a resolution according to width\r\n // and height parameters. The subband that belongs to the resolution level\r\n // has a different size than the level, unless it is the zero resolution.\r\n\r\n // From Jasper documentation: jpeg2000.pdf, section K: Tier-2 coding:\r\n // The precinct partitioning for a particular subband is derived from a\r\n // partitioning of its parent LL band (i.e., the LL band at the next higher\r\n // resolution level)... The LL band associated with each resolution level is\r\n // divided into precincts... Each of the resulting precinct regions is then\r\n // mapped into its child subbands (if any) at the next lower resolution\r\n // level. This is accomplished by using the coordinate transformation\r\n // (u, v) = (ceil(x/2), ceil(y/2)) where (x, y) and (u, v) are the\r\n // coordinates of a point in the LL band and child subband, respectively.\r\n var isZeroRes = resolution.resLevel === 0;\r\n var precinctWidthInSubband = 1 << (dimensions.PPx + (isZeroRes ? 0 : -1));\r\n var precinctHeightInSubband = 1 << (dimensions.PPy + (isZeroRes ? 0 : -1));\r\n var numprecinctswide = (resolution.trx1 > resolution.trx0 ?\r\n Math.ceil(resolution.trx1 / precinctWidth) -\r\n Math.floor(resolution.trx0 / precinctWidth) : 0);\r\n var numprecinctshigh = (resolution.try1 > resolution.try0 ?\r\n Math.ceil(resolution.try1 / precinctHeight) -\r\n Math.floor(resolution.try0 / precinctHeight) : 0);\r\n var numprecincts = numprecinctswide * numprecinctshigh;\r\n\r\n resolution.precinctParameters = {\r\n precinctWidth: precinctWidth,\r\n precinctHeight: precinctHeight,\r\n numprecinctswide: numprecinctswide,\r\n numprecinctshigh: numprecinctshigh,\r\n numprecincts: numprecincts,\r\n precinctWidthInSubband: precinctWidthInSubband,\r\n precinctHeightInSubband: precinctHeightInSubband\r\n };\r\n }\r\n function buildCodeblocks(context, subband, dimensions) {\r\n // Section B.7 Division sub-band into code-blocks\r\n var xcb_ = dimensions.xcb_;\r\n var ycb_ = dimensions.ycb_;\r\n var codeblockWidth = 1 << xcb_;\r\n var codeblockHeight = 1 << ycb_;\r\n var cbx0 = subband.tbx0 >> xcb_;\r\n var cby0 = subband.tby0 >> ycb_;\r\n var cbx1 = (subband.tbx1 + codeblockWidth - 1) >> xcb_;\r\n var cby1 = (subband.tby1 + codeblockHeight - 1) >> ycb_;\r\n var precinctParameters = subband.resolution.precinctParameters;\r\n var codeblocks = [];\r\n var precincts = [];\r\n var i, j, codeblock, precinctNumber;\r\n for (j = cby0; j < cby1; j++) {\r\n for (i = cbx0; i < cbx1; i++) {\r\n codeblock = {\r\n cbx: i,\r\n cby: j,\r\n tbx0: codeblockWidth * i,\r\n tby0: codeblockHeight * j,\r\n tbx1: codeblockWidth * (i + 1),\r\n tby1: codeblockHeight * (j + 1)\r\n };\r\n\r\n codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);\r\n codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);\r\n codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);\r\n codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);\r\n\r\n // Calculate precinct number for this codeblock, codeblock position\r\n // should be relative to its subband, use actual dimension and position\r\n // See comment about codeblock group width and height\r\n var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) /\r\n precinctParameters.precinctWidthInSubband);\r\n var pj = Math.floor((codeblock.tby0_ - subband.tby0) /\r\n precinctParameters.precinctHeightInSubband);\r\n precinctNumber = pi + (pj * precinctParameters.numprecinctswide);\r\n\r\n codeblock.precinctNumber = precinctNumber;\r\n codeblock.subbandType = subband.type;\r\n codeblock.Lblock = 3;\r\n\r\n if (codeblock.tbx1_ <= codeblock.tbx0_ ||\r\n codeblock.tby1_ <= codeblock.tby0_) {\r\n continue;\r\n }\r\n codeblocks.push(codeblock);\r\n // building precinct for the sub-band\r\n var precinct = precincts[precinctNumber];\r\n if (precinct !== undefined) {\r\n if (i < precinct.cbxMin) {\r\n precinct.cbxMin = i;\r\n } else if (i > precinct.cbxMax) {\r\n precinct.cbxMax = i;\r\n }\r\n if (j < precinct.cbyMin) {\r\n precinct.cbxMin = j;\r\n } else if (j > precinct.cbyMax) {\r\n precinct.cbyMax = j;\r\n }\r\n } else {\r\n precincts[precinctNumber] = precinct = {\r\n cbxMin: i,\r\n cbyMin: j,\r\n cbxMax: i,\r\n cbyMax: j\r\n };\r\n }\r\n codeblock.precinct = precinct;\r\n }\r\n }\r\n subband.codeblockParameters = {\r\n codeblockWidth: xcb_,\r\n codeblockHeight: ycb_,\r\n numcodeblockwide: cbx1 - cbx0 + 1,\r\n numcodeblockhigh: cby1 - cby0 + 1\r\n };\r\n subband.codeblocks = codeblocks;\r\n subband.precincts = precincts;\r\n }\r\n function createPacket(resolution, precinctNumber, layerNumber) {\r\n var precinctCodeblocks = [];\r\n // Section B.10.8 Order of info in packet\r\n var subbands = resolution.subbands;\r\n // sub-bands already ordered in 'LL', 'HL', 'LH', and 'HH' sequence\r\n for (var i = 0, ii = subbands.length; i < ii; i++) {\r\n var subband = subbands[i];\r\n var codeblocks = subband.codeblocks;\r\n for (var j = 0, jj = codeblocks.length; j < jj; j++) {\r\n var codeblock = codeblocks[j];\r\n if (codeblock.precinctNumber !== precinctNumber) {\r\n continue;\r\n }\r\n precinctCodeblocks.push(codeblock);\r\n }\r\n }\r\n return {\r\n layerNumber: layerNumber,\r\n codeblocks: precinctCodeblocks\r\n };\r\n }\r\n function LayerResolutionComponentPositionIterator(context) {\r\n var siz = context.SIZ;\r\n var tileIndex = context.currentTile.index;\r\n var tile = context.tiles[tileIndex];\r\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\r\n var componentsCount = siz.Csiz;\r\n var maxDecompositionLevelsCount = 0;\r\n for (var q = 0; q < componentsCount; q++) {\r\n maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount,\r\n tile.components[q].codingStyleParameters.decompositionLevelsCount);\r\n }\r\n\r\n var l = 0, r = 0, i = 0, k = 0;\r\n\r\n this.nextPacket = function JpxImage_nextPacket() {\r\n // Section B.12.1.1 Layer-resolution-component-position\r\n for (; l < layersCount; l++) {\r\n for (; r <= maxDecompositionLevelsCount; r++) {\r\n for (; i < componentsCount; i++) {\r\n var component = tile.components[i];\r\n if (r > component.codingStyleParameters.decompositionLevelsCount) {\r\n continue;\r\n }\r\n\r\n var resolution = component.resolutions[r];\r\n var numprecincts = resolution.precinctParameters.numprecincts;\r\n for (; k < numprecincts;) {\r\n var packet = createPacket(resolution, k, l);\r\n k++;\r\n return packet;\r\n }\r\n k = 0;\r\n }\r\n i = 0;\r\n }\r\n r = 0;\r\n }\r\n };\r\n }\r\n function ResolutionLayerComponentPositionIterator(context) {\r\n var siz = context.SIZ;\r\n var tileIndex = context.currentTile.index;\r\n var tile = context.tiles[tileIndex];\r\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\r\n var componentsCount = siz.Csiz;\r\n var maxDecompositionLevelsCount = 0;\r\n for (var q = 0; q < componentsCount; q++) {\r\n maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount,\r\n tile.components[q].codingStyleParameters.decompositionLevelsCount);\r\n }\r\n\r\n var r = 0, l = 0, i = 0, k = 0;\r\n\r\n this.nextPacket = function JpxImage_nextPacket() {\r\n // Section B.12.1.2 Resolution-layer-component-position\r\n for (; r <= maxDecompositionLevelsCount; r++) {\r\n for (; l < layersCount; l++) {\r\n for (; i < componentsCount; i++) {\r\n var component = tile.components[i];\r\n if (r > component.codingStyleParameters.decompositionLevelsCount) {\r\n continue;\r\n }\r\n\r\n var resolution = component.resolutions[r];\r\n var numprecincts = resolution.precinctParameters.numprecincts;\r\n for (; k < numprecincts;) {\r\n var packet = createPacket(resolution, k, l);\r\n k++;\r\n return packet;\r\n }\r\n k = 0;\r\n }\r\n i = 0;\r\n }\r\n l = 0;\r\n }\r\n };\r\n }\r\n function ResolutionPositionComponentLayerIterator(context) {\r\n var siz = context.SIZ;\r\n var tileIndex = context.currentTile.index;\r\n var tile = context.tiles[tileIndex];\r\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\r\n var componentsCount = siz.Csiz;\r\n var l, r, c, p;\r\n var maxDecompositionLevelsCount = 0;\r\n for (c = 0; c < componentsCount; c++) {\r\n var component = tile.components[c];\r\n maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount,\r\n component.codingStyleParameters.decompositionLevelsCount);\r\n }\r\n var maxNumPrecinctsInLevel = new Int32Array(\r\n maxDecompositionLevelsCount + 1);\r\n for (r = 0; r <= maxDecompositionLevelsCount; ++r) {\r\n var maxNumPrecincts = 0;\r\n for (c = 0; c < componentsCount; ++c) {\r\n var resolutions = tile.components[c].resolutions;\r\n if (r < resolutions.length) {\r\n maxNumPrecincts = Math.max(maxNumPrecincts,\r\n resolutions[r].precinctParameters.numprecincts);\r\n }\r\n }\r\n maxNumPrecinctsInLevel[r] = maxNumPrecincts;\r\n }\r\n l = 0;\r\n r = 0;\r\n c = 0;\r\n p = 0;\r\n\r\n this.nextPacket = function JpxImage_nextPacket() {\r\n // Section B.12.1.3 Resolution-position-component-layer\r\n for (; r <= maxDecompositionLevelsCount; r++) {\r\n for (; p < maxNumPrecinctsInLevel[r]; p++) {\r\n for (; c < componentsCount; c++) {\r\n var component = tile.components[c];\r\n if (r > component.codingStyleParameters.decompositionLevelsCount) {\r\n continue;\r\n }\r\n var resolution = component.resolutions[r];\r\n var numprecincts = resolution.precinctParameters.numprecincts;\r\n if (p >= numprecincts) {\r\n continue;\r\n }\r\n for (; l < layersCount;) {\r\n var packet = createPacket(resolution, p, l);\r\n l++;\r\n return packet;\r\n }\r\n l = 0;\r\n }\r\n c = 0;\r\n }\r\n p = 0;\r\n }\r\n };\r\n }\r\n function PositionComponentResolutionLayerIterator(context) {\r\n var siz = context.SIZ;\r\n var tileIndex = context.currentTile.index;\r\n var tile = context.tiles[tileIndex];\r\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\r\n var componentsCount = siz.Csiz;\r\n var precinctsSizes = getPrecinctSizesInImageScale(tile);\r\n var precinctsIterationSizes = precinctsSizes;\r\n var l = 0, r = 0, c = 0, px = 0, py = 0;\r\n\r\n this.nextPacket = function JpxImage_nextPacket() {\r\n // Section B.12.1.4 Position-component-resolution-layer\r\n for (; py < precinctsIterationSizes.maxNumHigh; py++) {\r\n for (; px < precinctsIterationSizes.maxNumWide; px++) {\r\n for (; c < componentsCount; c++) {\r\n var component = tile.components[c];\r\n var decompositionLevelsCount =\r\n component.codingStyleParameters.decompositionLevelsCount;\r\n for (; r <= decompositionLevelsCount; r++) {\r\n var resolution = component.resolutions[r];\r\n var sizeInImageScale =\r\n precinctsSizes.components[c].resolutions[r];\r\n var k = getPrecinctIndexIfExist(\r\n px,\r\n py,\r\n sizeInImageScale,\r\n precinctsIterationSizes,\r\n resolution);\r\n if (k === null) {\r\n continue;\r\n }\r\n for (; l < layersCount;) {\r\n var packet = createPacket(resolution, k, l);\r\n l++;\r\n return packet;\r\n }\r\n l = 0;\r\n }\r\n r = 0;\r\n }\r\n c = 0;\r\n }\r\n px = 0;\r\n }\r\n };\r\n }\r\n function ComponentPositionResolutionLayerIterator(context) {\r\n var siz = context.SIZ;\r\n var tileIndex = context.currentTile.index;\r\n var tile = context.tiles[tileIndex];\r\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\r\n var componentsCount = siz.Csiz;\r\n var precinctsSizes = getPrecinctSizesInImageScale(tile);\r\n var l = 0, r = 0, c = 0, px = 0, py = 0;\r\n\r\n this.nextPacket = function JpxImage_nextPacket() {\r\n // Section B.12.1.5 Component-position-resolution-layer\r\n for (; c < componentsCount; ++c) {\r\n var component = tile.components[c];\r\n var precinctsIterationSizes = precinctsSizes.components[c];\r\n var decompositionLevelsCount =\r\n component.codingStyleParameters.decompositionLevelsCount;\r\n for (; py < precinctsIterationSizes.maxNumHigh; py++) {\r\n for (; px < precinctsIterationSizes.maxNumWide; px++) {\r\n for (; r <= decompositionLevelsCount; r++) {\r\n var resolution = component.resolutions[r];\r\n var sizeInImageScale = precinctsIterationSizes.resolutions[r];\r\n var k = getPrecinctIndexIfExist(\r\n px,\r\n py,\r\n sizeInImageScale,\r\n precinctsIterationSizes,\r\n resolution);\r\n if (k === null) {\r\n continue;\r\n }\r\n for (; l < layersCount;) {\r\n var packet = createPacket(resolution, k, l);\r\n l++;\r\n return packet;\r\n }\r\n l = 0;\r\n }\r\n r = 0;\r\n }\r\n px = 0;\r\n }\r\n py = 0;\r\n }\r\n };\r\n }\r\n function getPrecinctIndexIfExist(\r\n pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) {\r\n var posX = pxIndex * precinctIterationSizes.minWidth;\r\n var posY = pyIndex * precinctIterationSizes.minHeight;\r\n if (posX % sizeInImageScale.width !== 0 ||\r\n posY % sizeInImageScale.height !== 0) {\r\n return null;\r\n }\r\n var startPrecinctRowIndex =\r\n (posY / sizeInImageScale.width) *\r\n resolution.precinctParameters.numprecinctswide;\r\n return (posX / sizeInImageScale.height) + startPrecinctRowIndex;\r\n }\r\n function getPrecinctSizesInImageScale(tile) {\r\n var componentsCount = tile.components.length;\r\n var minWidth = Number.MAX_VALUE;\r\n var minHeight = Number.MAX_VALUE;\r\n var maxNumWide = 0;\r\n var maxNumHigh = 0;\r\n var sizePerComponent = new Array(componentsCount);\r\n for (var c = 0; c < componentsCount; c++) {\r\n var component = tile.components[c];\r\n var decompositionLevelsCount =\r\n component.codingStyleParameters.decompositionLevelsCount;\r\n var sizePerResolution = new Array(decompositionLevelsCount + 1);\r\n var minWidthCurrentComponent = Number.MAX_VALUE;\r\n var minHeightCurrentComponent = Number.MAX_VALUE;\r\n var maxNumWideCurrentComponent = 0;\r\n var maxNumHighCurrentComponent = 0;\r\n var scale = 1;\r\n for (var r = decompositionLevelsCount; r >= 0; --r) {\r\n var resolution = component.resolutions[r];\r\n var widthCurrentResolution =\r\n scale * resolution.precinctParameters.precinctWidth;\r\n var heightCurrentResolution =\r\n scale * resolution.precinctParameters.precinctHeight;\r\n minWidthCurrentComponent = Math.min(\r\n minWidthCurrentComponent,\r\n widthCurrentResolution);\r\n minHeightCurrentComponent = Math.min(\r\n minHeightCurrentComponent,\r\n heightCurrentResolution);\r\n maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent,\r\n resolution.precinctParameters.numprecinctswide);\r\n maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent,\r\n resolution.precinctParameters.numprecinctshigh);\r\n sizePerResolution[r] = {\r\n width: widthCurrentResolution,\r\n height: heightCurrentResolution\r\n };\r\n scale <<= 1;\r\n }\r\n minWidth = Math.min(minWidth, minWidthCurrentComponent);\r\n minHeight = Math.min(minHeight, minHeightCurrentComponent);\r\n maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);\r\n maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);\r\n sizePerComponent[c] = {\r\n resolutions: sizePerResolution,\r\n minWidth: minWidthCurrentComponent,\r\n minHeight: minHeightCurrentComponent,\r\n maxNumWide: maxNumWideCurrentComponent,\r\n maxNumHigh: maxNumHighCurrentComponent\r\n };\r\n }\r\n return {\r\n components: sizePerComponent,\r\n minWidth: minWidth,\r\n minHeight: minHeight,\r\n maxNumWide: maxNumWide,\r\n maxNumHigh: maxNumHigh\r\n };\r\n }\r\n function buildPackets(context) {\r\n var siz = context.SIZ;\r\n var tileIndex = context.currentTile.index;\r\n var tile = context.tiles[tileIndex];\r\n var componentsCount = siz.Csiz;\r\n // Creating resolutions and sub-bands for each component\r\n for (var c = 0; c < componentsCount; c++) {\r\n var component = tile.components[c];\r\n var decompositionLevelsCount =\r\n component.codingStyleParameters.decompositionLevelsCount;\r\n // Section B.5 Resolution levels and sub-bands\r\n var resolutions = [];\r\n var subbands = [];\r\n for (var r = 0; r <= decompositionLevelsCount; r++) {\r\n var blocksDimensions = getBlocksDimensions(context, component, r);\r\n var resolution = {};\r\n var scale = 1 << (decompositionLevelsCount - r);\r\n resolution.trx0 = Math.ceil(component.tcx0 / scale);\r\n resolution.try0 = Math.ceil(component.tcy0 / scale);\r\n resolution.trx1 = Math.ceil(component.tcx1 / scale);\r\n resolution.try1 = Math.ceil(component.tcy1 / scale);\r\n resolution.resLevel = r;\r\n buildPrecincts(context, resolution, blocksDimensions);\r\n resolutions.push(resolution);\r\n\r\n var subband;\r\n if (r === 0) {\r\n // one sub-band (LL) with last decomposition\r\n subband = {};\r\n subband.type = 'LL';\r\n subband.tbx0 = Math.ceil(component.tcx0 / scale);\r\n subband.tby0 = Math.ceil(component.tcy0 / scale);\r\n subband.tbx1 = Math.ceil(component.tcx1 / scale);\r\n subband.tby1 = Math.ceil(component.tcy1 / scale);\r\n subband.resolution = resolution;\r\n buildCodeblocks(context, subband, blocksDimensions);\r\n subbands.push(subband);\r\n resolution.subbands = [subband];\r\n } else {\r\n var bscale = 1 << (decompositionLevelsCount - r + 1);\r\n var resolutionSubbands = [];\r\n // three sub-bands (HL, LH and HH) with rest of decompositions\r\n subband = {};\r\n subband.type = 'HL';\r\n subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);\r\n subband.tby0 = Math.ceil(component.tcy0 / bscale);\r\n subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);\r\n subband.tby1 = Math.ceil(component.tcy1 / bscale);\r\n subband.resolution = resolution;\r\n buildCodeblocks(context, subband, blocksDimensions);\r\n subbands.push(subband);\r\n resolutionSubbands.push(subband);\r\n\r\n subband = {};\r\n subband.type = 'LH';\r\n subband.tbx0 = Math.ceil(component.tcx0 / bscale);\r\n subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);\r\n subband.tbx1 = Math.ceil(component.tcx1 / bscale);\r\n subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);\r\n subband.resolution = resolution;\r\n buildCodeblocks(context, subband, blocksDimensions);\r\n subbands.push(subband);\r\n resolutionSubbands.push(subband);\r\n\r\n subband = {};\r\n subband.type = 'HH';\r\n subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);\r\n subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);\r\n subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);\r\n subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);\r\n subband.resolution = resolution;\r\n buildCodeblocks(context, subband, blocksDimensions);\r\n subbands.push(subband);\r\n resolutionSubbands.push(subband);\r\n\r\n resolution.subbands = resolutionSubbands;\r\n }\r\n }\r\n component.resolutions = resolutions;\r\n component.subbands = subbands;\r\n }\r\n // Generate the packets sequence\r\n var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;\r\n switch (progressionOrder) {\r\n case 0:\r\n tile.packetsIterator =\r\n new LayerResolutionComponentPositionIterator(context);\r\n break;\r\n case 1:\r\n tile.packetsIterator =\r\n new ResolutionLayerComponentPositionIterator(context);\r\n break;\r\n case 2:\r\n tile.packetsIterator =\r\n new ResolutionPositionComponentLayerIterator(context);\r\n break;\r\n case 3:\r\n tile.packetsIterator =\r\n new PositionComponentResolutionLayerIterator(context);\r\n break;\r\n case 4:\r\n tile.packetsIterator =\r\n new ComponentPositionResolutionLayerIterator(context);\r\n break;\r\n default:\r\n throw new Error('JPX Error: Unsupported progression order ' +\r\n progressionOrder);\r\n }\r\n }\r\n function parseTilePackets(context, data, offset, dataLength) {\r\n var position = 0;\r\n var buffer, bufferSize = 0, skipNextBit = false;\r\n function readBits(count) {\r\n while (bufferSize < count) {\r\n if(offset + position >= data.length){\r\n throw new Error(\"Unexpected EOF\");\r\n }\r\n var b = data[offset + position];\r\n position++;\r\n if (skipNextBit) {\r\n buffer = (buffer << 7) | b;\r\n bufferSize += 7;\r\n skipNextBit = false;\r\n } else {\r\n buffer = (buffer << 8) | b;\r\n bufferSize += 8;\r\n }\r\n if (b === 0xFF) {\r\n skipNextBit = true;\r\n }\r\n }\r\n bufferSize -= count;\r\n return (buffer >>> bufferSize) & ((1 << count) - 1);\r\n }\r\n function skipMarkerIfEqual(value) {\r\n if (data[offset + position - 1] === 0xFF &&\r\n data[offset + position] === value) {\r\n skipBytes(1);\r\n return true;\r\n } else if (data[offset + position] === 0xFF &&\r\n data[offset + position + 1] === value) {\r\n skipBytes(2);\r\n return true;\r\n }\r\n return false;\r\n }\r\n function skipBytes(count) {\r\n position += count;\r\n }\r\n function alignToByte() {\r\n bufferSize = 0;\r\n if (skipNextBit) {\r\n position++;\r\n skipNextBit = false;\r\n }\r\n }\r\n function readCodingpasses() {\r\n if (readBits(1) === 0) {\r\n return 1;\r\n }\r\n if (readBits(1) === 0) {\r\n return 2;\r\n }\r\n var value = readBits(2);\r\n if (value < 3) {\r\n return value + 3;\r\n }\r\n value = readBits(5);\r\n if (value < 31) {\r\n return value + 6;\r\n }\r\n value = readBits(7);\r\n return value + 37;\r\n }\r\n var tileIndex = context.currentTile.index;\r\n var tile = context.tiles[tileIndex];\r\n var sopMarkerUsed = context.COD.sopMarkerUsed;\r\n var ephMarkerUsed = context.COD.ephMarkerUsed;\r\n var packetsIterator = tile.packetsIterator;\r\n while (position < dataLength) {\r\n try{\r\n alignToByte();\r\n if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {\r\n // Skip also marker segment length and packet sequence ID\r\n skipBytes(4);\r\n }\r\n var packet = packetsIterator.nextPacket();\r\n if (packet === undefined) {\r\n //No more packets. Stream is probably truncated.\r\n return;\r\n }\r\n if (!readBits(1)) {\r\n continue;\r\n }\r\n var layerNumber = packet.layerNumber;\r\n var queue = [], codeblock;\r\n for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) {\r\n codeblock = packet.codeblocks[i];\r\n var precinct = codeblock.precinct;\r\n var codeblockColumn = codeblock.cbx - precinct.cbxMin;\r\n var codeblockRow = codeblock.cby - precinct.cbyMin;\r\n var codeblockIncluded = false;\r\n var firstTimeInclusion = false;\r\n var valueReady;\r\n if (codeblock['included'] !== undefined) {\r\n codeblockIncluded = !!readBits(1);\r\n } else {\r\n // reading inclusion tree\r\n precinct = codeblock.precinct;\r\n var inclusionTree, zeroBitPlanesTree;\r\n if (precinct['inclusionTree'] !== undefined) {\r\n inclusionTree = precinct.inclusionTree;\r\n } else {\r\n // building inclusion and zero bit-planes trees\r\n var width = precinct.cbxMax - precinct.cbxMin + 1;\r\n var height = precinct.cbyMax - precinct.cbyMin + 1;\r\n inclusionTree = new InclusionTree(width, height);\r\n zeroBitPlanesTree = new TagTree(width, height);\r\n precinct.inclusionTree = inclusionTree;\r\n precinct.zeroBitPlanesTree = zeroBitPlanesTree;\r\n }\r\n\r\n inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber);\r\n while (true) {\r\n if (position >= data.length) {\r\n return;\r\n }\r\n if (inclusionTree.isAboveThreshold()){\r\n break;\r\n }\r\n if (inclusionTree.isKnown()) {\r\n inclusionTree.nextLevel();\r\n continue;\r\n }\r\n if (readBits(1)) {\r\n inclusionTree.setKnown();\r\n if (inclusionTree.isLeaf()) {\r\n codeblock.included = true;\r\n codeblockIncluded = firstTimeInclusion = true;\r\n break;\r\n } else {\r\n inclusionTree.nextLevel();\r\n }\r\n } else {\r\n inclusionTree.incrementValue();\r\n }\r\n }\r\n }\r\n if (!codeblockIncluded) {\r\n continue;\r\n }\r\n if (firstTimeInclusion) {\r\n zeroBitPlanesTree = precinct.zeroBitPlanesTree;\r\n zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);\r\n while (true) {\r\n if (position >= data.length) {\r\n return;\r\n }\r\n if (readBits(1)) {\r\n valueReady = !zeroBitPlanesTree.nextLevel();\r\n if (valueReady) {\r\n break;\r\n }\r\n } else {\r\n zeroBitPlanesTree.incrementValue();\r\n }\r\n }\r\n codeblock.zeroBitPlanes = zeroBitPlanesTree.value;\r\n }\r\n var codingpasses = readCodingpasses();\r\n while (readBits(1)) {\r\n codeblock.Lblock++;\r\n }\r\n var codingpassesLog2 = log2(codingpasses);\r\n // rounding down log2\r\n var bits = ((codingpasses < (1 << codingpassesLog2)) ?\r\n codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock;\r\n var codedDataLength = readBits(bits);\r\n queue.push({\r\n codeblock: codeblock,\r\n codingpasses: codingpasses,\r\n dataLength: codedDataLength\r\n });\r\n }\r\n alignToByte();\r\n if (ephMarkerUsed) {\r\n skipMarkerIfEqual(0x92);\r\n }\r\n while (queue.length > 0) {\r\n var packetItem = queue.shift();\r\n codeblock = packetItem.codeblock;\r\n if (codeblock['data'] === undefined) {\r\n codeblock.data = [];\r\n }\r\n codeblock.data.push({\r\n data: data,\r\n start: offset + position,\r\n end: offset + position + packetItem.dataLength,\r\n codingpasses: packetItem.codingpasses\r\n });\r\n position += packetItem.dataLength;\r\n }\r\n } catch (e) {\r\n return;\r\n }\r\n }\r\n return position;\r\n }\r\n function copyCoefficients(coefficients, levelWidth, levelHeight, subband,\r\n delta, mb, reversible, segmentationSymbolUsed) {\r\n var x0 = subband.tbx0;\r\n var y0 = subband.tby0;\r\n var width = subband.tbx1 - subband.tbx0;\r\n var codeblocks = subband.codeblocks;\r\n var right = subband.type.charAt(0) === 'H' ? 1 : 0;\r\n var bottom = subband.type.charAt(1) === 'H' ? levelWidth : 0;\r\n\r\n for (var i = 0, ii = codeblocks.length; i < ii; ++i) {\r\n var codeblock = codeblocks[i];\r\n var blockWidth = codeblock.tbx1_ - codeblock.tbx0_;\r\n var blockHeight = codeblock.tby1_ - codeblock.tby0_;\r\n if (blockWidth === 0 || blockHeight === 0) {\r\n continue;\r\n }\r\n if (codeblock['data'] === undefined) {\r\n continue;\r\n }\r\n\r\n var bitModel, currentCodingpassType;\r\n bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType,\r\n codeblock.zeroBitPlanes, mb);\r\n currentCodingpassType = 2; // first bit plane starts from cleanup\r\n\r\n // collect data\r\n var data = codeblock.data, totalLength = 0, codingpasses = 0;\r\n var j, jj, dataItem;\r\n for (j = 0, jj = data.length; j < jj; j++) {\r\n dataItem = data[j];\r\n totalLength += dataItem.end - dataItem.start;\r\n codingpasses += dataItem.codingpasses;\r\n }\r\n var encodedData = new Int16Array(totalLength);\r\n var position = 0;\r\n for (j = 0, jj = data.length; j < jj; j++) {\r\n dataItem = data[j];\r\n var chunk = dataItem.data.subarray(dataItem.start, dataItem.end);\r\n encodedData.set(chunk, position);\r\n position += chunk.length;\r\n }\r\n // decoding the item\r\n var decoder = new ArithmeticDecoder(encodedData, 0, totalLength);\r\n bitModel.setDecoder(decoder);\r\n\r\n for (j = 0; j < codingpasses; j++) {\r\n switch (currentCodingpassType) {\r\n case 0:\r\n bitModel.runSignificancePropogationPass();\r\n break;\r\n case 1:\r\n bitModel.runMagnitudeRefinementPass();\r\n break;\r\n case 2:\r\n bitModel.runCleanupPass();\r\n if (segmentationSymbolUsed) {\r\n bitModel.checkSegmentationSymbol();\r\n }\r\n break;\r\n }\r\n currentCodingpassType = (currentCodingpassType + 1) % 3;\r\n }\r\n\r\n var offset = (codeblock.tbx0_ - x0) + (codeblock.tby0_ - y0) * width;\r\n var sign = bitModel.coefficentsSign;\r\n var magnitude = bitModel.coefficentsMagnitude;\r\n var bitsDecoded = bitModel.bitsDecoded;\r\n var magnitudeCorrection = reversible ? 0 : 0.5;\r\n var k, n, nb;\r\n position = 0;\r\n // Do the interleaving of Section F.3.3 here, so we do not need\r\n // to copy later. LL level is not interleaved, just copied.\r\n var interleave = (subband.type !== 'LL');\r\n for (j = 0; j < blockHeight; j++) {\r\n var row = (offset / width) | 0; // row in the non-interleaved subband\r\n var levelOffset = 2 * row * (levelWidth - width) + right + bottom;\r\n for (k = 0; k < blockWidth; k++) {\r\n n = magnitude[position];\r\n if (n !== 0) {\r\n n = (n + magnitudeCorrection) * delta;\r\n if (sign[position] !== 0) {\r\n n = -n;\r\n }\r\n nb = bitsDecoded[position];\r\n var pos = interleave ? (levelOffset + (offset << 1)) : offset;\r\n if (reversible && (nb >= mb)) {\r\n coefficients[pos] = n;\r\n } else {\r\n coefficients[pos] = n * (1 << (mb - nb));\r\n }\r\n }\r\n offset++;\r\n position++;\r\n }\r\n offset += width - blockWidth;\r\n }\r\n }\r\n }\r\n function transformTile(context, tile, c) {\r\n var component = tile.components[c];\r\n var codingStyleParameters = component.codingStyleParameters;\r\n var quantizationParameters = component.quantizationParameters;\r\n var decompositionLevelsCount =\r\n codingStyleParameters.decompositionLevelsCount;\r\n var spqcds = quantizationParameters.SPqcds;\r\n var scalarExpounded = quantizationParameters.scalarExpounded;\r\n var guardBits = quantizationParameters.guardBits;\r\n var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;\r\n var precision = context.components[c].precision;\r\n\r\n var reversible = codingStyleParameters.reversibleTransformation;\r\n var transform = (reversible ? new ReversibleTransform() :\r\n new IrreversibleTransform());\r\n\r\n var subbandCoefficients = [];\r\n var b = 0;\r\n for (var i = 0; i <= decompositionLevelsCount; i++) {\r\n var resolution = component.resolutions[i];\r\n\r\n var width = resolution.trx1 - resolution.trx0;\r\n var height = resolution.try1 - resolution.try0;\r\n // Allocate space for the whole sublevel.\r\n var coefficients = new Float32Array(width * height);\r\n\r\n for (var j = 0, jj = resolution.subbands.length; j < jj; j++) {\r\n var mu, epsilon;\r\n if (!scalarExpounded) {\r\n // formula E-5\r\n mu = spqcds[0].mu;\r\n epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);\r\n } else {\r\n mu = spqcds[b].mu;\r\n epsilon = spqcds[b].epsilon;\r\n b++;\r\n }\r\n\r\n var subband = resolution.subbands[j];\r\n var gainLog2 = SubbandsGainLog2[subband.type];\r\n\r\n // calulate quantization coefficient (Section E.1.1.1)\r\n var delta = (reversible ? 1 :\r\n Math.pow(2, precision + gainLog2 - epsilon) * (1 + mu / 2048));\r\n var mb = (guardBits + epsilon - 1);\r\n\r\n // In the first resolution level, copyCoefficients will fill the\r\n // whole array with coefficients. In the succeding passes,\r\n // copyCoefficients will consecutively fill in the values that belong\r\n // to the interleaved positions of the HL, LH, and HH coefficients.\r\n // The LL coefficients will then be interleaved in Transform.iterate().\r\n copyCoefficients(coefficients, width, height, subband, delta, mb,\r\n reversible, segmentationSymbolUsed);\r\n }\r\n subbandCoefficients.push({\r\n width: width,\r\n height: height,\r\n items: coefficients\r\n });\r\n }\r\n\r\n var result = transform.calculate(subbandCoefficients,\r\n component.tcx0, component.tcy0);\r\n return {\r\n left: component.tcx0,\r\n top: component.tcy0,\r\n width: result.width,\r\n height: result.height,\r\n items: result.items\r\n };\r\n }\r\n function transformComponents(context) {\r\n var siz = context.SIZ;\r\n var components = context.components;\r\n var componentsCount = siz.Csiz;\r\n var resultImages = [];\r\n for (var i = 0, ii = context.tiles.length; i < ii; i++) {\r\n var tile = context.tiles[i];\r\n var transformedTiles = [];\r\n var c;\r\n for (c = 0; c < componentsCount; c++) {\r\n transformedTiles[c] = transformTile(context, tile, c);\r\n }\r\n var tile0 = transformedTiles[0];\r\n var isSigned = components[0].isSigned;\r\n if (isSigned) {\r\n var out = new Int16Array(tile0.items.length * componentsCount);\r\n } else {\r\n var out = new Uint16Array(tile0.items.length * componentsCount);\r\n }\r\n var result = {\r\n left: tile0.left,\r\n top: tile0.top,\r\n width: tile0.width,\r\n height: tile0.height,\r\n items: out\r\n };\r\n\r\n // Section G.2.2 Inverse multi component transform\r\n var shift, offset, max, min, maxK;\r\n var pos = 0, j, jj, y0, y1, y2, r, g, b, k, val;\r\n if (tile.codingStyleDefaultParameters.multipleComponentTransform) {\r\n var fourComponents = componentsCount === 4;\r\n var y0items = transformedTiles[0].items;\r\n var y1items = transformedTiles[1].items;\r\n var y2items = transformedTiles[2].items;\r\n var y3items = fourComponents ? transformedTiles[3].items : null;\r\n\r\n // HACK: The multiple component transform formulas below assume that\r\n // all components have the same precision. With this in mind, we\r\n // compute shift and offset only once.\r\n shift = components[0].precision - 8;\r\n offset = (128 << shift) + 0.5;\r\n max = 255 * (1 << shift);\r\n maxK = max * 0.5;\r\n min = -maxK;\r\n\r\n var component0 = tile.components[0];\r\n var alpha01 = componentsCount - 3;\r\n jj = y0items.length;\r\n if (!component0.codingStyleParameters.reversibleTransformation) {\r\n // inverse irreversible multiple component transform\r\n for (j = 0; j < jj; j++, pos += alpha01) {\r\n y0 = y0items[j] + offset;\r\n y1 = y1items[j];\r\n y2 = y2items[j];\r\n r = y0 + 1.402 * y2;\r\n g = y0 - 0.34413 * y1 - 0.71414 * y2;\r\n b = y0 + 1.772 * y1;\r\n out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift;\r\n out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift;\r\n out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift;\r\n }\r\n } else {\r\n // inverse reversible multiple component transform\r\n for (j = 0; j < jj; j++, pos += alpha01) {\r\n y0 = y0items[j] + offset;\r\n y1 = y1items[j];\r\n y2 = y2items[j];\r\n g = y0 - ((y2 + y1) >> 2);\r\n r = g + y2;\r\n b = g + y1;\r\n out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift;\r\n out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift;\r\n out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift;\r\n }\r\n }\r\n if (fourComponents) {\r\n for (j = 0, pos = 3; j < jj; j++, pos += 4) {\r\n k = y3items[j];\r\n out[pos] = k <= min ? 0 : k >= maxK ? 255 : (k + offset) >> shift;\r\n }\r\n }\r\n } else { // no multi-component transform\r\n for (c = 0; c < componentsCount; c++) {\r\n if (components[c].precision === 8){\r\n var items = transformedTiles[c].items;\r\n shift = components[c].precision - 8;\r\n offset = (128 << shift) + 0.5;\r\n max = (127.5 * (1 << shift));\r\n min = -max;\r\n for (pos = c, j = 0, jj = items.length; j < jj; j++) {\r\n val = items[j];\r\n out[pos] = val <= min ? 0 :\r\n val >= max ? 255 : (val + offset) >> shift;\r\n pos += componentsCount;\r\n }\r\n }else{\r\n var isSigned = components[c].isSigned;\r\n var items = transformedTiles[c].items;\r\n\r\n if(isSigned){\r\n for (pos = c, j = 0, jj = items.length; j < jj; j++) {\r\n out[pos] = items[j];\r\n pos += componentsCount;\r\n }\r\n }else{\r\n shift = components[c].precision - 8;\r\n offset = (128 << shift) + 0.5;\r\n var precisionMax = Math.pow(2,components[c].precision)-1;\r\n for (pos = c, j = 0, jj = items.length; j < jj; j++) {\r\n val = items[j];\r\n out[pos] = Math.max(Math.min((val + offset),precisionMax),0);\r\n pos += componentsCount;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n resultImages.push(result);\r\n }\r\n return resultImages;\r\n }\r\n function initializeTile(context, tileIndex) {\r\n var siz = context.SIZ;\r\n var componentsCount = siz.Csiz;\r\n var tile = context.tiles[tileIndex];\r\n for (var c = 0; c < componentsCount; c++) {\r\n var component = tile.components[c];\r\n var qcdOrQcc = (context.currentTile.QCC[c] !== undefined ?\r\n context.currentTile.QCC[c] : context.currentTile.QCD);\r\n component.quantizationParameters = qcdOrQcc;\r\n var codOrCoc = (context.currentTile.COC[c] !== undefined ?\r\n context.currentTile.COC[c] : context.currentTile.COD);\r\n component.codingStyleParameters = codOrCoc;\r\n }\r\n tile.codingStyleDefaultParameters = context.currentTile.COD;\r\n }\r\n\r\n // Section B.10.2 Tag trees\r\n var TagTree = (function TagTreeClosure() {\r\n function TagTree(width, height) {\r\n var levelsLength = log2(Math.max(width, height)) + 1;\r\n this.levels = [];\r\n for (var i = 0; i < levelsLength; i++) {\r\n var level = {\r\n width: width,\r\n height: height,\r\n items: []\r\n };\r\n this.levels.push(level);\r\n width = Math.ceil(width / 2);\r\n height = Math.ceil(height / 2);\r\n }\r\n }\r\n TagTree.prototype = {\r\n reset: function TagTree_reset(i, j) {\r\n var currentLevel = 0, value = 0, level;\r\n while (currentLevel < this.levels.length) {\r\n level = this.levels[currentLevel];\r\n var index = i + j * level.width;\r\n if (level.items[index] !== undefined) {\r\n value = level.items[index];\r\n break;\r\n }\r\n level.index = index;\r\n i >>= 1;\r\n j >>= 1;\r\n currentLevel++;\r\n }\r\n currentLevel--;\r\n level = this.levels[currentLevel];\r\n level.items[level.index] = value;\r\n this.currentLevel = currentLevel;\r\n delete this.value;\r\n },\r\n incrementValue: function TagTree_incrementValue() {\r\n var level = this.levels[this.currentLevel];\r\n level.items[level.index]++;\r\n },\r\n nextLevel: function TagTree_nextLevel() {\r\n var currentLevel = this.currentLevel;\r\n var level = this.levels[currentLevel];\r\n var value = level.items[level.index];\r\n currentLevel--;\r\n if (currentLevel < 0) {\r\n this.value = value;\r\n return false;\r\n }\r\n\r\n this.currentLevel = currentLevel;\r\n level = this.levels[currentLevel];\r\n level.items[level.index] = value;\r\n return true;\r\n }\r\n };\r\n return TagTree;\r\n })();\r\n\r\n var InclusionTree = (function InclusionTreeClosure() {\r\n function InclusionTree(width, height) {\r\n var levelsLength = log2(Math.max(width, height)) + 1;\r\n this.levels = [];\r\n for (var i = 0; i < levelsLength; i++) {\r\n var items = new Uint8Array(width * height);\r\n var status = new Uint8Array(width * height);\r\n for (var j = 0, jj = items.length; j < jj; j++) {\r\n items[j] = 0;\r\n status[j] = 0;\r\n }\r\n\r\n var level = {\r\n width: width,\r\n height: height,\r\n items: items,\r\n status: status\r\n };\r\n this.levels.push(level);\r\n\r\n width = Math.ceil(width / 2);\r\n height = Math.ceil(height / 2);\r\n }\r\n }\r\n InclusionTree.prototype = {\r\n reset: function InclusionTree_reset(i, j, stopValue) {\r\n this.currentStopValue = stopValue;\r\n var currentLevel = 0;\r\n while (currentLevel < this.levels.length) {\r\n var level = this.levels[currentLevel];\r\n var index = i + j * level.width;\r\n level.index = index;\r\n\r\n i >>= 1;\r\n j >>= 1;\r\n currentLevel++;\r\n }\r\n\r\n this.currentLevel = this.levels.length - 1;\r\n this.minValue =this.levels[this.currentLevel].items[0];\r\n return;\r\n },\r\n incrementValue: function InclusionTree_incrementValue() {\r\n var level = this.levels[this.currentLevel];\r\n level.items[level.index] = level.items[level.index] + 1;\r\n if(level.items[level.index] > this.minValue) {\r\n this.minValue = level.items[level.index];\r\n }\r\n },\r\n nextLevel: function InclusionTree_nextLevel() {\r\n var currentLevel = this.currentLevel;\r\n currentLevel--;\r\n if (currentLevel < 0) {\r\n return false;\r\n } else {\r\n this.currentLevel = currentLevel;\r\n var level = this.levels[currentLevel];\r\n if(level.items[level.index] < this.minValue) {\r\n level.items[level.index] = this.minValue;\r\n }else if (level.items[level.index] > this.minValue) {\r\n this.minValue = level.items[level.index];\r\n }\r\n return true;\r\n }\r\n },\r\n isLeaf: function InclusionTree_isLeaf(){\r\n return (this.currentLevel === 0);\r\n },\r\n isAboveThreshold: function InclusionTree_isAboveThreshold(){\r\n var levelindex = this.currentLevel;\r\n var level = this.levels[levelindex];\r\n return (level.items[level.index] > this.currentStopValue);\r\n },\r\n isKnown: function InclusionTree_isKnown(){\r\n var levelindex = this.currentLevel;\r\n var level = this.levels[levelindex];\r\n return (level.status[level.index] > 0);\r\n },\r\n setKnown: function InclusionTree_setKnown(){\r\n var levelindex = this.currentLevel;\r\n var level = this.levels[levelindex];\r\n level.status[level.index] = 1;\r\n return;\r\n }\r\n\r\n };\r\n return InclusionTree;\r\n })();\r\n\r\n // Section D. Coefficient bit modeling\r\n var BitModel = (function BitModelClosure() {\r\n var UNIFORM_CONTEXT = 17;\r\n var RUNLENGTH_CONTEXT = 18;\r\n // Table D-1\r\n // The index is binary presentation: 0dddvvhh, ddd - sum of Di (0..4),\r\n // vv - sum of Vi (0..2), and hh - sum of Hi (0..2)\r\n var LLAndLHContextsLabel = new Uint8Array([\r\n 0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4,\r\n 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6,\r\n 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8\r\n ]);\r\n var HLContextLabel = new Uint8Array([\r\n 0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8,\r\n 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3,\r\n 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8\r\n ]);\r\n var HHContextLabel = new Uint8Array([\r\n 0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5,\r\n 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8,\r\n 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8\r\n ]);\r\n\r\n function BitModel(width, height, subband, zeroBitPlanes, mb) {\r\n this.width = width;\r\n this.height = height;\r\n\r\n this.contextLabelTable = (subband === 'HH' ? HHContextLabel :\r\n (subband === 'HL' ? HLContextLabel : LLAndLHContextsLabel));\r\n\r\n var coefficientCount = width * height;\r\n\r\n // coefficients outside the encoding region treated as insignificant\r\n // add border state cells for significanceState\r\n this.neighborsSignificance = new Uint8Array(coefficientCount);\r\n this.coefficentsSign = new Uint8Array(coefficientCount);\r\n this.coefficentsMagnitude = mb > 14 ? new Uint32Array(coefficientCount) :\r\n mb > 6 ? new Uint16Array(coefficientCount) :\r\n new Uint8Array(coefficientCount);\r\n this.processingFlags = new Uint8Array(coefficientCount);\r\n\r\n var bitsDecoded = new Uint8Array(coefficientCount);\r\n if (zeroBitPlanes !== 0) {\r\n for (var i = 0; i < coefficientCount; i++) {\r\n bitsDecoded[i] = zeroBitPlanes;\r\n }\r\n }\r\n this.bitsDecoded = bitsDecoded;\r\n\r\n this.reset();\r\n }\r\n\r\n BitModel.prototype = {\r\n setDecoder: function BitModel_setDecoder(decoder) {\r\n this.decoder = decoder;\r\n },\r\n reset: function BitModel_reset() {\r\n // We have 17 contexts that are accessed via context labels,\r\n // plus the uniform and runlength context.\r\n this.contexts = new Int8Array(19);\r\n\r\n // Contexts are packed into 1 byte:\r\n // highest 7 bits carry the index, lowest bit carries mps\r\n this.contexts[0] = (4 << 1) | 0;\r\n this.contexts[UNIFORM_CONTEXT] = (46 << 1) | 0;\r\n this.contexts[RUNLENGTH_CONTEXT] = (3 << 1) | 0;\r\n },\r\n setNeighborsSignificance:\r\n function BitModel_setNeighborsSignificance(row, column, index) {\r\n var neighborsSignificance = this.neighborsSignificance;\r\n var width = this.width, height = this.height;\r\n var left = (column > 0);\r\n var right = (column + 1 < width);\r\n var i;\r\n\r\n if (row > 0) {\r\n i = index - width;\r\n if (left) {\r\n neighborsSignificance[i - 1] += 0x10;\r\n }\r\n if (right) {\r\n neighborsSignificance[i + 1] += 0x10;\r\n }\r\n neighborsSignificance[i] += 0x04;\r\n }\r\n\r\n if (row + 1 < height) {\r\n i = index + width;\r\n if (left) {\r\n neighborsSignificance[i - 1] += 0x10;\r\n }\r\n if (right) {\r\n neighborsSignificance[i + 1] += 0x10;\r\n }\r\n neighborsSignificance[i] += 0x04;\r\n }\r\n\r\n if (left) {\r\n neighborsSignificance[index - 1] += 0x01;\r\n }\r\n if (right) {\r\n neighborsSignificance[index + 1] += 0x01;\r\n }\r\n neighborsSignificance[index] |= 0x80;\r\n },\r\n runSignificancePropogationPass:\r\n function BitModel_runSignificancePropogationPass() {\r\n var decoder = this.decoder;\r\n var width = this.width, height = this.height;\r\n var coefficentsMagnitude = this.coefficentsMagnitude;\r\n var coefficentsSign = this.coefficentsSign;\r\n var neighborsSignificance = this.neighborsSignificance;\r\n var processingFlags = this.processingFlags;\r\n var contexts = this.contexts;\r\n var labels = this.contextLabelTable;\r\n var bitsDecoded = this.bitsDecoded;\r\n var processedInverseMask = ~1;\r\n var processedMask = 1;\r\n var firstMagnitudeBitMask = 2;\r\n\r\n for (var i0 = 0; i0 < height; i0 += 4) {\r\n for (var j = 0; j < width; j++) {\r\n var index = i0 * width + j;\r\n for (var i1 = 0; i1 < 4; i1++, index += width) {\r\n var i = i0 + i1;\r\n if (i >= height) {\r\n break;\r\n }\r\n // clear processed flag first\r\n processingFlags[index] &= processedInverseMask;\r\n\r\n if (coefficentsMagnitude[index] ||\r\n !neighborsSignificance[index]) {\r\n continue;\r\n }\r\n\r\n var contextLabel = labels[neighborsSignificance[index]];\r\n var decision = decoder.readBit(contexts, contextLabel);\r\n if (decision) {\r\n var sign = this.decodeSignBit(i, j, index);\r\n coefficentsSign[index] = sign;\r\n coefficentsMagnitude[index] = 1;\r\n this.setNeighborsSignificance(i, j, index);\r\n processingFlags[index] |= firstMagnitudeBitMask;\r\n }\r\n bitsDecoded[index]++;\r\n processingFlags[index] |= processedMask;\r\n }\r\n }\r\n }\r\n },\r\n decodeSignBit: function BitModel_decodeSignBit(row, column, index) {\r\n var width = this.width, height = this.height;\r\n var coefficentsMagnitude = this.coefficentsMagnitude;\r\n var coefficentsSign = this.coefficentsSign;\r\n var contribution, sign0, sign1, significance1;\r\n var contextLabel, decoded;\r\n\r\n // calculate horizontal contribution\r\n significance1 = (column > 0 && coefficentsMagnitude[index - 1] !== 0);\r\n if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {\r\n sign1 = coefficentsSign[index + 1];\r\n if (significance1) {\r\n sign0 = coefficentsSign[index - 1];\r\n contribution = 1 - sign1 - sign0;\r\n } else {\r\n contribution = 1 - sign1 - sign1;\r\n }\r\n } else if (significance1) {\r\n sign0 = coefficentsSign[index - 1];\r\n contribution = 1 - sign0 - sign0;\r\n } else {\r\n contribution = 0;\r\n }\r\n var horizontalContribution = 3 * contribution;\r\n\r\n // calculate vertical contribution and combine with the horizontal\r\n significance1 = (row > 0 && coefficentsMagnitude[index - width] !== 0);\r\n if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {\r\n sign1 = coefficentsSign[index + width];\r\n if (significance1) {\r\n sign0 = coefficentsSign[index - width];\r\n contribution = 1 - sign1 - sign0 + horizontalContribution;\r\n } else {\r\n contribution = 1 - sign1 - sign1 + horizontalContribution;\r\n }\r\n } else if (significance1) {\r\n sign0 = coefficentsSign[index - width];\r\n contribution = 1 - sign0 - sign0 + horizontalContribution;\r\n } else {\r\n contribution = horizontalContribution;\r\n }\r\n\r\n if (contribution >= 0) {\r\n contextLabel = 9 + contribution;\r\n decoded = this.decoder.readBit(this.contexts, contextLabel);\r\n } else {\r\n contextLabel = 9 - contribution;\r\n decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;\r\n }\r\n return decoded;\r\n },\r\n runMagnitudeRefinementPass:\r\n function BitModel_runMagnitudeRefinementPass() {\r\n var decoder = this.decoder;\r\n var width = this.width, height = this.height;\r\n var coefficentsMagnitude = this.coefficentsMagnitude;\r\n var neighborsSignificance = this.neighborsSignificance;\r\n var contexts = this.contexts;\r\n var bitsDecoded = this.bitsDecoded;\r\n var processingFlags = this.processingFlags;\r\n var processedMask = 1;\r\n var firstMagnitudeBitMask = 2;\r\n var length = width * height;\r\n var width4 = width * 4;\r\n\r\n for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) {\r\n indexNext = Math.min(length, index0 + width4);\r\n for (var j = 0; j < width; j++) {\r\n for (var index = index0 + j; index < indexNext; index += width) {\r\n\r\n // significant but not those that have just become\r\n if (!coefficentsMagnitude[index] ||\r\n (processingFlags[index] & processedMask) !== 0) {\r\n continue;\r\n }\r\n\r\n var contextLabel = 16;\r\n if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {\r\n processingFlags[index] ^= firstMagnitudeBitMask;\r\n // first refinement\r\n var significance = neighborsSignificance[index] & 127;\r\n contextLabel = significance === 0 ? 15 : 14;\r\n }\r\n\r\n var bit = decoder.readBit(contexts, contextLabel);\r\n coefficentsMagnitude[index] =\r\n (coefficentsMagnitude[index] << 1) | bit;\r\n bitsDecoded[index]++;\r\n processingFlags[index] |= processedMask;\r\n }\r\n }\r\n }\r\n },\r\n runCleanupPass: function BitModel_runCleanupPass() {\r\n var decoder = this.decoder;\r\n var width = this.width, height = this.height;\r\n var neighborsSignificance = this.neighborsSignificance;\r\n var coefficentsMagnitude = this.coefficentsMagnitude;\r\n var coefficentsSign = this.coefficentsSign;\r\n var contexts = this.contexts;\r\n var labels = this.contextLabelTable;\r\n var bitsDecoded = this.bitsDecoded;\r\n var processingFlags = this.processingFlags;\r\n var processedMask = 1;\r\n var firstMagnitudeBitMask = 2;\r\n var oneRowDown = width;\r\n var twoRowsDown = width * 2;\r\n var threeRowsDown = width * 3;\r\n var iNext;\r\n for (var i0 = 0; i0 < height; i0 = iNext) {\r\n iNext = Math.min(i0 + 4, height);\r\n var indexBase = i0 * width;\r\n var checkAllEmpty = i0 + 3 < height;\r\n for (var j = 0; j < width; j++) {\r\n var index0 = indexBase + j;\r\n // using the property: labels[neighborsSignificance[index]] === 0\r\n // when neighborsSignificance[index] === 0\r\n var allEmpty = (checkAllEmpty &&\r\n processingFlags[index0] === 0 &&\r\n processingFlags[index0 + oneRowDown] === 0 &&\r\n processingFlags[index0 + twoRowsDown] === 0 &&\r\n processingFlags[index0 + threeRowsDown] === 0 &&\r\n neighborsSignificance[index0] === 0 &&\r\n neighborsSignificance[index0 + oneRowDown] === 0 &&\r\n neighborsSignificance[index0 + twoRowsDown] === 0 &&\r\n neighborsSignificance[index0 + threeRowsDown] === 0);\r\n var i1 = 0, index = index0;\r\n var i = i0, sign;\r\n if (allEmpty) {\r\n var hasSignificantCoefficent =\r\n decoder.readBit(contexts, RUNLENGTH_CONTEXT);\r\n if (!hasSignificantCoefficent) {\r\n bitsDecoded[index0]++;\r\n bitsDecoded[index0 + oneRowDown]++;\r\n bitsDecoded[index0 + twoRowsDown]++;\r\n bitsDecoded[index0 + threeRowsDown]++;\r\n continue; // next column\r\n }\r\n i1 = (decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) |\r\n decoder.readBit(contexts, UNIFORM_CONTEXT);\r\n if (i1 !== 0) {\r\n i = i0 + i1;\r\n index += i1 * width;\r\n }\r\n\r\n sign = this.decodeSignBit(i, j, index);\r\n coefficentsSign[index] = sign;\r\n coefficentsMagnitude[index] = 1;\r\n this.setNeighborsSignificance(i, j, index);\r\n processingFlags[index] |= firstMagnitudeBitMask;\r\n\r\n index = index0;\r\n for (var i2 = i0; i2 <= i; i2++, index += width) {\r\n bitsDecoded[index]++;\r\n }\r\n\r\n i1++;\r\n }\r\n for (i = i0 + i1; i < iNext; i++, index += width) {\r\n if (coefficentsMagnitude[index] ||\r\n (processingFlags[index] & processedMask) !== 0) {\r\n continue;\r\n }\r\n\r\n var contextLabel = labels[neighborsSignificance[index]];\r\n var decision = decoder.readBit(contexts, contextLabel);\r\n if (decision === 1) {\r\n sign = this.decodeSignBit(i, j, index);\r\n coefficentsSign[index] = sign;\r\n coefficentsMagnitude[index] = 1;\r\n this.setNeighborsSignificance(i, j, index);\r\n processingFlags[index] |= firstMagnitudeBitMask;\r\n }\r\n bitsDecoded[index]++;\r\n }\r\n }\r\n }\r\n },\r\n checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() {\r\n var decoder = this.decoder;\r\n var contexts = this.contexts;\r\n var symbol = (decoder.readBit(contexts, UNIFORM_CONTEXT) << 3) |\r\n (decoder.readBit(contexts, UNIFORM_CONTEXT) << 2) |\r\n (decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) |\r\n decoder.readBit(contexts, UNIFORM_CONTEXT);\r\n if (symbol !== 0xA) {\r\n throw new Error('JPX Error: Invalid segmentation symbol');\r\n }\r\n }\r\n };\r\n\r\n return BitModel;\r\n })();\r\n\r\n // Section F, Discrete wavelet transformation\r\n var Transform = (function TransformClosure() {\r\n function Transform() {}\r\n\r\n Transform.prototype.calculate =\r\n function transformCalculate(subbands, u0, v0) {\r\n var ll = subbands[0];\r\n for (var i = 1, ii = subbands.length; i < ii; i++) {\r\n ll = this.iterate(ll, subbands[i], u0, v0);\r\n }\r\n return ll;\r\n };\r\n Transform.prototype.extend = function extend(buffer, offset, size) {\r\n // Section F.3.7 extending... using max extension of 4\r\n var i1 = offset - 1, j1 = offset + 1;\r\n var i2 = offset + size - 2, j2 = offset + size;\r\n buffer[i1--] = buffer[j1++];\r\n buffer[j2++] = buffer[i2--];\r\n buffer[i1--] = buffer[j1++];\r\n buffer[j2++] = buffer[i2--];\r\n buffer[i1--] = buffer[j1++];\r\n buffer[j2++] = buffer[i2--];\r\n buffer[i1] = buffer[j1];\r\n buffer[j2] = buffer[i2];\r\n };\r\n Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh,\r\n u0, v0) {\r\n var llWidth = ll.width, llHeight = ll.height, llItems = ll.items;\r\n var width = hl_lh_hh.width;\r\n var height = hl_lh_hh.height;\r\n var items = hl_lh_hh.items;\r\n var i, j, k, l, u, v;\r\n\r\n // Interleave LL according to Section F.3.3\r\n for (k = 0, i = 0; i < llHeight; i++) {\r\n l = i * 2 * width;\r\n for (j = 0; j < llWidth; j++, k++, l += 2) {\r\n items[l] = llItems[k];\r\n }\r\n }\r\n // The LL band is not needed anymore.\r\n llItems = ll.items = null;\r\n\r\n var bufferPadding = 4;\r\n var rowBuffer = new Float32Array(width + 2 * bufferPadding);\r\n\r\n // Section F.3.4 HOR_SR\r\n if (width === 1) {\r\n // if width = 1, when u0 even keep items as is, when odd divide by 2\r\n if ((u0 & 1) !== 0) {\r\n for (v = 0, k = 0; v < height; v++, k += width) {\r\n items[k] *= 0.5;\r\n }\r\n }\r\n } else {\r\n for (v = 0, k = 0; v < height; v++, k += width) {\r\n rowBuffer.set(items.subarray(k, k + width), bufferPadding);\r\n\r\n this.extend(rowBuffer, bufferPadding, width);\r\n this.filter(rowBuffer, bufferPadding, width);\r\n\r\n items.set(\r\n rowBuffer.subarray(bufferPadding, bufferPadding + width),\r\n k);\r\n }\r\n }\r\n\r\n // Accesses to the items array can take long, because it may not fit into\r\n // CPU cache and has to be fetched from main memory. Since subsequent\r\n // accesses to the items array are not local when reading columns, we\r\n // have a cache miss every time. To reduce cache misses, get up to\r\n // 'numBuffers' items at a time and store them into the individual\r\n // buffers. The colBuffers should be small enough to fit into CPU cache.\r\n var numBuffers = 16;\r\n var colBuffers = [];\r\n for (i = 0; i < numBuffers; i++) {\r\n colBuffers.push(new Float32Array(height + 2 * bufferPadding));\r\n }\r\n var b, currentBuffer = 0;\r\n ll = bufferPadding + height;\r\n\r\n // Section F.3.5 VER_SR\r\n if (height === 1) {\r\n // if height = 1, when v0 even keep items as is, when odd divide by 2\r\n if ((v0 & 1) !== 0) {\r\n for (u = 0; u < width; u++) {\r\n items[u] *= 0.5;\r\n }\r\n }\r\n } else {\r\n for (u = 0; u < width; u++) {\r\n // if we ran out of buffers, copy several image columns at once\r\n if (currentBuffer === 0) {\r\n numBuffers = Math.min(width - u, numBuffers);\r\n for (k = u, l = bufferPadding; l < ll; k += width, l++) {\r\n for (b = 0; b < numBuffers; b++) {\r\n colBuffers[b][l] = items[k + b];\r\n }\r\n }\r\n currentBuffer = numBuffers;\r\n }\r\n\r\n currentBuffer--;\r\n var buffer = colBuffers[currentBuffer];\r\n this.extend(buffer, bufferPadding, height);\r\n this.filter(buffer, bufferPadding, height);\r\n\r\n // If this is last buffer in this group of buffers, flush all buffers.\r\n if (currentBuffer === 0) {\r\n k = u - numBuffers + 1;\r\n for (l = bufferPadding; l < ll; k += width, l++) {\r\n for (b = 0; b < numBuffers; b++) {\r\n items[k + b] = colBuffers[b][l];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n width: width,\r\n height: height,\r\n items: items\r\n };\r\n };\r\n return Transform;\r\n })();\r\n\r\n // Section 3.8.2 Irreversible 9-7 filter\r\n var IrreversibleTransform = (function IrreversibleTransformClosure() {\r\n function IrreversibleTransform() {\r\n Transform.call(this);\r\n }\r\n\r\n IrreversibleTransform.prototype = Object.create(Transform.prototype);\r\n IrreversibleTransform.prototype.filter =\r\n function irreversibleTransformFilter(x, offset, length) {\r\n var len = length >> 1;\r\n offset = offset | 0;\r\n var j, n, current, next;\r\n\r\n var alpha = -1.586134342059924;\r\n var beta = -0.052980118572961;\r\n var gamma = 0.882911075530934;\r\n var delta = 0.443506852043971;\r\n var K = 1.230174104914001;\r\n var K_ = 1 / K;\r\n\r\n // step 1 is combined with step 3\r\n\r\n // step 2\r\n j = offset - 3;\r\n for (n = len + 4; n--; j += 2) {\r\n x[j] *= K_;\r\n }\r\n\r\n // step 1 & 3\r\n j = offset - 2;\r\n current = delta * x[j -1];\r\n for (n = len + 3; n--; j += 2) {\r\n next = delta * x[j + 1];\r\n x[j] = K * x[j] - current - next;\r\n if (n--) {\r\n j += 2;\r\n current = delta * x[j + 1];\r\n x[j] = K * x[j] - current - next;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // step 4\r\n j = offset - 1;\r\n current = gamma * x[j - 1];\r\n for (n = len + 2; n--; j += 2) {\r\n next = gamma * x[j + 1];\r\n x[j] -= current + next;\r\n if (n--) {\r\n j += 2;\r\n current = gamma * x[j + 1];\r\n x[j] -= current + next;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // step 5\r\n j = offset;\r\n current = beta * x[j - 1];\r\n for (n = len + 1; n--; j += 2) {\r\n next = beta * x[j + 1];\r\n x[j] -= current + next;\r\n if (n--) {\r\n j += 2;\r\n current = beta * x[j + 1];\r\n x[j] -= current + next;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // step 6\r\n if (len !== 0) {\r\n j = offset + 1;\r\n current = alpha * x[j - 1];\r\n for (n = len; n--; j += 2) {\r\n next = alpha * x[j + 1];\r\n x[j] -= current + next;\r\n if (n--) {\r\n j += 2;\r\n current = alpha * x[j + 1];\r\n x[j] -= current + next;\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n\r\n return IrreversibleTransform;\r\n })();\r\n\r\n // Section 3.8.1 Reversible 5-3 filter\r\n var ReversibleTransform = (function ReversibleTransformClosure() {\r\n function ReversibleTransform() {\r\n Transform.call(this);\r\n }\r\n\r\n ReversibleTransform.prototype = Object.create(Transform.prototype);\r\n ReversibleTransform.prototype.filter =\r\n function reversibleTransformFilter(x, offset, length) {\r\n var len = length >> 1;\r\n offset = offset | 0;\r\n var j, n;\r\n\r\n for (j = offset, n = len + 1; n--; j += 2) {\r\n x[j] -= (x[j - 1] + x[j + 1] + 2) >> 2;\r\n }\r\n\r\n for (j = offset + 1, n = len; n--; j += 2) {\r\n x[j] += (x[j - 1] + x[j + 1]) >> 1;\r\n }\r\n };\r\n\r\n return ReversibleTransform;\r\n })();\r\n\r\n return JpxImage;\r\n})();\r\n\r\n\r\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\r\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\r\n/* Copyright 2012 Mozilla Foundation\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n'use strict';\r\n\r\n/* This class implements the QM Coder decoding as defined in\r\n * JPEG 2000 Part I Final Committee Draft Version 1.0\r\n * Annex C.3 Arithmetic decoding procedure \r\n * available at http://www.jpeg.org/public/fcd15444-1.pdf\r\n * \r\n * The arithmetic decoder is used in conjunction with context models to decode\r\n * JPEG2000 and JBIG2 streams.\r\n */\r\nvar ArithmeticDecoder = (function ArithmeticDecoderClosure() {\r\n // Table C-2\r\n var QeTable = [\r\n {qe: 0x5601, nmps: 1, nlps: 1, switchFlag: 1},\r\n {qe: 0x3401, nmps: 2, nlps: 6, switchFlag: 0},\r\n {qe: 0x1801, nmps: 3, nlps: 9, switchFlag: 0},\r\n {qe: 0x0AC1, nmps: 4, nlps: 12, switchFlag: 0},\r\n {qe: 0x0521, nmps: 5, nlps: 29, switchFlag: 0},\r\n {qe: 0x0221, nmps: 38, nlps: 33, switchFlag: 0},\r\n {qe: 0x5601, nmps: 7, nlps: 6, switchFlag: 1},\r\n {qe: 0x5401, nmps: 8, nlps: 14, switchFlag: 0},\r\n {qe: 0x4801, nmps: 9, nlps: 14, switchFlag: 0},\r\n {qe: 0x3801, nmps: 10, nlps: 14, switchFlag: 0},\r\n {qe: 0x3001, nmps: 11, nlps: 17, switchFlag: 0},\r\n {qe: 0x2401, nmps: 12, nlps: 18, switchFlag: 0},\r\n {qe: 0x1C01, nmps: 13, nlps: 20, switchFlag: 0},\r\n {qe: 0x1601, nmps: 29, nlps: 21, switchFlag: 0},\r\n {qe: 0x5601, nmps: 15, nlps: 14, switchFlag: 1},\r\n {qe: 0x5401, nmps: 16, nlps: 14, switchFlag: 0},\r\n {qe: 0x5101, nmps: 17, nlps: 15, switchFlag: 0},\r\n {qe: 0x4801, nmps: 18, nlps: 16, switchFlag: 0},\r\n {qe: 0x3801, nmps: 19, nlps: 17, switchFlag: 0},\r\n {qe: 0x3401, nmps: 20, nlps: 18, switchFlag: 0},\r\n {qe: 0x3001, nmps: 21, nlps: 19, switchFlag: 0},\r\n {qe: 0x2801, nmps: 22, nlps: 19, switchFlag: 0},\r\n {qe: 0x2401, nmps: 23, nlps: 20, switchFlag: 0},\r\n {qe: 0x2201, nmps: 24, nlps: 21, switchFlag: 0},\r\n {qe: 0x1C01, nmps: 25, nlps: 22, switchFlag: 0},\r\n {qe: 0x1801, nmps: 26, nlps: 23, switchFlag: 0},\r\n {qe: 0x1601, nmps: 27, nlps: 24, switchFlag: 0},\r\n {qe: 0x1401, nmps: 28, nlps: 25, switchFlag: 0},\r\n {qe: 0x1201, nmps: 29, nlps: 26, switchFlag: 0},\r\n {qe: 0x1101, nmps: 30, nlps: 27, switchFlag: 0},\r\n {qe: 0x0AC1, nmps: 31, nlps: 28, switchFlag: 0},\r\n {qe: 0x09C1, nmps: 32, nlps: 29, switchFlag: 0},\r\n {qe: 0x08A1, nmps: 33, nlps: 30, switchFlag: 0},\r\n {qe: 0x0521, nmps: 34, nlps: 31, switchFlag: 0},\r\n {qe: 0x0441, nmps: 35, nlps: 32, switchFlag: 0},\r\n {qe: 0x02A1, nmps: 36, nlps: 33, switchFlag: 0},\r\n {qe: 0x0221, nmps: 37, nlps: 34, switchFlag: 0},\r\n {qe: 0x0141, nmps: 38, nlps: 35, switchFlag: 0},\r\n {qe: 0x0111, nmps: 39, nlps: 36, switchFlag: 0},\r\n {qe: 0x0085, nmps: 40, nlps: 37, switchFlag: 0},\r\n {qe: 0x0049, nmps: 41, nlps: 38, switchFlag: 0},\r\n {qe: 0x0025, nmps: 42, nlps: 39, switchFlag: 0},\r\n {qe: 0x0015, nmps: 43, nlps: 40, switchFlag: 0},\r\n {qe: 0x0009, nmps: 44, nlps: 41, switchFlag: 0},\r\n {qe: 0x0005, nmps: 45, nlps: 42, switchFlag: 0},\r\n {qe: 0x0001, nmps: 45, nlps: 43, switchFlag: 0},\r\n {qe: 0x5601, nmps: 46, nlps: 46, switchFlag: 0}\r\n ];\r\n\r\n // C.3.5 Initialisation of the decoder (INITDEC)\r\n function ArithmeticDecoder(data, start, end) {\r\n this.data = data;\r\n this.bp = start;\r\n this.dataEnd = end;\r\n\r\n this.chigh = data[start];\r\n this.clow = 0;\r\n\r\n this.byteIn();\r\n\r\n this.chigh = ((this.chigh << 7) & 0xFFFF) | ((this.clow >> 9) & 0x7F);\r\n this.clow = (this.clow << 7) & 0xFFFF;\r\n this.ct -= 7;\r\n this.a = 0x8000;\r\n }\r\n\r\n ArithmeticDecoder.prototype = {\r\n // C.3.4 Compressed data input (BYTEIN)\r\n byteIn: function ArithmeticDecoder_byteIn() {\r\n var data = this.data;\r\n var bp = this.bp;\r\n if (data[bp] === 0xFF) {\r\n var b1 = data[bp + 1];\r\n if (b1 > 0x8F) {\r\n this.clow += 0xFF00;\r\n this.ct = 8;\r\n } else {\r\n bp++;\r\n this.clow += (data[bp] << 9);\r\n this.ct = 7;\r\n this.bp = bp;\r\n }\r\n } else {\r\n bp++;\r\n this.clow += bp < this.dataEnd ? (data[bp] << 8) : 0xFF00;\r\n this.ct = 8;\r\n this.bp = bp;\r\n }\r\n if (this.clow > 0xFFFF) {\r\n this.chigh += (this.clow >> 16);\r\n this.clow &= 0xFFFF;\r\n }\r\n },\r\n // C.3.2 Decoding a decision (parseDicom)\r\n readBit: function ArithmeticDecoder_readBit(contexts, pos) {\r\n // contexts are packed into 1 byte:\r\n // highest 7 bits carry cx.index, lowest bit carries cx.mps\r\n var cx_index = contexts[pos] >> 1, cx_mps = contexts[pos] & 1;\r\n var qeTableIcx = QeTable[cx_index];\r\n var qeIcx = qeTableIcx.qe;\r\n var d;\r\n var a = this.a - qeIcx;\r\n\r\n if (this.chigh < qeIcx) {\r\n // exchangeLps\r\n if (a < qeIcx) {\r\n a = qeIcx;\r\n d = cx_mps;\r\n cx_index = qeTableIcx.nmps;\r\n } else {\r\n a = qeIcx;\r\n d = 1 ^ cx_mps;\r\n if (qeTableIcx.switchFlag === 1) {\r\n cx_mps = d;\r\n }\r\n cx_index = qeTableIcx.nlps;\r\n }\r\n } else {\r\n this.chigh -= qeIcx;\r\n if ((a & 0x8000) !== 0) {\r\n this.a = a;\r\n return cx_mps;\r\n }\r\n // exchangeMps\r\n if (a < qeIcx) {\r\n d = 1 ^ cx_mps;\r\n if (qeTableIcx.switchFlag === 1) {\r\n cx_mps = d;\r\n }\r\n cx_index = qeTableIcx.nlps;\r\n } else {\r\n d = cx_mps;\r\n cx_index = qeTableIcx.nmps;\r\n }\r\n }\r\n // C.3.3 renormD;\r\n do {\r\n if (this.ct === 0) {\r\n this.byteIn();\r\n }\r\n\r\n a <<= 1;\r\n this.chigh = ((this.chigh << 1) & 0xFFFF) | ((this.clow >> 15) & 1);\r\n this.clow = (this.clow << 1) & 0xFFFF;\r\n this.ct--;\r\n } while ((a & 0x8000) === 0);\r\n this.a = a;\r\n\r\n contexts[pos] = cx_index << 1 | cx_mps;\r\n return d;\r\n }\r\n };\r\n\r\n return ArithmeticDecoder;\r\n})();\r\n\r\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\r\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\r\n/* Copyright 2012 Mozilla Foundation\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/* globals Cmd, ColorSpace, Dict, MozBlobBuilder, Name, PDFJS, Ref, URL,\r\n Promise */\r\n\r\n'use strict';\r\n\r\nvar globalScope = (typeof window === 'undefined') ? this : window;\r\n\r\nvar isWorker = (typeof window === 'undefined');\r\n\r\nvar FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\r\n\r\nvar TextRenderingMode = {\r\n FILL: 0,\r\n STROKE: 1,\r\n FILL_STROKE: 2,\r\n INVISIBLE: 3,\r\n FILL_ADD_TO_PATH: 4,\r\n STROKE_ADD_TO_PATH: 5,\r\n FILL_STROKE_ADD_TO_PATH: 6,\r\n ADD_TO_PATH: 7,\r\n FILL_STROKE_MASK: 3,\r\n ADD_TO_PATH_FLAG: 4\r\n};\r\n\r\nvar ImageKind = {\r\n GRAYSCALE_1BPP: 1,\r\n RGB_24BPP: 2,\r\n RGBA_32BPP: 3\r\n};\r\n\r\nvar AnnotationType = {\r\n WIDGET: 1,\r\n TEXT: 2,\r\n LINK: 3\r\n};\r\n\r\nvar StreamType = {\r\n UNKNOWN: 0,\r\n FLATE: 1,\r\n LZW: 2,\r\n DCT: 3,\r\n JPX: 4,\r\n JBIG: 5,\r\n A85: 6,\r\n AHX: 7,\r\n CCF: 8,\r\n RL: 9\r\n};\r\n\r\nvar FontType = {\r\n UNKNOWN: 0,\r\n TYPE1: 1,\r\n TYPE1C: 2,\r\n CIDFONTTYPE0: 3,\r\n CIDFONTTYPE0C: 4,\r\n TRUETYPE: 5,\r\n CIDFONTTYPE2: 6,\r\n TYPE3: 7,\r\n OPENTYPE: 8,\r\n TYPE0: 9,\r\n MMTYPE1: 10\r\n};\r\n\r\n// The global PDFJS object exposes the API\r\n// In production, it will be declared outside a global wrapper\r\n// In development, it will be declared here\r\nif (!globalScope.PDFJS) {\r\n globalScope.PDFJS = {};\r\n}\r\n\r\nglobalScope.PDFJS.pdfBug = false;\r\n\r\nPDFJS.VERBOSITY_LEVELS = {\r\n errors: 0,\r\n warnings: 1,\r\n infos: 5\r\n};\r\n\r\n// All the possible operations for an operator list.\r\nvar OPS = PDFJS.OPS = {\r\n // Intentionally start from 1 so it is easy to spot bad operators that will be\r\n // 0's.\r\n dependency: 1,\r\n setLineWidth: 2,\r\n setLineCap: 3,\r\n setLineJoin: 4,\r\n setMiterLimit: 5,\r\n setDash: 6,\r\n setRenderingIntent: 7,\r\n setFlatness: 8,\r\n setGState: 9,\r\n save: 10,\r\n restore: 11,\r\n transform: 12,\r\n moveTo: 13,\r\n lineTo: 14,\r\n curveTo: 15,\r\n curveTo2: 16,\r\n curveTo3: 17,\r\n closePath: 18,\r\n rectangle: 19,\r\n stroke: 20,\r\n closeStroke: 21,\r\n fill: 22,\r\n eoFill: 23,\r\n fillStroke: 24,\r\n eoFillStroke: 25,\r\n closeFillStroke: 26,\r\n closeEOFillStroke: 27,\r\n endPath: 28,\r\n clip: 29,\r\n eoClip: 30,\r\n beginText: 31,\r\n endText: 32,\r\n setCharSpacing: 33,\r\n setWordSpacing: 34,\r\n setHScale: 35,\r\n setLeading: 36,\r\n setFont: 37,\r\n setTextRenderingMode: 38,\r\n setTextRise: 39,\r\n moveText: 40,\r\n setLeadingMoveText: 41,\r\n setTextMatrix: 42,\r\n nextLine: 43,\r\n showText: 44,\r\n showSpacedText: 45,\r\n nextLineShowText: 46,\r\n nextLineSetSpacingShowText: 47,\r\n setCharWidth: 48,\r\n setCharWidthAndBounds: 49,\r\n setStrokeColorSpace: 50,\r\n setFillColorSpace: 51,\r\n setStrokeColor: 52,\r\n setStrokeColorN: 53,\r\n setFillColor: 54,\r\n setFillColorN: 55,\r\n setStrokeGray: 56,\r\n setFillGray: 57,\r\n setStrokeRGBColor: 58,\r\n setFillRGBColor: 59,\r\n setStrokeCMYKColor: 60,\r\n setFillCMYKColor: 61,\r\n shadingFill: 62,\r\n beginInlineImage: 63,\r\n beginImageData: 64,\r\n endInlineImage: 65,\r\n paintXObject: 66,\r\n markPoint: 67,\r\n markPointProps: 68,\r\n beginMarkedContent: 69,\r\n beginMarkedContentProps: 70,\r\n endMarkedContent: 71,\r\n beginCompat: 72,\r\n endCompat: 73,\r\n paintFormXObjectBegin: 74,\r\n paintFormXObjectEnd: 75,\r\n beginGroup: 76,\r\n endGroup: 77,\r\n beginAnnotations: 78,\r\n endAnnotations: 79,\r\n beginAnnotation: 80,\r\n endAnnotation: 81,\r\n paintJpegXObject: 82,\r\n paintImageMaskXObject: 83,\r\n paintImageMaskXObjectGroup: 84,\r\n paintImageXObject: 85,\r\n paintInlineImageXObject: 86,\r\n paintInlineImageXObjectGroup: 87,\r\n paintImageXObjectRepeat: 88,\r\n paintImageMaskXObjectRepeat: 89,\r\n paintSolidColorImageMask: 90,\r\n constructPath: 91\r\n};\r\n\r\n// A notice for devs. These are good for things that are helpful to devs, such\r\n// as warning that Workers were disabled, which is important to devs but not\r\n// end users.\r\nfunction info(msg) {\r\n if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.infos) {\r\n console.log('Info: ' + msg);\r\n }\r\n}\r\n\r\n// Non-fatal warnings.\r\nfunction warn(msg) {\r\n if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.warnings) {\r\n console.log('Warning: ' + msg);\r\n }\r\n}\r\n\r\n// Fatal errors that should trigger the fallback UI and halt execution by\r\n// throwing an exception.\r\nfunction error(msg) {\r\n // If multiple arguments were passed, pass them all to the log function.\r\n if (arguments.length > 1) {\r\n var logArguments = ['Error:'];\r\n logArguments.push.apply(logArguments, arguments);\r\n console.log.apply(console, logArguments);\r\n // Join the arguments into a single string for the lines below.\r\n msg = [].join.call(arguments, ' ');\r\n } else {\r\n console.log('Error: ' + msg);\r\n }\r\n console.log(backtrace());\r\n UnsupportedManager.notify(UNSUPPORTED_FEATURES.unknown);\r\n throw new Error(msg);\r\n}\r\n\r\nfunction backtrace() {\r\n try {\r\n throw new Error();\r\n } catch (e) {\r\n return e.stack ? e.stack.split('\\n').slice(2).join('\\n') : '';\r\n }\r\n}\r\n\r\nfunction assert(cond, msg) {\r\n if (!cond) {\r\n error(msg);\r\n }\r\n}\r\n\r\nvar UNSUPPORTED_FEATURES = PDFJS.UNSUPPORTED_FEATURES = {\r\n unknown: 'unknown',\r\n forms: 'forms',\r\n javaScript: 'javaScript',\r\n smask: 'smask',\r\n shadingPattern: 'shadingPattern',\r\n font: 'font'\r\n};\r\n\r\nvar UnsupportedManager = PDFJS.UnsupportedManager =\r\n (function UnsupportedManagerClosure() {\r\n var listeners = [];\r\n return {\r\n listen: function (cb) {\r\n listeners.push(cb);\r\n },\r\n notify: function (featureId) {\r\n warn('Unsupported feature \"' + featureId + '\"');\r\n for (var i = 0, ii = listeners.length; i < ii; i++) {\r\n listeners[i](featureId);\r\n }\r\n }\r\n };\r\n})();\r\n\r\n// Combines two URLs. The baseUrl shall be absolute URL. If the url is an\r\n// absolute URL, it will be returned as is.\r\nfunction combineUrl(baseUrl, url) {\r\n if (!url) {\r\n return baseUrl;\r\n }\r\n if (/^[a-z][a-z0-9+\\-.]*:/i.test(url)) {\r\n return url;\r\n }\r\n var i;\r\n if (url.charAt(0) === '/') {\r\n // absolute path\r\n i = baseUrl.indexOf('://');\r\n if (url.charAt(1) === '/') {\r\n ++i;\r\n } else {\r\n i = baseUrl.indexOf('/', i + 3);\r\n }\r\n return baseUrl.substring(0, i) + url;\r\n } else {\r\n // relative path\r\n var pathLength = baseUrl.length;\r\n i = baseUrl.lastIndexOf('#');\r\n pathLength = i >= 0 ? i : pathLength;\r\n i = baseUrl.lastIndexOf('?', pathLength);\r\n pathLength = i >= 0 ? i : pathLength;\r\n var prefixLength = baseUrl.lastIndexOf('/', pathLength);\r\n return baseUrl.substring(0, prefixLength + 1) + url;\r\n }\r\n}\r\n\r\n// Validates if URL is safe and allowed, e.g. to avoid XSS.\r\nfunction isValidUrl(url, allowRelative) {\r\n if (!url) {\r\n return false;\r\n }\r\n // RFC 3986 (http://tools.ietf.org/html/rfc3986#section-3.1)\r\n // scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\r\n var protocol = /^[a-z][a-z0-9+\\-.]*(?=:)/i.exec(url);\r\n if (!protocol) {\r\n return allowRelative;\r\n }\r\n protocol = protocol[0].toLowerCase();\r\n switch (protocol) {\r\n case 'http':\r\n case 'https':\r\n case 'ftp':\r\n case 'mailto':\r\n case 'tel':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\nPDFJS.isValidUrl = isValidUrl;\r\n\r\nfunction shadow(obj, prop, value) {\r\n Object.defineProperty(obj, prop, { value: value,\r\n enumerable: true,\r\n configurable: true,\r\n writable: false });\r\n return value;\r\n}\r\nPDFJS.shadow = shadow;\r\n\r\nvar PasswordResponses = PDFJS.PasswordResponses = {\r\n NEED_PASSWORD: 1,\r\n INCORRECT_PASSWORD: 2\r\n};\r\n\r\nvar PasswordException = (function PasswordExceptionClosure() {\r\n function PasswordException(msg, code) {\r\n this.name = 'PasswordException';\r\n this.message = msg;\r\n this.code = code;\r\n }\r\n\r\n PasswordException.prototype = new Error();\r\n PasswordException.constructor = PasswordException;\r\n\r\n return PasswordException;\r\n})();\r\nPDFJS.PasswordException = PasswordException;\r\n\r\nvar UnknownErrorException = (function UnknownErrorExceptionClosure() {\r\n function UnknownErrorException(msg, details) {\r\n this.name = 'UnknownErrorException';\r\n this.message = msg;\r\n this.details = details;\r\n }\r\n\r\n UnknownErrorException.prototype = new Error();\r\n UnknownErrorException.constructor = UnknownErrorException;\r\n\r\n return UnknownErrorException;\r\n})();\r\nPDFJS.UnknownErrorException = UnknownErrorException;\r\n\r\nvar InvalidPDFException = (function InvalidPDFExceptionClosure() {\r\n function InvalidPDFException(msg) {\r\n this.name = 'InvalidPDFException';\r\n this.message = msg;\r\n }\r\n\r\n InvalidPDFException.prototype = new Error();\r\n InvalidPDFException.constructor = InvalidPDFException;\r\n\r\n return InvalidPDFException;\r\n})();\r\nPDFJS.InvalidPDFException = InvalidPDFException;\r\n\r\nvar MissingPDFException = (function MissingPDFExceptionClosure() {\r\n function MissingPDFException(msg) {\r\n this.name = 'MissingPDFException';\r\n this.message = msg;\r\n }\r\n\r\n MissingPDFException.prototype = new Error();\r\n MissingPDFException.constructor = MissingPDFException;\r\n\r\n return MissingPDFException;\r\n})();\r\nPDFJS.MissingPDFException = MissingPDFException;\r\n\r\nvar UnexpectedResponseException =\r\n (function UnexpectedResponseExceptionClosure() {\r\n function UnexpectedResponseException(msg, status) {\r\n this.name = 'UnexpectedResponseException';\r\n this.message = msg;\r\n this.status = status;\r\n }\r\n\r\n UnexpectedResponseException.prototype = new Error();\r\n UnexpectedResponseException.constructor = UnexpectedResponseException;\r\n\r\n return UnexpectedResponseException;\r\n})();\r\nPDFJS.UnexpectedResponseException = UnexpectedResponseException;\r\n\r\nvar NotImplementedException = (function NotImplementedExceptionClosure() {\r\n function NotImplementedException(msg) {\r\n this.message = msg;\r\n }\r\n\r\n NotImplementedException.prototype = new Error();\r\n NotImplementedException.prototype.name = 'NotImplementedException';\r\n NotImplementedException.constructor = NotImplementedException;\r\n\r\n return NotImplementedException;\r\n})();\r\n\r\nvar MissingDataException = (function MissingDataExceptionClosure() {\r\n function MissingDataException(begin, end) {\r\n this.begin = begin;\r\n this.end = end;\r\n this.message = 'Missing data [' + begin + ', ' + end + ')';\r\n }\r\n\r\n MissingDataException.prototype = new Error();\r\n MissingDataException.prototype.name = 'MissingDataException';\r\n MissingDataException.constructor = MissingDataException;\r\n\r\n return MissingDataException;\r\n})();\r\n\r\nvar XRefParseException = (function XRefParseExceptionClosure() {\r\n function XRefParseException(msg) {\r\n this.message = msg;\r\n }\r\n\r\n XRefParseException.prototype = new Error();\r\n XRefParseException.prototype.name = 'XRefParseException';\r\n XRefParseException.constructor = XRefParseException;\r\n\r\n return XRefParseException;\r\n})();\r\n\r\n\r\nfunction bytesToString(bytes) {\r\n assert(bytes !== null && typeof bytes === 'object' &&\r\n bytes.length !== undefined, 'Invalid argument for bytesToString');\r\n var length = bytes.length;\r\n var MAX_ARGUMENT_COUNT = 8192;\r\n if (length < MAX_ARGUMENT_COUNT) {\r\n return String.fromCharCode.apply(null, bytes);\r\n }\r\n var strBuf = [];\r\n for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\r\n var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\r\n var chunk = bytes.subarray(i, chunkEnd);\r\n strBuf.push(String.fromCharCode.apply(null, chunk));\r\n }\r\n return strBuf.join('');\r\n}\r\n\r\nfunction stringToBytes(str) {\r\n assert(typeof str === 'string', 'Invalid argument for stringToBytes');\r\n var length = str.length;\r\n var bytes = new Uint8Array(length);\r\n for (var i = 0; i < length; ++i) {\r\n bytes[i] = str.charCodeAt(i) & 0xFF;\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction string32(value) {\r\n return String.fromCharCode((value >> 24) & 0xff, (value >> 16) & 0xff,\r\n (value >> 8) & 0xff, value & 0xff);\r\n}\r\n\r\nfunction log2(x) {\r\n var n = 1, i = 0;\r\n while (x > n) {\r\n n <<= 1;\r\n i++;\r\n }\r\n return i;\r\n}\r\n\r\nfunction readInt8(data, start) {\r\n return (data[start] << 24) >> 24;\r\n}\r\n\r\nfunction readUint16(data, offset) {\r\n return (data[offset] << 8) | data[offset + 1];\r\n}\r\n\r\nfunction readUint32(data, offset) {\r\n return ((data[offset] << 24) | (data[offset + 1] << 16) |\r\n (data[offset + 2] << 8) | data[offset + 3]) >>> 0;\r\n}\r\n\r\n// Lazy test the endianness of the platform\r\n// NOTE: This will be 'true' for simulated TypedArrays\r\nfunction isLittleEndian() {\r\n var buffer8 = new Uint8Array(2);\r\n buffer8[0] = 1;\r\n var buffer16 = new Uint16Array(buffer8.buffer);\r\n return (buffer16[0] === 1);\r\n}\r\n\r\nObject.defineProperty(PDFJS, 'isLittleEndian', {\r\n configurable: true,\r\n get: function PDFJS_isLittleEndian() {\r\n return shadow(PDFJS, 'isLittleEndian', isLittleEndian());\r\n }\r\n});\r\n\r\n//#if !(FIREFOX || MOZCENTRAL || B2G || CHROME)\r\n//// Lazy test if the userAgant support CanvasTypedArrays\r\nfunction hasCanvasTypedArrays() {\r\n var canvas = document.createElement('canvas');\r\n canvas.width = canvas.height = 1;\r\n var ctx = canvas.getContext('2d');\r\n var imageData = ctx.createImageData(1, 1);\r\n return (typeof imageData.data.buffer !== 'undefined');\r\n}\r\n\r\nObject.defineProperty(PDFJS, 'hasCanvasTypedArrays', {\r\n configurable: true,\r\n get: function PDFJS_hasCanvasTypedArrays() {\r\n return shadow(PDFJS, 'hasCanvasTypedArrays', hasCanvasTypedArrays());\r\n }\r\n});\r\n\r\nvar Uint32ArrayView = (function Uint32ArrayViewClosure() {\r\n\r\n function Uint32ArrayView(buffer, length) {\r\n this.buffer = buffer;\r\n this.byteLength = buffer.length;\r\n this.length = length === undefined ? (this.byteLength >> 2) : length;\r\n ensureUint32ArrayViewProps(this.length);\r\n }\r\n Uint32ArrayView.prototype = Object.create(null);\r\n\r\n var uint32ArrayViewSetters = 0;\r\n function createUint32ArrayProp(index) {\r\n return {\r\n get: function () {\r\n var buffer = this.buffer, offset = index << 2;\r\n return (buffer[offset] | (buffer[offset + 1] << 8) |\r\n (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24)) >>> 0;\r\n },\r\n set: function (value) {\r\n var buffer = this.buffer, offset = index << 2;\r\n buffer[offset] = value & 255;\r\n buffer[offset + 1] = (value >> 8) & 255;\r\n buffer[offset + 2] = (value >> 16) & 255;\r\n buffer[offset + 3] = (value >>> 24) & 255;\r\n }\r\n };\r\n }\r\n\r\n function ensureUint32ArrayViewProps(length) {\r\n while (uint32ArrayViewSetters < length) {\r\n Object.defineProperty(Uint32ArrayView.prototype,\r\n uint32ArrayViewSetters,\r\n createUint32ArrayProp(uint32ArrayViewSetters));\r\n uint32ArrayViewSetters++;\r\n }\r\n }\r\n\r\n return Uint32ArrayView;\r\n})();\r\n//#else\r\n//PDFJS.hasCanvasTypedArrays = true;\r\n//#endif\r\n\r\nvar IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\r\n\r\nvar Util = PDFJS.Util = (function UtilClosure() {\r\n function Util() {}\r\n\r\n var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')'];\r\n\r\n // makeCssRgb() can be called thousands of times. Using |rgbBuf| avoids\r\n // creating many intermediate strings.\r\n Util.makeCssRgb = function Util_makeCssRgb(r, g, b) {\r\n rgbBuf[1] = r;\r\n rgbBuf[3] = g;\r\n rgbBuf[5] = b;\r\n return rgbBuf.join('');\r\n };\r\n\r\n // Concatenates two transformation matrices together and returns the result.\r\n Util.transform = function Util_transform(m1, m2) {\r\n return [\r\n m1[0] * m2[0] + m1[2] * m2[1],\r\n m1[1] * m2[0] + m1[3] * m2[1],\r\n m1[0] * m2[2] + m1[2] * m2[3],\r\n m1[1] * m2[2] + m1[3] * m2[3],\r\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\r\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5]\r\n ];\r\n };\r\n\r\n // For 2d affine transforms\r\n Util.applyTransform = function Util_applyTransform(p, m) {\r\n var xt = p[0] * m[0] + p[1] * m[2] + m[4];\r\n var yt = p[0] * m[1] + p[1] * m[3] + m[5];\r\n return [xt, yt];\r\n };\r\n\r\n Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {\r\n var d = m[0] * m[3] - m[1] * m[2];\r\n var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\r\n var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\r\n return [xt, yt];\r\n };\r\n\r\n // Applies the transform to the rectangle and finds the minimum axially\r\n // aligned bounding box.\r\n Util.getAxialAlignedBoundingBox =\r\n function Util_getAxialAlignedBoundingBox(r, m) {\r\n\r\n var p1 = Util.applyTransform(r, m);\r\n var p2 = Util.applyTransform(r.slice(2, 4), m);\r\n var p3 = Util.applyTransform([r[0], r[3]], m);\r\n var p4 = Util.applyTransform([r[2], r[1]], m);\r\n return [\r\n Math.min(p1[0], p2[0], p3[0], p4[0]),\r\n Math.min(p1[1], p2[1], p3[1], p4[1]),\r\n Math.max(p1[0], p2[0], p3[0], p4[0]),\r\n Math.max(p1[1], p2[1], p3[1], p4[1])\r\n ];\r\n };\r\n\r\n Util.inverseTransform = function Util_inverseTransform(m) {\r\n var d = m[0] * m[3] - m[1] * m[2];\r\n return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d,\r\n (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];\r\n };\r\n\r\n // Apply a generic 3d matrix M on a 3-vector v:\r\n // | a b c | | X |\r\n // | d e f | x | Y |\r\n // | g h i | | Z |\r\n // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],\r\n // with v as [X,Y,Z]\r\n Util.apply3dTransform = function Util_apply3dTransform(m, v) {\r\n return [\r\n m[0] * v[0] + m[1] * v[1] + m[2] * v[2],\r\n m[3] * v[0] + m[4] * v[1] + m[5] * v[2],\r\n m[6] * v[0] + m[7] * v[1] + m[8] * v[2]\r\n ];\r\n };\r\n\r\n // This calculation uses Singular Value Decomposition.\r\n // The SVD can be represented with formula A = USV. We are interested in the\r\n // matrix S here because it represents the scale values.\r\n Util.singularValueDecompose2dScale =\r\n function Util_singularValueDecompose2dScale(m) {\r\n\r\n var transpose = [m[0], m[2], m[1], m[3]];\r\n\r\n // Multiply matrix m with its transpose.\r\n var a = m[0] * transpose[0] + m[1] * transpose[2];\r\n var b = m[0] * transpose[1] + m[1] * transpose[3];\r\n var c = m[2] * transpose[0] + m[3] * transpose[2];\r\n var d = m[2] * transpose[1] + m[3] * transpose[3];\r\n\r\n // Solve the second degree polynomial to get roots.\r\n var first = (a + d) / 2;\r\n var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;\r\n var sx = first + second || 1;\r\n var sy = first - second || 1;\r\n\r\n // Scale values are the square roots of the eigenvalues.\r\n return [Math.sqrt(sx), Math.sqrt(sy)];\r\n };\r\n\r\n // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\r\n // For coordinate systems whose origin lies in the bottom-left, this\r\n // means normalization to (BL,TR) ordering. For systems with origin in the\r\n // top-left, this means (TL,BR) ordering.\r\n Util.normalizeRect = function Util_normalizeRect(rect) {\r\n var r = rect.slice(0); // clone rect\r\n if (rect[0] > rect[2]) {\r\n r[0] = rect[2];\r\n r[2] = rect[0];\r\n }\r\n if (rect[1] > rect[3]) {\r\n r[1] = rect[3];\r\n r[3] = rect[1];\r\n }\r\n return r;\r\n };\r\n\r\n // Returns a rectangle [x1, y1, x2, y2] corresponding to the\r\n // intersection of rect1 and rect2. If no intersection, returns 'false'\r\n // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\r\n Util.intersect = function Util_intersect(rect1, rect2) {\r\n function compare(a, b) {\r\n return a - b;\r\n }\r\n\r\n // Order points along the axes\r\n var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare),\r\n orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare),\r\n result = [];\r\n\r\n rect1 = Util.normalizeRect(rect1);\r\n rect2 = Util.normalizeRect(rect2);\r\n\r\n // X: first and second points belong to different rectangles?\r\n if ((orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||\r\n (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])) {\r\n // Intersection must be between second and third points\r\n result[0] = orderedX[1];\r\n result[2] = orderedX[2];\r\n } else {\r\n return false;\r\n }\r\n\r\n // Y: first and second points belong to different rectangles?\r\n if ((orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||\r\n (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])) {\r\n // Intersection must be between second and third points\r\n result[1] = orderedY[1];\r\n result[3] = orderedY[2];\r\n } else {\r\n return false;\r\n }\r\n\r\n return result;\r\n };\r\n\r\n Util.sign = function Util_sign(num) {\r\n return num < 0 ? -1 : 1;\r\n };\r\n\r\n Util.appendToArray = function Util_appendToArray(arr1, arr2) {\r\n Array.prototype.push.apply(arr1, arr2);\r\n };\r\n\r\n Util.prependToArray = function Util_prependToArray(arr1, arr2) {\r\n Array.prototype.unshift.apply(arr1, arr2);\r\n };\r\n\r\n Util.extendObj = function extendObj(obj1, obj2) {\r\n for (var key in obj2) {\r\n obj1[key] = obj2[key];\r\n }\r\n };\r\n\r\n Util.getInheritableProperty = function Util_getInheritableProperty(dict,\r\n name) {\r\n while (dict && !dict.has(name)) {\r\n dict = dict.get('Parent');\r\n }\r\n if (!dict) {\r\n return null;\r\n }\r\n return dict.get(name);\r\n };\r\n\r\n Util.inherit = function Util_inherit(sub, base, prototype) {\r\n sub.prototype = Object.create(base.prototype);\r\n sub.prototype.constructor = sub;\r\n for (var prop in prototype) {\r\n sub.prototype[prop] = prototype[prop];\r\n }\r\n };\r\n\r\n Util.loadScript = function Util_loadScript(src, callback) {\r\n var script = document.createElement('script');\r\n var loaded = false;\r\n script.setAttribute('src', src);\r\n if (callback) {\r\n script.onload = function() {\r\n if (!loaded) {\r\n callback();\r\n }\r\n loaded = true;\r\n };\r\n }\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n };\r\n\r\n return Util;\r\n})();\r\n\r\n/**\r\n * PDF page viewport created based on scale, rotation and offset.\r\n * @class\r\n * @alias PDFJS.PageViewport\r\n */\r\nvar PageViewport = PDFJS.PageViewport = (function PageViewportClosure() {\r\n /**\r\n * @constructor\r\n * @private\r\n * @param viewBox {Array} xMin, yMin, xMax and yMax coordinates.\r\n * @param scale {number} scale of the viewport.\r\n * @param rotation {number} rotations of the viewport in degrees.\r\n * @param offsetX {number} offset X\r\n * @param offsetY {number} offset Y\r\n * @param dontFlip {boolean} if true, axis Y will not be flipped.\r\n */\r\n function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) {\r\n this.viewBox = viewBox;\r\n this.scale = scale;\r\n this.rotation = rotation;\r\n this.offsetX = offsetX;\r\n this.offsetY = offsetY;\r\n\r\n // creating transform to convert pdf coordinate system to the normal\r\n // canvas like coordinates taking in account scale and rotation\r\n var centerX = (viewBox[2] + viewBox[0]) / 2;\r\n var centerY = (viewBox[3] + viewBox[1]) / 2;\r\n var rotateA, rotateB, rotateC, rotateD;\r\n rotation = rotation % 360;\r\n rotation = rotation < 0 ? rotation + 360 : rotation;\r\n switch (rotation) {\r\n case 180:\r\n rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1;\r\n break;\r\n case 90:\r\n rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0;\r\n break;\r\n case 270:\r\n rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0;\r\n break;\r\n //case 0:\r\n default:\r\n rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1;\r\n break;\r\n }\r\n\r\n if (dontFlip) {\r\n rotateC = -rotateC; rotateD = -rotateD;\r\n }\r\n\r\n var offsetCanvasX, offsetCanvasY;\r\n var width, height;\r\n if (rotateA === 0) {\r\n offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\r\n offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\r\n width = Math.abs(viewBox[3] - viewBox[1]) * scale;\r\n height = Math.abs(viewBox[2] - viewBox[0]) * scale;\r\n } else {\r\n offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\r\n offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\r\n width = Math.abs(viewBox[2] - viewBox[0]) * scale;\r\n height = Math.abs(viewBox[3] - viewBox[1]) * scale;\r\n }\r\n // creating transform for the following operations:\r\n // translate(-centerX, -centerY), rotate and flip vertically,\r\n // scale, and translate(offsetCanvasX, offsetCanvasY)\r\n this.transform = [\r\n rotateA * scale,\r\n rotateB * scale,\r\n rotateC * scale,\r\n rotateD * scale,\r\n offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,\r\n offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY\r\n ];\r\n\r\n this.width = width;\r\n this.height = height;\r\n this.fontScale = scale;\r\n }\r\n PageViewport.prototype = /** @lends PDFJS.PageViewport.prototype */ {\r\n /**\r\n * Clones viewport with additional properties.\r\n * @param args {Object} (optional) If specified, may contain the 'scale' or\r\n * 'rotation' properties to override the corresponding properties in\r\n * the cloned viewport.\r\n * @returns {PDFJS.PageViewport} Cloned viewport.\r\n */\r\n clone: function PageViewPort_clone(args) {\r\n args = args || {};\r\n var scale = 'scale' in args ? args.scale : this.scale;\r\n var rotation = 'rotation' in args ? args.rotation : this.rotation;\r\n return new PageViewport(this.viewBox.slice(), scale, rotation,\r\n this.offsetX, this.offsetY, args.dontFlip);\r\n },\r\n /**\r\n * Converts PDF point to the viewport coordinates. For examples, useful for\r\n * converting PDF location into canvas pixel coordinates.\r\n * @param x {number} X coordinate.\r\n * @param y {number} Y coordinate.\r\n * @returns {Object} Object that contains 'x' and 'y' properties of the\r\n * point in the viewport coordinate space.\r\n * @see {@link convertToPdfPoint}\r\n * @see {@link convertToViewportRectangle}\r\n */\r\n convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) {\r\n return Util.applyTransform([x, y], this.transform);\r\n },\r\n /**\r\n * Converts PDF rectangle to the viewport coordinates.\r\n * @param rect {Array} xMin, yMin, xMax and yMax coordinates.\r\n * @returns {Array} Contains corresponding coordinates of the rectangle\r\n * in the viewport coordinate space.\r\n * @see {@link convertToViewportPoint}\r\n */\r\n convertToViewportRectangle:\r\n function PageViewport_convertToViewportRectangle(rect) {\r\n var tl = Util.applyTransform([rect[0], rect[1]], this.transform);\r\n var br = Util.applyTransform([rect[2], rect[3]], this.transform);\r\n return [tl[0], tl[1], br[0], br[1]];\r\n },\r\n /**\r\n * Converts viewport coordinates to the PDF location. For examples, useful\r\n * for converting canvas pixel location into PDF one.\r\n * @param x {number} X coordinate.\r\n * @param y {number} Y coordinate.\r\n * @returns {Object} Object that contains 'x' and 'y' properties of the\r\n * point in the PDF coordinate space.\r\n * @see {@link convertToViewportPoint}\r\n */\r\n convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) {\r\n return Util.applyInverseTransform([x, y], this.transform);\r\n }\r\n };\r\n return PageViewport;\r\n})();\r\n\r\nvar PDFStringTranslateTable = [\r\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r\n 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014,\r\n 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C,\r\n 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160,\r\n 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC\r\n];\r\n\r\nfunction stringToPDFString(str) {\r\n var i, n = str.length, strBuf = [];\r\n if (str[0] === '\\xFE' && str[1] === '\\xFF') {\r\n // UTF16BE BOM\r\n for (i = 2; i < n; i += 2) {\r\n strBuf.push(String.fromCharCode(\r\n (str.charCodeAt(i) << 8) | str.charCodeAt(i + 1)));\r\n }\r\n } else {\r\n for (i = 0; i < n; ++i) {\r\n var code = PDFStringTranslateTable[str.charCodeAt(i)];\r\n strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\r\n }\r\n }\r\n return strBuf.join('');\r\n}\r\n\r\nfunction stringToUTF8String(str) {\r\n return decodeURIComponent(escape(str));\r\n}\r\n\r\nfunction isEmptyObj(obj) {\r\n for (var key in obj) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nfunction isBool(v) {\r\n return typeof v === 'boolean';\r\n}\r\n\r\nfunction isInt(v) {\r\n return typeof v === 'number' && ((v | 0) === v);\r\n}\r\n\r\nfunction isNum(v) {\r\n return typeof v === 'number';\r\n}\r\n\r\nfunction isString(v) {\r\n return typeof v === 'string';\r\n}\r\n\r\nfunction isNull(v) {\r\n return v === null;\r\n}\r\n\r\nfunction isName(v) {\r\n return v instanceof Name;\r\n}\r\n\r\nfunction isCmd(v, cmd) {\r\n return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);\r\n}\r\n\r\nfunction isDict(v, type) {\r\n if (!(v instanceof Dict)) {\r\n return false;\r\n }\r\n if (!type) {\r\n return true;\r\n }\r\n var dictType = v.get('Type');\r\n return isName(dictType) && dictType.name === type;\r\n}\r\n\r\nfunction isArray(v) {\r\n return v instanceof Array;\r\n}\r\n\r\nfunction isStream(v) {\r\n return typeof v === 'object' && v !== null && v.getBytes !== undefined;\r\n}\r\n\r\nfunction isArrayBuffer(v) {\r\n return typeof v === 'object' && v !== null && v.byteLength !== undefined;\r\n}\r\n\r\nfunction isRef(v) {\r\n return v instanceof Ref;\r\n}\r\n\r\n/**\r\n * Promise Capability object.\r\n *\r\n * @typedef {Object} PromiseCapability\r\n * @property {Promise} promise - A promise object.\r\n * @property {function} resolve - Fullfills the promise.\r\n * @property {function} reject - Rejects the promise.\r\n */\r\n\r\n/**\r\n * Creates a promise capability object.\r\n * @alias PDFJS.createPromiseCapability\r\n *\r\n * @return {PromiseCapability} A capability object contains:\r\n * - a Promise, resolve and reject methods.\r\n */\r\nfunction createPromiseCapability() {\r\n var capability = {};\r\n capability.promise = new Promise(function (resolve, reject) {\r\n capability.resolve = resolve;\r\n capability.reject = reject;\r\n });\r\n return capability;\r\n}\r\n\r\nPDFJS.createPromiseCapability = createPromiseCapability;\r\n\r\n/**\r\n * Polyfill for Promises:\r\n * The following promise implementation tries to generally implement the\r\n * Promise/A+ spec. Some notable differences from other promise libaries are:\r\n * - There currently isn't a seperate deferred and promise object.\r\n * - Unhandled rejections eventually show an error if they aren't handled.\r\n *\r\n * Based off of the work in:\r\n * https://bugzilla.mozilla.org/show_bug.cgi?id=810490\r\n */\r\n(function PromiseClosure() {\r\n if (globalScope.Promise) {\r\n // Promises existing in the DOM/Worker, checking presence of all/resolve\r\n if (typeof globalScope.Promise.all !== 'function') {\r\n globalScope.Promise.all = function (iterable) {\r\n var count = 0, results = [], resolve, reject;\r\n var promise = new globalScope.Promise(function (resolve_, reject_) {\r\n resolve = resolve_;\r\n reject = reject_;\r\n });\r\n iterable.forEach(function (p, i) {\r\n count++;\r\n p.then(function (result) {\r\n results[i] = result;\r\n count--;\r\n if (count === 0) {\r\n resolve(results);\r\n }\r\n }, reject);\r\n });\r\n if (count === 0) {\r\n resolve(results);\r\n }\r\n return promise;\r\n };\r\n }\r\n if (typeof globalScope.Promise.resolve !== 'function') {\r\n globalScope.Promise.resolve = function (value) {\r\n return new globalScope.Promise(function (resolve) { resolve(value); });\r\n };\r\n }\r\n if (typeof globalScope.Promise.reject !== 'function') {\r\n globalScope.Promise.reject = function (reason) {\r\n return new globalScope.Promise(function (resolve, reject) {\r\n reject(reason);\r\n });\r\n };\r\n }\r\n if (typeof globalScope.Promise.prototype.catch !== 'function') {\r\n globalScope.Promise.prototype.catch = function (onReject) {\r\n return globalScope.Promise.prototype.then(undefined, onReject);\r\n };\r\n }\r\n return;\r\n }\r\n//#if !MOZCENTRAL\r\n var STATUS_PENDING = 0;\r\n var STATUS_RESOLVED = 1;\r\n var STATUS_REJECTED = 2;\r\n\r\n // In an attempt to avoid silent exceptions, unhandled rejections are\r\n // tracked and if they aren't handled in a certain amount of time an\r\n // error is logged.\r\n var REJECTION_TIMEOUT = 500;\r\n\r\n var HandlerManager = {\r\n handlers: [],\r\n running: false,\r\n unhandledRejections: [],\r\n pendingRejectionCheck: false,\r\n\r\n scheduleHandlers: function scheduleHandlers(promise) {\r\n if (promise._status === STATUS_PENDING) {\r\n return;\r\n }\r\n\r\n this.handlers = this.handlers.concat(promise._handlers);\r\n promise._handlers = [];\r\n\r\n if (this.running) {\r\n return;\r\n }\r\n this.running = true;\r\n\r\n setTimeout(this.runHandlers.bind(this), 0);\r\n },\r\n\r\n runHandlers: function runHandlers() {\r\n var RUN_TIMEOUT = 1; // ms\r\n var timeoutAt = Date.now() + RUN_TIMEOUT;\r\n while (this.handlers.length > 0) {\r\n var handler = this.handlers.shift();\r\n\r\n var nextStatus = handler.thisPromise._status;\r\n var nextValue = handler.thisPromise._value;\r\n\r\n try {\r\n if (nextStatus === STATUS_RESOLVED) {\r\n if (typeof handler.onResolve === 'function') {\r\n nextValue = handler.onResolve(nextValue);\r\n }\r\n } else if (typeof handler.onReject === 'function') {\r\n nextValue = handler.onReject(nextValue);\r\n nextStatus = STATUS_RESOLVED;\r\n\r\n if (handler.thisPromise._unhandledRejection) {\r\n this.removeUnhandeledRejection(handler.thisPromise);\r\n }\r\n }\r\n } catch (ex) {\r\n nextStatus = STATUS_REJECTED;\r\n nextValue = ex;\r\n }\r\n\r\n handler.nextPromise._updateStatus(nextStatus, nextValue);\r\n if (Date.now() >= timeoutAt) {\r\n break;\r\n }\r\n }\r\n\r\n if (this.handlers.length > 0) {\r\n setTimeout(this.runHandlers.bind(this), 0);\r\n return;\r\n }\r\n\r\n this.running = false;\r\n },\r\n\r\n addUnhandledRejection: function addUnhandledRejection(promise) {\r\n this.unhandledRejections.push({\r\n promise: promise,\r\n time: Date.now()\r\n });\r\n this.scheduleRejectionCheck();\r\n },\r\n\r\n removeUnhandeledRejection: function removeUnhandeledRejection(promise) {\r\n promise._unhandledRejection = false;\r\n for (var i = 0; i < this.unhandledRejections.length; i++) {\r\n if (this.unhandledRejections[i].promise === promise) {\r\n this.unhandledRejections.splice(i);\r\n i--;\r\n }\r\n }\r\n },\r\n\r\n scheduleRejectionCheck: function scheduleRejectionCheck() {\r\n if (this.pendingRejectionCheck) {\r\n return;\r\n }\r\n this.pendingRejectionCheck = true;\r\n setTimeout(function rejectionCheck() {\r\n this.pendingRejectionCheck = false;\r\n var now = Date.now();\r\n for (var i = 0; i < this.unhandledRejections.length; i++) {\r\n if (now - this.unhandledRejections[i].time > REJECTION_TIMEOUT) {\r\n var unhandled = this.unhandledRejections[i].promise._value;\r\n var msg = 'Unhandled rejection: ' + unhandled;\r\n if (unhandled.stack) {\r\n msg += '\\n' + unhandled.stack;\r\n }\r\n warn(msg);\r\n this.unhandledRejections.splice(i);\r\n i--;\r\n }\r\n }\r\n if (this.unhandledRejections.length) {\r\n this.scheduleRejectionCheck();\r\n }\r\n }.bind(this), REJECTION_TIMEOUT);\r\n }\r\n };\r\n\r\n function Promise(resolver) {\r\n this._status = STATUS_PENDING;\r\n this._handlers = [];\r\n try {\r\n resolver.call(this, this._resolve.bind(this), this._reject.bind(this));\r\n } catch (e) {\r\n this._reject(e);\r\n }\r\n }\r\n /**\r\n * Builds a promise that is resolved when all the passed in promises are\r\n * resolved.\r\n * @param {array} array of data and/or promises to wait for.\r\n * @return {Promise} New dependant promise.\r\n */\r\n Promise.all = function Promise_all(promises) {\r\n var resolveAll, rejectAll;\r\n var deferred = new Promise(function (resolve, reject) {\r\n resolveAll = resolve;\r\n rejectAll = reject;\r\n });\r\n var unresolved = promises.length;\r\n var results = [];\r\n if (unresolved === 0) {\r\n resolveAll(results);\r\n return deferred;\r\n }\r\n function reject(reason) {\r\n if (deferred._status === STATUS_REJECTED) {\r\n return;\r\n }\r\n results = [];\r\n rejectAll(reason);\r\n }\r\n for (var i = 0, ii = promises.length; i < ii; ++i) {\r\n var promise = promises[i];\r\n var resolve = (function(i) {\r\n return function(value) {\r\n if (deferred._status === STATUS_REJECTED) {\r\n return;\r\n }\r\n results[i] = value;\r\n unresolved--;\r\n if (unresolved === 0) {\r\n resolveAll(results);\r\n }\r\n };\r\n })(i);\r\n if (Promise.isPromise(promise)) {\r\n promise.then(resolve, reject);\r\n } else {\r\n resolve(promise);\r\n }\r\n }\r\n return deferred;\r\n };\r\n\r\n /**\r\n * Checks if the value is likely a promise (has a 'then' function).\r\n * @return {boolean} true if value is thenable\r\n */\r\n Promise.isPromise = function Promise_isPromise(value) {\r\n return value && typeof value.then === 'function';\r\n };\r\n\r\n /**\r\n * Creates resolved promise\r\n * @param value resolve value\r\n * @returns {Promise}\r\n */\r\n Promise.resolve = function Promise_resolve(value) {\r\n return new Promise(function (resolve) { resolve(value); });\r\n };\r\n\r\n /**\r\n * Creates rejected promise\r\n * @param reason rejection value\r\n * @returns {Promise}\r\n */\r\n Promise.reject = function Promise_reject(reason) {\r\n return new Promise(function (resolve, reject) { reject(reason); });\r\n };\r\n\r\n Promise.prototype = {\r\n _status: null,\r\n _value: null,\r\n _handlers: null,\r\n _unhandledRejection: null,\r\n\r\n _updateStatus: function Promise__updateStatus(status, value) {\r\n if (this._status === STATUS_RESOLVED ||\r\n this._status === STATUS_REJECTED) {\r\n return;\r\n }\r\n\r\n if (status === STATUS_RESOLVED &&\r\n Promise.isPromise(value)) {\r\n value.then(this._updateStatus.bind(this, STATUS_RESOLVED),\r\n this._updateStatus.bind(this, STATUS_REJECTED));\r\n return;\r\n }\r\n\r\n this._status = status;\r\n this._value = value;\r\n\r\n if (status === STATUS_REJECTED && this._handlers.length === 0) {\r\n this._unhandledRejection = true;\r\n HandlerManager.addUnhandledRejection(this);\r\n }\r\n\r\n HandlerManager.scheduleHandlers(this);\r\n },\r\n\r\n _resolve: function Promise_resolve(value) {\r\n this._updateStatus(STATUS_RESOLVED, value);\r\n },\r\n\r\n _reject: function Promise_reject(reason) {\r\n this._updateStatus(STATUS_REJECTED, reason);\r\n },\r\n\r\n then: function Promise_then(onResolve, onReject) {\r\n var nextPromise = new Promise(function (resolve, reject) {\r\n this.resolve = resolve;\r\n this.reject = reject;\r\n });\r\n this._handlers.push({\r\n thisPromise: this,\r\n onResolve: onResolve,\r\n onReject: onReject,\r\n nextPromise: nextPromise\r\n });\r\n HandlerManager.scheduleHandlers(this);\r\n return nextPromise;\r\n },\r\n\r\n catch: function Promise_catch(onReject) {\r\n return this.then(undefined, onReject);\r\n }\r\n };\r\n\r\n globalScope.Promise = Promise;\r\n//#else\r\n//throw new Error('DOM Promise is not present');\r\n//#endif\r\n})();\r\n\r\nvar StatTimer = (function StatTimerClosure() {\r\n function rpad(str, pad, length) {\r\n while (str.length < length) {\r\n str += pad;\r\n }\r\n return str;\r\n }\r\n function StatTimer() {\r\n this.started = {};\r\n this.times = [];\r\n this.enabled = true;\r\n }\r\n StatTimer.prototype = {\r\n time: function StatTimer_time(name) {\r\n if (!this.enabled) {\r\n return;\r\n }\r\n if (name in this.started) {\r\n warn('Timer is already running for ' + name);\r\n }\r\n this.started[name] = Date.now();\r\n },\r\n timeEnd: function StatTimer_timeEnd(name) {\r\n if (!this.enabled) {\r\n return;\r\n }\r\n if (!(name in this.started)) {\r\n warn('Timer has not been started for ' + name);\r\n }\r\n this.times.push({\r\n 'name': name,\r\n 'start': this.started[name],\r\n 'end': Date.now()\r\n });\r\n // Remove timer from started so it can be called again.\r\n delete this.started[name];\r\n },\r\n toString: function StatTimer_toString() {\r\n var i, ii;\r\n var times = this.times;\r\n var out = '';\r\n // Find the longest name for padding purposes.\r\n var longest = 0;\r\n for (i = 0, ii = times.length; i < ii; ++i) {\r\n var name = times[i]['name'];\r\n if (name.length > longest) {\r\n longest = name.length;\r\n }\r\n }\r\n for (i = 0, ii = times.length; i < ii; ++i) {\r\n var span = times[i];\r\n var duration = span.end - span.start;\r\n out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\\n';\r\n }\r\n return out;\r\n }\r\n };\r\n return StatTimer;\r\n})();\r\n\r\nPDFJS.createBlob = function createBlob(data, contentType) {\r\n if (typeof Blob !== 'undefined') {\r\n return new Blob([data], { type: contentType });\r\n }\r\n // Blob builder is deprecated in FF14 and removed in FF18.\r\n var bb = new MozBlobBuilder();\r\n bb.append(data);\r\n return bb.getBlob(contentType);\r\n};\r\n\r\nPDFJS.createObjectURL = (function createObjectURLClosure() {\r\n // Blob/createObjectURL is not available, falling back to data schema.\r\n var digits =\r\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\n return function createObjectURL(data, contentType) {\r\n if (!PDFJS.disableCreateObjectURL &&\r\n typeof URL !== 'undefined' && URL.createObjectURL) {\r\n var blob = PDFJS.createBlob(data, contentType);\r\n return URL.createObjectURL(blob);\r\n }\r\n\r\n var buffer = 'data:' + contentType + ';base64,';\r\n for (var i = 0, ii = data.length; i < ii; i += 3) {\r\n var b1 = data[i] & 0xFF;\r\n var b2 = data[i + 1] & 0xFF;\r\n var b3 = data[i + 2] & 0xFF;\r\n var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4);\r\n var d3 = i + 1 < ii ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64;\r\n var d4 = i + 2 < ii ? (b3 & 0x3F) : 64;\r\n buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];\r\n }\r\n return buffer;\r\n };\r\n})();\r\n\r\nfunction MessageHandler(name, comObj) {\r\n this.name = name;\r\n this.comObj = comObj;\r\n this.callbackIndex = 1;\r\n this.postMessageTransfers = true;\r\n var callbacksCapabilities = this.callbacksCapabilities = {};\r\n var ah = this.actionHandler = {};\r\n\r\n ah['console_log'] = [function ahConsoleLog(data) {\r\n console.log.apply(console, data);\r\n }];\r\n ah['console_error'] = [function ahConsoleError(data) {\r\n console.error.apply(console, data);\r\n }];\r\n ah['_unsupported_feature'] = [function ah_unsupportedFeature(data) {\r\n UnsupportedManager.notify(data);\r\n }];\r\n\r\n comObj.onmessage = function messageHandlerComObjOnMessage(event) {\r\n var data = event.data;\r\n if (data.isReply) {\r\n var callbackId = data.callbackId;\r\n if (data.callbackId in callbacksCapabilities) {\r\n var callback = callbacksCapabilities[callbackId];\r\n delete callbacksCapabilities[callbackId];\r\n if ('error' in data) {\r\n callback.reject(data.error);\r\n } else {\r\n callback.resolve(data.data);\r\n }\r\n } else {\r\n error('Cannot resolve callback ' + callbackId);\r\n }\r\n } else if (data.action in ah) {\r\n var action = ah[data.action];\r\n if (data.callbackId) {\r\n Promise.resolve().then(function () {\r\n return action[0].call(action[1], data.data);\r\n }).then(function (result) {\r\n comObj.postMessage({\r\n isReply: true,\r\n callbackId: data.callbackId,\r\n data: result\r\n });\r\n }, function (reason) {\r\n comObj.postMessage({\r\n isReply: true,\r\n callbackId: data.callbackId,\r\n error: reason\r\n });\r\n });\r\n } else {\r\n action[0].call(action[1], data.data);\r\n }\r\n } else {\r\n error('Unknown action from worker: ' + data.action);\r\n }\r\n };\r\n}\r\n\r\nMessageHandler.prototype = {\r\n on: function messageHandlerOn(actionName, handler, scope) {\r\n var ah = this.actionHandler;\r\n if (ah[actionName]) {\r\n error('There is already an actionName called \"' + actionName + '\"');\r\n }\r\n ah[actionName] = [handler, scope];\r\n },\r\n /**\r\n * Sends a message to the comObj to invoke the action with the supplied data.\r\n * @param {String} actionName Action to call.\r\n * @param {JSON} data JSON data to send.\r\n * @param {Array} [transfers] Optional list of transfers/ArrayBuffers\r\n */\r\n send: function messageHandlerSend(actionName, data, transfers) {\r\n var message = {\r\n action: actionName,\r\n data: data\r\n };\r\n this.postMessage(message, transfers);\r\n },\r\n /**\r\n * Sends a message to the comObj to invoke the action with the supplied data.\r\n * Expects that other side will callback with the response.\r\n * @param {String} actionName Action to call.\r\n * @param {JSON} data JSON data to send.\r\n * @param {Array} [transfers] Optional list of transfers/ArrayBuffers.\r\n * @returns {Promise} Promise to be resolved with response data.\r\n */\r\n sendWithPromise:\r\n function messageHandlerSendWithPromise(actionName, data, transfers) {\r\n var callbackId = this.callbackIndex++;\r\n var message = {\r\n action: actionName,\r\n data: data,\r\n callbackId: callbackId\r\n };\r\n var capability = createPromiseCapability();\r\n this.callbacksCapabilities[callbackId] = capability;\r\n try {\r\n this.postMessage(message, transfers);\r\n } catch (e) {\r\n capability.reject(e);\r\n }\r\n return capability.promise;\r\n },\r\n /**\r\n * Sends raw message to the comObj.\r\n * @private\r\n * @param message {Object} Raw message.\r\n * @param transfers List of transfers/ArrayBuffers, or undefined.\r\n */\r\n postMessage: function (message, transfers) {\r\n if (transfers && this.postMessageTransfers) {\r\n this.comObj.postMessage(message, transfers);\r\n } else {\r\n this.comObj.postMessage(message);\r\n }\r\n }\r\n};\r\n\r\nvar moduleType = typeof module;\r\nif ((moduleType !== 'undefined') && module.exports) {\r\n module.exports = JpxImage;\r\n}\r\n\r\nfunction loadJpegStream(id, imageUrl, objs) {\r\n var img = new Image();\r\n img.onload = (function loadJpegStream_onloadClosure() {\r\n objs.resolve(id, img);\r\n });\r\n img.onerror = (function loadJpegStream_onerrorClosure() {\r\n objs.resolve(id, null);\r\n warn('Error during JPEG image loading');\r\n });\r\n img.src = imageUrl;\r\n}","/*! OpenJPEG.js - v0.10.1 - 2018-03-13 | (c) 2016 Chris Hafey | https://github.com/chafey/openjpeg */\r\nvar OpenJPEG = function(OpenJPEG) {\r\n OpenJPEG = OpenJPEG || {};\r\n\r\nvar Module=typeof OpenJPEG!==\"undefined\"?OpenJPEG:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module[\"arguments\"]=[];Module[\"thisProgram\"]=\"./this.program\";Module[\"quit\"]=(function(status,toThrow){throw toThrow});Module[\"preRun\"]=[];Module[\"postRun\"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module[\"ENVIRONMENT\"]){if(Module[\"ENVIRONMENT\"]===\"WEB\"){ENVIRONMENT_IS_WEB=true}else if(Module[\"ENVIRONMENT\"]===\"WORKER\"){ENVIRONMENT_IS_WORKER=true}else if(Module[\"ENVIRONMENT\"]===\"NODE\"){ENVIRONMENT_IS_NODE=true}else if(Module[\"ENVIRONMENT\"]===\"SHELL\"){ENVIRONMENT_IS_SHELL=true}else{throw new Error(\"Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.\")}}else{ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof require===\"function\"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module[\"read\"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);ret=nodeFS[\"readFileSync\"](filename)}return binary?ret:ret.toString()};Module[\"readBinary\"]=function readBinary(filename){var ret=Module[\"read\"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){Module[\"thisProgram\"]=process[\"argv\"][1].replace(/\\\\/g,\"/\")}Module[\"arguments\"]=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process[\"on\"](\"unhandledRejection\",(function(reason,p){process[\"exit\"](1)}));Module[\"inspect\"]=(function(){return\"[Emscripten Module object]\"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){Module[\"read\"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module[\"readBinary\"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){Module[\"arguments\"]=scriptArgs}else if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments}if(typeof quit===\"function\"){Module[\"quit\"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module[\"read\"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module[\"readBinary\"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module[\"readAsync\"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments}Module[\"setWindowTitle\"]=(function(title){document.title=title})}Module[\"print\"]=typeof console!==\"undefined\"?console.log.bind(console):typeof print!==\"undefined\"?print:null;Module[\"printErr\"]=typeof printErr!==\"undefined\"?printErr:typeof console!==\"undefined\"&&console.warn.bind(console)||Module[\"print\"];Module.print=Module[\"print\"];Module.printErr=Module[\"printErr\"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return 4}else if(type[0]===\"i\"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module[\"dynCall_\"+sig].apply(null,[ptr].concat(args))}else{return Module[\"dynCall_\"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}var JSfuncs={\"stackSave\":(function(){stackSave()}),\"stackRestore\":(function(){stackRestore()}),\"arrayToC\":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),\"stringToC\":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={\"string\":JSfuncs[\"stringToC\"],\"array\":JSfuncs[\"arrayToC\"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case\"i8\":HEAP8[ptr>>0]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;default:abort(\"invalid type for setValue: \"+type)}}function getValue(ptr,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":return HEAP8[ptr>>0];case\"i8\":return HEAP8[ptr>>0];case\"i16\":return HEAP16[ptr>>1];case\"i32\":return HEAP32[ptr>>2];case\"i64\":return HEAP32[ptr>>2];case\"float\":return HEAPF32[ptr>>2];case\"double\":return HEAPF64[ptr>>3];default:abort(\"invalid type for getValue: \"+type)}return null}var ALLOC_STATIC=2;var ALLOC_NONE=4;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab===\"number\"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types===\"string\"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc===\"function\"?_malloc:staticAlloc,stackAlloc,staticAlloc,dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType===\"i8\"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret=\"\";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str=\"\";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\\w\\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+\" [\"+y+\"]\"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return\"(no stack trace available)\"}}return err.stack.toString()}var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module[\"buffer\"]=buffer=buf}function updateGlobalBufferViews(){Module[\"HEAP8\"]=HEAP8=new Int8Array(buffer);Module[\"HEAP16\"]=HEAP16=new Int16Array(buffer);Module[\"HEAP32\"]=HEAP32=new Int32Array(buffer);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buffer);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buffer);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buffer);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buffer);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort(\"Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value \"+TOTAL_MEMORY+\", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 \")}if(!Module[\"reallocBuffer\"])Module[\"reallocBuffer\"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module[\"usingWasm\"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module[\"reallocBuffer\"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,\"byteLength\").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module[\"TOTAL_STACK\"]||5242880;var TOTAL_MEMORY=Module[\"TOTAL_MEMORY\"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback();continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};var memoryInitializer=null;var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+26352;__ATINIT__.push();memoryInitializer=\"data:application/octet-stream;base64,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ciBoYW5kbGVyLgoAQ29kZWMgcHJvdmlkZWQgdG8gdGhlIG9wal9yZWFkX2hlYWRlciBmdW5jdGlvbiBpcyBub3QgYSBkZWNvbXByZXNzb3IgaGFuZGxlci4KAEludmFsaWQgbnVtYmVyIG9mIHJlc29sdXRpb25zIDogJWQgbm90IGluIHJhbmdlIFsxLCVkXQoARGVwcmVjYXRlZCBmaWVsZHMgY3BfY2luZW1hIG9yIGNwX3JzaXogYXJlIHVzZWQKUGxlYXNlIGNvbnNpZGVyIHVzaW5nIG9ubHkgdGhlIHJzaXogZmllbGQKU2VlIG9wZW5qcGVnLmggZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzCgBUaGUgZGVzaXJlZCBtYXhpbXVtIGNvZGVzdHJlYW0gc2l6ZSBoYXMgbGltaXRlZAphdCBsZWFzdCBvbmUgb2YgdGhlIGRlc2lyZWQgcXVhbGl0eSBsYXllcnMKAEpQRUcgMjAwMCBTY2FsYWJsZSBEaWdpdGFsIENpbmVtYSBwcm9maWxlcyBub3QgeWV0IHN1cHBvcnRlZAoASlBFRyAyMDAwIFByb2ZpbGUtMyBhbmQgNCAoMmsvNGsgZGMgcHJvZmlsZSkgcmVxdWlyZXM6CjEgc2luZ2xlIHF1YWxpdHkgbGF5ZXItPiBOdW1iZXIgb2YgbGF5ZXJzIGZvcmNlZCB0byAxIChyYXRoZXIgdGhhbiAlZCkKLT4gUmF0ZSBvZiB0aGUgbGFzdCBsYXllciAoJTMuMWYpIHdpbGwgYmUgdXNlZABKUEVHIDIwMDAgUHJvZmlsZS0zICgyayBkYyBwcm9maWxlKSByZXF1aXJlczoKTnVtYmVyIG9mIGRlY29tcG9zaXRpb24gbGV2ZWxzIDw9IDUKLT4gTnVtYmVyIG9mIGRlY29tcG9zaXRpb24gbGV2ZWxzIGZvcmNlZCB0byA1IChyYXRoZXIgdGhhbiAlZCkKAEpQRUcgMjAwMCBQcm9maWxlLTQgKDRrIGRjIHByb2ZpbGUpIHJlcXVpcmVzOgpOdW1iZXIgb2YgZGVjb21wb3NpdGlvbiBsZXZlbHMgPj0gMSAmJiA8PSA2Ci0+IE51bWJlciBvZiBkZWNvbXBvc2l0aW9uIGxldmVscyBmb3JjZWQgdG8gMSAocmF0aGVyIHRoYW4gJWQpCgBKUEVHIDIwMDAgUHJvZmlsZS00ICg0ayBkYyBwcm9maWxlKSByZXF1aXJlczoKTnVtYmVyIG9mIGRlY29tcG9zaXRpb24gbGV2ZWxzID49IDEgJiYgPD0gNgotPiBOdW1iZXIgb2YgZGVjb21wb3NpdGlvbiBsZXZlbHMgZm9yY2VkIHRvIDYgKHJhdGhlciB0aGFuICVkKQoASlBFRyAyMDAwIFByb2ZpbGUtMyBhbmQgNCAoMmsvNGsgZGMgcHJvZmlsZSkgcmVxdWlyZXM6Ck1heGltdW0gMTMwMjA4MyBjb21wcmVzc2VkIGJ5dGVzIEAgMjRmcHMKQXMgbm8gcmF0ZSBoYXMgYmVlbiBnaXZlbiwgdGhpcyBsaW1pdCB3aWxsIGJlIHVzZWQuCgBKUEVHIDIwMDAgUHJvZmlsZS0zIGFuZCA0ICgyay80ayBkYyBwcm9maWxlKSByZXF1aXJlczoKTWF4aW11bSAxMzAyMDgzIGNvbXByZXNzZWQgYnl0ZXMgQCAyNGZwcwotPiBTcGVjaWZpZWQgcmF0ZSBleGNlZWRzIHRoaXMgbGltaXQuIFJhdGUgd2lsbCBiZSBmb3JjZWQgdG8gMTMwMjA4MyBieXRlcy4KAEpQRUcgMjAwMCBQcm9maWxlLTMgYW5kIDQgKDJrLzRrIGRjIHByb2ZpbGUpIHJlcXVpcmVzOgpNYXhpbXVtIDEwNDE2NjYgY29tcHJlc3NlZCBieXRlcyBAIDI0ZnBzCkFzIG5vIHJhdGUgaGFzIGJlZW4gZ2l2ZW4sIHRoaXMgbGltaXQgd2lsbCBiZSB1c2VkLgoASlBFRyAyMDAwIFByb2ZpbGUtMyBhbmQgNCAoMmsvNGsgZGMgcHJvZmlsZSkgcmVxdWlyZXM6Ck1heGltdW0gMTA0MTY2NiBjb21wcmVzc2VkIGJ5dGVzIEAgMjRmcHMKLT4gU3BlY2lmaWVkIHJhdGUgZXhjZWVkcyB0aGlzIGxpbWl0LiBSYXRlIHdpbGwgYmUgZm9yY2VkIHRvIDEwNDE2NjYgYnl0ZXMuCgBKUEVHIDIwMDAgUHJvZmlsZS0zICgyayBkYyBwcm9maWxlKSByZXF1aXJlczoKMyBjb21wb25lbnRzLT4gTnVtYmVyIG9mIGNvbXBvbmVudHMgb2YgaW5wdXQgaW1hZ2UgKCVkKSBpcyBub3QgY29tcGxpYW50Ci0+IE5vbi1wcm9maWxlLTMgY29kZXN0cmVhbSB3aWxsIGJlIGdlbmVyYXRlZAoAc2lnbmVkAHVuc2lnbmVkAEpQRUcgMjAwMCBQcm9maWxlLTMgKDJrIGRjIHByb2ZpbGUpIHJlcXVpcmVzOgpQcmVjaXNpb24gb2YgZWFjaCBjb21wb25lbnQgc2hhbGwgYmUgMTIgYml0cyB1bnNpZ25lZC0+IEF0IGxlYXN0IGNvbXBvbmVudCAlZCBvZiBpbnB1dCBpbWFnZSAoJWQgYml0cywgJXMpIGlzIG5vdCBjb21wbGlhbnQKLT4gTm9uLXByb2ZpbGUtMyBjb2Rlc3RyZWFtIHdpbGwgYmUgZ2VuZXJhdGVkCgBKUEVHIDIwMDAgUHJvZmlsZS0zICgyayBkYyBwcm9maWxlKSByZXF1aXJlczoKd2lkdGggPD0gMjA0OCBhbmQgaGVpZ2h0IDw9IDEwODAKLT4gSW5wdXQgaW1hZ2Ugc2l6ZSAlZCB4ICVkIGlzIG5vdCBjb21wbGlhbnQKLT4gTm9uLXByb2ZpbGUtMyBjb2Rlc3RyZWFtIHdpbGwgYmUgZ2VuZXJhdGVkCgBKUEVHIDIwMDAgUHJvZmlsZS00ICg0ayBkYyBwcm9maWxlKSByZXF1aXJlczoKd2lkdGggPD0gNDA5NiBhbmQgaGVpZ2h0IDw9IDIxNjAKLT4gSW1hZ2Ugc2l6ZSAlZCB4ICVkIGlzIG5vdCBjb21wbGlhbnQKLT4gTm9uLXByb2ZpbGUtNCBjb2Rlc3RyZWFtIHdpbGwgYmUgZ2VuZXJhdGVkCgBKUEVHIDIwMDAgTG9uZyBUZXJtIFN0b3JhZ2UgcHJvZmlsZSBub3QgeWV0IHN1cHBvcnRlZAoASlBFRyAyMDAwIEJyb2FkY2FzdCBwcm9maWxlcyBub3QgeWV0IHN1cHBvcnRlZAoASlBFRyAyMDAwIElNRiBwcm9maWxlcyBub3QgeWV0IHN1cHBvcnRlZAoASlBFRyAyMDAwIFBhcnQtMiBwcm9maWxlIGRlZmluZWQKYnV0IG5vIFBhcnQtMiBleHRlbnNpb24gZW5hYmxlZC4KUHJvZmlsZSBzZXQgdG8gTk9ORS4KAFVuc3VwcG9ydGVkIFBhcnQtMiBleHRlbnNpb24gZW5hYmxlZApQcm9maWxlIHNldCB0byBOT05FLgoATm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgY29weSBvZiB1c2VyIGVuY29kaW5nIHBhcmFtZXRlcnMgbWF0cml4IAoATm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgY29weSBvZiBjb21tZW50IHN0cmluZwoATm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgY29tbWVudCBzdHJpbmcKACVzJXMAQ3JlYXRlZCBieSBPcGVuSlBFRyB2ZXJzaW9uIABOb3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSB0aWxlIGNvZGluZyBwYXJhbWV0ZXJzCgBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgY2hlY2tpbmcgdGhlIHBvYyB2YWx1ZXMuCgBNaXNzaW5nIHBhY2tldHMgcG9zc2libGUgbG9zcyBvZiBkYXRhCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSB0aWxlIGNvbXBvbmVudCBjb2RpbmcgcGFyYW1ldGVycwoATm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgdGVtcCBidWZmZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFsbG9jYXRlIGVuY29kZXIgTUNUIGNvZGluZyBtYXRyaXggCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSBlbmNvZGVyIE1DVCBkZWNvZGluZyBtYXRyaXggCgBGYWlsZWQgdG8gaW52ZXJzZSBlbmNvZGVyIE1DVCBkZWNvZGluZyBtYXRyaXggCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSBlbmNvZGVyIE1DVCBub3JtcyAKAEZhaWxlZCB0byBzZXR1cCBqMmsgbWN0IGVuY29kaW5nCgBDYW5ub3QgcGVyZm9ybSBNQ1Qgb24gY29tcG9uZW50cyB3aXRoIGRpZmZlcmVudCBzaXplcy4gRGlzYWJsaW5nIE1DVC4KAENhbm5vdCBkZWNvZGUgdGlsZSwgbWVtb3J5IGVycm9yCgBTdGFydCB0byByZWFkIGoyayBtYWluIGhlYWRlciAoJWQpLgoATm90IGVub3VnaCBtZW1vcnkgdG8gYWRkIG1oIG1hcmtlcgoARXhwZWN0ZWQgYSBTT0MgbWFya2VyIAoAU3RyZWFtIHRvbyBzaG9ydAoAQSBtYXJrZXIgSUQgd2FzIGV4cGVjdGVkICgweGZmLS0pIGluc3RlYWQgb2YgJS44eAoAVW5rbm93biBtYXJrZXIKAE1hcmtlciBpcyBub3QgY29tcGxpYW50IHdpdGggaXRzIHBvc2l0aW9uCgBVbmtub3cgbWFya2VyIGhhdmUgYmVlbiBkZXRlY3RlZCBhbmQgZ2VuZXJhdGVkIGVycm9yLgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBoZWFkZXIKAE1hcmtlciBoYW5kbGVyIGZ1bmN0aW9uIGZhaWxlZCB0byByZWFkIHRoZSBtYXJrZXIgc2VnbWVudAoAcmVxdWlyZWQgU0laIG1hcmtlciBub3QgZm91bmQgaW4gbWFpbiBoZWFkZXIKAHJlcXVpcmVkIENPRCBtYXJrZXIgbm90IGZvdW5kIGluIG1haW4gaGVhZGVyCgByZXF1aXJlZCBRQ0QgbWFya2VyIG5vdCBmb3VuZCBpbiBtYWluIGhlYWRlcgoATm90IGVub3VnaCBieXRlcyB0byByZWFkIE5wcG0KAENvcnJ1cHRlZCBQUE0gbWFya2VycwoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBQUE0gbWFya2VyCgBGYWlsZWQgdG8gbWVyZ2UgUFBNIGRhdGEKAE1haW4gaGVhZGVyIGhhcyBiZWVuIGNvcnJlY3RseSBkZWNvZGVkLgoARXJyb3IgcmVhZGluZyBNQ08gbWFya2VyCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgdHJhbnNmb3JtYXRpb24gc3RhZ2VzLgoARXJyb3IgcmVhZGluZyBNQ0MgbWFya2VyCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgZGF0YSBzcGFubmluZwoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBNQ0MgbWFya2VyCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgY29sbGVjdGlvbnMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBjb2xsZWN0aW9ucyBvdGhlciB0aGFuIGFycmF5IGRlY29ycmVsYXRpb24KAENhbm5vdCB0YWtlIGluIGNoYXJnZSBjb2xsZWN0aW9ucyB3aXRoIGluZGl4IHNodWZmbGUKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBjb2xsZWN0aW9ucyB3aXRob3V0IHNhbWUgbnVtYmVyIG9mIGluZGl4ZXMKAENycm9yIHJlYWRpbmcgQ0JEIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ1QgbWFya2VyCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbWN0IGRhdGEgd2l0aGluIG11bHRpcGxlIE1DVCByZWNvcmRzCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DVCBtYXJrZXIKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtdWx0aXBsZSBNQ1QgbWFya2VycwoARXJyb3IgcmVhZGluZyBDUkcgbWFya2VyCgBFcnJvciByZWFkaW5nIFBQVCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUFBUIG1hcmtlcjogcGFja2V0IGhlYWRlciBoYXZlIGJlZW4gcHJldmlvdXNseSBmb3VuZCBpbiB0aGUgbWFpbiBoZWFkZXIgKFBQTSBtYXJrZXIpLgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBQUFQgbWFya2VyCgBacHB0ICV1IGFscmVhZHkgcmVhZAoARXJyb3IgcmVhZGluZyBQUE0gbWFya2VyCgBacHBtICV1IGFscmVhZHkgcmVhZAoARXJyb3IgcmVhZGluZyBQTFQgbWFya2VyCgBFcnJvciByZWFkaW5nIFBMTSBtYXJrZXIKAEVycm9yIHJlYWRpbmcgVExNIG1hcmtlcgoARXJyb3Igd2l0aCBTSVogbWFya2VyIHNpemUKAEVycm9yIHdpdGggU0laIG1hcmtlcjogbnVtYmVyIG9mIGNvbXBvbmVudCBpcyBpbGxlZ2FsIC0+ICVkCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG51bWJlciBvZiBjb21wb25lbnQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBwYXJhbWV0ZXJzICggJWQgdnMgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG5lZ2F0aXZlIG9yIHplcm8gaW1hZ2Ugc2l6ZSAoJWxsZCB4ICVsbGQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IGludmFsaWQgdGlsZSBzaXplICh0ZHg6ICVkLCB0ZHk6ICVkKQoAUHJldmVudCBidWZmZXIgb3ZlcmZsb3cgKHgxOiAlZCwgeTE6ICVkKQoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBpbGxlZ2FsIHRpbGUgb2Zmc2V0CgBOb3QgZW5vdWdoIG1lbW9yeSB0byB0YWtlIGluIGNoYXJnZSBTSVogbWFya2VyCgBJbnZhbGlkIHZhbHVlcyBmb3IgY29tcCA9ICVkIDogZHg9JXUgZHk9JXUgKHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDI1NSBhY2NvcmRpbmcgdG8gdGhlIEpQRUcyMDAwIG5vcm0pCgBJbnZhbGlkIHZhbHVlcyBmb3IgY29tcCA9ICVkIDogcHJlYz0ldSAoc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMzggYWNjb3JkaW5nIHRvIHRoZSBKUEVHMjAwMCBub3JtKQoASW52YWxpZCBudW1iZXIgb2YgdGlsZXMgOiAldSB4ICV1IChtYXhpbXVtIGZpeGVkIGJ5IGpwZWcyMDAwIG5vcm0gaXMgNjU1MzUgdGlsZXMpCgBFcnJvciByZWFkaW5nIFBPQyBtYXJrZXIKAFRvbyBtYW55IFBPQ3MgJWQKAEVycm9yIHJlYWRpbmcgUUNDIG1hcmtlcgoASW52YWxpZCBjb21wb25lbnQgbnVtYmVyOiAlZCwgcmVnYXJkaW5nIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyAlZAoARXJyb3IgcmVhZGluZyBTUWNkIG9yIFNRY2MgZWxlbWVudAoAV2hpbGUgcmVhZGluZyBDQ1BfUU5UU1RZIGVsZW1lbnQgaW5zaWRlIFFDRCBvciBRQ0MgbWFya2VyIHNlZ21lbnQsIG51bWJlciBvZiBzdWJiYW5kcyAoJWQpIGlzIGdyZWF0ZXIgdG8gT1BKX0oyS19NQVhCQU5EUyAoJWQpLiBTbyB3ZSBsaW1pdCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHN0b3JlZCB0byBPUEpfSjJLX01BWEJBTkRTICglZCkgYW5kIHNraXAgdGhlIHJlc3QuIAoARXJyb3IgcmVhZGluZyBRQ0QgbWFya2VyCgBFcnJvciByZWFkaW5nIFJHTiBtYXJrZXIKAGJhZCBjb21wb25lbnQgbnVtYmVyIGluIFJHTiAoJWQgd2hlbiB0aGVyZSBhcmUgb25seSAlZCkKAEVycm9yIHJlYWRpbmcgQ09DIG1hcmtlcgoARXJyb3IgcmVhZGluZyBDT0MgbWFya2VyIChiYWQgbnVtYmVyIG9mIGNvbXBvbmVudHMpCgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQKAEludmFsaWQgdmFsdWUgZm9yIG51bXJlc29sdXRpb25zIDogJWQsIG1heCB2YWx1ZSBpcyBzZXQgaW4gb3BlbmpwZWcuaCBhdCAlZAoARXJyb3IgZGVjb2RpbmcgY29tcG9uZW50ICVkLgpUaGUgbnVtYmVyIG9mIHJlc29sdXRpb25zIHRvIHJlbW92ZSBpcyBoaWdoZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHJlc29sdXRpb25zIG9mIHRoaXMgY29tcG9uZW50Ck1vZGlmeSB0aGUgY3BfcmVkdWNlIHBhcmFtZXRlci4KCgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQsIEludmFsaWQgY2Jsa3cvY2Jsa2ggY29tYmluYXRpb24KAEVycm9yIHJlYWRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudCwgSW52YWxpZCBjb2RlLWJsb2NrIHN0eWxlIGZvdW5kCgBJbnZhbGlkIHByZWNpbmN0IHNpemUKAENPRCBtYXJrZXIgYWxyZWFkeSByZWFkLiBObyBtb3JlIHRoYW4gb25lIENPRCBtYXJrZXIgcGVyIHRpbGUuCgBFcnJvciByZWFkaW5nIENPRCBtYXJrZXIKAFVua25vd24gU2NvZCB2YWx1ZSBpbiBDT0QgbWFya2VyCgBVbmtub3duIHByb2dyZXNzaW9uIG9yZGVyIGluIENPRCBtYXJrZXIKAEludmFsaWQgbnVtYmVyIG9mIGxheWVycyBpbiBDT0QgbWFya2VyIDogJWQgbm90IGluIHJhbmdlIFsxLTY1NTM1XQoARXJyb3IgcmVhZGluZyBTT1QgbWFya2VyCgBJbnZhbGlkIHRpbGUgbnVtYmVyICVkCgBFbXB0eSBTT1QgbWFya2VyIGRldGVjdGVkOiBQc290PSVkLgoAUHNvdCB2YWx1ZSBpcyBub3QgY29ycmVjdCByZWdhcmRzIHRvIHRoZSBKUEVHMjAwMCBub3JtOiAlZC4KAFBzb3QgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdGlsZS1wYXJ0IGlzIGVxdWFsIHRvIHplcm8sIHdlIGFzc3VtaW5nIGl0IGlzIHRoZSBsYXN0IHRpbGUtcGFydCBvZiB0aGUgY29kZXN0cmVhbS4KAEluIFNPVCBtYXJrZXIsIFRQU290ICglZCkgaXMgbm90IHZhbGlkIHJlZ2FyZHMgdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHRpbGUtcGFydCAoJWQpLCBnaXZpbmcgdXAKAEluIFNPVCBtYXJrZXIsIFRQU290ICglZCkgaXMgbm90IHZhbGlkIHJlZ2FyZHMgdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHRpbGUtcGFydCAoaGVhZGVyKSAoJWQpLCBnaXZpbmcgdXAKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgU09UIG1hcmtlci4gVGlsZSBpbmRleCBhbGxvY2F0aW9uIGZhaWxlZAoASW5jb25zaXN0ZW50IG1hcmtlciBzaXplCgBNYXJrZXIgc2l6ZSBpbmNvbnNpc3RlbnQgd2l0aCBzdHJlYW0gbGVuZ3RoCgBOb3Qgc3VyZSBob3cgdGhhdCBoYXBwZW5lZC4KAEZhaWwgdG8gcmVhZCB0aGUgY3VycmVudCBtYXJrZXIgc2VnbWVudCAoJSN4KQoATm90IGVub3VnaCBtZW1vcnkgdG8gYWRkIHRsIG1hcmtlcgoAVGlsZSBwYXJ0IGxlbmd0aCBzaXplIGluY29uc2lzdGVudCB3aXRoIHN0cmVhbSBsZW5ndGgKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGRlY29kZSB0aWxlCgBvcGpfajJrX2FwcGx5X25iX3RpbGVfcGFydHNfY29ycmVjdGlvbiBlcnJvcgoATm9uIGNvbmZvcm1hbnQgY29kZXN0cmVhbSBUUHNvdD09VE5zb3QuCgBGYWlsZWQgdG8gbWVyZ2UgUFBUIGRhdGEKAEhlYWRlciBvZiB0aWxlICVkIC8gJWQgaGFzIGJlZW4gcmVhZC4KAEZhaWxlZCB0byBkZWNvZGUuCgBObyBFT0MgbWFya2VyLiBQb3NzaWJseSBhIHRydW5jYXRlZCBzdHJlYW0KAFN0cmVhbSBkb2VzIG5vdCBlbmQgd2l0aCBFT0MKAFN0cmVhbSB0b28gc2hvcnQsIGV4cGVjdGVkIFNPVAoATmVlZCB0byBkZWNvZGUgdGhlIG1haW4gaGVhZGVyIGJlZm9yZSBiZWdpbiB0byBkZWNvZGUgdGhlIHJlbWFpbmluZyBjb2Rlc3RyZWFtAE5vIGRlY29kZWQgYXJlYSBwYXJhbWV0ZXJzLCBzZXQgdGhlIGRlY29kZWQgYXJlYSB0byB0aGUgd2hvbGUgaW1hZ2UKAExlZnQgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3gwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChYc2l6PSVkKS4KAExlZnQgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3gwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChYT3Npej0lZCkuCgBVcCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTA9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFlzaXo9JWQpLgoAVXAgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZT3Npej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhPc2l6PSVkKS4KAFJpZ2h0IHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl94MT0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWHNpej0lZCkuCgBCb3R0b20gcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kxPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZT3Npej0lZCkuCgBCb3R0b20gcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kxPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZc2l6PSVkKS4KAFNpemUgeCBvZiB0aGUgZGVjb2RlZCBjb21wb25lbnQgaW1hZ2UgaXMgaW5jb3JyZWN0IChjb21wWyVkXS53PSVkKS4KAFNpemUgeSBvZiB0aGUgZGVjb2RlZCBjb21wb25lbnQgaW1hZ2UgaXMgaW5jb3JyZWN0IChjb21wWyVkXS5oPSVkKS4KAFNldHRpbmcgZGVjb2RpbmcgYXJlYSB0byAlZCwlZCwlZCwlZAoAV3JvbmcgZmxhZwoAQ29kZXN0cmVhbSBpbmZvIGZyb20gbWFpbiBoZWFkZXI6IHsKAAkgdHgwPSVkLCB0eTA9JWQKAAkgdGR4PSVkLCB0ZHk9JWQKAAkgdHc9JWQsIHRoPSVkCgB9CgBDb2Rlc3RyZWFtIGluZGV4IGZyb20gbWFpbiBoZWFkZXI6IHsKAAkgTWFpbiBoZWFkZXIgc3RhcnQgcG9zaXRpb249JWxsaQoJIE1haW4gaGVhZGVyIGVuZCBwb3NpdGlvbj0lbGxpCgAJIE1hcmtlciBsaXN0OiB7CgAJCSB0eXBlPSUjeCwgcG9zPSVsbGksIGxlbj0lZAoACSB9CgAJIFRpbGUgaW5kZXg6IHsKAAkJIG5iIG9mIHRpbGUtcGFydCBpbiB0aWxlIFslZF09JWQKAAkJCSB0aWxlLXBhcnRbJWRdOiBzdGFyX3Bvcz0lbGxpLCBlbmRfaGVhZGVyPSVsbGksIGVuZF9wb3M9JWxsaS4KAAkgZGVmYXVsdCB0aWxlIHsKAAkJIGNzdHk9JSN4CgAJCSBwcmc9JSN4CgAJCSBudW1sYXllcnM9JWQKAAkJIG1jdD0leAoACQkgY29tcCAlZCB7CgAJCQkgY3N0eT0lI3gKAAkJCSBudW1yZXNvbHV0aW9ucz0lZAoACQkJIGNibGt3PTJeJWQKAAkJCSBjYmxraD0yXiVkCgAJCQkgY2Jsa3N0eT0lI3gKAAkJCSBxbWZiaWQ9JWQKAAkJCSBwcmVjY2ludHNpemUgKHcsaCk9ACglZCwlZCkgAAkJCSBxbnRzdHk9JWQKAAkJCSBudW1nYml0cz0lZAoACQkJIHN0ZXBzaXplcyAobSxlKT0ACQkJIHJvaXNoaWZ0PSVkCgAJCSB9CgBbREVWXSBEdW1wIGFuIGltYWdlX2hlYWRlciBzdHJ1Y3QgewoASW1hZ2UgaW5mbyB7CgAlcyB4MD0lZCwgeTA9JWQKACVzIHgxPSVkLCB5MT0lZAoAJXMgbnVtY29tcHM9JWQKACVzCSBjb21wb25lbnQgJWQgewoAJXN9CgBbREVWXSBEdW1wIGFuIGltYWdlX2NvbXBfaGVhZGVyIHN0cnVjdCB7CgAlcyBkeD0lZCwgZHk9JWQKACVzIHByZWM9JWQKACVzIHNnbmQ9JWQKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGRlY29kZSB0aWxlcwoATm90IGVub3VnaCBtZW1vcnkgdG8gZGVjb2RlIHRpbGUgJWQvJWQKAEZhaWxlZCB0byBkZWNvZGUgdGlsZSAlZC8lZAoAVGlsZSAlZC8lZCBoYXMgYmVlbiBkZWNvZGVkLgoASW1hZ2UgZGF0YSBoYXMgYmVlbiB1cGRhdGVkIHdpdGggdGlsZSAlZC4KCgBXZSBuZWVkIGFuIGltYWdlIHByZXZpb3VzbHkgY3JlYXRlZC4KAFRpbGUgaW5kZXggcHJvdmlkZWQgYnkgdGhlIHVzZXIgaXMgaW5jb3JyZWN0ICVkIChtYXggPSAlZCkgCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBkZWNvZGUgb25lIHRpbGUKAFByb2JsZW0gd2l0aCBzZWVrIGZ1bmN0aW9uCgBUaWxlIHJlYWQsIGRlY29kZWQgYW5kIHVwZGF0ZWQgaXMgbm90IHRoZSBkZXNpcmVkIG9uZSAoJWQgdnMgJWQpLgoAUmVzb2x1dGlvbiBmYWN0b3IgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHJlc29sdXRpb24gaW4gdGhlIGNvbXBvbmVudC4KAFRoZSBnaXZlbiB0aWxlIGluZGV4IGRvZXMgbm90IG1hdGNoLgB0aWxlIG51bWJlciAlZCAvICVkCgBFcnJvciBhbGxvY2F0aW5nIHRpbGUgY29tcG9uZW50IGRhdGEuAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGVuY29kZSBhbGwgdGlsZXMKAFNpemUgbWlzbWF0Y2ggYmV0d2VlbiB0aWxlIGRhdGEgYW5kIHNlbnQgZGF0YS4AQ2Fubm90IGVuY29kZSB0aWxlCgBGYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UgaGVhZGVyLgBOb3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgVGlsZSBDb2RlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gd3JpdGUgQ0JEIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gd3JpdGUgTUNUIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gd3JpdGUgTUNDIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gd3JpdGUgTUNPIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gd3JpdGUgdGhlIENPTSBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHdyaXRlIFBPQyBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHdyaXRlIFRMTSBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHdyaXRlIFFDQyBtYXJrZXIKAEVycm9yIHdyaXRpbmcgU1FjZCBTUWNjIGVsZW1lbnQKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHdyaXRlIENPQyBtYXJrZXIKAEVycm9yIHdyaXRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudAoATm90IGVub3VnaCBtZW1vcnkgdG8gd3JpdGUgUUNEIG1hcmtlcgoARXJyb3Igd3JpdGluZyBRQ0QgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byB3cml0ZSBDT0QgbWFya2VyCgBFcnJvciB3cml0aW5nIENPRCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aGUgU0laIG1hcmtlcgoATnVtYmVyIG9mIHJlc29sdXRpb25zIGlzIHRvbyBoaWdoIGluIGNvbXBhcmlzb24gdG8gdGhlIHNpemUgb2YgdGlsZXMKAEVycm9yIHdoaWxlIG9wal9qMmtfcHJlX3dyaXRlX3RpbGUgd2l0aCB0aWxlIGluZGV4ID0gJWQKAEVycm9yIHdoaWxlIG9wal9qMmtfcG9zdF93cml0ZV90aWxlIHdpdGggdGlsZSBpbmRleCA9ICVkCgBGYWlsZWQgdG8gZGVjb2RlIHRoZSBjb2Rlc3RyZWFtIGluIHRoZSBKUDIgZmlsZQoAb3BqX2pwMl9hcHBseV9jZGVmOiBjbj0lZCwgbnVtY29tcHM9JWQKAG9wal9qcDJfYXBwbHlfY2RlZjogYWNuPSVkLCBudW1jb21wcz0lZAoASW52YWxpZCBjb21wb25lbnQgaW5kZXggJWQgKD49ICVkKS4KAEluY29tcGxldGUgY2hhbm5lbCBkZWZpbml0aW9ucy4KAFVuZXhwZWN0ZWQgT09NLgoASW52YWxpZCBjb21wb25lbnQvcGFsZXR0ZSBpbmRleCBmb3IgZGlyZWN0IG1hcHBpbmcgJWQuCgBDb21wb25lbnQgJWQgaXMgbWFwcGVkIHR3aWNlLgoARGlyZWN0IHVzZSBhdCAjJWQgaG93ZXZlciBwY29sPSVkLgoAQ29tcG9uZW50ICVkIGRvZXNuJ3QgaGF2ZSBhIG1hcHBpbmcuCgBDb21wb25lbnQgbWFwcGluZyBzZWVtcyB3cm9uZy4gVHJ5aW5nIHRvIGNvcnJlY3QuCgBJbnZhbGlkIG51bWJlciBvZiBjb21wb25lbnRzIHNwZWNpZmllZCB3aGlsZSBzZXR0aW5nIHVwIEpQMiBlbmNvZGVyCgBOb3QgZW5vdWdoIG1lbW9yeSB3aGVuIHNldHVwIHRoZSBKUDIgZW5jb2RlcgoAQWxwaGEgY2hhbm5lbCBzcGVjaWZpZWQgYnV0IHVua25vd24gZW51bWNzLiBObyBjZGVmIGJveCB3aWxsIGJlIGNyZWF0ZWQuCgBBbHBoYSBjaGFubmVsIHNwZWNpZmllZCBidXQgbm90IGVub3VnaCBpbWFnZSBjb21wb25lbnRzIGZvciBhbiBhdXRvbWF0aWMgY2RlZiBib3ggY3JlYXRpb24uCgBBbHBoYSBjaGFubmVsIHBvc2l0aW9uIGNvbmZsaWN0cyB3aXRoIGNvbG9yIGNoYW5uZWwuIE5vIGNkZWYgYm94IHdpbGwgYmUgY3JlYXRlZC4KAE11bHRpcGxlIGFscGhhIGNoYW5uZWxzIHNwZWNpZmllZC4gTm8gY2RlZiBib3ggd2lsbCBiZSBjcmVhdGVkLgoATm90IGVub3VnaCBtZW1vcnkgdG8gc2V0dXAgdGhlIEpQMiBlbmNvZGVyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUganBlZzIwMDAgZmlsZSBoZWFkZXIKAENhbm5vdCBoYW5kbGUgYm94IHNpemVzIGhpZ2hlciB0aGFuIDJeMzIKAGJhZCBwbGFjZWQganBlZyBjb2Rlc3RyZWFtCgBDYW5ub3QgaGFuZGxlIGJveCBvZiB1bmRlZmluZWQgc2l6ZXMKAGludmFsaWQgYm94IHNpemUgJWQgKCV4KQoARm91bmQgYSBtaXNwbGFjZWQgJyVjJWMlYyVjJyBib3ggb3V0c2lkZSBqcDJoIGJveAoASlBFRzIwMDAgSGVhZGVyIGJveCBub3QgcmVhZCB5ZXQsICclYyVjJWMlYycgYm94IHdpbGwgYmUgaWdub3JlZAoAUHJvYmxlbSB3aXRoIHNraXBwaW5nIEpQRUcyMDAwIGJveCwgc3RyZWFtIGVycm9yCgBJbnZhbGlkIGJveCBzaXplICVkIGZvciBib3ggJyVjJWMlYyVjJy4gTmVlZCAlZCBieXRlcywgJWQgYnl0ZXMgcmVtYWluaW5nIAoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGpwZWcyMDAwIGJveAoAUHJvYmxlbSB3aXRoIHJlYWRpbmcgSlBFRzIwMDAgYm94LCBzdHJlYW0gZXJyb3IKAE1hbGZvcm1lZCBKUDIgZmlsZSBmb3JtYXQ6IGZpcnN0IGJveCBtdXN0IGJlIEpQRUcgMjAwMCBzaWduYXR1cmUgYm94CgBNYWxmb3JtZWQgSlAyIGZpbGUgZm9ybWF0OiBzZWNvbmQgYm94IG11c3QgYmUgZmlsZSB0eXBlIGJveAoASW5zdWZmaWNpZW50IGRhdGEgZm9yIENERUYgYm94LgoATnVtYmVyIG9mIGNoYW5uZWwgZGVzY3JpcHRpb24gaXMgZXF1YWwgdG8gemVybyBpbiBDREVGIGJveC4KAE5lZWQgdG8gcmVhZCBhIFBDTFIgYm94IGJlZm9yZSB0aGUgQ01BUCBib3guCgBPbmx5IG9uZSBDTUFQIGJveCBpcyBhbGxvd2VkLgoASW5zdWZmaWNpZW50IGRhdGEgZm9yIENNQVAgYm94LgoASW52YWxpZCBQQ0xSIGJveC4gUmVwb3J0cyAlZCBlbnRyaWVzCgBJbnZhbGlkIFBDTFIgYm94LiBSZXBvcnRzIDAgcGFsZXR0ZSBjb2x1bW5zCgBBIEJQQ0MgaGVhZGVyIGJveCBpcyBhdmFpbGFibGUgYWx0aG91Z2ggQlBDIGdpdmVuIGJ5IHRoZSBJSERSIGJveCAoJWQpIGluZGljYXRlIGNvbXBvbmVudHMgYml0IGRlcHRoIGlzIGNvbnN0YW50CgBCYWQgQlBDQyBoZWFkZXIgYm94IChiYWQgc2l6ZSkKAEJhZCBDT0xSIGhlYWRlciBib3ggKGJhZCBzaXplKQoAQSBjb25mb3JtaW5nIEpQMiByZWFkZXIgc2hhbGwgaWdub3JlIGFsbCBDb2xvdXIgU3BlY2lmaWNhdGlvbiBib3hlcyBhZnRlciB0aGUgZmlyc3QsIHNvIHdlIGlnbm9yZSB0aGlzIG9uZS4KAEJhZCBDT0xSIGhlYWRlciBib3ggKGJhZCBzaXplOiAlZCkKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjaWVsYWIKAEJhZCBDT0xSIGhlYWRlciBib3ggKENJRUxhYiwgYmFkIHNpemU6ICVkKQoAQ09MUiBCT1ggbWV0aCB2YWx1ZSBpcyBub3QgYSByZWd1bGFyIHZhbHVlICglZCksIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBlbnRpcmUgQ29sb3VyIFNwZWNpZmljYXRpb24gYm94LiAKAElnbm9yaW5nIGloZHIgYm94LiBGaXJzdCBpaGRyIGJveCBhbHJlYWR5IHJlYWQKAEJhZCBpbWFnZSBoZWFkZXIgYm94IChiYWQgc2l6ZSkKAEludmFsaWQgbnVtYmVyIG9mIGNvbXBvbmVudHMgKGloZHIpCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUgaW1hZ2UgaGVhZGVyIChpaGRyKQoASlAyIElIRFIgYm94OiBjb21wcmVzc2lvbiB0eXBlIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgaXMgbm90IGEgY29uZm9ybWluZyBKUDIgZmlsZSAoJWQpIAoAVGhlICBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAQ2Fubm90IGhhbmRsZSBib3ggb2YgbGVzcyB0aGFuIDggYnl0ZXMKAENhbm5vdCBoYW5kbGUgWEwgYm94IG9mIGxlc3MgdGhhbiAxNiBieXRlcwoAQm94IGxlbmd0aCBpcyBpbmNvbnNpc3RlbnQuCgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveAoAU3RyZWFtIGVycm9yIHdoaWxlIHJlYWRpbmcgSlAyIEhlYWRlciBib3g6IGJveCBsZW5ndGggaXMgaW5jb25zaXN0ZW50LgoAU3RyZWFtIGVycm9yIHdoaWxlIHJlYWRpbmcgSlAyIEhlYWRlciBib3g6IG5vICdpaGRyJyBib3guCgBUaGUgZnR5cCBib3ggbXVzdCBiZSB0aGUgc2Vjb25kIGJveCBpbiB0aGUgZmlsZS4KAEVycm9yIHdpdGggRlRZUCBzaWduYXR1cmUgQm94IHNpemUKAE5vdCBlbm91Z2ggbWVtb3J5IHdpdGggRlRZUCBCb3gKAFRoZSBzaWduYXR1cmUgYm94IG11c3QgYmUgdGhlIGZpcnN0IGJveCBpbiB0aGUgZmlsZS4KAEVycm9yIHdpdGggSlAgc2lnbmF0dXJlIEJveCBzaXplCgBFcnJvciB3aXRoIEpQIFNpZ25hdHVyZSA6IGJhZCBtYWdpYyBudW1iZXIKAEZhaWxlZCB0byBzZWVrIGluIHRoZSBzdHJlYW0uCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBob2xkIEpQMiBIZWFkZXIgZGF0YQoAU3RyZWFtIGVycm9yIHdoaWxlIHdyaXRpbmcgSlAyIEhlYWRlciBib3gKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGhhbmRsZSBmdHlwIGRhdGEKAEVycm9yIHdoaWxlIHdyaXRpbmcgZnR5cCBkYXRhIHRvIHN0cmVhbQoASlAyIGJveCB3aGljaCBhcmUgYWZ0ZXIgdGhlIGNvZGVzdHJlYW0gd2lsbCBub3QgYmUgcmVhZCBieSB0aGlzIGZ1bmN0aW9uLgoAVGlsZSBYIGNvb3JkaW5hdGVzIGFyZSBub3Qgc3VwcG9ydGVkCgBUaWxlIFkgY29vcmRpbmF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKAHRpbGVzIHJlcXVpcmUgYXQgbGVhc3Qgb25lIHJlc29sdXRpb24KAE5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aWxlIGRhdGEKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aWxlIHJlc29sdXRpb25zCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUgYmFuZCBwcmVjaW50cwoATm90IGVub3VnaCBtZW1vcnkgZm9yIGN1cnJlbnQgcHJlY2luY3QgY29kZWJsb2NrIGVsZW1lbnQKAE5vIGluY2x0cmVlIGNyZWF0ZWQuCgBObyBpbXNidHJlZSBjcmVhdGVkLgoAVGlsZXMgZG9uJ3QgYWxsIGhhdmUgdGhlIHNhbWUgZGltZW5zaW9uLiBTa2lwIHRoZSBNQ1Qgc3RlcC4KAE51bWJlciBvZiBjb21wb25lbnRzICglZCkgaXMgaW5jb25zaXN0ZW50IHdpdGggYSBNQ1QuIFNraXAgdGhlIE1DVCBzdGVwLgoATm90IGVub3VnaCBtZW1vcnkgdG8gY3JlYXRlIFRhZy10cmVlCgB0Z3RfY3JlYXRlIHRyZWUtPm51bW5vZGVzID09IDAsIG5vIHRyZWUgY3JlYXRlZC4KAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGNyZWF0ZSBUYWctdHJlZSBub2RlcwoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVpbml0aWFsaXplIHRoZSB0YWcgdHJlZQoATm90IGVub3VnaCBtZW1vcnkgdG8gYWRkIGEgbmV3IHZhbGlkYXRpb24gcHJvY2VkdXJlCgAAAQECAQICAgECAgICAgICAwMDAwMDAwMDAwMDAwMDAwUGBgYGBgYGBgYGBgYGBgYHBwcHBwcHBwcHBwcHBwcHAwMDAwMDAwMDAwMDAwMDAwQEBAQEBAQEBAQEBAQEBAQHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwUGBgYGBgYGBgYGBgYGBgYHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAEBAgECAgIBAgICAgICAgUGBgYGBgYGBgYGBgYGBgYDAwMDAwMDAwMDAwMDAwMDBwcHBwcHBwcHBwcHBwcHBwUGBgYGBgYGBgYGBgYGBgYICAgICAgICAgICAgICAgIBwcHBwcHBwcHBwcHBwcHBwgICAgICAgICAgICAgICAgDAwMDAwMDAwMDAwMDAwMDBwcHBwcHBwcHBwcHBwcHBwQEBAQEBAQEBAQEBAQEBAQHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwgICAgICAgICAgICAgICAgHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgICAgICAgICAABAQIBAgICAQICAgICAgIDAwMDAwMDAwMDAwMDAwMDBQYGBgYGBgYGBgYGBgYGBgcHBwcHBwcHBwcHBwcHBwcDAwMDAwMDAwMDAwMDAwMDBAQEBAQEBAQEBAQEBAQEBAcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBQYGBgYGBgYGBgYGBgYGBgcHBwcHBwcHBwcHBwcHBwcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAAwMGAwYGCAMGBggGCAgIAQQEBwQHBwgEBwcIBwgICAEEBAcEBwcIBAcHCAcICAgCBQUHBQcHCAUHBwgHCAgIAQQEBwQHBwgEBwcIBwgICAIFBQcFBwcIBQcHCAcICAgCBQUHBQcHCAUHBwgHCAgIAgUFBwUHBwgFBwcIBwgICAEEBAcEBwcIBAcHCAcICAgCBQUHBQcHCAUHBwgHCAgIAgUFBwUHBwgFBwcIBwgICAIFBQcFBwcIBQcHCAcICAgCBQUHBQcHCAUHBwgHCAgIAgUFBwUHBwgFBwcIBwgICAIFBQcFBwcIBQcHCAcICAgCBQUHBQcHCAUHBwgHCAgICQoMDQoKDQ0MDQwNDQ0NDQkKDAsKCQ0MDAsMCw0MDQwJCgwLCgoLCwwNCQoNDQoKCQoMDQoJCwwMCwkKDQwKCQkKDA0KCQsMDA0MDQsMCwwJCgwLCgoLCwwLDAsLCwsLCQoMCwoJDQwMDQkKCwwKCQkKDA0KCg0NDAsJCgsLCgoJCgwNCgoNDQwLCQoLCwoKCQoMCwoJDQwMDQkKCwwKCQkKDAsKCgsLDAsMCwsLCwsJCgwNCgkLDAwNDA0LDAsMCQoMDQoJCwwMCwkKDQwKCQkKDAsKCgsLDA0JCg0NCgoJCgwL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ZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24=\";var tempDoublePtr=STATICTOP;STATICTOP+=16;function ___lock(){}var SYSCALLS={varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){var fflush=Module[\"_fflush\"];if(fflush)fflush(0);var printChar=___syscall146.printChar;if(!printChar)return;var buffers=___syscall146.buffers;if(buffers[1].length)printChar(1,10);if(buffers[2].length)printChar(2,10)}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?Module[\"print\"]:Module[\"printErr\"])(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],\"i8\",ALLOC_STATIC);function ___unlock(){}var _llvm_ceil_f32=Math_ceil;var _llvm_floor_f32=Math_floor;var _llvm_floor_f64=Math_floor;var _llvm_pow_f64=Math_pow;function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,\"Character code \"+chr+\" (\"+String.fromCharCode(chr)+\") at offset \"+i+\" not in 0x00-0xFF.\")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join(\"\")}var decodeBase64=typeof atob===\"function\"?atob:(function(input){var keyStr=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";var output=\"\";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i2147483648)return false;b=new a(newBuffer);d=new c(newBuffer);f=new e(newBuffer);h=new g(newBuffer);j=new i(newBuffer);l=new k(newBuffer);n=new m(newBuffer);p=new o(newBuffer);buffer=newBuffer;return true}\r\n// EMSCRIPTEN_START_FUNCS\r\nfunction Wa(a){a=a|0;var b=0;b=u;u=u+a|0;u=u+15&-16;return b|0}function Xa(){return u|0}function Ya(a){a=a|0;u=a}function Za(a,b){a=a|0;b=b|0;u=a;v=b}function _a(a,b){a=a|0;b=b|0;if(!x){x=a;y=b}}function $a(a){a=a|0;I=a}function ab(){return I|0}function bb(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0;p=u;u=u+8272|0;q=p+16|0;n=p+12|0;m=p;f[n>>2]=0;o=Wb((f[a>>2]|0)==1375686655?0:2)|0;pc(o,1,0)|0;qc(o,2,0)|0;oc(o,3,0)|0;mc(q);f[m>>2]=a;f[m+4>>2]=a;f[m+8>>2]=b;m=uc(m,1)|0;if(!(rc(o,q)|0)){Si(4211)|0;jb(m);Zb(o);q=1;u=p;return q|0}if(!(hc(m,o,n)|0)){Si(4263)|0;jb(m);Zb(o);Qb(f[n>>2]|0);q=1;u=p;return q|0}if(!(Xb(o,m,f[n>>2]|0)|0)){Si(4313)|0;Zb(o);jb(m);Qb(f[n>>2]|0);q=1;u=p;return q|0}a=f[n>>2]|0;f[e>>2]=f[a+8>>2];f[g>>2]=f[a+12>>2];f[h>>2]=f[a+16>>2];b=a+24|0;q=f[b>>2]|0;f[j>>2]=f[q+24>>2];f[k>>2]=f[q+32>>2];f[i>>2]=f[q+28>>2];f[l>>2]=f[a+20>>2];a=X(X(f[e>>2]<<2,f[g>>2]|0)|0,f[h>>2]|0)|0;f[d>>2]=a;k=sh(a)|0;f[c>>2]=k;switch(f[h>>2]|0){case 1:{hj(k|0,f[(f[b>>2]|0)+44>>2]|0,a|0)|0;break}case 3:{j=X(f[g>>2]|0,f[e>>2]|0)|0;if((j|0)>0){i=f[b>>2]|0;b=f[i+44>>2]|0;l=f[i+96>>2]|0;i=f[i+148>>2]|0;a=0;do{q=a*3|0;f[k+(q<<2)>>2]=f[b+(a<<2)>>2];f[k+(q+1<<2)>>2]=f[l+(a<<2)>>2];f[k+(q+2<<2)>>2]=f[i+(a<<2)>>2];a=a+1|0}while((a|0)<(j|0))}break}default:{}}jb(m);Zb(o);Qb(f[n>>2]|0);q=0;u=p;return q|0}function cb(a,b,c,d,e,g,i,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;i=i|0;k=k|0;l=l|0;m=m|0;var o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0;w=u;u=u+18880|0;t=w+160|0;o=w+16|0;v=w;nc(t);f[t+18200>>2]=0;f[t+4788>>2]=1;f[t+20>>2]=1;a:do if(!e)switch(d|0){case 0:case 100:{n[t+4792>>2]=0.0;break a}default:{n[t+5192>>2]=+(d|0);f[t+28>>2]=1;break a}}else n[t+4792>>2]=+(e|0);while(0);f[o+24>>2]=c;f[o+28>>2]=c;f[o+32>>2]=0;f[o>>2]=1;f[o+4>>2]=1;f[o+8>>2]=a;f[o+12>>2]=b;f[o+60>>2]=c;f[o+64>>2]=c;f[o+68>>2]=0;f[o+36>>2]=1;f[o+40>>2]=1;f[o+44>>2]=a;f[o+48>>2]=b;f[o+96>>2]=c;f[o+100>>2]=c;f[o+104>>2]=0;f[o+72>>2]=1;f[o+76>>2]=1;f[o+80>>2]=a;f[o+84>>2]=b;f[o+132>>2]=c;f[o+136>>2]=c;f[o+140>>2]=0;f[o+108>>2]=1;f[o+112>>2]=1;f[o+116>>2]=a;f[o+120>>2]=b;s=Pb(4,o,1)|0;if(!s){m=0;u=w;return m|0}if((c|0)==16){if((b|0)>0&(a|0)>0){q=f[s+24>>2]|0;e=f[q+200>>2]|0;c=f[q+44>>2]|0;p=f[q+96>>2]|0;q=f[q+148>>2]|0;o=0;do{r=X(o,a)|0;d=0;do{x=d+r|0;y=x<<2;f[c+(x<<2)>>2]=j[g+(y<<1)>>1];f[p+(x<<2)>>2]=j[g+((y|1)<<1)>>1];f[q+(x<<2)>>2]=j[g+((y|2)<<1)>>1];f[e+(x<<2)>>2]=j[g+((y|3)<<1)>>1];d=d+1|0}while((d|0)!=(a|0));o=o+1|0}while((o|0)!=(b|0))}}else if((b|0)>0&(a|0)>0){q=f[s+24>>2]|0;e=f[q+200>>2]|0;c=f[q+44>>2]|0;p=f[q+96>>2]|0;q=f[q+148>>2]|0;o=0;do{r=X(o,a)|0;d=0;do{y=d+r|0;x=y<<2;f[c+(y<<2)>>2]=h[g+x>>0];f[p+(y<<2)>>2]=h[g+(x|1)>>0];f[q+(y<<2)>>2]=h[g+(x|2)>>0];f[e+(y<<2)>>2]=h[g+(x|3)>>0];d=d+1|0}while((d|0)!=(a|0));o=o+1|0}while((o|0)!=(b|0))}f[s>>2]=0;f[s+4>>2]=0;f[s+8>>2]=a;f[s+12>>2]=b;if((k|0)>0){f[s+28>>2]=i;f[s+32>>2]=k}pc(0,1,0)|0;qc(0,2,0)|0;oc(0,3,0)|0;e=Vb(2)|0;pc(e,1,0)|0;qc(e,2,0)|0;oc(e,3,0)|0;sc(e,t,s)|0;d=sh(67108864)|0;f[v>>2]=d;o=v+4|0;f[o>>2]=d;f[v+8>>2]=67108864;d=uc(v,0)|0;if(!d){y=0;u=w;return y|0}if(!(tc(e,s,d)|0)){jb(d);Zb(e);Qb(s);y=0;u=w;return y|0}if(!(bc(e,d)|0)){jb(d);Zb(e);Qb(s);y=0;u=w;return y|0}if(!(cc(e,d)|0)){jb(d);Zb(e);Qb(s);y=0;u=w;return y|0}else{x=f[v>>2]|0;y=(f[o>>2]|0)-x|0;v=sh(y)|0;f[l>>2]=v;hj(v|0,x|0,y|0)|0;f[m>>2]=y;jb(d);Zb(e);Qb(s);y=1;u=w;return y|0}return 0}function db(){return xc()|0}function eb(a,b){a=a|0;b=b|0;return}function fb(a,b){a=a|0;b=b|0;return}function gb(a,b){a=a|0;b=b|0;var c=0;b=u;u=u+16|0;c=b;f[c>>2]=a;Pi(4200,c)|0;u=b;return}function hb(a,b){a=a|0;b=b|0;var c=0;c=Ic(1,72)|0;if(!c){c=0;return c|0}f[c+64>>2]=a;a=Hc(a)|0;f[c+32>>2]=a;if(!a){Mc(c);c=0;return c|0}else{f[c+36>>2]=a;b=(b|0)==0;a=c+68|0;f[a>>2]=f[a>>2]|(b?1:2);f[c+40>>2]=b?29:30;f[c+44>>2]=b?31:32;f[c+16>>2]=4;f[c+20>>2]=5;f[c+24>>2]=6;f[c+28>>2]=7;return c|0}return 0}function ib(a){a=a|0;var b=0,c=0;b=Ic(1,72)|0;if(!b){c=0;return c|0}f[b+64>>2]=1048576;c=Hc(1048576)|0;f[b+32>>2]=c;if(!c){Mc(b);c=0;return c|0}else{f[b+36>>2]=c;c=(a|0)==0;a=b+68|0;f[a>>2]=f[a>>2]|(c?1:2);f[b+40>>2]=c?29:30;f[b+44>>2]=c?31:32;f[b+16>>2]=4;f[b+20>>2]=5;f[b+24>>2]=6;f[b+28>>2]=7;c=b;return c|0}return 0}function jb(a){a=a|0;var b=0;if(!a)return;b=f[a+4>>2]|0;if(b|0)Sa[b&7](f[a>>2]|0);b=a+32|0;Mc(f[b>>2]|0);f[b>>2]=0;Mc(a);return}function kb(a,b){a=a|0;b=b|0;if(!a)return;if(!(f[a+68>>2]&2))return;f[a+16>>2]=b;return}function lb(a,b){a=a|0;b=b|0;if(!a)return;f[a+28>>2]=b;return}function mb(a,b){a=a|0;b=b|0;if(!a)return;f[a+24>>2]=b;return}function nb(a,b,c){a=a|0;b=b|0;c=c|0;if(!a)return;f[a>>2]=b;f[a+4>>2]=c;return}function ob(a,b,c){a=a|0;b=b|0;c=c|0;if(!a)return;a=a+8|0;f[a>>2]=b;f[a+4>>2]=c;return}function pb(a,b){a=a|0;b=b|0;if(!a)return;if(!(f[a+68>>2]&1))return;f[a+20>>2]=b;return}function qb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=u;u=u+16|0;o=p+8|0;k=p;n=a+68|0;if(f[n>>2]&8|0){o=-1;a=-1;I=o;u=p;return a|0}j=a+32|0;e=f[j>>2]|0;m=a+36|0;f[m>>2]=e;h=a+48|0;g=f[h>>2]|0;do if(g){i=a+20|0;while(1){g=Ma[f[i>>2]&63](e,g,f[a>>2]|0)|0;if((g|0)==-1)break;e=(f[m>>2]|0)+g|0;f[m>>2]=e;g=(f[h>>2]|0)-g|0;f[h>>2]=g;if(!g){l=6;break}}if((l|0)==6){e=f[j>>2]|0;break}f[n>>2]=f[n>>2]|8;Mb(d,4,4360,k)|0;f[n>>2]=f[n>>2]|8;f[h>>2]=0;o=-1;a=-1;I=o;u=p;return a|0}while(0);f[m>>2]=e;a:do if((c|0)>0|(c|0)==0&b>>>0>0){j=a+24|0;g=0;e=0;while(1){h=Ma[f[j>>2]&63](b,c,f[a>>2]|0)|0;i=I;if((h|0)==-1&(i|0)==-1)break;b=_i(b|0,c|0,h|0,i|0)|0;c=I;g=Zi(h|0,i|0,g|0,e|0)|0;e=I;if(!((c|0)>0|(c|0)==0&b>>>0>0))break a}Mb(d,4,4412,o)|0;f[n>>2]=f[n>>2]|8;a=a+56|0;o=a;o=Zi(f[o>>2]|0,f[o+4>>2]|0,g|0,e|0)|0;f[a>>2]=o;f[a+4>>2]=I;a=(g|0)!=0|(e|0)!=0;o=a?e:-1;a=a?g:-1;I=o;u=p;return a|0}else{g=0;e=0}while(0);o=a+56|0;a=o;a=Zi(f[a>>2]|0,f[a+4>>2]|0,g|0,e|0)|0;f[o>>2]=a;f[o+4>>2]=I;o=e;a=g;I=o;u=p;return a|0}function rb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=u;u=u+16|0;l=m;e=a+48|0;g=f[e>>2]|0;if(g>>>0>=b>>>0){l=a+36|0;f[l>>2]=(f[l>>2]|0)+b;f[e>>2]=g-b;l=a+56|0;a=l;a=Zi(f[a>>2]|0,f[a+4>>2]|0,b|0,c|0)|0;f[l>>2]=a;f[l+4>>2]=I;l=c;a=b;I=l;u=m;return a|0}k=a+68|0;if(f[k>>2]&4|0){l=a+36|0;f[l>>2]=(f[l>>2]|0)+g;f[e>>2]=0;a=a+56|0;l=a;l=Zi(f[l>>2]|0,f[l+4>>2]|0,g|0,0)|0;f[a>>2]=l;f[a+4>>2]=I;a=(g|0)!=0;l=a?0:-1;a=a?g:-1;I=l;u=m;return a|0}if(!g){g=0;e=0}else{f[a+36>>2]=f[a+32>>2];b=_i(b|0,c|0,g|0,0)|0;f[e>>2]=0;e=0;c=I}a:do if((c|0)>0|(c|0)==0&b>>>0>0){j=a+24|0;while(1){h=Ma[f[j>>2]&63](b,c,f[a>>2]|0)|0;i=I;if((h|0)==-1&(i|0)==-1)break;b=_i(b|0,c|0,h|0,i|0)|0;c=I;g=Zi(h|0,i|0,g|0,e|0)|0;e=I;if(!((c|0)>0|(c|0)==0&b>>>0>0))break a}Mb(d,4,4386,l)|0;f[k>>2]=f[k>>2]|4;a=a+56|0;l=a;l=Zi(f[l>>2]|0,f[l+4>>2]|0,g|0,e|0)|0;f[a>>2]=l;f[a+4>>2]=I;a=(g|0)!=0|(e|0)!=0;l=a?e:-1;a=a?g:-1;I=l;u=m;return a|0}while(0);l=a+56|0;a=l;a=Zi(f[a>>2]|0,f[a+4>>2]|0,g|0,e|0)|0;f[l>>2]=a;f[l+4>>2]=I;l=e;a=g;I=l;u=m;return a|0}function sb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=u;u=u+16|0;i=n;k=a+32|0;e=f[k>>2]|0;l=a+36|0;f[l>>2]=e;m=a+48|0;g=f[m>>2]|0;do if(!g)g=a;else{h=a+20|0;while(1){g=Ma[f[h>>2]&63](e,g,f[a>>2]|0)|0;if((g|0)==-1)break;e=(f[l>>2]|0)+g|0;f[l>>2]=e;g=(f[m>>2]|0)-g|0;f[m>>2]=g;if(!g){j=6;break}}if((j|0)==6){g=a;e=f[k>>2]|0;break}m=a+68|0;f[m>>2]=f[m>>2]|8;Mb(d,4,4360,i)|0;f[m>>2]=f[m>>2]|8;m=0;u=n;return m|0}while(0);f[l>>2]=e;f[m>>2]=0;if(!(Ma[f[a+28>>2]&63](b,c,f[g>>2]|0)|0)){m=a+68|0;f[m>>2]=f[m>>2]|8;m=0;u=n;return m|0}else{m=a+56|0;f[m>>2]=b;f[m+4>>2]=c;m=1;u=n;return m|0}return 0}function tb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;f[a+36>>2]=f[a+32>>2];f[a+48>>2]=0;g=(Ma[f[a+28>>2]&63](b,c,f[a>>2]|0)|0)==0;d=a+68|0;e=f[d>>2]|0;if(g){f[d>>2]=e|4;g=0;return g|0}else{f[d>>2]=e&-5;g=a+56|0;f[g>>2]=b;f[g+4>>2]=c;g=1;return g|0}return 0}function ub(a,b,c){a=a|0;b=b|0;c=c|0;return -1}function vb(a,b,c){a=a|0;b=b|0;c=c|0;return -1}function wb(a,b,c){a=a|0;b=b|0;c=c|0;I=-1;return -1}function xb(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function yb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0;h=u;u=u+16|0;e=h;f[e>>2]=c;if(!d){u=h;return}g=0;c=e+d|0;while(1){c=c+-1|0;b[a>>0]=b[c>>0]|0;g=g+1|0;if((g|0)==(d|0))break;else a=a+1|0}u=h;return}function zb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;f[c>>2]=0;if(!d)return;e=c+d|0;c=a;a=0;while(1){e=e+-1|0;b[e>>0]=b[c>>0]|0;a=a+1|0;if((a|0)==(d|0))break;else c=c+1|0}return}function Ab(a,c){a=a|0;c=+c;var d=0,e=0,g=0;p[s>>3]=c;d=f[s>>2]|0;e=f[s+4>>2]|0;g=ej(d|0,e|0,56)|0;b[a>>0]=g;g=ej(d|0,e|0,48)|0;b[a+1>>0]=g;g=ej(d|0,e|0,40)|0;b[a+2>>0]=g;b[a+3>>0]=e;g=ej(d|0,e|0,24)|0;b[a+4>>0]=g;g=ej(d|0,e|0,16)|0;b[a+5>>0]=g;e=ej(d|0,e|0,8)|0;b[a+6>>0]=e;b[a+7>>0]=d;return}function Bb(a,c){a=a|0;c=c|0;var d=0;d=c+8|0;b[d+-1>>0]=b[a>>0]|0;b[d+-2>>0]=b[a+1>>0]|0;b[d+-3>>0]=b[a+2>>0]|0;b[d+-4>>0]=b[a+3>>0]|0;b[d+-5>>0]=b[a+4>>0]|0;b[d+-6>>0]=b[a+5>>0]|0;b[d+-7>>0]=b[a+6>>0]|0;b[c>>0]=b[a+7>>0]|0;return}function Cb(a,c){a=a|0;c=+c;var d=0;d=(n[s>>2]=c,f[s>>2]|0);b[a>>0]=d>>>24;b[a+1>>0]=d>>>16;b[a+2>>0]=d>>>8;b[a+3>>0]=d;return}function Db(a,c){a=a|0;c=c|0;var d=0;d=c+4|0;b[d+-1>>0]=b[a>>0]|0;b[d+-2>>0]=b[a+1>>0]|0;b[d+-3>>0]=b[a+2>>0]|0;b[c>>0]=b[a+3>>0]|0;return}function Eb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=u;u=u+16|0;r=s+8|0;q=s;p=a+48|0;e=f[p>>2]|0;if(e>>>0>=c>>>0){r=a+36|0;hj(b|0,f[r>>2]|0,c|0)|0;f[r>>2]=(f[r>>2]|0)+c;f[p>>2]=(f[p>>2]|0)-c;r=a+56|0;q=r;q=Zi(f[q>>2]|0,f[q+4>>2]|0,c|0,0)|0;f[r>>2]=q;f[r+4>>2]=I;r=c;u=s;return r|0}o=a+68|0;if(f[o>>2]&4|0){r=a+36|0;hj(b|0,f[r>>2]|0,e|0)|0;q=f[p>>2]|0;f[r>>2]=(f[r>>2]|0)+q;r=a+56|0;d=r;q=Zi(f[d>>2]|0,f[d+4>>2]|0,q|0,0)|0;f[r>>2]=q;f[r+4>>2]=I;f[p>>2]=0;r=e|0?e:-1;u=s;return r|0}if(!e){n=a+32|0;g=f[n>>2]|0;m=a+36|0;f[m>>2]=g;e=0}else{m=a+36|0;hj(b|0,f[m>>2]|0,e|0)|0;n=a+32|0;g=f[n>>2]|0;f[m>>2]=g;l=f[p>>2]|0;k=a+56|0;j=k;j=Zi(f[j>>2]|0,f[j+4>>2]|0,l|0,0)|0;f[k>>2]=j;f[k+4>>2]=I;f[p>>2]=0;c=c-l|0;b=b+l|0}k=a+64|0;l=a+16|0;j=a+56|0;while(1){h=f[k>>2]|0;i=f[l>>2]|0;if(c>>>0>=h>>>0){h=Ma[i&63](b,c,f[a>>2]|0)|0;f[p>>2]=h;if((h|0)==-1){g=16;break}e=h+e|0;if(h>>>0>>0)g=h;else{g=19;break}}else{g=Ma[i&63](g,h,f[a>>2]|0)|0;f[p>>2]=g;if((g|0)==-1){g=11;break}if(g>>>0>=c>>>0){g=14;break}hj(b|0,f[m>>2]|0,g|0)|0;e=g+e|0;g=f[p>>2]|0}i=f[n>>2]|0;f[m>>2]=i;t=j;t=Zi(f[t>>2]|0,f[t+4>>2]|0,g|0,0)|0;h=j;f[h>>2]=t;f[h+4>>2]=I;f[p>>2]=0;c=c-g|0;b=b+g|0;g=i}if((g|0)==11){Mb(d,4,4386,q)|0;f[p>>2]=0;f[o>>2]=f[o>>2]|4;t=e|0?e:-1;u=s;return t|0}else if((g|0)==14){hj(b|0,f[m>>2]|0,c|0)|0;f[m>>2]=(f[m>>2]|0)+c;f[p>>2]=(f[p>>2]|0)-c;t=a+56|0;r=t;r=Zi(f[r>>2]|0,f[r+4>>2]|0,c|0,0)|0;f[t>>2]=r;f[t+4>>2]=I;t=e+c|0;u=s;return t|0}else if((g|0)==16){Mb(d,4,4386,r)|0;f[p>>2]=0;f[o>>2]=f[o>>2]|4;t=e|0?e:-1;u=s;return t|0}else if((g|0)==19){t=a+56|0;r=t;r=Zi(f[r>>2]|0,f[r+4>>2]|0,h|0,0)|0;f[t>>2]=r;f[t+4>>2]=I;f[m>>2]=f[n>>2];f[p>>2]=0;t=e;u=s;return t|0}return 0}function Fb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0;s=u;u=u+16|0;p=s;n=a+68|0;if(f[n>>2]&8|0){r=-1;u=s;return r|0}o=a+64|0;r=a+48|0;j=f[r>>2]|0;e=(f[o>>2]|0)-j|0;do if(e>>>0>>0){l=a+32|0;g=a+36|0;m=a+20|0;h=a+56|0;i=0;k=e;a:while(1){if(!k)e=f[l>>2]|0;else{hj(f[g>>2]|0,b|0,k|0)|0;e=f[l>>2]|0;f[g>>2]=e;j=(f[r>>2]|0)+k|0;f[r>>2]=j;v=h;v=Zi(f[v>>2]|0,f[v+4>>2]|0,k|0,0)|0;t=h;f[t>>2]=v;f[t+4>>2]=I;i=k+i|0;c=c-k|0;b=b+k|0}f[g>>2]=e;if(j){do{j=Ma[f[m>>2]&63](e,j,f[a>>2]|0)|0;if((j|0)==-1)break a;e=(f[g>>2]|0)+j|0;f[g>>2]=e;j=(f[r>>2]|0)-j|0;f[r>>2]=j}while((j|0)!=0);e=f[l>>2]|0}f[g>>2]=e;k=f[o>>2]|0;if(c>>>0<=k>>>0){q=5;break}else j=0}if((q|0)==5)break;f[n>>2]=f[n>>2]|8;Mb(d,4,4360,p)|0;v=-1;u=s;return v|0}else{e=a+36|0;i=0;h=a+56|0;g=e;e=f[e>>2]|0}while(0);hj(e|0,b|0,c|0)|0;f[g>>2]=(f[g>>2]|0)+c;f[r>>2]=(f[r>>2]|0)+c;t=h;t=Zi(f[t>>2]|0,f[t+4>>2]|0,c|0,0)|0;v=h;f[v>>2]=t;f[v+4>>2]=I;v=i+c|0;u=s;return v|0}function Gb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;l=u;u=u+16|0;i=l;e=a+32|0;c=f[e>>2]|0;k=a+36|0;f[k>>2]=c;g=a+48|0;d=f[g>>2]|0;do if(d){h=a+20|0;while(1){d=Ma[f[h>>2]&63](c,d,f[a>>2]|0)|0;if((d|0)==-1)break;c=(f[k>>2]|0)+d|0;f[k>>2]=c;d=(f[g>>2]|0)-d|0;f[g>>2]=d;if(!d){j=6;break}}if((j|0)==6){c=f[e>>2]|0;break}k=a+68|0;f[k>>2]=f[k>>2]|8;Mb(b,4,4360,i)|0;k=0;u=l;return k|0}while(0);f[k>>2]=c;k=1;u=l;return k|0}function Hb(a){a=a|0;a=a+56|0;I=f[a+4>>2]|0;return f[a>>2]|0}function Ib(a){a=a|0;var b=0,c=0;c=a+8|0;b=f[c>>2]|0;c=f[c+4>>2]|0;if((b|0)==0&(c|0)==0){b=0;c=0;I=b;return c|0}a=a+56|0;c=_i(b|0,c|0,f[a>>2]|0,f[a+4>>2]|0)|0;b=I;I=b;return c|0}function Jb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=Na[f[a+40>>2]&63](a,b,c,d)|0;return d|0}function Kb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Na[f[a+44>>2]&63](a,b,c,d)|0}function Lb(a){a=a|0;return (f[a+28>>2]|0)!=7|0}function Mb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+528|0;g=i;h=i+16|0;a:do if(a){switch(b|0){case 1:{b=a+12|0;break}case 2:{b=a+16|0;a=a+4|0;break}case 4:{b=a+20|0;a=a+8|0;break}default:{b=0;break a}}e=f[b>>2]|0;b=f[a>>2]|0;if(e)if(!c)b=1;else{ij(h|0,0,512)|0;f[g>>2]=d;Hi(h,512,c,g)|0;Ta[e&7](h,b);b=1}else b=0}else b=0;while(0);u=i;return b|0}function Nb(a){a=a|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=4;f[a+20>>2]=4;f[a+16>>2]=4;return}function Ob(a,b){a=a|0;b=b|0;return}function Pb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;d=Ic(1,36)|0;if(!d){i=d;return i|0}f[d+20>>2]=c;h=d+16|0;f[h>>2]=a;e=Ic(1,a*52|0)|0;i=d+24|0;f[i>>2]=e;if(!e){c=f[d+28>>2]|0;if(c|0)Mc(c);Mc(d);i=0;return i|0}if(!a){i=d;return i|0}c=0;while(1){f[e+(c*52|0)>>2]=f[b+(c*36|0)>>2];f[e+(c*52|0)+4>>2]=f[b+(c*36|0)+4>>2];j=f[b+(c*36|0)+8>>2]|0;f[e+(c*52|0)+8>>2]=j;k=f[b+(c*36|0)+12>>2]|0;f[e+(c*52|0)+12>>2]=k;f[e+(c*52|0)+16>>2]=f[b+(c*36|0)+16>>2];f[e+(c*52|0)+20>>2]=f[b+(c*36|0)+20>>2];f[e+(c*52|0)+24>>2]=f[b+(c*36|0)+24>>2];f[e+(c*52|0)+28>>2]=f[b+(c*36|0)+28>>2];f[e+(c*52|0)+32>>2]=f[b+(c*36|0)+32>>2];j=Ic(X(k,j)|0,4)|0;f[e+(c*52|0)+44>>2]=j;c=c+1|0;if(!j)break;if(c>>>0>=a>>>0){g=22;break}e=f[i>>2]|0}if((g|0)==22)return d|0;c=f[i>>2]|0;if(c|0){e=f[h>>2]|0;if(e){a=0;while(1){c=f[c+(a*52|0)+44>>2]|0;if(c){Mc(c);e=f[h>>2]|0}c=a+1|0;if(c>>>0>=e>>>0)break;a=c;c=f[i>>2]|0}c=f[i>>2]|0}Mc(c)}c=f[d+28>>2]|0;if(c|0)Mc(c);Mc(d);k=0;return k|0}function Qb(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;if(!a)return;e=a+24|0;b=f[e>>2]|0;if(b|0){g=a+16|0;c=f[g>>2]|0;if(c){d=0;while(1){b=f[b+(d*52|0)+44>>2]|0;if(b){Mc(b);c=f[g>>2]|0}b=d+1|0;if(b>>>0>=c>>>0)break;d=b;b=f[e>>2]|0}b=f[e>>2]|0}Mc(b)}b=f[a+28>>2]|0;if(b|0)Mc(b);Mc(a);return}function Rb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=Ic(1,36)|0;if(!d){b=d;return b|0}f[d+20>>2]=c;f[d+16>>2]=a;e=Ic(a,52)|0;f[d+24>>2]=e;if(!e){c=f[d+28>>2]|0;if(c|0)Mc(c);Mc(d);b=0;return b|0}else{if(!a){b=d;return b|0}else c=0;do{f[e+(c*52|0)>>2]=f[b+(c*36|0)>>2];f[e+(c*52|0)+4>>2]=f[b+(c*36|0)+4>>2];f[e+(c*52|0)+8>>2]=f[b+(c*36|0)+8>>2];f[e+(c*52|0)+12>>2]=f[b+(c*36|0)+12>>2];f[e+(c*52|0)+16>>2]=f[b+(c*36|0)+16>>2];f[e+(c*52|0)+20>>2]=f[b+(c*36|0)+20>>2];f[e+(c*52|0)+24>>2]=f[b+(c*36|0)+24>>2];f[e+(c*52|0)+32>>2]=f[b+(c*36|0)+32>>2];f[e+(c*52|0)+44>>2]=0;c=c+1|0}while((c|0)!=(a|0));return d|0}return 0}function Sb(){return Ic(1,36)|0}function Tb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;c=f[b+4>>2]|0;d=f[a>>2]|0;g=f[b+8>>2]|0;h=f[a+4>>2]|0;e=f[b+12>>2]|0;l=(X((f[b+24>>2]|0)+-1|0,e)|0)+c|0;i=f[b+16>>2]|0;j=(X((f[b+28>>2]|0)+-1|0,i)|0)+g|0;b=Zi(l|0,0,e|0,0)|0;b=0-I|b;e=f[a+8>>2]|0;i=Zi(j|0,0,i|0,0)|0;i=0-I|i;j=f[a+12>>2]|0;l=f[a+16>>2]|0;if(!l)return;k=(c>>>0>d>>>0?c:d)+-1|0;g=(g>>>0>h>>>0?g:h)+-1|0;e=(b>>>0>>0?b:e)+-1|0;d=(i>>>0>>0?i:j)+-1|0;c=0;b=f[a+24>>2]|0;while(1){h=f[b>>2]|0;j=((k+h|0)>>>0)/(h>>>0)|0;o=f[b+4>>2]|0;a=((g+o|0)>>>0)/(o>>>0)|0;i=f[b+40>>2]|0;n=fj(1,0,i|0)|0;m=I;h=Zi((((e+h|0)>>>0)/(h>>>0)|0)-j|0,0,-1,-1)|0;h=Zi(h|0,I|0,n|0,m|0)|0;h=ej(h|0,I|0,i|0)|0;o=Zi((((d+o|0)>>>0)/(o>>>0)|0)-a|0,0,-1,-1)|0;m=Zi(o|0,I|0,n|0,m|0)|0;i=ej(m|0,I|0,i|0)|0;f[b+8>>2]=h;f[b+12>>2]=i;f[b+16>>2]=j;f[b+20>>2]=a;c=c+1|0;if(c>>>0>=l>>>0)break;else b=b+52|0}return}function Ub(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0;f[b>>2]=f[a>>2];f[b+4>>2]=f[a+4>>2];f[b+8>>2]=f[a+8>>2];f[b+12>>2]=f[a+12>>2];j=b+24|0;d=f[j>>2]|0;i=b+16|0;if(!d)c=j;else{e=f[i>>2]|0;if(!e)c=j;else{c=0;while(1){d=f[d+(c*52|0)+44>>2]|0;if(d){Mc(d);e=f[i>>2]|0}c=c+1|0;if(c>>>0>=e>>>0)break;d=f[j>>2]|0}c=j;d=f[j>>2]|0}Mc(d);f[j>>2]=0}d=f[a+16>>2]|0;f[i>>2]=d;d=Hc(d*52|0)|0;f[c>>2]=d;if(!d){f[j>>2]=0;f[i>>2]=0;return}if(f[i>>2]|0){h=a+24|0;g=0;c=d;do{c=c+(g*52|0)|0;d=(f[h>>2]|0)+(g*52|0)|0;e=c+52|0;do{f[c>>2]=f[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));c=f[j>>2]|0;f[c+(g*52|0)+44>>2]=0;g=g+1|0}while(g>>>0<(f[i>>2]|0)>>>0)}f[b+20>>2]=f[a+20>>2];e=a+32|0;c=f[e>>2]|0;g=b+32|0;f[g>>2]=c;if(!c){f[b+28>>2]=0;return}d=Hc(c)|0;c=b+28|0;f[c>>2]=d;if(!d){f[c>>2]=0;f[g>>2]=0;return}else{hj(d|0,f[a+28>>2]|0,f[e>>2]|0)|0;return}}function Vb(a){a=a|0;var b=0;b=Ic(1,84)|0;if(!b){b=0;return b|0}f[b+68>>2]=0;switch(a|0){case 0:{f[b+4>>2]=8;f[b+12>>2]=9;f[b>>2]=33;f[b+8>>2]=1;f[b+16>>2]=1;f[b+20>>2]=34;a=Pc()|0;f[b+40>>2]=a;if(!a){Mc(b);b=0;return b|0}break}case 2:{f[b+4>>2]=10;f[b+12>>2]=11;f[b>>2]=35;f[b+8>>2]=2;f[b+16>>2]=2;f[b+20>>2]=36;a=nf(0)|0;f[b+40>>2]=a;if(!a){Mc(b);b=0;return b|0}break}default:{Mc(b);b=0;return b|0}}Nb(b+44|0);return b|0}function Wb(a){a=a|0;var b=0;b=Ic(1,84)|0;if(!b){b=0;return b|0}f[b+68>>2]=1;switch(a|0){case 0:{f[b+72>>2]=13;f[b+76>>2]=2;f[b+80>>2]=3;f[b+4>>2]=37;f[b+16>>2]=12;f[b>>2]=38;f[b+20>>2]=1;f[b+24>>2]=5;f[b+8>>2]=1;f[b+12>>2]=3;f[b+28>>2]=1;f[b+32>>2]=1;f[b+36>>2]=13;a=Jd()|0;f[b+40>>2]=a;if(!a){Mc(b);b=0;return b|0}break}case 2:{f[b+72>>2]=14;f[b+76>>2]=4;f[b+80>>2]=5;f[b+4>>2]=39;f[b+16>>2]=14;f[b>>2]=40;f[b+8>>2]=2;f[b+12>>2]=4;f[b+20>>2]=2;f[b+24>>2]=6;f[b+28>>2]=2;f[b+32>>2]=2;f[b+36>>2]=15;a=nf(1)|0;f[b+40>>2]=a;if(!a){Mc(b);b=0;return b|0}break}default:{Mc(b);b=0;return b|0}}Nb(b+44|0);return b|0}function Xb(a,b,c){a=a|0;b=b|0;c=c|0;if(!((a|0)!=0&(b|0)!=0)){c=0;return c|0}if(!(f[a+68>>2]|0)){c=0;return c|0}c=Na[f[a+4>>2]&63](f[a+40>>2]|0,b,c,a+44|0)|0;return c|0}function Yb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(!((a|0)!=0&(c|0)!=0&(e|0)!=0)){e=0;return e|0}if(!(f[a+68>>2]|0)){e=0;return e|0}e=Pa[f[a+12>>2]&7](f[a+40>>2]|0,b,c,d,e,a+44|0)|0;return e|0}function Zb(a){a=a|0;var b=0;if(!a)return;if(!(f[a+68>>2]|0)){b=a+40|0;Sa[f[a+16>>2]&7](f[b>>2]|0)}else{b=a+40|0;Sa[f[a+20>>2]&7](f[b>>2]|0)}f[b>>2]=0;Mc(a);return}function _b(a){a=a|0;var b=0;b=f[a>>2]|0;if(!b)return;Sc(b);f[a>>2]=0;return}function $b(a){a=a|0;var b=0,c=0;if(!a)return;b=f[a>>2]|0;c=f[b+48>>2]|0;if(c){Mc(c);b=f[a>>2]|0}Mc(b);f[a>>2]=0;return}function ac(a,b,c){a=a|0;b=b|0;c=c|0;if(!a)return;Ua[f[a+72>>2]&15](f[a+40>>2]|0,b,c);return}function bc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(f[a+68>>2]|0){b=0;return b|0}b=Ma[f[a+4>>2]&63](f[a+40>>2]|0,b,a+44|0)|0;return b|0}function cc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(f[a+68>>2]|0){b=0;return b|0}b=Ma[f[a+12>>2]&63](f[a+40>>2]|0,b,a+44|0)|0;return b|0}function dc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(!(f[a+68>>2]|0)){b=0;return b|0}b=Ma[f[a+16>>2]&63](f[a+40>>2]|0,b,a+44|0)|0;return b|0}function ec(a){a=a|0;if(!a){a=0;return a|0}a=Ka[f[a+80>>2]&15](f[a+40>>2]|0)|0;return a|0}function fc(a){a=a|0;if(!a){a=0;return a|0}a=Ka[f[a+76>>2]&15](f[a+40>>2]|0)|0;return a|0}function gc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(!((a|0)!=0&(b|0)!=0)){d=0;return d|0}if(!(f[a+68>>2]|0)){d=0;return d|0}d=Oa[f[a+32>>2]&3](f[a+40>>2]|0,b,c,a+44|0,d)|0;return d|0}function hc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=u;u=u+16|0;if(!((a|0)!=0&(b|0)!=0)){c=0;u=d;return c|0}if(!(f[b+68>>2]|0)){Mb(b+44|0,1,4520,d)|0;c=0;u=d;return c|0}else{c=Na[f[b>>2]&63](a,f[b+40>>2]|0,c,b+44|0)|0;u=d;return c|0}return 0}function ic(a,b,c,d,e,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;if(!((c|0)!=0&((a|0)!=0&(b|0)!=0&(d|0)!=0))){k=0;return k|0}if(!(f[a+68>>2]|0)){k=0;return k|0}k=Ra[f[a+8>>2]&3](f[a+40>>2]|0,c,d,e,g,h,i,j,k,b,a+44|0)|0;return k|0}function jc(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,k=0;k=g<<2;i=X(k,g)|0;h=a+18704|0;g=j[h>>1]|0;d[h>>1]=(g&32768|0)==0?-32512:(g|256)&65535;f[a+5608>>2]=1;b[a+18690>>0]=2;h=Hc(i+k|0)|0;g=a+18696|0;f[g>>2]=h;if(!h){k=0;return k|0}hj(h|0,c|0,i|0)|0;hj((f[g>>2]|0)+i|0,e|0,k|0)|0;k=1;return k|0}function kc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;if(!a){g=0;return g|0}if(!(f[a+68>>2]|0)){g=0;return g|0}g=Qa[f[a+28>>2]&3](f[a+40>>2]|0,b,c,d,e,g,a+44|0)|0;return g|0}function lc(a,b){a=a|0;b=b|0;if(!a){b=0;return b|0}b=Ma[f[a+36>>2]&63](f[a+40>>2]|0,b,a+44|0)|0;return b|0}function mc(a){a=a|0;if(!a)return;ij(a|0,0,8248)|0;f[a+8200>>2]=-1;f[a+8204>>2]=-1;f[a+8248>>2]=0;return}function nc(a){a=a|0;if(!a)return;ij(a|0,0,18708)|0;f[a+5592>>2]=6;f[a+18684>>2]=0;f[a+5596>>2]=64;f[a+5600>>2]=64;f[a+44>>2]=0;f[a+5612>>2]=-1;f[a+18188>>2]=1;f[a+18192>>2]=1;b[a+18688>>0]=0;f[a+18196>>2]=-1;f[a+18200>>2]=-1;n[a+4792>>2]=0.0;f[a+4788>>2]=0;f[a+20>>2]=0;f[a+24>>2]=0;f[a+28>>2]=0;f[a+18692>>2]=0;return}function oc(a,b,c){a=a|0;b=b|0;c=c|0;if(!a){c=0;return c|0}f[a+56>>2]=b;f[a+44>>2]=c;c=1;return c|0}function pc(a,b,c){a=a|0;b=b|0;c=c|0;if(!a){c=0;return c|0}f[a+64>>2]=b;f[a+52>>2]=c;c=1;return c|0}function qc(a,b,c){a=a|0;b=b|0;c=c|0;if(!a){c=0;return c|0}f[a+60>>2]=b;f[a+48>>2]=c;c=1;return c|0}function rc(a,b){a=a|0;b=b|0;var c=0;c=u;u=u+16|0;if(!((a|0)!=0&(b|0)!=0)){b=0;u=c;return b|0}if(!(f[a+68>>2]|0)){Mb(a+44|0,1,4439,c)|0;b=0;u=c;return b|0}else{Ta[f[a+24>>2]&7](f[a+40>>2]|0,b);b=1;u=c;return b|0}return 0}function sc(a,b,c){a=a|0;b=b|0;c=c|0;if(!((a|0)!=0&(b|0)!=0&(c|0)!=0)){c=0;return c|0}if(f[a+68>>2]|0){c=0;return c|0}c=Na[f[a+20>>2]&63](f[a+40>>2]|0,b,c,a+44|0)|0;return c|0}function tc(a,b,c){a=a|0;b=b|0;c=c|0;if(!((a|0)!=0&(c|0)!=0)){c=0;return c|0}if(f[a+68>>2]|0){c=0;return c|0}c=Na[f[a>>2]&63](f[a+40>>2]|0,c,b,a+44|0)|0;return c|0}function uc(a,b){a=a|0;b=b|0;var c=0;if(!a){c=0;return c|0}c=ib(b)|0;if(!c){c=0;return c|0}nb(c,a,0);ob(c,f[a+8>>2]|0,0);if(!b)pb(c,17);else kb(c,16);mb(c,18);lb(c,19);return c|0}function vc(a,b){a=a|0;b=b|0;return wc(a,1048576,b)|0}function wc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!a){d=0;return d|0}d=Xh(a,(c|0)==0?4433:4436)|0;if(!d){d=0;return d|0}a=hb(b,c)|0;if(!a){ei(d)|0;d=0;return d|0}else{nb(a,d,6);ji(d,0,2)|0;c=Vi(d)|0;ji(d,0,0)|0;ob(a,c,((c|0)<0)<<31>>31);kb(a,20);pb(a,21);mb(a,22);lb(a,23);d=a;return d|0}return 0}function xc(){return 4427}function yc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(!((c|0)!=0&((a|0)!=0&(e|0)!=0))){e=0;return e|0}if(f[a+68>>2]|0){e=0;return e|0}e=Pa[f[a+8>>2]&7](f[a+40>>2]|0,b,c,d,e,a+44|0)|0;return e|0}function zc(a,b,c){a=a|0;b=b|0;c=c|0;c=Qi(a,1,b,c)|0;return (c|0?c:-1)|0}function Ac(a,b,c){a=a|0;b=b|0;c=c|0;return Mh(a,1,b,c)|0}function Bc(a,b,c){a=a|0;b=b|0;c=c|0;c=(ji(c,a,1)|0)==0;I=c?b:-1;return (c?a:-1)|0}function Cc(a,b,c){a=a|0;b=b|0;c=c|0;return (ji(c,a,0)|0)==0|0}function Dc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=c+4|0;e=f[d>>2]|0;c=(f[c>>2]|0)+(f[c+8>>2]|0)-e|0;if(!c){e=-1;return e|0}b=c>>>0>b>>>0?b:c;hj(a|0,e|0,b|0)|0;f[d>>2]=(f[d>>2]|0)+b;e=b;return e|0}function Ec(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0;j=c+4|0;d=f[j>>2]|0;h=c+8|0;e=f[h>>2]|0;i=d-(f[c>>2]|0)|0;g=(e|0)==0?1:e;while(1)if((g-i|0)>>>0>>0)g=g<<1;else break;if((g|0)!=(e|0)){d=Hc(g)|0;if(!d){j=-1;return j|0}e=f[c>>2]|0;if(e|0){hj(d|0,e|0,i|0)|0;Mc(f[c>>2]|0)}f[c>>2]=d;d=d+i|0;f[j>>2]=d;f[h>>2]=g}hj(d|0,a|0,b|0)|0;f[j>>2]=(f[j>>2]|0)+b;j=b;return j|0}function Fc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0;e=c+4|0;g=f[e>>2]|0;c=(f[c>>2]|0)+(f[c+8>>2]|0)-g|0;d=((c|0)<0)<<31>>31;if(!c){e=-1;g=-1;I=e;return g|0}h=(d|0)>(b|0)|(d|0)==(b|0)&c>>>0>a>>>0;f[e>>2]=g+a;e=h?b:d;g=h?a:c;I=e;return g|0}function Gc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=f[c+8>>2]|0;f[c+4>>2]=(f[c>>2]|0)+(0>(b|0)|0==(b|0)&d>>>0>a>>>0?a:d);return 1}function Hc(a){a=a|0;if(!a)a=0;else a=sh(a)|0;return a|0}function Ic(a,b){a=a|0;b=b|0;if((a|0)==0|(b|0)==0){b=0;return b|0}b=uh(a,b)|0;return b|0}function Jc(a){a=a|0;var b=0,c=0;c=u;u=u+16|0;b=c;do if(a)if(!(zh(b,16,a)|0)){a=f[b>>2]|0;break}else{f[b>>2]=0;a=0;break}else a=0;while(0);u=c;return a|0}function Kc(a){a=a|0;th(a);return}function Lc(a,b){a=a|0;b=b|0;if(!b)a=0;else a=vh(a,b)|0;return a|0}function Mc(a){a=a|0;th(a);return}function Nc(a){a=a|0;var b=0,c=0;b=696;while(1){c=f[b>>2]|0;if((c|0)==-1|(c|0)==(a|0))break;else b=b+12|0}return b+4|0}function Oc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0))return;f[a+172>>2]=f[b+4>>2];f[a+168>>2]=f[b>>2];return}function Pc(){var a=0,c=0;a=Ic(1,208)|0;if(!a){a=0;return a|0}f[a>>2]=0;c=a+184|0;b[c>>0]=b[c>>0]&-3;c=Hc(1e3)|0;f[a+44>>2]=c;if(!c){Qc(a);c=0;return c|0}f[a+48>>2]=1e3;c=ig()|0;f[a+192>>2]=c;if(!c){Qc(a);c=0;return c|0}c=ig()|0;f[a+188>>2]=c;if(c|0){c=a;return c|0}Qc(a);c=0;return c|0}function Qc(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0;if(!a)return;if(!(f[a>>2]|0)){c=a+36|0;d=f[c>>2]|0;if(d|0){Mc(d);f[c>>2]=0}c=a+24|0;d=f[c>>2]|0;if(d|0){Mc(d);f[c>>2]=0;f[a+28>>2]=0}c=a+44|0;d=f[c>>2]|0;if(d|0){Mc(d);f[c>>2]=0;f[a+48>>2]=0}}else{c=a+12|0;d=f[c>>2]|0;if(d|0){Rc(d);Mc(f[c>>2]|0);f[c>>2]=0}c=a+16|0;d=f[c>>2]|0;if(d|0){Mc(d);f[c>>2]=0;f[a+20>>2]=0}}Qf(f[a+204>>2]|0);c=a+88|0;h=a+164|0;d=f[h>>2]|0;if(d|0){g=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;if(g){e=0;while(1){Rc(d);e=e+1|0;if((e|0)==(g|0))break;else d=d+5640|0}d=f[h>>2]|0}Mc(d);f[h>>2]=0}h=a+124|0;d=f[h>>2]|0;if(d|0){i=a+120|0;e=f[i>>2]|0;if(e){g=0;while(1){d=f[d+(g<<3)>>2]|0;if(d){Mc(d);e=f[i>>2]|0}d=g+1|0;if(d>>>0>=e>>>0)break;g=d;d=f[h>>2]|0}d=f[h>>2]|0}f[i>>2]=0;Mc(d);f[h>>2]=0}i=a+144|0;Mc(f[i>>2]|0);f[i>>2]=0;f[a+128>>2]=0;i=a+108|0;Mc(f[i>>2]|0);f[i>>2]=0;if(!(b[a+184>>0]&2)){i=a+176|0;Mc(f[i>>2]|0);f[i>>2]=0}d=c+100|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));i=a+188|0;jg(f[i>>2]|0);f[i>>2]=0;jg(f[a+192>>2]|0);f[i>>2]=0;i=a+196|0;Sc(f[i>>2]|0);f[i>>2]=0;i=a+80|0;Qb(f[i>>2]|0);f[i>>2]=0;i=a+84|0;Qb(f[i>>2]|0);f[i>>2]=0;Mc(a);return}function Rc(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0;if(!a)return;e=a+5164|0;b=f[e>>2]|0;if(b|0){g=a+5160|0;c=f[g>>2]|0;if(c){d=0;while(1){b=f[b+(d<<3)>>2]|0;if(b){Mc(b);c=f[g>>2]|0}b=d+1|0;if(b>>>0>=c>>>0)break;d=b;b=f[e>>2]|0}b=f[e>>2]|0}f[g>>2]=0;Mc(b);f[e>>2]=0}b=a+5172|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}b=a+5584|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}b=a+5608|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}b=a+5604|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}b=a+5624|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0;f[a+5632>>2]=0;f[a+5628>>2]=0}i=a+5612|0;b=f[i>>2]|0;if(b|0){h=a+5616|0;c=f[h>>2]|0;if(c){g=0;while(1){d=b+12|0;e=f[d>>2]|0;if(e){Mc(e);f[d>>2]=0;c=f[h>>2]|0}g=g+1|0;if(g>>>0>=c>>>0)break;else b=b+20|0}b=f[i>>2]|0}Mc(b);f[i>>2]=0}b=a+5600|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}b=a+5592|0;c=f[b>>2]|0;if(!c)return;Mc(c);f[b>>2]=0;f[a+5596>>2]=0;return}function Sc(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;if(!a)return;b=a+28|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}g=a+40|0;b=f[g>>2]|0;if(b|0){e=a+36|0;if(f[e>>2]|0){d=0;do{c=f[b+(d*40|0)+36>>2]|0;if(c){Mc(c);b=f[g>>2]|0;f[b+(d*40|0)+36>>2]=0}c=f[b+(d*40|0)+16>>2]|0;if(c){Mc(c);b=f[g>>2]|0;f[b+(d*40|0)+16>>2]=0}c=f[b+(d*40|0)+24>>2]|0;if(c){Mc(c);b=f[g>>2]|0;f[b+(d*40|0)+24>>2]=0}d=d+1|0}while(d>>>0<(f[e>>2]|0)>>>0)}Mc(b);f[g>>2]=0}Mc(a);return}function Tc(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,o=0,q=0.0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0.0;ia=u;u=u+320|0;ha=ia+296|0;ga=ia+288|0;fa=ia+280|0;ea=ia+272|0;da=ia+264|0;ca=ia+256|0;ba=ia+248|0;aa=ia+240|0;V=ia+232|0;U=ia+224|0;T=ia+216|0;S=ia+208|0;R=ia+200|0;Q=ia+192|0;P=ia+184|0;v=ia+176|0;t=ia+168|0;s=ia+160|0;r=ia+152|0;o=ia+144|0;I=ia+136|0;H=ia+128|0;N=ia+112|0;G=ia+104|0;F=ia+96|0;E=ia+88|0;D=ia+80|0;C=ia+72|0;A=ia+64|0;z=ia+56|0;y=ia+48|0;x=ia+32|0;w=ia+24|0;m=ia+16|0;k=ia+8|0;i=ia;L=ia+309|0;M=ia+300|0;if(!((a|0)!=0&(c|0)!=0&(e|0)!=0)){ha=0;u=ia;return ha|0}$=c+5592|0;h=f[$>>2]|0;if((h+-1|0)>>>0>32){f[i>>2]=h;f[i+4>>2]=33;Mb(g,1,4599,i)|0;ha=0;u=ia;return ha|0}Z=a+112|0;f[Z>>2]=1;_=a+116|0;f[_>>2]=1;K=c+18704|0;do if(!(d[K>>1]|0)){switch(f[c+18676>>2]|0){case 1:{h=1041666;i=1302083;j=3;Y=8;break}case 2:{h=520833;i=651041;j=3;Y=8;break}case 3:{h=1041666;i=1302083;j=4;Y=8;break}default:i=0}if((Y|0)==8){d[K>>1]=j;f[c+18700>>2]=i;f[c+18680>>2]=h;i=1}h=f[c+18684>>2]|0;a:do if((h|0)<4){switch(h|0){case 3:break;default:{Y=13;break a}}h=3;Y=12}else{if((h|0)<33024)switch(h|0){case 4:{h=4;Y=12;break a}default:{Y=13;break a}}switch(h|0){case 33024:break;default:{Y=13;break a}}h=-32512;Y=12}while(0);if((Y|0)==12)d[K>>1]=h;else if((Y|0)==13?(i|0)==0:0)break;Mb(g,2,4655,k)|0}while(0);B=c+18700|0;h=f[B>>2]|0;do if((h|0)<1){q=+n[c+4792+((f[c+4788>>2]|0)+-1<<2)>>2];if(q>0.0){W=f[e+24>>2]|0;m=X(f[W+8>>2]|0,f[e+16>>2]|0)|0;m=X(m,f[W+12>>2]|0)|0;ja=+((X(m,f[W+24>>2]|0)|0)>>>0);W=~~+J(+(ja/(q*8.0*+((f[W>>2]|0)>>>0)*+((f[W+4>>2]|0)>>>0))));f[B>>2]=W;break}else{f[B>>2]=0;break}}else{l=f[e+24>>2]|0;W=X(f[l+8>>2]|0,f[e+16>>2]|0)|0;W=X(W,f[l+12>>2]|0)|0;q=+((X(W,f[l+24>>2]|0)|0)>>>0);h=X(h<<3,f[l>>2]|0)|0;q=q/+((X(h,f[l+4>>2]|0)|0)>>>0);l=c+4788|0;h=f[l>>2]|0;if(h|0){k=0;i=0;do{j=c+4792+(k<<2)|0;if(+n[j>>2]>2]=q;i=1;h=f[l>>2]|0}k=k+1|0}while(k>>>0>>0);if(i|0)Mb(g,2,4792,m)|0}}while(0);h=d[K>>1]|0;b:do if((h+-3&65535)>=4){if(h<<16>>16==7){Mb(g,2,6952,o)|0;d[K>>1]=0;break}if((h+-256&65535)<524){Mb(g,2,7007,r)|0;d[K>>1]=0;break}if((h+-1024&65535)<1180){Mb(g,2,7055,s)|0;d[K>>1]=0;break}if(h<<16>>16<=-1)switch(h<<16>>16){case -32512:break b;case -32768:{Mb(g,2,7097,t)|0;d[K>>1]=0;break b}default:{Mb(g,2,7185,v)|0;d[K>>1]=0;break b}}}else{if((h+-5&65535)<2){Mb(g,2,4884,w)|0;d[K>>1]=0;break}f[c>>2]=0;f[c+12>>2]=1;f[c+16>>2]=1;b[c+18689>>0]=67;b[c+18688>>0]=1;f[c+4>>2]=0;f[c+8>>2]=0;f[c+18180>>2]=0;f[c+18184>>2]=0;f[c+5596>>2]=32;f[c+5600>>2]=32;f[c+5604>>2]=0;f[c+5612>>2]=-1;f[c+18188>>2]=1;f[c+18192>>2]=1;f[c+5608>>2]=1;i=c+4788|0;j=f[i>>2]|0;if((j|0)>1){ja=+n[c+4792+(j+-1<<2)>>2];f[x>>2]=j;p[x+8>>3]=ja;Mb(g,2,4946,x)|0;f[c+4792>>2]=f[c+4792+((f[i>>2]|0)+-1<<2)>>2];f[i>>2]=1;h=d[K>>1]|0}c:do switch(h<<16>>16){case 3:{h=f[$>>2]|0;if((h|0)>6){f[y>>2]=h+1;Mb(g,2,5119,y)|0;f[$>>2]=6;h=6}break}case 4:{h=f[$>>2]|0;if((h|0)<2){f[z>>2]=h+1;Mb(g,2,5265,z)|0;f[$>>2]=1;h=1;break c}if((h|0)>7){f[A>>2]=h+1;Mb(g,2,5419,A)|0;f[$>>2]=7;h=7}break}default:h=f[$>>2]|0}while(0);i=c+40|0;f[i>>2]=f[i>>2]|1;i=c+5620|0;f[i>>2]=h+-1;if((h|0)>1){h=0;do{f[c+5624+(h<<2)>>2]=256;f[c+5756+(h<<2)>>2]=256;h=h+1|0}while((h|0)<(f[i>>2]|0))}f[c+44>>2]=4;if((d[K>>1]|0)==4){h=f[$>>2]|0;f[c+96>>2]=1;f[c+48>>2]=0;f[c+52>>2]=0;f[c+56>>2]=1;W=h+-1|0;f[c+60>>2]=W;f[c+64>>2]=3;f[c+80>>2]=4;f[c+244>>2]=1;f[c+196>>2]=W;f[c+200>>2]=0;f[c+204>>2]=1;f[c+208>>2]=h;f[c+212>>2]=3;f[c+228>>2]=4;h=2}else h=0;f[c+4784>>2]=h;f[c+20>>2]=1;h=f[B>>2]|0;if((h|0)>=1){if((h|0)>1302083){Mb(g,2,5722,D)|0;f[B>>2]=1302083}}else{f[B>>2]=1302083;Mb(g,2,5573,C)|0}h=c+18680|0;i=f[h>>2]|0;if((i|0)>=1){if((i|0)>1041666){Mb(g,2,6044,F)|0;f[h>>2]=1041666}}else{f[h>>2]=1041666;Mb(g,2,5895,E)|0}h=f[e+16>>2]|0;i=f[e+24>>2]|0;k=f[i+8>>2]|0;j=X(k,h)|0;m=f[i+12>>2]|0;j=X(j,m)|0;ja=+((X(j,f[i+24>>2]|0)|0)>>>0);j=X(f[B>>2]<<3,f[i>>2]|0)|0;ja=ja/+((X(j,f[i+4>>2]|0)|0)>>>0);n[c+4792>>2]=ja;j=d[K>>1]|0;d:do if((h|0)==3){h=f[i+28>>2]|0;l=f[i+32>>2]|0;if(!(l|(h|0)!=12)){h=f[i+80>>2]|0;l=f[i+84>>2]|0;if(!(l|(h|0)!=12)){h=f[i+132>>2]|0;i=f[i+136>>2]|0;if(!(i|(h|0)!=12))switch(j<<16>>16){case 3:{if(!(k>>>0>2048|m>>>0>1080))break b;f[H>>2]=k;f[H+4>>2]=m;Mb(g,2,6616,H)|0;break d}case 4:{if(!(k>>>0>4096|m>>>0>2160))break b;f[I>>2]=k;f[I+4>>2]=m;Mb(g,2,6787,I)|0;break d}default:break b}else{m=2;l=i}}else m=1}else m=0;b[L>>0]=b[6383]|0;b[L+1>>0]=b[6384]|0;b[L+2>>0]=b[6385]|0;b[L+3>>0]=b[6386]|0;b[L+4>>0]=b[6387]|0;b[L+5>>0]=b[6388]|0;b[L+6>>0]=b[6389]|0;i=M;j=6390;k=i+9|0;do{b[i>>0]=b[j>>0]|0;i=i+1|0;j=j+1|0}while((i|0)<(k|0));f[N>>2]=m;f[N+4>>2]=h;f[N+8>>2]=l|0?L:M;Mb(g,2,6399,N)|0}else{f[G>>2]=h;Mb(g,2,6217,G)|0}while(0);d[K>>1]=0}while(0);f[a+168>>2]=f[c+18680>>2];W=a+88|0;d[W>>1]=d[K>>1]|0;N=a+181|0;L=b[N>>0]&-2|f[c+20>>2]&1;b[N>>0]=L;M=c+24|0;L=(f[M>>2]&255)<<1&2|L&-3;b[N>>0]=L;b[N>>0]=L&-5|(f[c+28>>2]&255)<<2&4;do if(f[M>>2]|0?(O=c+32|0,f[O>>2]|0):0){h=X((f[c+4788>>2]|0)*12|0,f[$>>2]|0)|0;i=Hc(h)|0;f[a+176>>2]=i;if(i|0){hj(i|0,f[O>>2]|0,h|0)|0;break}Mb(g,1,7244,P)|0;ha=0;u=ia;return ha|0}while(0);k=a+100|0;f[k>>2]=f[c+12>>2];l=a+104|0;f[l>>2]=f[c+16>>2];j=a+92|0;f[j>>2]=f[c+4>>2];m=a+96|0;f[m>>2]=f[c+8>>2];i=c+36|0;h=f[i>>2]|0;do if(!h){h=xc()|0;i=Hc((Kh(h)|0)+29|0)|0;f[a+108>>2]=i;if(i|0){f[S>>2]=7421;f[S+4>>2]=h;Li(i,7416,S)|0;break}Mb(g,1,7370,R)|0;ha=0;u=ia;return ha|0}else{h=Hc((Kh(h)|0)+1|0)|0;f[a+108>>2]=h;if(h|0){Ji(h,f[i>>2]|0)|0;break}Mb(g,1,7316,Q)|0;ha=0;u=ia;return ha|0}while(0);h=(f[e+8>>2]|0)-(f[j>>2]|0)|0;if(!(f[c>>2]|0)){f[k>>2]=h;f[l>>2]=(f[e+12>>2]|0)-(f[m>>2]|0)}else{S=f[k>>2]|0;f[Z>>2]=(h+-1+S|0)/(S|0)|0;S=f[l>>2]|0;f[_>>2]=((f[e+12>>2]|0)+-1-(f[m>>2]|0)+S|0)/(S|0)|0}if(b[c+18688>>0]|0){b[a+180>>0]=b[c+18689>>0]|0;b[N>>0]=b[N>>0]|8}S=Ic(X(f[_>>2]|0,f[Z>>2]|0)|0,5640)|0;M=a+164|0;f[M>>2]=S;if(!S){Mb(g,1,7450,T)|0;ha=0;u=ia;return ha|0}L=c+4784|0;A=f[L>>2]|0;do if(A|0){w=c+48|0;B=f[$>>2]|0;C=f[e+16>>2]|0;D=f[c+4788>>2]|0;E=X(C,B)|0;F=Ic(X(E,D)|0,4)|0;if(!F){Mb(g,1,7504,U)|0;break}h=f[w>>2]|0;r=c+60|0;j=f[r>>2]|0;if(h>>>0>>0){o=X(h,C)|0;s=c+52|0;t=c+64|0;v=c+56|0;i=f[t>>2]|0;while(1){k=f[s>>2]|0;if(k>>>0>>0){m=k+o|0;j=f[v>>2]|0;while(1){if(!j)j=0;else{i=m;l=0;while(1){f[F+(i<<2)>>2]=1;l=l+1|0;j=f[v>>2]|0;if(l>>>0>=j>>>0)break;else i=i+E|0}i=f[t>>2]|0}k=k+1|0;if(k>>>0>=i>>>0)break;else m=m+1|0}j=f[r>>2]|0}h=h+1|0;if(h>>>0>=j>>>0)break;else o=o+C|0}}if(A>>>0>1){t=1;do{h=w;w=w+148|0;x=f[h+8>>2]|0;v=h+156|0;l=f[v>>2]|0;x=l>>>0>x>>>0?x:0;i=f[w>>2]|0;y=h+160|0;j=f[y>>2]|0;if(i>>>0>>0){o=X(i,C)|0;z=h+152|0;r=h+164|0;s=X(x,E)|0;h=f[r>>2]|0;while(1){k=f[z>>2]|0;if(k>>>0>>0){m=k+o|0;while(1){if(x>>>0>>0){h=m+s|0;j=x;while(1){f[F+(h<<2)>>2]=1;j=j+1|0;l=f[v>>2]|0;if(j>>>0>=l>>>0)break;else h=h+E|0}h=f[r>>2]|0}k=k+1|0;if(k>>>0>=h>>>0)break;else m=m+1|0}j=f[y>>2]|0}i=i+1|0;if(i>>>0>=j>>>0)break;else o=o+C|0}}t=t+1|0}while((t|0)!=(A|0))}if(!((D|0)==0|(B|0)==0|(C|0)==0)){h=0;m=0;o=0;while(1){j=0;l=m;while(1){k=0;i=l;while(1){h=h|(f[F+(i<<2)>>2]|0)!=1;k=k+1|0;if((k|0)==(C|0))break;else i=i+1|0}j=j+1|0;if((j|0)==(B|0))break;else l=l+C|0}o=o+1|0;if((o|0)==(D|0))break;else m=m+E|0}if(h|0)Mb(g,1,7552,V)|0}Mc(F)}while(0);e:do if(X(f[_>>2]|0,f[Z>>2]|0)|0){x=c+4788|0;y=c+40|0;z=c+44|0;A=c+18690|0;B=e+16|0;i=c+18696|0;C=e+24|0;D=c+5596|0;E=c+5600|0;F=c+5604|0;G=c+5608|0;H=c+5612|0;I=c+5616|0;K=c+5620|0;w=0;f:while(1){o=f[M>>2]|0;r=o+(w*5640|0)|0;V=f[x>>2]|0;j=o+(w*5640|0)+8|0;f[j>>2]=V;g:do if(V|0){if(((d[W>>1]|0)+-3&65535)<4)h=0;else{h=0;while(1){V=(b[N>>0]&4)==0;f[(V?o+(w*5640|0)+20+(h<<2)|0:o+(w*5640|0)+5184+(h<<2)|0)>>2]=f[(V?c+4792+(h<<2)|0:c+5192+(h<<2)|0)>>2];h=h+1|0;if(h>>>0>=(f[j>>2]|0)>>>0)break g}}do{if(b[N>>0]&4)f[o+(w*5640|0)+5184+(h<<2)>>2]=f[c+5192+(h<<2)>>2];f[o+(w*5640|0)+20+(h<<2)>>2]=f[c+4792+(h<<2)>>2];h=h+1|0}while(h>>>0<(f[j>>2]|0)>>>0)}while(0);f[r>>2]=f[y>>2];f[o+(w*5640|0)+4>>2]=f[z>>2];m=o+(w*5640|0)+16|0;f[m>>2]=b[A>>0];h=o+(w*5640|0)+5636|0;j=b[h>>0]|0;b[h>>0]=j&-5;if(!(f[L>>2]|0))h=0;else{b[h>>0]=j|4;k=f[L>>2]|0;if(!k)h=0;else{l=w+1|0;h=0;j=0;do{if((l|0)==(f[c+48+(j*148|0)+48>>2]|0)){f[o+(w*5640|0)+424+(h*148|0)>>2]=f[c+48+(h*148|0)>>2];f[o+(w*5640|0)+424+(h*148|0)+4>>2]=f[c+48+(h*148|0)+4>>2];f[o+(w*5640|0)+424+(h*148|0)+8>>2]=f[c+48+(h*148|0)+8>>2];f[o+(w*5640|0)+424+(h*148|0)+12>>2]=f[c+48+(h*148|0)+12>>2];f[o+(w*5640|0)+424+(h*148|0)+16>>2]=f[c+48+(h*148|0)+16>>2];f[o+(w*5640|0)+424+(h*148|0)+32>>2]=f[c+48+(h*148|0)+32>>2];f[o+(w*5640|0)+424+(h*148|0)+48>>2]=f[c+48+(h*148|0)+48>>2];h=h+1|0}j=j+1|0}while(j>>>0>>0)}h=h+-1|0}f[o+(w*5640|0)+420>>2]=h;V=Ic(f[B>>2]|0,1080)|0;v=o+(w*5640|0)+5584|0;f[v>>2]=V;if(!V){Y=141;break}do if(f[i>>2]|0){j=f[B>>2]|0;j=X(j<<2,j)|0;k=Hc(j)|0;l=(f[i>>2]|0)+j|0;if(!k){Y=144;break f}f[m>>2]=2;h=Hc(j)|0;f[o+(w*5640|0)+5608>>2]=h;if(!h){Y=146;break f}hj(h|0,f[i>>2]|0,j|0)|0;hj(k|0,f[i>>2]|0,j|0)|0;h=Hc(j)|0;j=o+(w*5640|0)+5604|0;f[j>>2]=h;if(!h){Y=148;break f}if(!(Ng(k,h,f[B>>2]|0)|0)){Y=150;break f}h=Hc(f[B>>2]<<3)|0;f[o+(w*5640|0)+5600>>2]=h;if(!h){Y=152;break f}Af(h,f[B>>2]|0,f[j>>2]|0);Mc(k);j=f[B>>2]|0;if(j|0){k=f[v>>2]|0;h=0;do{f[k+(h*1080|0)+1076>>2]=f[l+(h<<2)>>2];h=h+1|0}while(h>>>0>>0)}if(!(Uc(r,e)|0)){Y=158;break f}if(f[B>>2]|0){r=0;Y=172}}else{h:do if((f[m>>2]|0)==1){h=f[B>>2]|0;if(h>>>0<=2){k=h;break}j=f[C>>2]|0;h=f[j>>2]|0;do if((h|0)==(f[j+52>>2]|0)){if((h|0)!=(f[j+104>>2]|0))break;h=f[j+4>>2]|0;if((h|0)!=(f[j+56>>2]|0))break;if((h|0)==(f[j+108>>2]|0)){Y=166;break h}}while(0);Mb(g,2,7948,ha)|0;f[m>>2]=0;Y=166}else Y=166;while(0);if((Y|0)==166){Y=0;k=f[B>>2]|0}if(!k)break;j=f[C>>2]|0;h=0;do{if(!(f[j+(h*52|0)+32>>2]|0))f[(f[v>>2]|0)+(h*1080|0)+1076>>2]=1<<(f[j+(h*52|0)+24>>2]|0)+-1;h=h+1|0}while(h>>>0>>0);r=0;Y=172}while(0);if((Y|0)==172)while(1){Y=0;s=f[v>>2]|0;t=s+(r*1080|0)|0;k=f[y>>2]&1;f[t>>2]=k;l=f[$>>2]|0;m=s+(r*1080|0)+4|0;f[m>>2]=l;h=f[D>>2]|0;if((h|0)>1){j=h;h=0;while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}else h=0;f[s+(r*1080|0)+8>>2]=h;h=f[E>>2]|0;if((h|0)>1){j=h;h=0;while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}else h=0;f[s+(r*1080|0)+12>>2]=h;f[s+(r*1080|0)+16>>2]=f[F>>2];V=f[G>>2]|0;f[s+(r*1080|0)+20>>2]=(V|0)==0&1;f[s+(r*1080|0)+24>>2]=V|0?2:0;f[s+(r*1080|0)+804>>2]=2;if((r|0)==(f[H>>2]|0))h=f[I>>2]|0;else h=0;f[s+(r*1080|0)+808>>2]=h;do if(!k){if(!l)break;else h=0;do{f[s+(r*1080|0)+812+(h<<2)>>2]=15;f[s+(r*1080|0)+944+(h<<2)>>2]=15;h=h+1|0}while(h>>>0<(f[m>>2]|0)>>>0)}else{if((l|0)>0)o=0;else break;while(1){m=l;l=l+-1|0;h=f[K>>2]|0;do if((o|0)<(h|0)){h=f[c+5624+(o<<2)>>2]|0;do if((h|0)<1)h=1;else{if((h|0)==1){h=0;break}else{j=h;h=0}while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}while(0);f[s+(r*1080|0)+812+(l<<2)>>2]=h;h=f[c+5756+(o<<2)>>2]|0;if((h|0)<1){h=1;break}if((h|0)==1){h=0;break}else{j=h;h=0}while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}else{V=h+-1|0;j=o-V|0;h=f[c+5624+(V<<2)>>2]>>j;j=f[c+5756+(V<<2)>>2]>>j;do if((h|0)<1)h=1;else{if((h|0)==1){h=0;break}else{k=h;h=0}while(1){h=h+1|0;if(k>>>0>3)k=k>>>1;else break}}while(0);f[s+(r*1080|0)+812+(l<<2)>>2]=h;if((j|0)<1){h=1;break}if((j|0)==1){h=0;break}else h=0;while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}while(0);f[s+(r*1080|0)+944+(l<<2)>>2]=h;if((m|0)<=1)break;else o=o+1|0}}while(0);Ig(t,f[(f[C>>2]|0)+(r*52|0)+24>>2]|0);r=r+1|0;if(r>>>0>=(f[B>>2]|0)>>>0)break;else Y=172}w=w+1|0;if(w>>>0>=(X(f[_>>2]|0,f[Z>>2]|0)|0)>>>0)break e}if((Y|0)==141){Mb(g,1,7591,aa)|0;ha=0;u=ia;return ha|0}else if((Y|0)==144){Mb(g,1,7655,ba)|0;ha=0;u=ia;return ha|0}else if((Y|0)==146){Mc(k);Mb(g,1,7698,ca)|0;ha=0;u=ia;return ha|0}else if((Y|0)==148){Mc(k);Mb(g,1,7756,da)|0;ha=0;u=ia;return ha|0}else if((Y|0)==150){Mc(k);Mb(g,1,7816,ea)|0;ha=0;u=ia;return ha|0}else if((Y|0)==152){Mc(k);Mb(g,1,7864,fa)|0;ha=0;u=ia;return ha|0}else if((Y|0)==158){Mb(g,1,7914,ga)|0;ha=0;u=ia;return ha|0}}else i=c+18696|0;while(0);h=f[i>>2]|0;if(!h){ha=1;u=ia;return ha|0}Mc(h);f[i>>2]=0;ha=1;u=ia;return ha|0}function Uc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0;if((f[a+16>>2]|0)!=2){a=1;return a|0}l=a+5604|0;r=a+5616|0;e=f[r>>2]|0;m=a+5620|0;do if(f[l>>2]|0){do if((e|0)==(f[m>>2]|0)){e=e+10|0;f[m>>2]=e;d=a+5612|0;e=Lc(f[d>>2]|0,e*20|0)|0;if(e|0){f[d>>2]=e;q=f[r>>2]|0;ij(e+(q*20|0)|0,0,((f[m>>2]|0)-q|0)*20|0)|0;e=f[r>>2]|0;break}Mc(f[d>>2]|0);f[d>>2]=0;f[m>>2]=0;f[r>>2]=0;a=0;return a|0}else d=a+5612|0;while(0);j=f[d>>2]|0;g=j+(e*20|0)|0;k=j+(e*20|0)+12|0;d=f[k>>2]|0;if(d|0){Mc(d);f[k>>2]=0}f[j+(e*20|0)+8>>2]=1;f[j+(e*20|0)+4>>2]=1;f[g>>2]=2;d=f[c+16>>2]|0;d=X(d,d)|0;h=d<<2;i=Hc(h)|0;f[k>>2]=i;if(!i){a=0;return a|0}else{Ua[f[768+(f[g>>2]<<2)>>2]&15](f[l>>2]|0,i,d);f[j+(e*20|0)+16>>2]=h;e=(f[r>>2]|0)+1|0;f[r>>2]=e;h=2;break}}else{h=1;g=0}while(0);do if((e|0)==(f[m>>2]|0)){e=e+10|0;f[m>>2]=e;d=a+5612|0;e=Lc(f[d>>2]|0,e*20|0)|0;if(e|0){f[d>>2]=e;q=f[r>>2]|0;e=e+(q*20|0)|0;ij(e|0,0,((f[m>>2]|0)-q|0)*20|0)|0;g=(g|0)==0?0:e+-20|0;e=f[r>>2]|0;break}Mc(f[d>>2]|0);f[d>>2]=0;f[m>>2]=0;f[r>>2]=0;a=0;return a|0}else d=a+5612|0;while(0);m=f[d>>2]|0;q=m+(e*20|0)|0;o=m+(e*20|0)+12|0;d=f[o>>2]|0;if(d|0){Mc(d);f[o>>2]=0}p=h+1|0;f[m+(e*20|0)+8>>2]=h;f[m+(e*20|0)+4>>2]=2;f[q>>2]=2;c=c+16|0;j=f[c>>2]|0;k=j<<2;l=Hc(k)|0;f[o>>2]=l;if(!l){a=0;return a|0}l=Hc(k)|0;if(!l){Mc(f[o>>2]|0);f[o>>2]=0;a=0;return a|0}if(j|0){d=0;h=f[a+5584>>2]|0;i=l;while(1){n[i>>2]=+(f[h+1076>>2]|0);d=d+1|0;if((d|0)==(j|0))break;else{h=h+1080|0;i=i+4|0}}}Ua[f[768+(f[q>>2]<<2)>>2]&15](l,f[o>>2]|0,j);Mc(l);f[m+(e*20|0)+16>>2]=k;f[r>>2]=(f[r>>2]|0)+1;i=a+5628|0;d=f[i>>2]|0;h=a+5632|0;do if((d|0)==(f[h>>2]|0)){d=d+10|0;f[h>>2]=d;e=a+5624|0;d=Lc(f[e>>2]|0,d*20|0)|0;if(d|0){f[e>>2]=d;a=f[i>>2]|0;ij(d+(a*20|0)|0,0,((f[h>>2]|0)-a|0)*20|0)|0;d=f[i>>2]|0;break}Mc(f[e>>2]|0);f[e>>2]=0;f[h>>2]=0;f[i>>2]=0;a=0;return a|0}else e=a+5624|0;while(0);a=f[e>>2]|0;f[a+(d*20|0)+8>>2]=g;r=a+(d*20|0)+16|0;b[r>>0]=b[r>>0]|1;f[a+(d*20|0)+4>>2]=f[c>>2];f[a+(d*20|0)>>2]=p;f[a+(d*20|0)+12>>2]=q;f[i>>2]=(f[i>>2]|0)+1;a=1;return a|0}function Vc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){yb(b,~~+n[a>>2]>>>0,2);d=d+1|0;if((d|0)==(c|0))break;else{a=a+4|0;b=b+2|0}}return}function Wc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){yb(b,~~+n[a>>2]>>>0,4);d=d+1|0;if((d|0)==(c|0))break;else{a=a+4|0;b=b+4|0}}return}function Xc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){Cb(b,+n[a>>2]);d=d+1|0;if((d|0)==(c|0))break;else{a=a+4|0;b=b+4|0}}return}function Yc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){Ab(b,+n[a>>2]);d=d+1|0;if((d|0)==(c|0))break;else{a=a+4|0;b=b+8|0}}return}function Zc(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function _c(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;j=Sb()|0;k=b+80|0;f[k>>2]=j;if(!j){k=0;return k|0}e=b+192|0;if(kg(f[e>>2]|0,24,d)|0?kg(f[e>>2]|0,25,d)|0:0){i=f[e>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](b,a,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){Qb(f[k>>2]|0);f[k>>2]=0;k=0;return k|0}}else ng(i);e=b+188|0;if(kg(f[e>>2]|0,26,d)|0?kg(f[e>>2]|0,27,d)|0:0){i=f[e>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](b,a,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){Qb(f[k>>2]|0);f[k>>2]=0;k=0;return k|0}}else ng(i);e=Sb()|0;f[c>>2]=e;if(!e){k=0;return k|0}Ub(f[k>>2]|0,e);g=X(f[b+116>>2]|0,f[b+112>>2]|0)|0;i=b+196|0;f[(f[i>>2]|0)+36>>2]=g;g=Ic(g,40)|0;e=f[i>>2]|0;f[e+40>>2]=g;if(!g){k=0;return k|0}if(!(f[e+36>>2]|0)){k=1;return k|0}h=0;while(1){f[g+(h*40|0)+28>>2]=100;f[g+(h*40|0)+20>>2]=0;k=Ic(100,24)|0;e=f[i>>2]|0;g=f[e+40>>2]|0;f[g+(h*40|0)+24>>2]=k;h=h+1|0;if(!k){e=0;g=30;break}if(h>>>0>=(f[e+36>>2]|0)>>>0){e=1;g=30;break}}if((g|0)==30)return e|0}Qb(f[k>>2]|0);f[k>>2]=0;k=0;return k|0}Qb(f[k>>2]|0);f[k>>2]=0;k=0;return k|0}function $c(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function ad(a,b,c){a=a|0;b=b|0;c=c|0;return (f[a+8>>2]|0)==0&(f[a+188>>2]|0)!=0&(f[a+192>>2]|0)!=0&1|0}function bd(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;X=u;u=u+224|0;W=X+200|0;T=X+192|0;S=X+184|0;P=X+176|0;O=X+168|0;N=X+160|0;M=X+152|0;L=X+144|0;K=X+136|0;H=X+128|0;G=X+120|0;F=X+112|0;E=X+104|0;D=X+96|0;C=X+88|0;B=X+80|0;A=X+72|0;z=X+64|0;y=X+56|0;x=X+48|0;w=X+40|0;J=X+32|0;o=X+24|0;n=X+16|0;m=X+8|0;R=X;g=X+216|0;h=X+212|0;t=X+208|0;v=X+204|0;V=a+8|0;f[V>>2]=1;a:do if((Eb(c,g,2,e)|0)==2?(zb(g,h,2),(f[h>>2]|0)==65359):0){f[V>>2]=2;l=Hb(c)|0;l=Zi(l|0,I|0,-2,-1)|0;k=I;U=a+196|0;h=f[U>>2]|0;f[h>>2]=l;f[h+4>>2]=k;h=R;f[h>>2]=l;f[h+4>>2]=k;Mb(e,4,8053,R)|0;h=f[U>>2]|0;k=f[h>>2]|0;l=h+24|0;g=f[l>>2]|0;j=h+32|0;i=f[j>>2]|0;do if((g+1|0)>>>0>i>>>0){s=~~(+(i>>>0)+100.0)>>>0;f[j>>2]=s;g=h+28|0;h=Lc(f[g>>2]|0,s*24|0)|0;if(!h){Mc(f[g>>2]|0);f[g>>2]=0;f[j>>2]=0;f[l>>2]=0;Mb(e,1,8090,m)|0;break a}else{f[g>>2]=h;g=f[l>>2]|0;break}}else h=f[h+28>>2]|0;while(0);d[h+(g*24|0)>>1]=-177;r=dj(0,k|0,32)|0;s=h+(g*24|0)+8|0;f[s>>2]=r;f[s+4>>2]=I;f[h+(g*24|0)+16>>2]=2;f[l>>2]=g+1;s=a+16|0;if((Eb(c,f[s>>2]|0,2,e)|0)!=2){Mb(e,1,8150,o)|0;W=0;u=X;return W|0}zb(f[s>>2]|0,t,2);j=f[t>>2]|0;if((j|0)!=65424){r=a+20|0;i=0;h=0;g=0;b:do{if(j>>>0<65280){Q=14;break}else k=784;while(1){l=f[k>>2]|0;m=(l|0)==0;if(m|(l|0)==(j|0))break;else k=k+12|0}if(m){Mb(e,2,8219,w)|0;q=2;c:while(1){while(1){if((Eb(c,f[s>>2]|0,2,e)|0)!=2){Q=20;break b}zb(f[s>>2]|0,R,2);j=f[R>>2]|0;if(j>>>0>=65280){p=784;break}}while(1){k=f[p>>2]|0;if((k|0)==0|(k|0)==(j|0))break;else p=p+12|0}if(!(f[p+4>>2]&f[V>>2])){Q=24;break b}if((k|0)>=65424){Q=99;break}switch(k|0){case 0:break;default:break c}q=q+2|0}if((Q|0)==99){Q=0;switch(k|0){case 65424:{Q=26;break b}default:{}}}k=f[U>>2]|0;n=Hb(c)|0;n=n-q|0;o=k+24|0;j=f[o>>2]|0;m=k+32|0;l=f[m>>2]|0;if((j+1|0)>>>0>l>>>0){l=~~(+(l>>>0)+100.0)>>>0;f[m>>2]=l;j=k+28|0;k=Lc(f[j>>2]|0,l*24|0)|0;if(!k){Q=31;break}f[j>>2]=k;j=f[o>>2]|0}else k=f[k+28>>2]|0;d[k+(j*24|0)>>1]=0;m=k+(j*24|0)+8|0;f[m>>2]=n;f[m+4>>2]=((n|0)<0)<<31>>31;f[k+(j*24|0)+16>>2]=q;f[o>>2]=j+1;k=f[p>>2]|0;f[t>>2]=k;if((k|0)==65424)break;else j=784;while(1){l=f[j>>2]|0;if((l|0)==0|(l|0)==(k|0)){m=j;break}else j=j+12|0}}else m=k;g=(l|0)==65361?1:g;h=(l|0)==65362?1:h;i=(l|0)==65372?1:i;if(!(f[m+4>>2]&f[V>>2])){Q=37;break}if((Eb(c,f[s>>2]|0,2,e)|0)!=2){Q=39;break}zb(f[s>>2]|0,v,2);k=(f[v>>2]|0)+-2|0;f[v>>2]=k;j=f[s>>2]|0;if(k>>>0>(f[r>>2]|0)>>>0){j=Lc(j,k)|0;if(!j){Q=42;break}f[s>>2]=j;k=f[v>>2]|0;f[r>>2]=k}j=Eb(c,j,k,e)|0;if((j|0)!=(f[v>>2]|0)){Q=45;break}if(!(Na[f[m+8>>2]&63](a,f[s>>2]|0,j,e)|0)){Q=47;break}l=f[U>>2]|0;n=f[m>>2]|0;o=Hb(c)|0;p=f[v>>2]|0;o=-4-p+o|0;p=p+4|0;q=l+24|0;j=f[q>>2]|0;m=l+32|0;k=f[m>>2]|0;if((j+1|0)>>>0>k>>>0){k=~~(+(k>>>0)+100.0)>>>0;f[m>>2]=k;j=l+28|0;k=Lc(f[j>>2]|0,k*24|0)|0;if(!k){Q=52;break}f[j>>2]=k;j=f[q>>2]|0}else k=f[l+28>>2]|0;d[k+(j*24|0)>>1]=n;n=k+(j*24|0)+8|0;f[n>>2]=o;f[n+4>>2]=((o|0)<0)<<31>>31;f[k+(j*24|0)+16>>2]=p;f[q>>2]=j+1;if((Eb(c,f[s>>2]|0,2,e)|0)!=2){Q=54;break}zb(f[s>>2]|0,t,2);j=f[t>>2]|0}while((j|0)!=65424);switch(Q|0){case 14:{f[J>>2]=j;Mb(e,1,8168,J)|0;W=0;u=X;return W|0}case 20:{Mb(e,1,8150,x)|0;Q=33;break}case 24:{Mb(e,1,8235,y)|0;Q=33;break}case 26:{f[t>>2]=65424;break}case 31:{Mc(f[j>>2]|0);f[j>>2]=0;f[m>>2]=0;f[o>>2]=0;Mb(e,1,8090,z)|0;Q=33;break}case 37:{Mb(e,1,8235,B)|0;W=0;u=X;return W|0}case 39:{Mb(e,1,8150,C)|0;W=0;u=X;return W|0}case 42:{Mc(f[s>>2]|0);f[s>>2]=0;f[r>>2]=0;Mb(e,1,8333,D)|0;W=0;u=X;return W|0}case 45:{Mb(e,1,8150,E)|0;W=0;u=X;return W|0}case 47:{Mb(e,1,8367,F)|0;W=0;u=X;return W|0}case 52:{Mc(f[j>>2]|0);f[j>>2]=0;f[m>>2]=0;f[q>>2]=0;Mb(e,1,8090,G)|0;W=0;u=X;return W|0}case 54:{Mb(e,1,8150,H)|0;W=0;u=X;return W|0}}if((Q|0)==33){Mb(e,1,8278,A)|0;W=0;u=X;return W|0}if(g|0){if(!h){Mb(e,1,8472,L)|0;W=0;u=X;return W|0}if(!i){Mb(e,1,8518,M)|0;W=0;u=X;return W|0}d:do if(b[a+184>>0]&1){r=a+120|0;g=f[r>>2]|0;do if(g){o=a+124|0;m=0;h=0;n=0;e:while(1){i=f[o>>2]|0;k=f[i+(n<<3)>>2]|0;if(!k)i=m;else{i=f[i+(n<<3)+4>>2]|0;j=m>>>0>>0;l=i-m|0;i=j?0:m-i|0;if(!((l|0)==0|j^1)){g=j?k+m|0:k;while(1){if(l>>>0<4){Q=72;break e}zb(g,R,4);g=g+4|0;M=l+-4|0;j=f[R>>2]|0;h=j+h|0;k=M>>>0>>0;i=k?j-M|0:i;l=k?0:M-j|0;if(!l)break;else g=k?g:g+j|0}g=f[r>>2]|0}}n=n+1|0;if(n>>>0>=g>>>0)break;else m=i}if((Q|0)==72){Mb(e,1,8564,N)|0;break}if(!i)Q=76;else Mb(e,1,8595,O)|0}else{h=0;Q=76}while(0);f:do if((Q|0)==76){i=Hc(h)|0;o=a+144|0;f[o>>2]=i;if(!i){Mb(e,1,8618,P)|0;break}p=a+132|0;f[p>>2]=h;j=f[r>>2]|0;q=a+124|0;do if(j){g=f[q>>2]|0;n=0;k=0;m=0;h=g;g:while(1){l=f[h+(n<<3)>>2]|0;if(!l)i=m;else{h=f[h+(n<<3)+4>>2]|0;g=(f[o>>2]|0)+k|0;h:do if(m>>>0>>0){hj(g|0,l|0,m|0)|0;i=h-m|0;g=k+m|0;if(!i){i=0;break}h=l+m|0;while(1){if(i>>>0<4){Q=91;break g}zb(h,R,4);k=h+4|0;j=i+-4|0;h=f[R>>2]|0;i=(f[o>>2]|0)+g|0;if(j>>>0>>0)break;hj(i|0,k|0,h|0)|0;h=f[R>>2]|0;i=j-h|0;g=h+g|0;if(!i){i=0;break h}else h=k+h|0}hj(i|0,k|0,j|0)|0;i=(f[R>>2]|0)-j|0;g=j+g|0}else{hj(g|0,l|0,h|0)|0;i=m-h|0;g=h+k|0}while(0);Mc(f[(f[q>>2]|0)+(n<<3)>>2]|0);h=f[q>>2]|0;f[h+(n<<3)>>2]=0;f[h+(n<<3)+4>>2]=0;k=g;j=f[r>>2]|0;g=h}n=n+1|0;if(n>>>0>=j>>>0){Q=93;break}else m=i}if((Q|0)==91){Mb(e,1,8564,S)|0;break f}else if((Q|0)==93){i=f[o>>2]|0;h=f[p>>2]|0;break}}else g=f[q>>2]|0;while(0);f[a+128>>2]=i;f[a+152>>2]=h;f[r>>2]=0;Mc(g);f[q>>2]=0;break d}while(0);Mb(e,1,8656,T)|0;W=0;u=X;return W|0}while(0);Mb(e,4,8682,W)|0;e=Hb(c)|0;W=(f[U>>2]|0)+8|0;f[W>>2]=e+-2;f[W+4>>2]=0;f[V>>2]=8;W=1;u=X;return W|0}}Mb(e,1,8426,K)|0;W=0;u=X;return W|0}while(0);Mb(e,1,8126,n)|0;W=0;u=X;return W|0}function cd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+16|0;F=G;D=f[a+80>>2]|0;E=a+88|0;p=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;s=f[D+16>>2]|0;q=s*1080|0;r=f[a+12>>2]|0;s=X(s<<2,s)|0;a:do if(p|0){t=r+5604|0;v=r+5620|0;w=r+5612|0;x=r+5616|0;y=r+5632|0;z=r+5624|0;A=r+5584|0;n=f[a+164>>2]|0;o=0;b:while(1){j=n+5584|0;B=f[j>>2]|0;hj(n|0,r|0,5640)|0;c=n+5636|0;b[c>>0]=b[c>>0]&-4;f[n+5168>>2]=0;c=n+5604|0;f[c>>2]=0;k=n+5620|0;f[k>>2]=0;C=n+5612|0;f[C>>2]=0;l=n+5632|0;f[l>>2]=0;m=n+5624|0;f[m>>2]=0;f[j>>2]=B;if(f[t>>2]|0){e=Hc(s)|0;f[c>>2]=e;if(!e){c=0;e=25;break}hj(e|0,f[t>>2]|0,s|0)|0}c=(f[v>>2]|0)*20|0;e=Hc(c)|0;f[C>>2]=e;if(!e){c=0;e=25;break}hj(e|0,f[w>>2]|0,c|0)|0;c=f[x>>2]|0;if(c|0){h=f[C>>2]|0;i=f[w>>2]|0;j=0;while(1){g=i+12|0;if(f[g>>2]|0){c=i+16|0;e=Hc(f[c>>2]|0)|0;f[h+12>>2]=e;if(!e){c=0;e=25;break b}hj(e|0,f[g>>2]|0,f[c>>2]|0)|0;c=f[x>>2]|0}f[k>>2]=(f[k>>2]|0)+1;j=j+1|0;if(j>>>0>=c>>>0)break;else{h=h+20|0;i=i+20|0}}}c=(f[y>>2]|0)*20|0;e=Hc(c)|0;f[m>>2]=e;if(!e){c=0;e=25;break}hj(e|0,f[z>>2]|0,c|0)|0;f[l>>2]=f[y>>2];i=f[y>>2]|0;if(i|0){h=f[z>>2]|0;e=f[m>>2]|0;g=0;while(1){c=f[h+8>>2]|0;if(c|0)f[e+8>>2]=(f[C>>2]|0)+(((c-(f[w>>2]|0)|0)/20|0)*20|0);c=f[h+12>>2]|0;if(c|0)f[e+12>>2]=(f[C>>2]|0)+(((c-(f[w>>2]|0)|0)/20|0)*20|0);g=g+1|0;if(g>>>0>=i>>>0)break;else{h=h+20|0;e=e+20|0}}}hj(B|0,f[A>>2]|0,q|0)|0;o=o+1|0;if(o>>>0>=p>>>0)break a;else n=n+5640|0}if((e|0)==25){u=G;return c|0}}while(0);e=Lf(1)|0;c=a+204|0;f[c>>2]=e;if(!e){d=0;u=G;return d|0}if(Pf(e,D,E)|0){d=1;u=G;return d|0}Qf(f[c>>2]|0);f[c>>2]=0;Mb(d,1,8019,F)|0;d=0;u=G;return d|0}function dd(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=u;u=u+112|0;z=B+88|0;w=B+80|0;x=B+72|0;v=B+64|0;r=B+56|0;q=B+48|0;m=B+40|0;k=B+32|0;j=B+24|0;g=B+16|0;s=B+100|0;t=B+96|0;y=B+92|0;f[t>>2]=0;A=a+200|0;if((d|0)!=8){Mb(e,1,11669,B)|0;Mb(e,1,11669,B+8|0)|0;A=0;u=B;return A|0}zb(c,A,2);zb(c+2|0,s,4);zb(c+6|0,y,1);zb(c+7|0,t,1);l=f[A>>2]|0;c=f[a+112>>2]|0;if(l>>>0>=(X(f[a+116>>2]|0,c)|0)>>>0){f[g>>2]=l;Mb(e,1,11695,g)|0;A=0;u=B;return A|0}d=f[a+164>>2]|0;p=(l>>>0)%(c>>>0)|0;o=(l>>>0)/(c>>>0)|0;c=f[s>>2]|0;do if((c+-1|0)>>>0<13){if((c|0)==12){f[j>>2]=12;Mb(e,2,11719,j)|0;c=f[s>>2]|0;break}f[k>>2]=c;Mb(e,1,11756,k)|0;A=0;u=B;return A|0}while(0);if(!c){Mb(e,4,11817,m)|0;f[a+72>>2]=1}c=f[t>>2]|0;do if(!c){c=f[d+(l*5640|0)+5588>>2]|0;if(c|0){i=c;n=18}}else{i=c+((h[a+76>>0]|0)>>>4&1)|0;f[t>>2]=i;d=d+(l*5640|0)+5588|0;g=f[d>>2]|0;c=f[y>>2]|0;if((g+-1|0)>>>0>>0){f[q>>2]=c;f[q+4>>2]=g;Mb(e,1,11928,q)|0;f[a+72>>2]=1;A=0;u=B;return A|0}if(c>>>0>>0){f[d>>2]=i;n=18;break}f[r>>2]=c;f[r+4>>2]=i;Mb(e,1,12027,r)|0;f[a+72>>2]=1;A=0;u=B;return A|0}while(0);if((n|0)==18?(i|0)==((f[y>>2]|0)+1|0):0){r=a+76|0;b[r>>0]=b[r>>0]|1}f[a+24>>2]=(f[a+72>>2]|0)==0?(f[s>>2]|0)+-12|0:0;f[a+8>>2]=16;c=f[a+60>>2]|0;if((c|0)==-1)if((p>>>0>=(f[a+28>>2]|0)>>>0?p>>>0<(f[a+36>>2]|0)>>>0:0)?o>>>0>=(f[a+32>>2]|0)>>>0:0)c=(o>>>0>=(f[a+40>>2]|0)>>>0&1)<<2&255;else c=4;else c=((f[A>>2]|0)!=(c|0)&1)<<2&255;j=a+76|0;b[j>>0]=b[j>>0]&-5|c;j=a+196|0;c=f[j>>2]|0;if(!c){A=1;u=B;return A|0}i=f[A>>2]|0;c=f[c+40>>2]|0;f[c+(i*40|0)>>2]=i;g=f[y>>2]|0;f[c+(i*40|0)+12>>2]=g;d=f[t>>2]|0;if(d|0){f[c+(i*40|0)+4>>2]=d;f[c+(i*40|0)+8>>2]=d;c=f[c+(i*40|0)+16>>2]|0;if(!c){z=Ic(d,24)|0;f[(f[(f[j>>2]|0)+40>>2]|0)+((f[A>>2]|0)*40|0)+16>>2]=z;if(z|0){A=1;u=B;return A|0}Mb(e,1,12135,v)|0;A=0;u=B;return A|0}c=Lc(c,d*24|0)|0;d=(f[(f[j>>2]|0)+40>>2]|0)+((f[A>>2]|0)*40|0)+16|0;if(!c){Mc(f[d>>2]|0);f[(f[(f[j>>2]|0)+40>>2]|0)+((f[A>>2]|0)*40|0)+16>>2]=0;Mb(e,1,12135,x)|0;A=0;u=B;return A|0}else{f[d>>2]=c;A=1;u=B;return A|0}}do if(!(f[c+(i*40|0)+16>>2]|0)){f[c+(i*40|0)+8>>2]=10;x=Ic(10,24)|0;c=f[(f[j>>2]|0)+40>>2]|0;d=f[A>>2]|0;f[c+(d*40|0)+16>>2]=x;if(x|0){i=d;g=f[y>>2]|0;break}f[c+(d*40|0)+8>>2]=0;Mb(e,1,12135,w)|0;A=0;u=B;return A|0}while(0);d=c+(i*40|0)+8|0;if(g>>>0<(f[d>>2]|0)>>>0){A=1;u=B;return A|0}y=g+1|0;f[d>>2]=y;c=Lc(f[c+(i*40|0)+16>>2]|0,y*24|0)|0;d=(f[(f[j>>2]|0)+40>>2]|0)+((f[A>>2]|0)*40|0)+16|0;if(!c){Mc(f[d>>2]|0);y=f[(f[j>>2]|0)+40>>2]|0;A=f[A>>2]|0;f[y+(A*40|0)+16>>2]=0;f[y+(A*40|0)+8>>2]=0;Mb(e,1,12135,z)|0;A=0;u=B;return A|0}else{f[d>>2]=c;A=1;u=B;return A|0}return 0}function ed(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=u;u=u+64|0;o=r+48|0;p=r+40|0;j=r+32|0;m=r+52|0;i=r+56|0;f[m>>2]=d;q=a+80|0;k=f[q>>2]|0;n=a+8|0;if((f[n>>2]|0)==16)l=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else l=f[a+12>>2]|0;g=l+5636|0;h=b[g>>0]|0;if(h&1){Mb(e,1,11436,r)|0;q=0;u=r;return q|0}b[g>>0]=h|1;if(d>>>0<5){Mb(e,1,11500,r+8|0)|0;q=0;u=r;return q|0}zb(c,l,1);if((f[l>>2]|0)>>>0>7){Mb(e,1,11526,r+16|0)|0;q=0;u=r;return q|0}zb(c+1|0,i,1);i=f[i>>2]|0;g=l+4|0;f[g>>2]=i;if((i|0)>4){Mb(e,1,11560,r+24|0)|0;f[g>>2]=-1}g=l+8|0;zb(c+2|0,g,2);g=f[g>>2]|0;if((g+-1|0)>>>0>65534){f[j>>2]=g;Mb(e,1,11601,j)|0;q=0;u=r;return q|0}j=f[a+172>>2]|0;f[l+12>>2]=(j|0)==0?g:j;zb(c+4|0,l+16|0,1);j=c+5|0;f[m>>2]=d+-5;i=f[k+16>>2]|0;if(i|0){c=f[l>>2]&1;h=f[l+5584>>2]|0;g=0;do{f[h+(g*1080|0)>>2]=c;g=g+1|0}while(g>>>0>>0)}if(!(Fd(a,0,j,m,e)|0)){Mb(e,1,11500,p)|0;q=0;u=r;return q|0}if(f[m>>2]|0){Mb(e,1,11500,o)|0;q=0;u=r;return q|0}if((f[n>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;g=f[g+5584>>2]|0;k=g+4|0;h=f[k>>2]|0;l=h<<2;if((f[(f[q>>2]|0)+16>>2]|0)>>>0<=1){q=1;u=r;return q|0}a=g+8|0;e=g+12|0;m=g+16|0;n=g+20|0;o=g+812|0;p=g+944|0;f[g+1084>>2]=h;i=f[a>>2]|0;f[g+1088>>2]=i;c=f[e>>2]|0;f[g+1092>>2]=c;j=f[m>>2]|0;f[g+1096>>2]=j;d=f[n>>2]|0;f[g+1100>>2]=d;hj(g+1892|0,o|0,l|0)|0;hj(g+2024|0,p|0,l|0)|0;if((f[(f[q>>2]|0)+16>>2]|0)>>>0<=2){q=1;u=r;return q|0}f[g+2164>>2]=h;f[g+2168>>2]=i;f[g+2172>>2]=c;f[g+2176>>2]=j;f[g+2180>>2]=d;hj(g+2972|0,o|0,l|0)|0;hj(g+3104|0,p|0,l|0)|0;if((f[(f[q>>2]|0)+16>>2]|0)>>>0>3)h=3;else{q=1;u=r;return q|0}while(1){i=f[a>>2]|0;c=f[e>>2]|0;j=f[m>>2]|0;d=f[n>>2]|0;f[g+3244>>2]=f[k>>2];f[g+3248>>2]=i;f[g+3252>>2]=c;f[g+3256>>2]=j;f[g+3260>>2]=d;hj(g+4052|0,o|0,l|0)|0;hj(g+4184|0,p|0,l|0)|0;h=h+1|0;if(h>>>0>=(f[(f[q>>2]|0)+16>>2]|0)>>>0){g=1;break}else g=g+1080|0}u=r;return g|0}function fd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+48|0;i=k+28|0;j=k+32|0;f[i>>2]=c;if((f[a+8>>2]|0)==16)h=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else h=f[a+12>>2]|0;g=(f[a+80>>2]|0)+16|0;e=(f[g>>2]|0)>>>0<257?1:2;if(e>>>0>=c>>>0){Mb(d,1,10929,k)|0;j=0;u=k;return j|0}f[i>>2]=c+-1-e;zb(b,j,e);b=b+e|0;c=f[j>>2]|0;if(c>>>0>=(f[g>>2]|0)>>>0){Mb(d,1,10955,k+8|0)|0;j=0;u=k;return j|0}zb(b,(f[h+5584>>2]|0)+(c*1080|0)|0,1);if(!(Fd(a,f[j>>2]|0,b+1|0,i,d)|0)){Mb(d,1,10929,k+16|0)|0;j=0;u=k;return j|0}if(!(f[i>>2]|0)){j=1;u=k;return j|0}Mb(d,1,10929,k+24|0)|0;j=0;u=k;return j|0}function gd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+32|0;j=k+8|0;h=k+20|0;i=f[(f[a+80>>2]|0)+16>>2]|0;e=i>>>0<257?1:2;if((e+2|0)!=(c|0)){Mb(d,1,10846,k)|0;j=0;u=k;return j|0}if((f[a+8>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;zb(b,h,e);c=b+e|0;zb(c,k+16|0,1);a=f[h>>2]|0;if(a>>>0>>0){zb(c+1|0,(f[g+5584>>2]|0)+(a*1080|0)+808|0,1);j=1;u=k;return j|0}else{f[j>>2]=a;f[j+4>>2]=i;Mb(d,1,10872,j)|0;j=0;u=k;return j|0}return 0}function hd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0;h=u;u=u+16|0;e=h+12|0;f[e>>2]=c;if(!(Ed(a,0,b,e,d)|0)){Mb(d,1,10820,h)|0;g=0;u=h;return g|0}if(f[e>>2]|0){Mb(d,1,10820,h+8|0)|0;g=0;u=h;return g|0}if((f[a+8>>2]|0)==16)b=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else b=f[a+12>>2]|0;b=f[b+5584>>2]|0;d=a+80|0;if((f[(f[d>>2]|0)+16>>2]|0)>>>0<=1){g=1;u=h;return g|0}e=b+24|0;a=b+804|0;g=b+28|0;c=1;while(1){f[b+1104>>2]=f[e>>2];f[b+1884>>2]=f[a>>2];hj(b+1108|0,g|0,776)|0;c=c+1|0;if(c>>>0>=(f[(f[d>>2]|0)+16>>2]|0)>>>0){b=1;break}else b=b+1080|0}u=h;return b|0}function id(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+48|0;n=o+32|0;m=o+24|0;l=o+16|0;g=o+8|0;e=o;k=o+36|0;i=o+40|0;f[k>>2]=c;j=a+80|0;do if((f[(f[j>>2]|0)+16>>2]|0)>>>0<257){if(c|0){zb(b,i,1);e=-1;h=1;break}Mb(d,1,10473,e)|0;n=0;u=o;return n|0}else{if(c>>>0>=2){zb(b,i,2);e=-2;h=2;break}Mb(d,1,10473,g)|0;n=0;u=o;return n|0}while(0);f[k>>2]=e+c;g=f[i>>2]|0;e=f[(f[j>>2]|0)+16>>2]|0;if(g>>>0>=e>>>0){f[l>>2]=g;f[l+4>>2]=e;Mb(d,1,10499,l)|0;n=0;u=o;return n|0}if(!(Ed(a,g,b+h|0,k,d)|0)){Mb(d,1,10473,m)|0;n=0;u=o;return n|0}if(!(f[k>>2]|0)){n=1;u=o;return n|0}Mb(d,1,10473,n)|0;n=0;u=o;return n|0}function jd(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=u;u=u+16|0;i=p+8|0;n=p+12|0;o=f[(f[a+80>>2]|0)+16>>2]|0;m=o>>>0<257?1:2;g=(m<<1)+5|0;if(((d>>>0)%(g>>>0)|0|0)!=0|g>>>0>d>>>0){Mb(e,1,10429,p)|0;o=0;u=p;return o|0}if((f[a+8>>2]|0)==16)l=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else l=f[a+12>>2]|0;a=l+5636|0;h=b[a>>0]|0;if(!(h&4))k=0;else k=(f[l+420>>2]|0)+1|0;j=k+((d>>>0)/(g>>>0)|0)|0;if(j>>>0>31){f[i>>2]=j;Mb(e,1,10455,i)|0;o=0;u=p;return o|0}b[a>>0]=h|4;if(k>>>0>>0){h=l+8|0;a=c;d=k;g=l+424+(k*148|0)|0;while(1){zb(a,g,1);a=a+1|0;zb(a,g+4|0,m);a=a+m|0;k=g+8|0;zb(a,k,2);i=f[k>>2]|0;c=f[h>>2]|0;f[k>>2]=i>>>0>>0?i:c;a=a+2|0;zb(a,g+12|0,1);a=a+1|0;k=g+16|0;zb(a,k,m);a=a+m|0;zb(a,n,1);f[g+36>>2]=f[n>>2];c=f[k>>2]|0;f[k>>2]=c>>>0>>0?c:o;d=d+1|0;if(d>>>0>=j>>>0)break;else{a=a+1|0;g=g+148|0}}}f[l+420>>2]=j+-1;o=1;u=p;return o|0}function kd(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0;N=u;u=u+160|0;M=N+144|0;H=N+136|0;G=N+128|0;F=N+120|0;E=N+112|0;D=N+104|0;z=N+96|0;y=N+80|0;s=N+72|0;p=N+64|0;o=N+56|0;r=N+48|0;q=N+32|0;k=N+24|0;j=N+16|0;h=N+152|0;w=N+148|0;K=f[a+80>>2]|0;L=a+88|0;if(e>>>0<36){Mb(g,1,9677,N)|0;g=0;u=N;return g|0}J=e+-36|0;n=(J>>>0)/3|0;if((J>>>0)%3|0|0){Mb(g,1,9677,N+8|0)|0;g=0;u=N;return g|0}zb(c,h,2);d[L>>1]=f[h>>2];x=K+8|0;zb(c+2|0,x,4);C=K+12|0;zb(c+6|0,C,4);zb(c+10|0,K,4);m=K+4|0;zb(c+14|0,m,4);v=a+100|0;zb(c+18|0,v,4);B=a+104|0;zb(c+22|0,B,4);t=a+92|0;zb(c+26|0,t,4);A=a+96|0;zb(c+30|0,A,4);zb(c+34|0,h,2);i=c+36|0;e=f[h>>2]|0;if(e>>>0>=16385){f[j>>2]=e;Mb(g,1,9705,j)|0;g=0;u=N;return g|0}e=e&65535;J=K+16|0;f[J>>2]=e;if((e|0)!=(n|0)){f[k>>2]=e;f[k+4>>2]=n;Mb(g,1,9766,k)|0;g=0;u=N;return g|0}k=f[K>>2]|0;l=f[x>>2]|0;if(k>>>0>>0){j=f[m>>2]|0;c=f[C>>2]|0;if(j>>>0>>0){h=f[v>>2]|0;e=f[B>>2]|0;if(h)if(!e)e=0;else{if((4294967295/(l>>>0)|0)>>>0>>0){f[o>>2]=l;f[o+4>>2]=c;Mb(g,1,10007,o)|0;g=0;u=N;return g|0}l=f[t>>2]|0;q=Zi(l|0,0,h|0,0)|0;o=I;m=f[A>>2]|0;r=Zi(m|0,0,e|0,0)|0;if(l>>>0<=k>>>0?m>>>0<=j>>>0&(0-o|q)>>>0>k>>>0&(0-I|r)>>>0>j>>>0:0){e=Ic(n,52)|0;n=K+24|0;f[n>>2]=e;if(!e){f[J>>2]=0;Mb(g,1,10093,s)|0;g=0;u=N;return g|0}a:do if(f[J>>2]|0){l=a+168|0;k=e;j=0;while(1){zb(i,w,1);c=f[w>>2]|0;e=k+24|0;f[e>>2]=(c&127)+1;f[k+32>>2]=c>>>7;zb(i+1|0,w,1);f[k>>2]=f[w>>2];zb(i+2|0,w,1);c=f[w>>2]|0;f[k+4>>2]=c;h=f[k>>2]|0;if((c+-1|0)>>>0>254|(h+-1|0)>>>0>254){e=26;break}c=f[e>>2]|0;if(c>>>0>38){e=28;break}f[k+36>>2]=0;f[k+40>>2]=f[l>>2];e=j+1|0;if(e>>>0<(f[J>>2]|0)>>>0){k=k+52|0;i=i+3|0;j=e}else break a}if((e|0)==26){f[y>>2]=j;f[y+4>>2]=h;f[y+8>>2]=c;Mb(g,1,10141,y)|0}else if((e|0)==28){f[z>>2]=j;f[z+4>>2]=c;Mb(g,1,10246,z)|0}g=0;u=N;return g|0}while(0);l=f[t>>2]|0;k=f[v>>2]|0;i=((f[x>>2]|0)+-1-l+k|0)/(k|0)|0;f[a+112>>2]=i;j=f[A>>2]|0;h=f[B>>2]|0;e=((f[C>>2]|0)+-1-j+h|0)/(h|0)|0;f[a+116>>2]=e;if(!((e|0)==0|(i|0)==0)?i>>>0<=(65535/(e>>>0)|0)>>>0:0){m=X(i,e)|0;c=a+28|0;if(!(b[a+76>>0]&2)){f[c>>2]=0;f[a+32>>2]=0;f[a+36>>2]=i;c=a+40|0}else{f[c>>2]=(((f[c>>2]|0)-l|0)>>>0)/(k>>>0)|0;e=a+32|0;f[e>>2]=(((f[e>>2]|0)-j|0)>>>0)/(h>>>0)|0;e=a+36|0;f[e>>2]=((f[e>>2]|0)+-1-l+k|0)/(k|0)|0;e=a+40|0;c=e;e=((f[e>>2]|0)+-1-j+h|0)/(h|0)|0}f[c>>2]=e;D=Ic(m,5640)|0;j=a+164|0;f[j>>2]=D;if(!D){Mb(g,1,10093,E)|0;g=0;u=N;return g|0}E=Ic(f[J>>2]|0,1080)|0;i=a+12|0;f[(f[i>>2]|0)+5584>>2]=E;if(!(f[(f[i>>2]|0)+5584>>2]|0)){Mb(g,1,10093,F)|0;g=0;u=N;return g|0}e=Ic(10,20)|0;f[(f[i>>2]|0)+5612>>2]=e;e=f[i>>2]|0;if(!(f[e+5612>>2]|0)){Mb(g,1,10093,G)|0;g=0;u=N;return g|0}f[e+5620>>2]=10;e=Ic(10,20)|0;f[(f[i>>2]|0)+5624>>2]=e;e=f[i>>2]|0;if(!(f[e+5624>>2]|0)){Mb(g,1,10093,H)|0;g=0;u=N;return g|0}f[e+5632>>2]=10;h=f[J>>2]|0;if(h|0){c=f[n>>2]|0;e=0;do{if(!(f[c+(e*52|0)+32>>2]|0))f[(f[(f[i>>2]|0)+5584>>2]|0)+(e*1080|0)+1076>>2]=1<<(f[c+(e*52|0)+24>>2]|0)+-1;e=e+1|0}while(e>>>0>>0)}b:do if(m|0){e=f[j>>2]|0;H=Ic(h,1080)|0;f[e+5584>>2]=H;if(H|0){c=0;while(1){c=c+1|0;if(c>>>0>=m>>>0)break b;H=Ic(f[J>>2]|0,1080)|0;f[e+11224>>2]=H;if(!H)break;else e=e+5640|0}}Mb(g,1,10093,M)|0;g=0;u=N;return g|0}while(0);f[a+8>>2]=4;Tb(K,L);g=1;u=N;return g|0}f[D>>2]=i;f[D+4>>2]=e;Mb(g,1,10346,D)|0;g=0;u=N;return g|0}Mb(g,1,10049,p)|0;g=0;u=N;return g|0}f[r>>2]=h;f[r+4>>2]=e;Mb(g,1,9946,r)|0;g=0;u=N;return g|0}else e=j}else{c=f[C>>2]|0;e=f[m>>2]|0}a=_i(l|0,0,k|0,0)|0;K=I;L=_i(c|0,0,e|0,0)|0;M=q;f[M>>2]=a;f[M+4>>2]=K;M=q+8|0;f[M>>2]=L;f[M+4>>2]=I;Mb(g,1,9880,q)|0;g=0;u=N;return g|0}function ld(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=u;u=u+32|0;a=e+12|0;if(c>>>0<2){Mb(d,1,9651,e)|0;d=0;u=e;return d|0}zb(b,e+16|0,1);zb(b+1|0,a,1);b=f[a>>2]|0;if(!(((c+-2|0)>>>0)%(((b>>>5&2)+2+(b>>>4&3)|0)>>>0)|0)){d=1;u=e;return d|0}Mb(d,1,9651,e+8|0)|0;d=0;u=e;return d|0}function md(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=u;u=u+16|0;if(!c){Mb(d,1,9625,b)|0;a=0}else a=1;u=b;return a|0}function nd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;j=u;u=u+32|0;i=j+8|0;h=j+12|0;if(!c){Mb(d,1,9599,j)|0;d=0;u=j;return d|0}zb(b,j+16|0,1);g=c+-1|0;if(!g){d=1;u=j;return d|0}else{e=0;a=b;c=0}do{a=a+1|0;zb(a,h,1);b=f[h>>2]|0;e=(b&128|0)==0?0:(b&127|e)<<7;c=c+1|0}while((c|0)!=(g|0));if(!e){d=1;u=j;return d|0}Mb(d,1,9599,i)|0;d=0;u=j;return d|0}function od(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+48|0;n=o+32|0;j=o+24|0;h=o+16|0;g=o+8|0;l=o+36|0;if(d>>>0<2){Mb(e,1,9551,o)|0;n=0;u=o;return n|0}m=a+184|0;b[m>>0]=b[m>>0]|1;zb(c,l,1);m=c+1|0;k=d+-1|0;i=a+124|0;d=f[i>>2]|0;do if(d){g=a+120|0;c=f[l>>2]|0;if((f[g>>2]|0)>>>0<=c>>>0){a=c+1|0;c=Lc(d,a<<3)|0;if(c|0){f[i>>2]=c;d=f[g>>2]|0;ij(c+(d<<3)|0,0,a-d<<3|0)|0;f[g>>2]=a;d=f[i>>2]|0;break}Mb(e,1,8618,h)|0;n=0;u=o;return n|0}}else{c=(f[l>>2]|0)+1|0;d=Ic(c,8)|0;f[i>>2]=d;if(d|0){f[a+120>>2]=c;break}Mb(e,1,8618,g)|0;n=0;u=o;return n|0}while(0);c=f[l>>2]|0;if(f[d+(c<<3)>>2]|0){f[j>>2]=c;Mb(e,1,9577,j)|0;n=0;u=o;return n|0}a=Hc(k)|0;d=f[i>>2]|0;c=f[l>>2]|0;f[d+(c<<3)>>2]=a;if(!a){Mb(e,1,8618,n)|0;n=0;u=o;return n|0}else{f[d+(c<<3)+4>>2]=k;hj(a|0,m|0,k|0)|0;n=1;u=o;return n|0}return 0}function pd(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=u;u=u+48|0;p=q+40|0;m=q+32|0;j=q+24|0;i=q+16|0;o=q+44|0;if(d>>>0<2){Mb(e,1,9364,q)|0;p=0;u=q;return p|0}if(b[a+184>>0]&1){Mb(e,1,9390,q+8|0)|0;p=0;u=q;return p|0}h=f[a+164>>2]|0;g=f[a+200>>2]|0;n=h+(g*5640|0)+5636|0;b[n>>0]=b[n>>0]|2;zb(c,o,1);n=c+1|0;l=d+-1|0;k=h+(g*5640|0)+5164|0;c=f[k>>2]|0;do if(c){g=h+(g*5640|0)+5160|0;a=f[o>>2]|0;if((f[g>>2]|0)>>>0<=a>>>0){d=a+1|0;a=Lc(c,d<<3)|0;if(a|0){f[k>>2]=a;c=f[g>>2]|0;ij(a+(c<<3)|0,0,d-c<<3|0)|0;f[g>>2]=d;c=f[k>>2]|0;break}Mb(e,1,9491,j)|0;p=0;u=q;return p|0}}else{a=(f[o>>2]|0)+1|0;c=Ic(a,8)|0;f[k>>2]=c;if(c|0){f[h+(g*5640|0)+5160>>2]=a;break}Mb(e,1,9491,i)|0;p=0;u=q;return p|0}while(0);a=f[o>>2]|0;if(f[c+(a<<3)>>2]|0){f[m>>2]=a;Mb(e,1,9529,m)|0;p=0;u=q;return p|0}d=Hc(l)|0;c=f[k>>2]|0;a=f[o>>2]|0;f[c+(a<<3)>>2]=d;if(!d){Mb(e,1,9491,p)|0;p=0;u=q;return p|0}else{f[c+(a<<3)+4>>2]=l;hj(d|0,n|0,l|0)|0;p=1;u=q;return p|0}return 0}function qd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=u;u=u+16|0;if((f[(f[a+80>>2]|0)+16>>2]<<2|0)==(c|0)){d=1;u=b;return d|0}Mb(d,1,9338,b)|0;d=0;u=b;return d|0}function rd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function sd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=u;u=u+48|0;q=r+40|0;p=r+32|0;k=r+24|0;o=r+44|0;if((f[a+8>>2]|0)==16)i=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else i=f[a+12>>2]|0;if(c>>>0<2){Mb(d,1,9170,r)|0;q=0;u=r;return q|0}zb(b,o,2);if(f[o>>2]|0){Mb(d,2,9196,r+8|0)|0;q=1;u=r;return q|0}if(c>>>0<7){Mb(d,1,9170,r+16|0)|0;q=0;u=r;return q|0}zb(b+2|0,o,2);m=b+4|0;n=f[o>>2]&255;j=i+5612|0;e=f[j>>2]|0;l=i+5616|0;a=f[l>>2]|0;a:do if(!a){g=e;h=0}else{g=e;h=0;do{if((f[g+8>>2]|0)==(n|0))break a;g=g+20|0;h=h+1|0}while(h>>>0>>0)}while(0);if((h|0)==(a|0)){g=i+5620|0;do if((a|0)==(f[g>>2]|0)){a=a+10|0;f[g>>2]=a;a=Lc(e,a*20|0)|0;if(a|0){f[j>>2]=a;e=f[l>>2]|0;ij(a+(e*20|0)|0,0,((f[g>>2]|0)-e|0)*20|0)|0;e=f[j>>2]|0;a=f[l>>2]|0;break}Mc(f[j>>2]|0);f[j>>2]=0;f[g>>2]=0;f[l>>2]=0;Mb(d,1,9256,k)|0;q=0;u=r;return q|0}while(0);f[l>>2]=a+1;g=e+(a*20|0)|0}h=g+12|0;a=f[h>>2]|0;if(a|0){Mc(a);f[h>>2]=0}f[g+8>>2]=n;n=f[o>>2]|0;f[g+4>>2]=n>>>8&3;f[g>>2]=n>>>10&3;zb(m,o,2);if(f[o>>2]|0){Mb(d,2,9294,p)|0;q=1;u=r;return q|0}a=c+-6|0;e=Hc(a)|0;f[h>>2]=e;if(!e){Mb(d,1,9170,q)|0;q=0;u=r;return q|0}else{hj(e|0,b+6|0,a|0)|0;f[g+16>>2]=a;q=1;u=r;return q|0}return 0}function td(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+32|0;e=i+16|0;h=i+12|0;a=a+80|0;g=f[(f[a>>2]|0)+16>>2]|0;if((g+2|0)!=(c|0)){Mb(d,1,9144,i)|0;h=0;u=i;return h|0}zb(b,e,2);if((f[e>>2]|0)!=(g|0)){Mb(d,1,9144,i+8|0)|0;h=0;u=i;return h|0}if(!g){h=1;u=i;return h|0}d=0;c=b+2|0;a=f[(f[a>>2]|0)+24>>2]|0;while(1){zb(c,h,1);b=f[h>>2]|0;f[a+32>>2]=b>>>7&1;f[a+24>>2]=(b&127)+1;d=d+1|0;if((d|0)==(g|0)){a=1;break}else{c=c+1|0;a=a+52|0}}u=i;return a|0}function ud(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=u;u=u+144|0;J=K+120|0;I=K+112|0;H=K+104|0;G=K+96|0;F=K+88|0;E=K+80|0;D=K+72|0;C=K+64|0;B=K+56|0;A=K+48|0;o=K+40|0;n=K+32|0;l=K+24|0;v=K+136|0;w=K+132|0;x=K+128|0;y=K+124|0;if((f[a+8>>2]|0)==16)p=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else p=f[a+12>>2]|0;if(d>>>0<2){Mb(e,1,8804,K)|0;J=0;u=K;return J|0}zb(c,v,2);if(f[v>>2]|0){Mb(e,2,8830,K+8|0)|0;J=1;u=K;return J|0}if(d>>>0<7){Mb(e,1,8804,K+16|0)|0;J=0;u=K;return J|0}zb(c+2|0,w,1);m=c+3|0;k=p+5624|0;g=f[k>>2]|0;z=p+5628|0;a=f[z>>2]|0;a:do if(!a){i=g;h=0}else{j=f[w>>2]|0;i=g;h=0;do{if((f[i>>2]|0)==(j|0))break a;i=i+20|0;h=h+1|0}while(h>>>0>>0)}while(0);if((h|0)==(a|0)){h=p+5632|0;do if((a|0)==(f[h>>2]|0)){a=a+10|0;f[h>>2]=a;a=Lc(g,a*20|0)|0;if(a|0){f[k>>2]=a;g=f[z>>2]|0;ij(a+(g*20|0)|0,0,((f[h>>2]|0)-g|0)*20|0)|0;g=f[k>>2]|0;a=f[z>>2]|0;break}Mc(f[k>>2]|0);f[k>>2]=0;f[h>>2]=0;f[z>>2]=0;Mb(e,1,8876,l)|0;J=0;u=K;return J|0}while(0);t=1;h=g+(a*20|0)|0}else{t=0;h=i}f[h>>2]=f[w>>2];zb(m,v,2);if(f[v>>2]|0){Mb(e,2,8830,n)|0;J=1;u=K;return J|0}zb(c+5|0,x,2);g=f[x>>2]|0;if(g>>>0>1){Mb(e,2,8914,o)|0;J=1;u=K;return J|0}a=d+-7|0;b:do if(g){q=h+4|0;r=h+16|0;s=h+8|0;d=h+12|0;o=p+5612|0;n=p+5616|0;l=c+7|0;m=0;c:while(1){if(a>>>0<3){g=27;break}zb(l,v,1);if((f[v>>2]|0)!=1){g=29;break}zb(l+1|0,y,2);g=a+-3|0;i=f[y>>2]|0;j=(i>>>15)+1|0;i=i&32767;f[q>>2]=i;h=(X(j,i)|0)+2|0;if(g>>>0>>0){g=31;break}a=l+3|0;k=g-h|0;if(i){g=0;do{zb(a,v,j);if((f[v>>2]|0)!=(g|0)){g=34;break c}a=a+j|0;g=g+1|0}while(g>>>0<(f[q>>2]|0)>>>0)}zb(a,y,2);g=a+2|0;h=f[y>>2]|0;i=(h>>>15)+1|0;h=h&32767;f[y>>2]=h;if((h|0)!=(f[q>>2]|0)){g=37;break}a=(X(i,h)|0)+3|0;if(k>>>0>>0){g=39;break}a=k-a|0;if(h){h=0;do{zb(g,v,i);if((f[v>>2]|0)!=(h|0)){g=42;break c}g=g+i|0;h=h+1|0}while(h>>>0<(f[q>>2]|0)>>>0)}zb(g,v,3);l=g+3|0;i=f[v>>2]|0;b[r>>0]=(i>>>16^1)&1|b[r>>0]&-2;f[s>>2]=0;f[d>>2]=0;j=i&255;f[w>>2]=j;if(j|0){k=f[n>>2]|0;if(!k){g=50;break}g=f[o>>2]|0;h=0;while(1){if((f[g+8>>2]|0)==(j|0))break;h=h+1|0;if(h>>>0>=k>>>0){g=50;break c}else g=g+20|0}f[s>>2]=g}i=i>>>8&255;f[w>>2]=i;if(i|0){j=f[n>>2]|0;if(!j){g=57;break}g=f[o>>2]|0;h=0;while(1){if((f[g+8>>2]|0)==(i|0))break;h=h+1|0;if(h>>>0>=j>>>0){g=57;break c}else g=g+20|0}f[d>>2]=g}m=m+1|0;if(m>>>0>=(f[x>>2]|0)>>>0)break b}if((g|0)==27){Mb(e,1,8804,A)|0;J=0;u=K;return J|0}else if((g|0)==29){Mb(e,2,8958,B)|0;J=1;u=K;return J|0}else if((g|0)==31){Mb(e,1,8804,C)|0;J=0;u=K;return J|0}else if((g|0)==34){Mb(e,2,9024,D)|0;J=1;u=K;return J|0}else if((g|0)==37){Mb(e,2,9078,E)|0;J=1;u=K;return J|0}else if((g|0)==39){Mb(e,1,8804,F)|0;J=0;u=K;return J|0}else if((g|0)==42){Mb(e,2,9024,G)|0;J=1;u=K;return J|0}else if((g|0)==50){Mb(e,1,8804,H)|0;J=0;u=K;return J|0}else if((g|0)==57){Mb(e,1,8804,I)|0;J=0;u=K;return J|0}}while(0);if(a|0){Mb(e,1,8804,J)|0;J=0;u=K;return J|0}if(!t){J=1;u=K;return J|0}f[z>>2]=(f[z>>2]|0)+1;J=1;u=K;return J|0}function vd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=u;u=u+32|0;m=r+24|0;p=r+20|0;q=a+80|0;e=f[q>>2]|0;if((f[a+8>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;if(!c){Mb(d,1,8723,r)|0;q=0;u=r;return q|0}zb(b,p,1);a=f[p>>2]|0;if(a>>>0>1){Mb(d,2,8749,r+8|0)|0;q=1;u=r;return q|0}if((a+1|0)!=(c|0)){Mb(d,2,8723,r+16|0)|0;q=0;u=r;return q|0}l=g+5584|0;e=f[e+16>>2]|0;if(e|0){c=f[l>>2]|0;d=0;while(1){f[c+1076>>2]=0;d=d+1|0;if(d>>>0>=e>>>0)break;else c=c+1080|0}}k=g+5604|0;c=f[k>>2]|0;if(c){Mc(c);f[k>>2]=0;a=f[p>>2]|0}if(!a){q=1;u=r;return q|0}j=g+5624|0;i=g+5628|0;h=0;while(1){b=b+1|0;zb(b,m,1);a=f[q>>2]|0;e=f[j>>2]|0;if((f[i>>2]|0?(f[e>>2]|0)==(f[m>>2]|0):0)?(n=f[e+4>>2]|0,o=a+16|0,(n|0)==(f[o>>2]|0)):0){a=f[e+8>>2]|0;if(a|0){c=X(n,n)|0;g=X(f[1036+(f[a>>2]<<2)>>2]|0,c)|0;if((f[a+16>>2]|0)!=(g|0)){a=0;c=32;break}d=Hc(c<<2)|0;f[k>>2]=d;if(!d){a=0;c=32;break}Ua[f[1052+(f[a>>2]<<2)>>2]&15](f[a+12>>2]|0,d,c)}a=f[e+12>>2]|0;if(a|0){c=f[o>>2]|0;g=X(c,f[1036+(f[a>>2]<<2)>>2]|0)|0;if((f[a+16>>2]|0)!=(g|0)){a=0;c=32;break}g=Hc(c<<2)|0;if(!g){a=0;c=32;break}Ua[f[1068+(f[a>>2]<<2)>>2]&15](f[a+12>>2]|0,g,c);e=f[o>>2]|0;if(e|0){a=g;c=f[l>>2]|0;d=0;while(1){f[c+1076>>2]=f[a>>2];d=d+1|0;if((d|0)==(e|0))break;else{a=a+4|0;c=c+1080|0}}}Mc(g)}}h=h+1|0;if(h>>>0>=(f[p>>2]|0)>>>0){a=1;c=32;break}}if((c|0)==32){u=r;return a|0}return 0}function wd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){zb(a,e,2);f[b>>2]=f[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+2|0}}u=g;return}function xd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){zb(a,e,4);f[b>>2]=f[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}u=g;return}function yd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){Db(a,e);f[b>>2]=~~+n[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}u=g;return}function zd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){Bb(a,e);f[b>>2]=~~+p[e>>3];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+8|0}}u=g;return}function Ad(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){zb(a,e,2);n[b>>2]=+((f[e>>2]|0)>>>0);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+2|0}}u=g;return}function Bd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){zb(a,e,4);n[b>>2]=+((f[e>>2]|0)>>>0);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}u=g;return}function Cd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){Db(a,e);f[b>>2]=f[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}u=g;return}function Dd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;f=u;u=u+16|0;e=f;if(!c){u=f;return}d=0;while(1){Bb(a,e);n[b>>2]=+p[e>>3];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+8|0}}u=f;return}function Ed(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=u;u=u+32|0;h=m+8|0;j=m+20|0;if((f[a+8>>2]|0)==16)a=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else a=f[a+12>>2]|0;l=f[a+5584>>2]|0;a=f[d>>2]|0;if(!a){Mb(e,1,10568,m)|0;b=0;u=m;return b|0}f[d>>2]=a+-1;zb(c,j,1);c=c+1|0;a=f[j>>2]|0;g=a&31;i=l+(b*1080|0)+24|0;f[i>>2]=g;f[l+(b*1080|0)+804>>2]=a>>>5;do if((g|0)==1){a=1;k=8}else{a=(f[d>>2]|0)>>>((g|0)!=0&1);if(a>>>0>97){f[h>>2]=a;f[h+4>>2]=97;f[h+8>>2]=97;Mb(e,2,10604,h)|0;g=f[i>>2]|0}e=(a|0)==0;if(g|0)if(e){a=0;k=20;break}else{k=8;break}if(!e){g=0;while(1){zb(c,j,1);if(g>>>0<97){f[l+(b*1080|0)+28+(g<<3)>>2]=(f[j>>2]|0)>>>3;f[l+(b*1080|0)+28+(g<<3)+4>>2]=0}g=g+1|0;if((g|0)==(a|0))break;else c=c+1|0}}a=(f[d>>2]|0)-a|0}while(0);if((k|0)==8){g=0;while(1){zb(c,j,2);if(g>>>0<97){k=f[j>>2]|0;f[l+(b*1080|0)+28+(g<<3)>>2]=k>>>11;f[l+(b*1080|0)+28+(g<<3)+4>>2]=k&2047}g=g+1|0;if((g|0)==(a|0)){k=20;break}else c=c+2|0}}if((k|0)==20)a=(f[d>>2]|0)-(a<<1)|0;f[d>>2]=a;if((f[i>>2]|0)!=1){b=1;u=m;return b|0}c=l+(b*1080|0)+28|0;g=l+(b*1080|0)+32|0;a=1;do{d=(f[c>>2]|0)-(((a+-1|0)>>>0)/3|0)|0;f[l+(b*1080|0)+28+(a<<3)>>2]=(d|0)>0?d:0;f[l+(b*1080|0)+28+(a<<3)+4>>2]=f[g>>2];a=a+1|0}while((a|0)!=97);a=1;u=m;return a|0}function Fd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=u;u=u+64|0;o=q+48|0;k=q+40|0;j=q+16|0;i=q+8|0;n=q+52|0;h=a+8|0;if((f[h>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;l=f[g+5584>>2]|0;if((f[d>>2]|0)>>>0<5){Mb(e,1,11008,q)|0;d=0;u=q;return d|0}m=l+(b*1080|0)+4|0;zb(c,m,1);g=(f[m>>2]|0)+1|0;f[m>>2]=g;if(g>>>0>33){f[i>>2]=g;f[i+4>>2]=33;Mb(e,1,11043,i)|0;d=0;u=q;return d|0}if((f[a+168>>2]|0)>>>0>=g>>>0){f[j>>2]=b;Mb(e,1,11120,j)|0;f[h>>2]=f[h>>2]|32768;d=0;u=q;return d|0}i=l+(b*1080|0)+8|0;zb(c+1|0,i,1);f[i>>2]=(f[i>>2]|0)+2;h=l+(b*1080|0)+12|0;zb(c+2|0,h,1);j=(f[h>>2]|0)+2|0;f[h>>2]=j;i=f[i>>2]|0;if(j>>>0>10|i>>>0>10|(i+j|0)>>>0>12){Mb(e,1,11278,q+24|0)|0;d=0;u=q;return d|0}j=l+(b*1080|0)+16|0;zb(c+3|0,j,1);if(f[j>>2]&192|0){Mb(e,1,11346,q+32|0)|0;d=0;u=q;return d|0}zb(c+4|0,l+(b*1080|0)+20|0,1);g=(f[d>>2]|0)+-5|0;f[d>>2]=g;a=f[m>>2]|0;if(!(f[l+(b*1080|0)>>2]&1)){if(!a){d=1;u=q;return d|0}else g=0;do{f[l+(b*1080|0)+812+(g<<2)>>2]=15;f[l+(b*1080|0)+944+(g<<2)>>2]=15;g=g+1|0}while(g>>>0<(f[m>>2]|0)>>>0);g=1;u=q;return g|0}if(g>>>0>>0){Mb(e,1,11008,k)|0;d=0;u=q;return d|0}do if(!a)a=0;else{i=0;h=c+5|0;while(1){zb(h,n,1);h=h+1|0;g=f[n>>2]|0;if(i|0?g>>>0<16|(g&15|0)==0:0)break;f[l+(b*1080|0)+812+(i<<2)>>2]=g&15;f[l+(b*1080|0)+944+(i<<2)>>2]=g>>>4;i=i+1|0;a=f[m>>2]|0;if(i>>>0>=a>>>0){p=24;break}}if((p|0)==24){g=f[d>>2]|0;break}Mb(e,1,11413,o)|0;d=0;u=q;return d|0}while(0);f[d>>2]=g-a;d=1;u=q;return d|0}function Gd(a,c,e,g,h,i,j,k,l,m,n){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;Ca=u;u=u+256|0;Ba=Ca+200|0;Aa=Ca+192|0;ya=Ca+184|0;xa=Ca+176|0;ta=Ca+168|0;sa=Ca+160|0;ra=Ca+152|0;qa=Ca+144|0;pa=Ca+136|0;oa=Ca+128|0;ma=Ca+120|0;la=Ca+112|0;ka=Ca+104|0;ja=Ca+96|0;ia=Ca+88|0;ha=Ca+80|0;ga=Ca+72|0;fa=Ca+64|0;ea=Ca+56|0;da=Ca+48|0;wa=Ca+40|0;va=Ca+32|0;ua=Ca+24|0;na=Ca+16|0;ca=Ca+8|0;ba=Ca;C=Ca+240|0;D=Ca+236|0;E=Ca+232|0;F=Ca+228|0;H=Ca+224|0;J=Ca+220|0;K=Ca+216|0;L=Ca+212|0;M=Ca+208|0;f[L>>2]=65424;za=a+8|0;switch(f[za>>2]|0){case 256:{f[L>>2]=65497;o=a+76|0;break}case 8:{o=a+76|0;if(!(b[o>>0]&1)){N=a+164|0;O=a+200|0;P=a+72|0;Q=a+24|0;R=a+196|0;S=a+112|0;V=a+116|0;W=C+2|0;Y=C+6|0;Z=C+7|0;_=a+16|0;$=a+20|0;aa=a+64|0;p=65424;a:do{b:do if((p|0)!=65427){while(1){A=Ib(m)|0;if((A|0)==0&(I|0)==0){B=50;break}if((Eb(m,f[_>>2]|0,2,n)|0)!=2){B=8;break a}zb(f[_>>2]|0,M,2);if((f[M>>2]|0)>>>0<2){B=10;break a}if((f[L>>2]|0)==32896?(A=Ib(m)|0,(A|0)==0&(I|0)==0):0){B=50;break}r=f[za>>2]|0;p=f[M>>2]|0;if(r&16|0)f[Q>>2]=-2-p+(f[Q>>2]|0);q=p+-2|0;f[M>>2]=q;p=f[L>>2]|0;z=784;while(1){A=f[z>>2]|0;if((A|0)==0|(A|0)==(p|0))break;else z=z+12|0}if(!(f[z+4>>2]&r)){B=18;break a}if(q>>>0>(f[$>>2]|0)>>>0){A=Ib(m)|0;y=I;if((y|0)<0|(y|0)==0&A>>>0>>0){B=22;break a}p=Lc(f[_>>2]|0,f[M>>2]|0)|0;if(!p){B=24;break a}f[_>>2]=p;q=f[M>>2]|0;f[$>>2]=q}else p=f[_>>2]|0;p=Eb(m,p,q,n)|0;if((p|0)!=(f[M>>2]|0)){B=27;break a}q=f[z+8>>2]|0;if(!q){B=29;break a}if(!(Na[q&63](a,f[_>>2]|0,p,n)|0)){B=31;break a}v=f[O>>2]|0;t=f[R>>2]|0;w=f[z>>2]|0;x=Hb(m)|0;y=f[M>>2]|0;x=x-y+-4|0;y=y+4|0;t=t+40|0;s=f[t>>2]|0;p=f[s+(v*40|0)+20>>2]|0;q=s+(v*40|0)+28|0;r=f[q>>2]|0;if((p+1|0)>>>0>r>>>0){r=~~(+(r>>>0)+100.0)>>>0;f[q>>2]=r;q=Lc(f[s+(v*40|0)+24>>2]|0,r*24|0)|0;r=f[t>>2]|0;p=r+(v*40|0)+24|0;if(!q){B=39;break a}f[p>>2]=q;t=r;p=f[r+(v*40|0)+20>>2]|0}else{t=s;q=f[s+(v*40|0)+24>>2]|0}d[q+(p*24|0)>>1]=w;A=q+(p*24|0)+8|0;f[A>>2]=x;f[A+4>>2]=((x|0)<0)<<31>>31;f[q+(p*24|0)+16>>2]=y;f[t+(v*40|0)+20>>2]=p+1;if((w|0)==65424?(G=f[t+(v*40|0)+16>>2]|0,G|0):0){A=G+((f[t+(v*40|0)+12>>2]|0)*24|0)|0;f[A>>2]=x;f[A+4>>2]=0}do if((f[z>>2]|0)==65424){p=Hb(m)|0;p=-4-(f[M>>2]|0)+p|0;A=aa;z=f[A+4>>2]|0;if(!((z|0)<0|((z|0)==0?(f[A>>2]|0)>>>0

>>0:0)))break;A=aa;f[A>>2]=p;f[A+4>>2]=0}while(0);if(b[o>>0]&4)break;if((Eb(m,f[_>>2]|0,2,n)|0)!=2){B=48;break a}zb(f[_>>2]|0,L,2);if((f[L>>2]|0)==65427)break b}if((B|0)==50){B=0;f[za>>2]=64;break}A=Jb(m,f[Q>>2]|0,0,n)|0;if(!((I|0)==0?(A|0)==(f[Q>>2]|0):0)){B=45;break a}f[L>>2]=65427}while(0);A=Ib(m)|0;if((A|0)==0&(I|0)==0?(f[za>>2]|0)==64:0){B=114;break}p=b[o>>0]|0;if(!(p&4)){q=f[N>>2]|0;r=f[O>>2]|0;if(!(f[P>>2]|0)){p=f[Q>>2]|0;if(p>>>0>1){p=p+-2|0;B=57}}else{p=Ib(m)|0;p=Zi(p|0,I|0,-2,0)|0;B=57}if((B|0)==57){B=0;f[Q>>2]=p}A=q+(r*5640|0)+5592|0;z=q+(r*5640|0)+5596|0;do if(!p)x=1;else{y=Ib(m)|0;x=I;if((x|0)<0|(x|0)==0&y>>>0

>>0)Mb(n,2,12386,ia)|0;p=f[A>>2]|0;if(!p){y=Hc(f[Q>>2]|0)|0;f[A>>2]=y;if(!y){B=66;break a}else{x=0;break}}p=Lc(p,(f[Q>>2]|0)+(f[z>>2]|0)|0)|0;if(!p){B=64;break a}f[A>>2]=p;x=0}while(0);p=f[R>>2]|0;if(p|0){Da=Hb(m)|0;r=I;y=Zi(Da|0,r|0,-2,-1)|0;t=p+40|0;s=f[t>>2]|0;v=f[O>>2]|0;w=f[s+(v*40|0)+12>>2]|0;q=f[s+(v*40|0)+16>>2]|0;p=q+(w*24|0)+8|0;f[p>>2]=y;f[p+4>>2]=I;p=Zi(Da|0,r|0,f[Q>>2]|0,0)|0;w=q+(w*24|0)+16|0;f[w>>2]=p;f[w+4>>2]=I;w=(f[Q>>2]|0)+2|0;p=f[s+(v*40|0)+20>>2]|0;q=s+(v*40|0)+28|0;r=f[q>>2]|0;if((p+1|0)>>>0>r>>>0){r=~~(+(r>>>0)+100.0)>>>0;f[q>>2]=r;q=Lc(f[s+(v*40|0)+24>>2]|0,r*24|0)|0;r=f[t>>2]|0;p=r+(v*40|0)+24|0;if(!q){B=73;break}f[p>>2]=q;t=r;p=f[r+(v*40|0)+20>>2]|0}else{t=s;q=f[s+(v*40|0)+24>>2]|0}d[q+(p*24|0)>>1]=-109;y=dj(0,y|0,32)|0;Da=q+(p*24|0)+8|0;f[Da>>2]=y;f[Da+4>>2]=I;f[q+(p*24|0)+16>>2]=w;f[t+(v*40|0)+20>>2]=p+1}if(!x)p=Eb(m,(f[A>>2]|0)+(f[z>>2]|0)|0,f[Q>>2]|0,n)|0;else p=0;f[za>>2]=(p|0)!=(f[Q>>2]|0)?64:8;f[z>>2]=(f[z>>2]|0)+p;p=b[o>>0]|0;if((p&9)==1){b[o>>0]=p|8;q=f[O>>2]|0;do if((Lb(m)|0)!=0?(T=Hb(m)|0,U=I,!((T|0)==-1&(U|0)==-1)):0){while(1){if((Eb(m,C,2,n)|0)!=2){B=80;break}zb(C,D,2);if((f[D>>2]|0)!=65424){B=82;break}if((Eb(m,C,2,n)|0)!=2){B=84;break}zb(C,E,2);if((f[E>>2]|0)!=10){B=86;break}f[E>>2]=8;p=Eb(m,C,8,n)|0;if((p|0)!=(f[E>>2]|0)){B=88;break}if((p|0)!=8){B=90;break}zb(C,F,2);zb(W,H,4);zb(Y,J,1);zb(Z,K,1);if((f[F>>2]|0)==(q|0)){B=96;break}p=f[H>>2]|0;if(p>>>0<14){B=93;break}Da=p+-12|0;f[H>>2]=Da;Da=Jb(m,Da,0,n)|0;if(!((I|0)==0?(Da|0)==(f[H>>2]|0):0)){B=95;break}}if((B|0)==80){B=0;p=(Kb(m,T,U,n)|0)!=0;q=0;break}else if((B|0)==82){B=0;p=(Kb(m,T,U,n)|0)!=0;q=0;break}else if((B|0)==84){B=0;Mb(n,1,8150,la)|0;p=0;q=0;break}else if((B|0)==86){B=0;Mb(n,1,12203,ma)|0;p=0;q=0;break}else if((B|0)==88){B=0;Mb(n,1,8150,oa)|0;p=0;q=0;break}else if((B|0)==90){B=0;Mb(n,1,11669,pa)|0;p=0;q=0;break}else if((B|0)==93){B=0;p=(Kb(m,T,U,n)|0)!=0;q=0;break}else if((B|0)==95){B=0;p=(Kb(m,T,U,n)|0)!=0;q=0;break}else if((B|0)==96){B=0;q=(f[J>>2]|0)==(f[K>>2]|0)&1;p=(Kb(m,T,U,n)|0)!=0;break}}else{p=1;q=0}while(0);if(!p){B=98;break}if(q|0){q=X(f[V>>2]|0,f[S>>2]|0)|0;b[o>>0]=b[o>>0]&-18|16;if(q|0){r=f[N>>2]|0;p=0;do{s=r+(p*5640|0)+5588|0;t=f[s>>2]|0;if(t|0)f[s>>2]=t+1;p=p+1|0}while((p|0)!=(q|0))}Mb(n,2,12521,ra)|0}}if(!(b[o>>0]&1)){if((Eb(m,f[_>>2]|0,2,n)|0)!=2){B=108;break}zb(f[_>>2]|0,L,2)}}else{b[o>>0]=p&-6;f[za>>2]=8;if((Eb(m,f[_>>2]|0,2,n)|0)!=2){B=112;break}zb(f[_>>2]|0,L,2)}p=f[L>>2]|0}while((p|0)!=65497&(b[o>>0]&1)==0);switch(B|0){case 8:{Mb(n,1,8150,ba)|0;Da=0;u=Ca;return Da|0}case 10:{Mb(n,1,12203,ca)|0;Da=0;u=Ca;return Da|0}case 18:{Mb(n,1,8235,na)|0;Da=0;u=Ca;return Da|0}case 22:{Mb(n,1,12229,ua)|0;Da=0;u=Ca;return Da|0}case 24:{Mc(f[_>>2]|0);f[_>>2]=0;f[$>>2]=0;Mb(n,1,8333,va)|0;Da=0;u=Ca;return Da|0}case 27:{Mb(n,1,8150,wa)|0;Da=0;u=Ca;return Da|0}case 29:{Mb(n,1,12274,da)|0;Da=0;u=Ca;return Da|0}case 31:{f[ea>>2]=f[L>>2];Mb(n,1,12303,ea)|0;Da=0;u=Ca;return Da|0}case 39:{Mc(f[p>>2]|0);Da=f[t>>2]|0;f[Da+(v*40|0)+24>>2]=0;f[Da+(v*40|0)+28>>2]=0;f[Da+(v*40|0)+20>>2]=0;Mb(n,1,12350,fa)|0;Da=0;u=Ca;return Da|0}case 45:{Mb(n,1,8150,ga)|0;Da=0;u=Ca;return Da|0}case 48:{Mb(n,1,8150,ha)|0;Da=0;u=Ca;return Da|0}case 64:{Mc(f[A>>2]|0);f[A>>2]=0;B=66;break}case 73:{Mc(f[p>>2]|0);Da=f[t>>2]|0;f[Da+(v*40|0)+24>>2]=0;f[Da+(v*40|0)+28>>2]=0;f[Da+(v*40|0)+20>>2]=0;Mb(n,1,12350,ka)|0;Da=0;u=Ca;return Da|0}case 98:{Mb(n,1,12475,qa)|0;Da=0;u=Ca;return Da|0}case 108:{Mb(n,1,8150,sa)|0;Da=0;u=Ca;return Da|0}case 112:{Mb(n,1,8150,ta)|0;Da=0;u=Ca;return Da|0}case 114:{p=f[L>>2]|0;break}}if((B|0)==66){Mb(n,1,12441,ja)|0;Da=0;u=Ca;return Da|0}if((p|0)==65497?(f[za>>2]|0)!=256:0){f[a+200>>2]=0;f[za>>2]=256}}break}default:{Da=0;u=Ca;return Da|0}}if(!(b[o>>0]&1)){q=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;s=f[a+164>>2]|0;r=a+200|0;o=f[r>>2]|0;c:do if(o>>>0>>0){p=s+(o*5640|0)|0;while(1){if(f[p+5592>>2]|0)break c;o=o+1|0;f[r>>2]=o;if(o>>>0>>0)p=p+5640|0;else break}}while(0);if((o|0)==(q|0)){f[l>>2]=0;Da=1;u=Ca;return Da|0}}else{o=a+200|0;r=o;s=f[a+164>>2]|0;o=f[o>>2]|0}if(b[s+(o*5640|0)+5636>>0]&2){B=s+(o*5640|0)+5160|0;t=f[B>>2]|0;if(!t)p=0;else{v=f[s+(o*5640|0)+5164>>2]|0;q=0;p=0;do{p=(f[v+(q<<3)+4>>2]|0)+p|0;q=q+1|0}while((q|0)!=(t|0))}Da=Hc(p)|0;A=s+(o*5640|0)+5172|0;f[A>>2]=Da;if(!Da){Mb(n,1,9491,xa)|0;Mb(n,1,12562,ya)|0;Da=0;u=Ca;return Da|0}z=s+(o*5640|0)+5180|0;f[z>>2]=p;q=f[B>>2]|0;y=s+(o*5640|0)+5164|0;if(!q)p=f[y>>2]|0;else{p=f[y>>2]|0;x=0;v=0;w=p;while(1){t=f[w+(x<<3)>>2]|0;if(!t)t=w;else{hj((f[A>>2]|0)+v|0,t|0,f[w+(x<<3)+4>>2]|0)|0;t=f[y>>2]|0;v=(f[t+(x<<3)+4>>2]|0)+v|0;Mc(f[t+(x<<3)>>2]|0);t=f[y>>2]|0;f[t+(x<<3)>>2]=0;f[t+(x<<3)+4>>2]=0;q=f[B>>2]|0;p=t}x=x+1|0;if(x>>>0>=q>>>0)break;else w=t}}f[B>>2]=0;Mc(p);f[y>>2]=0;f[s+(o*5640|0)+5168>>2]=f[A>>2];f[s+(o*5640|0)+5176>>2]=f[z>>2]}o=a+204|0;if(!(Wf(f[o>>2]|0,f[r>>2]|0,n)|0)){Mb(n,1,8019,Aa)|0;Da=0;u=Ca;return Da|0}else{Da=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;f[Ba>>2]=(f[r>>2]|0)+1;f[Ba+4>>2]=Da;Mb(n,4,12588,Ba)|0;f[c>>2]=f[r>>2];f[l>>2]=1;Da=Xf(f[o>>2]|0)|0;f[e>>2]=Da;Da=f[f[(f[o>>2]|0)+20>>2]>>2]|0;f[g>>2]=f[Da>>2];f[h>>2]=f[Da+4>>2];f[i>>2]=f[Da+8>>2];f[j>>2]=f[Da+12>>2];f[k>>2]=f[Da+16>>2];f[za>>2]=f[za>>2]|128;Da=1;u=Ca;return Da|0}return 0}function Hd(a,c,d,e,g,h){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=u;u=u+48|0;p=s+28|0;q=s+32|0;r=a+8|0;if(!(f[r>>2]&128)){r=0;u=s;return r|0}n=a+200|0;if((f[n>>2]|0)!=(c|0)){r=0;u=s;return r|0}i=f[a+164>>2]|0;j=i+(c*5640|0)|0;o=i+(c*5640|0)+5592|0;k=f[o>>2]|0;if(!k){Rc(j);r=0;u=s;return r|0}l=a+204|0;m=i+(c*5640|0)+5596|0;if(!(Zf(f[l>>2]|0,k,f[m>>2]|0,c,f[a+196>>2]|0,h)|0)){Rc(j);f[r>>2]=f[r>>2]|32768;Mb(h,1,12627,s)|0;r=0;u=s;return r|0}if(!(_f(f[l>>2]|0,d,e)|0)){r=0;u=s;return r|0}i=f[o>>2]|0;if(i|0){Mc(i);f[o>>2]=0;f[m>>2]=0}a=a+76|0;b[a>>0]=b[a>>0]&-2;f[r>>2]=f[r>>2]&-129;a=Ib(g)|0;o=f[r>>2]|0;if((o|0)==256|(a|0)==0&(I|0)==0&(o|0)==64){r=1;u=s;return r|0}if((Eb(g,q,2,h)|0)!=2){Mb(h,2,12646,s+8|0)|0;r=1;u=s;return r|0}zb(q,p,2);switch(f[p>>2]|0){case 65497:{f[n>>2]=0;f[r>>2]=256;r=1;u=s;return r|0}case 65424:{r=1;u=s;return r|0}default:if((Ib(g)|0)==0&(I|0)==0){f[r>>2]=64;Mb(h,2,12690,s+16|0)|0;r=1;u=s;return r|0}else{Mb(h,1,12720,s+24|0)|0;r=0;u=s;return r|0}}return 0}function Id(a,c,d,e,g,h,i){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0;z=u;u=u+112|0;y=z+96|0;x=z+88|0;w=z+80|0;v=z+72|0;t=z+64|0;s=z+56|0;q=z+48|0;n=z+40|0;m=z+32|0;l=z+24|0;k=z+16|0;p=f[a+80>>2]|0;if((f[a+8>>2]|0)!=8){Mb(i,1,12752,z)|0;y=0;u=z;return y|0}if(!(e|d|g|h)){Mb(i,4,12831,z+8|0)|0;f[a+28>>2]=0;f[a+32>>2]=0;f[a+36>>2]=f[a+112>>2];f[a+40>>2]=f[a+116>>2];y=1;u=z;return y|0}r=p+8|0;j=f[r>>2]|0;if(j>>>0>>0){f[k>>2]=d;f[k+4>>2]=j;Mb(i,1,12900,k)|0;y=0;u=z;return y|0}j=f[p>>2]|0;if(j>>>0>d>>>0){f[l>>2]=d;f[l+4>>2]=j;Mb(i,2,12987,l)|0;f[a+28>>2]=0;d=f[p>>2]|0}else f[a+28>>2]=((d-(f[a+92>>2]|0)|0)>>>0)/((f[a+100>>2]|0)>>>0)|0;f[c>>2]=d;o=p+12|0;d=f[o>>2]|0;if(d>>>0>>0){f[m>>2]=e;f[m+4>>2]=d;Mb(i,1,13075,m)|0;y=0;u=z;return y|0}k=p+4|0;d=f[k>>2]|0;if(d>>>0>e>>>0){f[n>>2]=e;f[n+4>>2]=d;Mb(i,2,13160,n)|0;f[a+32>>2]=0;d=f[k>>2]|0}else{f[a+32>>2]=((e-(f[a+96>>2]|0)|0)>>>0)/((f[a+104>>2]|0)>>>0)|0;d=e}l=c+4|0;f[l>>2]=d;d=f[p>>2]|0;if(d>>>0>g>>>0){f[q>>2]=g;f[q+4>>2]=d;Mb(i,1,13246,q)|0;y=0;u=z;return y|0}d=f[r>>2]|0;if(d>>>0>>0){f[s>>2]=g;f[s+4>>2]=d;Mb(i,2,13335,s)|0;f[a+36>>2]=f[a+112>>2];g=f[r>>2]|0}else{s=f[a+100>>2]|0;f[a+36>>2]=(g+-1-(f[a+92>>2]|0)+s|0)/(s|0)|0}j=c+8|0;f[j>>2]=g;g=f[k>>2]|0;if(g>>>0>h>>>0){f[t>>2]=h;f[t+4>>2]=g;Mb(i,1,13423,t)|0;y=0;u=z;return y|0}g=f[o>>2]|0;if(g>>>0>>0){f[v>>2]=h;f[v+4>>2]=g;Mb(i,2,13513,v)|0;f[a+40>>2]=f[a+116>>2];h=f[o>>2]|0}else{v=f[a+104>>2]|0;f[a+40>>2]=(h+-1-(f[a+96>>2]|0)+v|0)/(v|0)|0}v=c+12|0;f[v>>2]=h;t=a+76|0;b[t>>0]=b[t>>0]|2;t=f[c+16>>2]|0;a=f[c>>2]|0;a:do if(t){d=f[l>>2]|0;s=d+-1|0;g=f[j>>2]|0;q=g+-1|0;r=a+-1|0;p=0;o=f[c+24>>2]|0;while(1){c=f[o>>2]|0;n=(r+c|0)/(c|0)|0;f[o+16>>2]=n;j=f[o+4>>2]|0;k=(s+j|0)/(j|0)|0;f[o+20>>2]=k;c=(q+c|0)/(c|0)|0;l=f[o+40>>2]|0;m=fj(1,0,l|0)|0;e=I;c=Zi(c|0,((c|0)<0)<<31>>31|0,-1,-1)|0;c=Zi(c|0,I|0,m|0,e|0)|0;c=dj(c|0,I|0,l|0)|0;n=Zi(n|0,((n|0)<0)<<31>>31|0,-1,-1)|0;n=Zi(n|0,I|0,m|0,e|0)|0;n=dj(n|0,I|0,l|0)|0;n=c-n|0;if((n|0)<0){j=29;break}h=f[v>>2]|0;c=(j+-1+h|0)/(j|0)|0;f[o+8>>2]=n;c=Zi(c|0,((c|0)<0)<<31>>31|0,-1,-1)|0;c=Zi(c|0,I|0,m|0,e|0)|0;c=dj(c|0,I|0,l|0)|0;k=Zi(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;k=Zi(k|0,I|0,m|0,e|0)|0;k=dj(k|0,I|0,l|0)|0;k=c-k|0;if((k|0)<0){j=31;break}f[o+12>>2]=k;j=p+1|0;if(j>>>0>>0){p=j;o=o+52|0}else break a}if((j|0)==29){f[w>>2]=p;f[w+4>>2]=n;Mb(i,1,13602,w)|0;y=0;u=z;return y|0}else if((j|0)==31){f[x>>2]=p;f[x+4>>2]=k;Mb(i,1,13671,x)|0;y=0;u=z;return y|0}}else{d=f[l>>2]|0;g=f[j>>2]|0;h=f[v>>2]|0}while(0);f[y>>2]=a;f[y+4>>2]=d;f[y+8>>2]=g;f[y+12>>2]=h;Mb(i,4,13740,y)|0;y=1;u=z;return y|0}function Jd(){var a=0,c=0,d=0;a=Ic(1,208)|0;if(!a){c=0;return c|0}f[a>>2]=1;c=a+184|0;b[c>>0]=b[c>>0]|2;c=Ic(1,5640)|0;f[a+12>>2]=c;if(!c){Qc(a);c=0;return c|0}c=Ic(1,1e3)|0;f[a+16>>2]=c;if(!c){Qc(a);c=0;return c|0}f[a+20>>2]=1e3;f[a+60>>2]=-1;c=a+64|0;f[c>>2]=0;f[c+4>>2]=0;c=Ic(1,48)|0;do if(c|0){f[c+32>>2]=100;f[c+24>>2]=0;d=Ic(100,24)|0;f[c+28>>2]=d;if(!d){Mc(c);break}f[c+40>>2]=0;f[a+196>>2]=c;d=ig()|0;f[a+192>>2]=d;if(!d){Qc(a);d=0;return d|0}d=ig()|0;f[a+188>>2]=d;if(d|0){d=a;return d|0}Qc(a);d=0;return d|0}while(0);f[a+196>>2]=0;Qc(a);d=0;return d|0}function Kd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;x=u;u=u+128|0;w=x+104|0;v=x+72|0;t=x+64|0;q=x+40|0;o=x+24|0;l=x+16|0;k=x+8|0;i=x;if(b&384|0){Mh(13778,11,1,c)|0;u=x;return}if(b&1|0?(h=f[a+80>>2]|0,h|0):0)Ld(h,0,c);if(b&2|0?(e=a+80|0,f[e>>2]|0):0){Mh(13790,36,1,c)|0;h=f[a+96>>2]|0;f[i>>2]=f[a+92>>2];f[i+4>>2]=h;ki(c,13827,i)|0;i=f[a+104>>2]|0;f[k>>2]=f[a+100>>2];f[k+4>>2]=i;ki(c,13845,k)|0;k=f[a+116>>2]|0;f[l>>2]=f[a+112>>2];f[l+4>>2]=k;ki(c,13863,l)|0;Md(f[a+12>>2]|0,f[(f[e>>2]|0)+16>>2]|0,c);Mh(13879,2,1,c)|0}if((b&8|0?(m=X(f[a+112>>2]|0,f[a+116>>2]|0)|0,n=a+80|0,g=f[n>>2]|0,!((g|0)==0|(m|0)==0)):0)?(d=f[a+164>>2]|0,Md(d,f[g+16>>2]|0,c),(m|0)!=1):0){e=1;do{d=d+5640|0;Md(d,f[(f[n>>2]|0)+16>>2]|0,c);e=e+1|0}while((e|0)!=(m|0))}if(!(b&16)){u=x;return}h=f[a+196>>2]|0;Mh(13882,37,1,c)|0;b=h;m=f[b+4>>2]|0;e=h+8|0;n=f[e>>2]|0;e=f[e+4>>2]|0;g=o;f[g>>2]=f[b>>2];f[g+4>>2]=m;g=o+8|0;f[g>>2]=n;f[g+4>>2]=e;ki(c,13920,o)|0;Mh(13987,17,1,c)|0;g=h+28|0;e=f[g>>2]|0;a:do if(e|0?(p=h+24|0,f[p>>2]|0):0){d=0;while(1){m=e+(d*24|0)+8|0;b=f[m>>2]|0;m=f[m+4>>2]|0;o=f[e+(d*24|0)+16>>2]|0;f[q>>2]=j[e+(d*24|0)>>1];n=q+8|0;f[n>>2]=b;f[n+4>>2]=m;f[q+16>>2]=o;ki(c,14005,q)|0;d=d+1|0;if(d>>>0>=(f[p>>2]|0)>>>0)break a;e=f[g>>2]|0}}while(0);Mh(14036,4,1,c)|0;k=h+40|0;g=f[k>>2]|0;if(g|0?(s=h+36|0,r=f[s>>2]|0,r|0):0){d=0;e=0;do{d=(f[g+(e*40|0)+4>>2]|0)+d|0;e=e+1|0}while((e|0)!=(r|0));if(d|0){Mh(14041,16,1,c)|0;if(f[s>>2]|0){i=0;d=f[k>>2]|0;do{h=f[d+(i*40|0)+4>>2]|0;f[t>>2]=i;f[t+4>>2]=h;ki(c,14058,t)|0;d=f[k>>2]|0;g=f[d+(i*40|0)+16>>2]|0;b:do if((h|0)!=0&(g|0)!=0){e=0;d=g;while(1){n=d+(e*24|0)|0;m=f[n>>2]|0;n=f[n+4>>2]|0;p=d+(e*24|0)+8|0;o=f[p>>2]|0;p=f[p+4>>2]|0;r=d+(e*24|0)+16|0;q=f[r>>2]|0;r=f[r+4>>2]|0;f[v>>2]=e;d=v+8|0;f[d>>2]=m;f[d+4>>2]=n;d=v+16|0;f[d>>2]=o;f[d+4>>2]=p;d=v+24|0;f[d>>2]=q;f[d+4>>2]=r;ki(c,14094,v)|0;e=e+1|0;d=f[k>>2]|0;if((e|0)==(h|0))break b;d=f[d+(i*40|0)+16>>2]|0}}while(0);g=f[d+(i*40|0)+24>>2]|0;c:do if((g|0)!=0?(f[d+(i*40|0)+20>>2]|0)!=0:0){e=0;d=g;while(1){q=d+(e*24|0)+8|0;p=f[q>>2]|0;q=f[q+4>>2]|0;r=f[d+(e*24|0)+16>>2]|0;f[w>>2]=j[d+(e*24|0)>>1];d=w+8|0;f[d>>2]=p;f[d+4>>2]=q;f[w+16>>2]=r;ki(c,14005,w)|0;e=e+1|0;d=f[k>>2]|0;if(e>>>0>=(f[d+(i*40|0)+20>>2]|0)>>>0)break c;d=f[d+(i*40|0)+24>>2]|0}}while(0);i=i+1|0}while(i>>>0<(f[s>>2]|0)>>>0)}Mh(14036,4,1,c)|0}}Mh(13879,2,1,c)|0;u=x;return}function Ld(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=u;u=u+64|0;l=m+48|0;k=m+40|0;i=m+32|0;h=m+16|0;g=m;j=m+52|0;if(!c){Mh(14492,13,1,d)|0;b[j>>0]=9;e=1}else{Mh(14455,36,1,f[665]|0)|0;e=0}b[j+e>>0]=0;n=f[a>>2]|0;e=f[a+4>>2]|0;f[g>>2]=j;f[g+4>>2]=n;f[g+8>>2]=e;ki(d,14506,g)|0;e=f[a+8>>2]|0;g=f[a+12>>2]|0;f[h>>2]=j;f[h+4>>2]=e;f[h+8>>2]=g;ki(d,14523,h)|0;h=a+16|0;g=f[h>>2]|0;f[i>>2]=j;f[i+4>>2]=g;ki(d,14540,i)|0;g=a+24|0;if(!(f[g>>2]|0)){Mh(13879,2,1,d)|0;u=m;return}if(!(f[h>>2]|0)){Mh(13879,2,1,d)|0;u=m;return}else e=0;do{f[k>>2]=j;f[k+4>>2]=e;ki(d,14556,k)|0;Nd((f[g>>2]|0)+(e*52|0)|0,c,d);f[l>>2]=j;ki(d,14576,l)|0;e=e+1|0}while(e>>>0<(f[h>>2]|0)>>>0);Mh(13879,2,1,d)|0;u=m;return}function Md(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;w=u;u=u+128|0;t=w+120|0;s=w+112|0;r=w+104|0;q=w+96|0;p=w+88|0;o=w+80|0;n=w+72|0;m=w+64|0;l=w+56|0;k=w+48|0;j=w+40|0;i=w+32|0;h=w+24|0;g=w+16|0;e=w+8|0;d=w;if(!a){u=w;return}Mh(14160,17,1,c)|0;f[d>>2]=f[a>>2];ki(c,14178,d)|0;f[e>>2]=f[a+4>>2];ki(c,14191,e)|0;f[g>>2]=f[a+8>>2];ki(c,14203,g)|0;f[h>>2]=f[a+16>>2];ki(c,14220,h)|0;if((b|0)>0){g=a+5584|0;e=0;do{h=f[g>>2]|0;f[i>>2]=e;ki(c,14231,i)|0;f[j>>2]=f[h+(e*1080|0)>>2];ki(c,14245,j)|0;d=h+(e*1080|0)+4|0;f[k>>2]=f[d>>2];ki(c,14259,k)|0;f[l>>2]=f[h+(e*1080|0)+8>>2];ki(c,14282,l)|0;f[m>>2]=f[h+(e*1080|0)+12>>2];ki(c,14298,m)|0;f[n>>2]=f[h+(e*1080|0)+16>>2];ki(c,14314,n)|0;f[o>>2]=f[h+(e*1080|0)+20>>2];ki(c,14331,o)|0;Mh(14346,23,1,c)|0;if(f[d>>2]|0){a=0;do{x=f[h+(e*1080|0)+944+(a<<2)>>2]|0;f[p>>2]=f[h+(e*1080|0)+812+(a<<2)>>2];f[p+4>>2]=x;ki(c,14370,p)|0;a=a+1|0}while(a>>>0<(f[d>>2]|0)>>>0)}Ri(10,c)|0;x=h+(e*1080|0)+24|0;f[q>>2]=f[x>>2];ki(c,14379,q)|0;f[r>>2]=f[h+(e*1080|0)+804>>2];ki(c,14394,r)|0;Mh(14411,20,1,c)|0;if((f[x>>2]|0)!=1){a=(f[d>>2]|0)*3|0;if((a|0)>2){d=a+-2|0;v=8}}else{d=1;v=8}if((v|0)==8){v=0;a=0;do{x=f[h+(e*1080|0)+28+(a<<3)>>2]|0;f[s>>2]=f[h+(e*1080|0)+28+(a<<3)+4>>2];f[s+4>>2]=x;ki(c,14370,s)|0;a=a+1|0}while((a|0)!=(d|0))}Ri(10,c)|0;f[t>>2]=f[h+(e*1080|0)+808>>2];ki(c,14432,t)|0;Mh(14449,5,1,c)|0;e=e+1|0}while((e|0)!=(b|0))}Mh(14036,4,1,c)|0;u=w;return}function Nd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;k=u;u=u+48|0;j=k+24|0;i=k+16|0;h=k;g=k+32|0;e=(c|0)!=0;if(e){Mh(14581,41,1,f[665]|0)|0;c=0}else{b[g>>0]=9;b[g+1>>0]=9;c=2}b[g+c>>0]=0;l=f[a>>2]|0;c=f[a+4>>2]|0;f[h>>2]=g;f[h+4>>2]=l;f[h+8>>2]=c;ki(d,14623,h)|0;h=f[a+24>>2]|0;f[i>>2]=g;f[i+4>>2]=h;ki(d,14640,i)|0;i=f[a+32>>2]|0;f[j>>2]=g;f[j+4>>2]=i;ki(d,14652,j)|0;if(!e){u=k;return}Mh(13879,2,1,d)|0;u=k;return}function Od(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;l=u;u=u+16|0;d=l;c=a+80|0;j=f[(f[c>>2]|0)+16>>2]|0;b=Ic(1,56)|0;f[d>>2]=b;if(!b){k=0;u=l;return k|0}c=f[(f[c>>2]|0)+16>>2]|0;f[b+24>>2]=c;f[b>>2]=f[a+92>>2];f[b+4>>2]=f[a+96>>2];f[b+8>>2]=f[a+100>>2];f[b+12>>2]=f[a+104>>2];f[b+16>>2]=f[a+112>>2];f[b+20>>2]=f[a+116>>2];f[b+52>>2]=0;a=f[a+12>>2]|0;f[b+32>>2]=f[a>>2];f[b+36>>2]=f[a+4>>2];f[b+40>>2]=f[a+8>>2];f[b+44>>2]=f[a+16>>2];c=Ic(c,1080)|0;i=b+48|0;f[i>>2]=c;if(!c){$b(d);k=0;u=l;return k|0}if(!j){k=b;u=l;return k|0}h=a+5584|0;a=0;while(1){g=f[h>>2]|0;f[c+(a*1080|0)+4>>2]=f[g+(a*1080|0)>>2];d=g+(a*1080|0)+4|0;e=f[d>>2]|0;f[c+(a*1080|0)+8>>2]=e;f[c+(a*1080|0)+12>>2]=f[g+(a*1080|0)+8>>2];f[c+(a*1080|0)+16>>2]=f[g+(a*1080|0)+12>>2];f[c+(a*1080|0)+20>>2]=f[g+(a*1080|0)+16>>2];f[c+(a*1080|0)+24>>2]=f[g+(a*1080|0)+20>>2];if(e>>>0<33){hj(c+(a*1080|0)+948|0,g+(a*1080|0)+944|0,e|0)|0;hj(c+(a*1080|0)+816|0,g+(a*1080|0)+812|0,f[d>>2]|0)|0}e=f[g+(a*1080|0)+24>>2]|0;f[c+(a*1080|0)+28>>2]=e;f[c+(a*1080|0)+808>>2]=f[g+(a*1080|0)+804>>2];if((e|0)!=1){d=(f[d>>2]|0)*3|0;if((d+-3|0)>>>0<96){e=d+-2|0;k=10}}else{e=1;k=10}if((k|0)==10){k=0;d=0;do{f[c+(a*1080|0)+32+(d<<2)>>2]=f[g+(a*1080|0)+28+(d<<3)+4>>2];f[c+(a*1080|0)+420+(d<<2)>>2]=f[g+(a*1080|0)+28+(d<<3)>>2];d=d+1|0}while((d|0)!=(e|0))}f[c+(a*1080|0)+812>>2]=f[g+(a*1080|0)+808>>2];a=a+1|0;if((a|0)==(j|0))break;c=f[i>>2]|0}u=l;return b|0}function Pd(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0;b=Ic(1,48)|0;if(!b){k=0;return k|0}h=a+196|0;c=f[h>>2]|0;j=c;k=f[j+4>>2]|0;a=b;f[a>>2]=f[j>>2];f[a+4>>2]=k;a=c+8|0;k=f[a+4>>2]|0;j=b+8|0;f[j>>2]=f[a>>2];f[j+4>>2]=k;j=c+16|0;k=f[j+4>>2]|0;a=b+16|0;f[a>>2]=f[j>>2];f[a+4>>2]=k;c=f[c+24>>2]|0;a=b+24|0;f[a>>2]=c;c=Hc(c*24|0)|0;k=b+28|0;f[k>>2]=c;if(!c){Mc(b);k=0;return k|0}d=f[(f[h>>2]|0)+28>>2]|0;if(!d){Mc(c);f[k>>2]=0}else hj(c|0,d|0,(f[a>>2]|0)*24|0)|0;a=f[(f[h>>2]|0)+36>>2]|0;g=b+36|0;f[g>>2]=a;a=Ic(a,40)|0;j=b+40|0;f[j>>2]=a;if(!a){Mc(f[k>>2]|0);Mc(b);k=0;return k|0}c=f[(f[h>>2]|0)+40>>2]|0;if(!c){Mc(a);f[j>>2]=0;k=b;return k|0}if(!(f[g>>2]|0)){k=b;return k|0}c=f[c+20>>2]|0;f[a+20>>2]=c;c=Hc(c*24|0)|0;a=f[j>>2]|0;f[a+24>>2]=c;a:do if(!c)d=0;else{d=0;while(1){e=f[(f[(f[h>>2]|0)+40>>2]|0)+(d*40|0)+24>>2]|0;if(!e){Mc(c);a=f[j>>2]|0;f[a+(d*40|0)+24>>2]=0}else{hj(c|0,e|0,(f[a+(d*40|0)+20>>2]|0)*24|0)|0;a=f[j>>2]|0}c=f[(f[(f[h>>2]|0)+40>>2]|0)+(d*40|0)+4>>2]|0;f[a+(d*40|0)+4>>2]=c;c=Hc(c*24|0)|0;a=f[j>>2]|0;f[a+(d*40|0)+16>>2]=c;if(!c)break;e=f[(f[(f[h>>2]|0)+40>>2]|0)+(d*40|0)+16>>2]|0;if(!e){Mc(c);a=f[j>>2]|0;f[a+(d*40|0)+16>>2]=0}else{hj(c|0,e|0,(f[a+(d*40|0)+4>>2]|0)*24|0)|0;a=f[j>>2]|0}f[a+(d*40|0)+32>>2]=0;f[a+(d*40|0)+36>>2]=0;d=d+1|0;if(d>>>0>=(f[g>>2]|0)>>>0){i=28;break}c=f[(f[(f[h>>2]|0)+40>>2]|0)+(d*40|0)+20>>2]|0;f[a+(d*40|0)+20>>2]=c;c=Hc(c*24|0)|0;a=f[j>>2]|0;f[a+(d*40|0)+24>>2]=c;if(!c)break a}if((i|0)==28)return b|0;if(d){c=0;do{Mc(f[a+(c*40|0)+24>>2]|0);Mc(f[(f[j>>2]|0)+(c*40|0)+16>>2]|0);c=c+1|0;a=f[j>>2]|0}while((c|0)!=(d|0))}Mc(a);Mc(f[k>>2]|0);Mc(b);k=0;return k|0}while(0);if(d){c=0;do{Mc(f[a+(c*40|0)+24>>2]|0);c=c+1|0;a=f[j>>2]|0}while((c|0)!=(d|0))}Mc(a);Mc(f[k>>2]|0);Mc(b);k=0;return k|0}function Qd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;if(!c){c=0;return c|0}e=Sb()|0;k=a+84|0;f[k>>2]=e;if(!e){c=0;return c|0}Ub(c,e);i=a+188|0;kg(f[i>>2]|0,28,d)|0;i=f[i>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](a,b,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){c=a+80|0;Qb(f[c>>2]|0);f[c>>2]=0;c=0;return c|0}}else ng(i);i=f[c+16>>2]|0;if(!i){c=1;return c|0}h=f[(f[k>>2]|0)+24>>2]|0;g=f[c+24>>2]|0;e=0;do{f[g+(e*52|0)+36>>2]=f[h+(e*52|0)+36>>2];c=h+(e*52|0)+44|0;f[g+(e*52|0)+44>>2]=f[c>>2];f[c>>2]=0;e=e+1|0}while(e>>>0>>0);e=1;return e|0}function Rd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=u;u=u+80|0;v=C+32|0;w=C+24|0;B=C+16|0;A=C+8|0;o=C+64|0;z=C+60|0;p=C+56|0;q=C+52|0;r=C+48|0;s=C+44|0;t=C+40|0;k=C+36|0;f[o>>2]=1;d=Hc(1e3)|0;if(!d){Mb(c,1,14664,C)|0;B=0;u=C;return B|0}x=a+116|0;y=a+112|0;l=a+204|0;m=a+84|0;n=a+8|0;j=0;e=1e3;while(1){if(!(Gd(a,z,p,q,r,s,t,k,o,b,c)|0)){e=5;break}if(!(f[o>>2]|0)){e=17;break}i=f[p>>2]|0;if(i>>>0>e>>>0){e=Lc(d,i)|0;if(!e){e=9;break}else{d=e;h=i}}else h=e;g=f[z>>2]|0;if(!(Hd(a,g,d,i,b,c)|0)){e=11;break}e=g+1|0;i=X(f[y>>2]|0,f[x>>2]|0)|0;f[w>>2]=e;f[w+4>>2]=i;Mb(c,4,14768,w)|0;i=f[l>>2]|0;if(!(Sd(f[(f[f[i+20>>2]>>2]|0)+20>>2]|0,f[i+24>>2]|0,d,f[(f[m>>2]|0)+24>>2]|0)|0)){e=13;break}f[v>>2]=e;Mb(c,4,14798,v)|0;i=Ib(b)|0;if((i|0)==0&(I|0)==0?(f[n>>2]|0)==64:0){e=17;break}j=j+1|0;if((j|0)==(X(f[y>>2]|0,f[x>>2]|0)|0)){e=17;break}else e=h}if((e|0)==5){Mc(d);B=0;u=C;return B|0}else if((e|0)==9){Mc(d);B=X(f[y>>2]|0,f[x>>2]|0)|0;f[A>>2]=(f[z>>2]|0)+1;f[A+4>>2]=B;Mb(c,1,14699,A)|0;B=0;u=C;return B|0}else if((e|0)==11){Mc(d);A=X(f[y>>2]|0,f[x>>2]|0)|0;f[B>>2]=g+1;f[B+4>>2]=A;Mb(c,1,14739,B)|0;B=0;u=C;return B|0}else if((e|0)==13){Mc(d);B=0;u=C;return B|0}else if((e|0)==17){Mc(d);B=1;u=C;return B|0}return 0}function Sd(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=c+16|0;if(!(f[E>>2]|0)){E=1;return E|0}D=0;C=f[c+24>>2]|0;while(1){l=g+44|0;c=f[l>>2]|0;m=g+8|0;if(!c){c=f[m>>2]|0;k=g+12|0;i=f[k>>2]|0;if(!i){e=0;a=66;break}if(c>>>0>(4294967295/(i>>>0)|0)>>>0){e=0;a=66;break}c=Ic(X(i,c)|0,4)|0;f[l>>2]=c;if(!c){e=0;a=66;break}}else k=g+12|0;o=C+36|0;f[g+36>>2]=f[o>>2];v=f[C+24>>2]|0;t=f[a+24>>2]|0;o=f[o>>2]|0;v=(v>>>3)+((v&7|0)!=0&1)|0;w=(v|0)==3;n=f[t+(o*136|0)+8>>2]|0;i=f[t+(o*136|0)>>2]|0;y=n-i|0;s=f[t+(o*136|0)+12>>2]|0;o=f[t+(o*136|0)+4>>2]|0;t=s-o|0;l=f[g+16>>2]|0;p=f[g+40>>2]|0;q=fj(1,0,p|0)|0;B=I;l=Zi(l|0,0,-1,-1)|0;l=Zi(l|0,I|0,q|0,B|0)|0;l=ej(l|0,I|0,p|0)|0;A=Zi(f[g+20>>2]|0,0,-1,-1)|0;B=Zi(A|0,I|0,q|0,B|0)|0;p=ej(B|0,I|0,p|0)|0;B=f[m>>2]|0;m=B+l|0;k=f[k>>2]|0;q=k+p|0;do if(i>>>0<=l>>>0){i=l-i|0;if(n>>>0>m>>>0){A=B;x=i;r=0;u=n-m|0;break}else{A=y-i|0;x=i;r=0;u=0;break}}else{z=n>>>0>m>>>0;u=m-i|0;A=z?u:y;x=0;r=i-l|0;u=z?y-u|0:0}while(0);do if(o>>>0<=p>>>0){i=p-o|0;if(s>>>0>q>>>0){z=k;n=i;l=0;i=s-q|0;break}else{z=t-i|0;n=i;l=0;i=0;break}}else{s=s>>>0>q>>>0;i=q-o|0;z=s?i:t;n=0;l=o-p|0;i=s?t-i|0:0}while(0);if((x|u|A|i|n|z|0)<0){e=0;a=66;break}m=X(n,y)|0;k=m+x|0;p=x+u|0;q=(X(i,y)|0)-x|0;l=c+((X(B,l)|0)+r<<2)|0;switch((w?4:v)&1073741823|0){case 1:{i=e+k|0;c=(z|0)!=0;do if(!(f[C+32>>2]|0))if(c){if(!A){e=e+(u+m+(X(p,z+-1|0)|0)+(x<<1))|0;break}o=A+u+m+(X(A+x+u|0,z+-1|0)|0)+(x<<1)|0;n=0;c=i;while(1){m=c+A|0;k=0;i=l;while(1){f[i>>2]=h[c>>0];k=k+1|0;if((k|0)==(A|0))break;else{c=c+1|0;i=i+4|0}}n=n+1|0;if((n|0)==(z|0))break;else{c=m+p|0;l=l+(B<<2)|0}}e=e+o|0}else e=i;else if(c){if(!A){e=e+(u+m+(X(p,z+-1|0)|0)+(x<<1))|0;break}o=A+u+m+(X(A+x+u|0,z+-1|0)|0)+(x<<1)|0;c=i;k=0;while(1){n=c+A|0;m=0;i=l;while(1){f[i>>2]=b[c>>0];m=m+1|0;if((m|0)==(A|0))break;else{c=c+1|0;i=i+4|0}}k=k+1|0;if((k|0)==(z|0))break;else{c=n+p|0;l=l+(B<<2)|0}}e=e+o|0}else e=i;while(0);e=e+q|0;break}case 2:{c=e+(k<<1)|0;i=(z|0)!=0;do if(!(f[C+32>>2]|0))if(i){if(!A){e=e+((X(n<<1,y)|0)+(X(p<<1,z+-1|0)|0)+(x<<2)+(u<<1))|0;break}e=e+((X(A+p<<1,z+-1|0)|0)+(x<<2)+(A+u+m<<1))|0;n=0;while(1){m=c+(A<<1)|0;k=0;i=l;while(1){f[i>>2]=j[c>>1];k=k+1|0;if((k|0)==(A|0))break;else{c=c+2|0;i=i+4|0}}n=n+1|0;if((n|0)==(z|0))break;else{c=m+(p<<1)|0;l=l+(B<<2)|0}}}else e=c;else if(i){if(!A){e=e+((X(n<<1,y)|0)+(X(p<<1,z+-1|0)|0)+(x<<2)+(u<<1))|0;break}e=e+((X(A+p<<1,z+-1|0)|0)+(x<<2)+(A+u+m<<1))|0;n=0;while(1){m=c+(A<<1)|0;i=0;k=l;while(1){f[k>>2]=d[c>>1];i=i+1|0;if((i|0)==(A|0))break;else{c=c+2|0;k=k+4|0}}n=n+1|0;if((n|0)==(z|0))break;else{c=m+(p<<1)|0;l=l+(B<<2)|0}}}else e=c;while(0);e=e+(q<<1)|0;break}case 4:{c=e+(k<<2)|0;do if(!z)e=c;else{if(!A){e=e+((X(n<<2,y)|0)+(X(p<<2,z+-1|0)|0)+(x<<3)+(u<<2))|0;break}e=e+((X(A+p<<2,z+-1|0)|0)+(x<<3)+(A+u+m<<2))|0;n=0;while(1){m=c+(A<<2)|0;i=0;k=l;while(1){f[k>>2]=f[c>>2];i=i+1|0;if((i|0)==(A|0))break;else{c=c+4|0;k=k+4|0}}n=n+1|0;if((n|0)==(z|0))break;else{c=m+(p<<2)|0;l=l+(B<<2)|0}}}while(0);e=e+(q<<2)|0;break}default:{}}D=D+1|0;if(D>>>0>=(f[E>>2]|0)>>>0){e=1;a=66;break}else{a=a+52|0;g=g+52|0;C=C+52|0}}if((a|0)==66)return e|0;return 0}function Td(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0;s=u;u=u+16|0;i=s+8|0;if(!c){Mb(d,1,14842,s)|0;r=0;u=s;return r|0}h=f[a+112>>2]|0;g=X(f[a+116>>2]|0,h)|0;if(g>>>0<=e>>>0){f[i>>2]=e;f[i+4>>2]=g+-1;Mb(d,1,14880,i)|0;r=0;u=s;return r|0}r=(e>>>0)%(h>>>0)|0;q=(e>>>0)/(h>>>0)|0;h=a+100|0;g=X(f[h>>2]|0,r)|0;i=a+92|0;g=g+(f[i>>2]|0)|0;f[c>>2]=g;p=a+80|0;j=f[f[p>>2]>>2]|0;g=g>>>0>>0?j:g;f[c>>2]=g;r=X(f[h>>2]|0,r+1|0)|0;i=r+(f[i>>2]|0)|0;r=c+8|0;f[r>>2]=i;h=f[(f[p>>2]|0)+8>>2]|0;i=i>>>0>h>>>0?h:i;f[r>>2]=i;r=a+104|0;h=X(f[r>>2]|0,q)|0;j=a+96|0;h=h+(f[j>>2]|0)|0;n=c+4|0;f[n>>2]=h;o=f[(f[p>>2]|0)+4>>2]|0;h=h>>>0>>0?o:h;f[n>>2]=h;q=X(f[r>>2]|0,q+1|0)|0;j=q+(f[j>>2]|0)|0;q=c+12|0;f[q>>2]=j;r=f[(f[p>>2]|0)+12>>2]|0;j=j>>>0>r>>>0?r:j;f[q>>2]=j;q=c+24|0;r=c+16|0;n=f[r>>2]|0;if(n|0){o=f[(f[p>>2]|0)+24>>2]|0;m=g+-1|0;l=h+-1|0;k=i+-1|0;i=j+-1|0;g=0;h=f[q>>2]|0;while(1){j=f[o+(g*52|0)+40>>2]|0;f[h+40>>2]=j;z=f[h>>2]|0;y=(m+z|0)/(z|0)|0;f[h+16>>2]=y;t=f[h+4>>2]|0;x=(l+t|0)/(t|0)|0;f[h+20>>2]=x;z=(k+z|0)/(z|0)|0;t=(i+t|0)/(t|0)|0;w=fj(1,0,j|0)|0;v=I;z=Zi(z|0,((z|0)<0)<<31>>31|0,-1,-1)|0;z=Zi(z|0,I|0,w|0,v|0)|0;z=dj(z|0,I|0,j|0)|0;y=Zi(y|0,((y|0)<0)<<31>>31|0,-1,-1)|0;y=Zi(y|0,I|0,w|0,v|0)|0;y=dj(y|0,I|0,j|0)|0;f[h+8>>2]=z-y;t=Zi(t|0,((t|0)<0)<<31>>31|0,-1,-1)|0;t=Zi(t|0,I|0,w|0,v|0)|0;t=dj(t|0,I|0,j|0)|0;x=Zi(x|0,((x|0)<0)<<31>>31|0,-1,-1)|0;v=Zi(x|0,I|0,w|0,v|0)|0;j=dj(v|0,I|0,j|0)|0;f[h+12>>2]=t-j;g=g+1|0;if(g>>>0>=n>>>0)break;else h=h+52|0}}l=a+84|0;g=f[l>>2]|0;if(g|0)Qb(g);g=Sb()|0;f[l>>2]=g;if(!g){z=0;u=s;return z|0}Ub(c,g);f[a+60>>2]=e;j=a+188|0;kg(f[j>>2]|0,29,d)|0;j=f[j>>2]|0;k=lg(j)|0;g=mg(j)|0;if(k){h=1;i=0;while(1){if(!h)h=0;else h=(Ma[f[g>>2]&63](a,b,d)|0)!=0;i=i+1|0;if((i|0)==(k|0))break;else{g=g+4|0;h=h&1}}ng(j);if(!h){Qb(f[p>>2]|0);f[p>>2]=0;z=0;u=s;return z|0}}else ng(j);g=f[r>>2]|0;if(!g){z=1;u=s;return z|0}k=0;j=f[(f[l>>2]|0)+24>>2]|0;i=f[q>>2]|0;while(1){f[i+(k*52|0)+36>>2]=f[j+(k*52|0)+36>>2];h=f[i+(k*52|0)+44>>2]|0;if(!h)h=j;else{Mc(h);h=f[(f[l>>2]|0)+24>>2]|0;i=f[q>>2]|0;g=f[r>>2]|0}z=h+(k*52|0)+44|0;f[i+(k*52|0)+44>>2]=f[z>>2];f[z>>2]=0;k=k+1|0;if(k>>>0>=g>>>0){g=1;break}else j=h}u=s;return g|0}function Ud(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;E=u;u=u+96|0;A=E+56|0;z=E+48|0;y=E+40|0;C=E+32|0;B=E+24|0;j=E+16|0;i=E+8|0;q=E+92|0;r=E+88|0;s=E+84|0;t=E+80|0;v=E+76|0;w=E+72|0;x=E+68|0;o=E+64|0;f[q>>2]=1;d=Hc(1e3)|0;if(!d){Mb(c,1,14941,E)|0;D=0;u=E;return D|0}p=a+196|0;e=f[p>>2]|0;g=f[e+40>>2]|0;a:do if(!g){g=X(f[a+116>>2]|0,f[a+112>>2]|0)|0;f[e+36>>2]=g;g=Ic(g,40)|0;e=f[p>>2]|0;f[e+40>>2]=g;b:do if(g|0){if(f[e+36>>2]|0){h=0;do{f[g+(h*40|0)+28>>2]=100;f[g+(h*40|0)+20>>2]=0;n=Ic(100,24)|0;e=f[p>>2]|0;g=f[e+40>>2]|0;f[g+(h*40|0)+24>>2]=n;h=h+1|0;if(!n)break b}while(h>>>0<(f[e+36>>2]|0)>>>0)}e=f[a+60>>2]|0;if(!g)break a;else{h=e;D=11;break a}}while(0);Mc(d);D=0;u=E;return D|0}else{h=f[a+60>>2]|0;D=11}while(0);if((D|0)==11)if(f[g+16>>2]|0){if(!(f[g+(h*40|0)+4>>2]|0)){n=a+64|0;n=Zi(f[n>>2]|0,f[n+4>>2]|0,2,0)|0;if(!(tb(b,n,I,c)|0)){Mb(c,1,14979,i)|0;Mc(d);D=0;u=E;return D|0}}else{n=f[g+(h*40|0)+16>>2]|0;n=Zi(f[n>>2]|0,f[n+4>>2]|0,2,0)|0;if(!(tb(b,n,I,c)|0)){Mb(c,1,14979,j)|0;Mc(d);D=0;u=E;return D|0}}e=a+8|0;if((f[e>>2]|0)==256){f[e>>2]=8;e=h}else e=h}else e=h;c:do if(Gd(a,r,s,t,v,w,x,o,q,b,c)|0){j=a+116|0;k=a+112|0;l=a+204|0;m=a+84|0;n=e+1|0;g=1e3;while(1){if(!(f[q>>2]|0))break;h=f[s>>2]|0;if(h>>>0>g>>>0){g=Lc(d,h)|0;if(!g){D=25;break}else{d=g;g=h}}i=f[r>>2]|0;if(!(Hd(a,i,d,h,b,c)|0)){D=27;break}h=i+1|0;F=X(f[k>>2]|0,f[j>>2]|0)|0;f[C>>2]=h;f[C+4>>2]=F;Mb(c,4,14768,C)|0;F=f[l>>2]|0;if(!(Sd(f[(f[f[F+20>>2]>>2]|0)+20>>2]|0,f[F+24>>2]|0,d,f[(f[m>>2]|0)+24>>2]|0)|0)){D=29;break}f[y>>2]=h;Mb(c,4,14798,y)|0;if((i|0)==(e|0)){D=31;break}f[A>>2]=h;f[A+4>>2]=n;Mb(c,2,15007,A)|0;if(!(Gd(a,r,s,t,v,w,x,o,q,b,c)|0))break c}if((D|0)==25){Mc(d);F=X(f[k>>2]|0,f[j>>2]|0)|0;f[B>>2]=(f[r>>2]|0)+1;f[B+4>>2]=F;Mb(c,1,14699,B)|0;F=0;u=E;return F|0}else if((D|0)==27){Mc(d);F=0;u=E;return F|0}else if((D|0)==29){Mc(d);F=0;u=E;return F|0}else if((D|0)==31){F=(f[p>>2]|0)+8|0;F=Zi(f[F>>2]|0,f[F+4>>2]|0,2,0)|0;if(!(tb(b,F,I,c)|0)){Mb(c,1,14979,z)|0;Mc(d);F=0;u=E;return F|0}}Mc(d);F=1;u=E;return F|0}while(0);Mc(d);F=0;u=E;return F|0}function Vd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+16|0;j=k;f[a+168>>2]=b;e=f[a+80>>2]|0;a:do if((((e|0)!=0?(i=f[e+24>>2]|0,(i|0)!=0):0)?(h=a+12|0,d=f[h>>2]|0,(d|0)!=0):0)?(g=f[d+5584>>2]|0,(g|0)!=0):0){d=f[e+16>>2]|0;if(!d)a=1;else{if((f[g+4>>2]|0)>>>0>b>>>0){a=0;do{f[i+(a*52|0)+40>>2]=b;a=a+1|0;if(a>>>0>=d>>>0){a=1;break a}}while((f[(f[(f[h>>2]|0)+5584>>2]|0)+(a*1080|0)+4>>2]|0)>>>0>b>>>0)}Mb(c,1,15074,j)|0;a=0}}else a=0;while(0);u=k;return a|0}function Wd(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;Q=u;u=u+48|0;O=Q+32|0;N=Q+24|0;M=Q+16|0;L=Q+8|0;K=Q;G=a+204|0;g=f[G>>2]|0;H=a+116|0;I=a+112|0;J=X(f[I>>2]|0,f[H>>2]|0)|0;A=(J|0)==1;if(!J){P=1;u=Q;return P|0}B=a+200|0;C=a+12|0;D=a+164|0;E=a+8|0;F=g+20|0;z=g+24|0;y=0;m=0;g=0;a:while(1){if((f[B>>2]|0)!=(y|0)){P=5;break}w=y;y=y+1|0;x=X(f[H>>2]|0,f[I>>2]|0)|0;f[L>>2]=y;f[L+4>>2]=x;Mb(e,4,15187,L)|0;f[C>>2]=0;x=f[G>>2]|0;f[x+12>>2]=f[(f[D>>2]|0)+(w*5640|0)+5588>>2];f[E>>2]=0;if(!(Uf(x,f[B>>2]|0,e)|0))break;h=f[G>>2]|0;l=f[(f[h+24>>2]|0)+16>>2]|0;if(l)if(A){j=f[(f[f[F>>2]>>2]|0)+20>>2]|0;k=f[(f[z>>2]|0)+24>>2]|0;i=0;do{f[j+(i*52|0)+32>>2]=f[k+(i*52|0)+44>>2];f[j+(i*52|0)+36>>2]=0;i=i+1|0}while(i>>>0>>0)}else{i=0;do{if(!(Tf((f[(f[f[F>>2]>>2]|0)+20>>2]|0)+(i*52|0)|0)|0)){P=14;break a}i=i+1|0;h=f[G>>2]|0}while(i>>>0<(f[(f[h+24>>2]|0)+16>>2]|0)>>>0)}x=$f(h)|0;if(!A){if(x>>>0>g>>>0){g=Lc(m,x)|0;if(!g){P=20;break}else{h=g;g=x}}else h=m;i=f[G>>2]|0;w=i+24|0;j=f[w>>2]|0;if(f[j+16>>2]|0){v=i+20|0;i=h;t=0;do{p=f[(f[f[v>>2]>>2]|0)+20>>2]|0;n=f[j+24>>2]|0;R=f[n+(t*52|0)+24>>2]|0;R=(R>>>3)+((R&7|0)!=0&1)|0;l=f[p+(t*52|0)+8>>2]|0;m=f[p+(t*52|0)>>2]|0;r=l-m|0;o=f[p+(t*52|0)+12>>2]|0;p=f[p+(t*52|0)+4>>2]|0;s=o-p|0;T=f[j>>2]|0;S=f[n+(t*52|0)>>2]|0;k=f[n+(t*52|0)+4>>2]|0;q=(S+~T+(f[j+8>>2]|0)|0)/(S|0)|0;k=m-((T+-1+S|0)/(S|0)|0)+(X(q,p-(((f[j+4>>2]|0)+-1+k|0)/(k|0)|0)|0)|0)|0;k=(f[n+(t*52|0)+44>>2]|0)+(k<<2)|0;b:do switch(((R|0)==3?4:R)&1073741823|0){case 1:{j=(r|0)==0|(s|0)==0;if(!(f[n+(t*52|0)+32>>2]|0)){if(j)break b;p=o+-1-p|0;n=0;o=i;while(1){j=0;l=o;m=k;while(1){b[l>>0]=f[m>>2];j=j+1|0;if((j|0)==(r|0))break;else{l=l+1|0;m=m+4|0}}n=n+1|0;if((n|0)==(s|0))break;else{o=o+r|0;k=k+(q<<2)|0}}i=i+(r+(X(p,r)|0))|0;break b}else{if(j)break b;p=o+-1-p|0;o=i;j=k;k=0;while(1){l=0;m=o;n=j;while(1){b[m>>0]=f[n>>2];l=l+1|0;if((l|0)==(r|0))break;else{m=m+1|0;n=n+4|0}}k=k+1|0;if((k|0)==(s|0))break;else{o=o+r|0;j=j+(q<<2)|0}}i=i+(r+(X(p,r)|0))|0;break b}}case 2:{j=(r|0)==0|(s|0)==0;if(!(f[n+(t*52|0)+32>>2]|0)){if(j)break b;n=l-m<<1;p=n+(X(o+-1-p|0,n)|0)|0;n=i;o=0;while(1){j=0;l=n;m=k;while(1){d[l>>1]=f[m>>2];j=j+1|0;if((j|0)==(r|0))break;else{l=l+2|0;m=m+4|0}}o=o+1|0;if((o|0)==(s|0))break;else{n=n+(r<<1)|0;k=k+(q<<2)|0}}i=i+p|0;break b}else{if(j)break b;n=l-m<<1;p=n+(X(o+-1-p|0,n)|0)|0;n=i;o=0;while(1){j=n;l=0;m=k;while(1){d[j>>1]=f[m>>2];l=l+1|0;if((l|0)==(r|0))break;else{j=j+2|0;m=m+4|0}}o=o+1|0;if((o|0)==(s|0))break;else{n=n+(r<<1)|0;k=k+(q<<2)|0}}i=i+p|0;break b}}case 4:{if(!((r|0)==0|(s|0)==0)){n=l-m<<2;p=n+(X(o+-1-p|0,n)|0)|0;n=i;o=0;while(1){j=n;l=0;m=k;while(1){f[j>>2]=f[m>>2];l=l+1|0;if((l|0)==(r|0))break;else{j=j+4|0;m=m+4|0}}o=o+1|0;if((o|0)==(s|0))break;else{n=n+(r<<2)|0;k=k+(q<<2)|0}}i=i+p|0}break}default:{}}while(0);t=t+1|0;j=f[w>>2]|0}while(t>>>0<(f[j+16>>2]|0)>>>0);i=f[G>>2]|0}if(!(ag(i,h,x)|0)){P=61;break}}else h=m;if(!(Xd(a,c,e)|0)){P=63;break}if(y>>>0>=J>>>0){P=65;break}else m=h}if((P|0)==5)Mb(e,1,15150,K)|0;else if((P|0)==14){Mb(e,1,15208,M)|0;if(!m){T=0;u=Q;return T|0}Mc(m);T=0;u=Q;return T|0}else if((P|0)==20){if(m|0)Mc(m);Mb(e,1,15246,N)|0;T=0;u=Q;return T|0}else if((P|0)==61){Mb(e,1,15285,O)|0;Mc(h);T=0;u=Q;return T|0}else if((P|0)==63){if(!h){T=0;u=Q;return T|0}Mc(h);T=0;u=Q;return T|0}else if((P|0)==65){if(!h){T=1;u=Q;return T|0}Mc(h);T=1;u=Q;return T|0}if(!m){T=0;u=Q;return T|0}Mc(m);T=0;u=Q;return T|0}function Xd(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;H=u;u=u+32|0;D=H+16|0;s=H+8|0;k=H;C=H+20|0;F=f[a+40>>2]|0;G=a+36|0;m=f[G>>2]|0;n=a+204|0;j=f[n>>2]|0;f[j+16>>2]=0;z=a+8|0;f[z>>2]=0;yb(m,65424,2);yb(m+2|0,10,2);E=a+200|0;yb(m+4|0,f[E>>2]|0,2);A=a+12|0;yb(m+10|0,f[A>>2]|0,1);B=a+164|0;yb(m+11|0,f[(f[B>>2]|0)+((f[E>>2]|0)*5640|0)+5588>>2]|0,1);f[C>>2]=12;g=m+12|0;e=F+-12|0;l=a+88|0;if(((d[l>>1]|0)+-3&65535)>=4?(h=f[B>>2]|0,i=f[E>>2]|0,(f[h+(i*5640|0)+420>>2]|0)!=0):0){f[C>>2]=0;Yd(f[(f[a+80>>2]|0)+16>>2]|0,h,i,g,C);y=f[C>>2]|0;h=y+12|0;g=g+y|0;e=e-y|0}else h=12;f[C>>2]=0;yb(g,65427,2);f[j+4>>2]=f[z>>2];f[j+8>>2]=f[A>>2];if(!(f[A>>2]|0))f[(f[f[j+20>>2]>>2]|0)+840>>2]=0;f[C>>2]=0;if(!(Yf(j,f[E>>2]|0,g+2|0,C,e+-4|0,0)|0)){Mb(c,1,15332,k)|0;G=0;u=H;return G|0}e=(f[C>>2]|0)+2|0;f[C>>2]=e;e=e+h|0;yb(m+6|0,e,4);if(((d[l>>1]|0)+-3&65535)<4){y=a+28|0;yb(f[y>>2]|0,f[E>>2]|0,1);x=(f[y>>2]|0)+1|0;f[y>>2]=x;yb(x,e,4);f[y>>2]=(f[y>>2]|0)+4}h=m+e|0;y=F-e|0;v=f[n>>2]|0;w=a+88|0;q=f[B>>2]|0;r=f[E>>2]|0;l=Zd(w,0,r)|0;x=a+8|0;f[A>>2]=(f[A>>2]|0)+1;a:do if(l>>>0>1){m=v+4|0;n=v+8|0;o=v+20|0;p=a+28|0;j=h;g=y;e=0;k=1;while(1){f[x>>2]=k;f[C>>2]=0;yb(j,65424,2);yb(j+2|0,10,2);yb(j+4|0,f[E>>2]|0,2);yb(j+10|0,f[A>>2]|0,1);yb(j+11|0,f[(f[B>>2]|0)+((f[E>>2]|0)*5640|0)+5588>>2]|0,1);h=j+12|0;f[C>>2]=0;yb(h,65427,2);f[m>>2]=f[z>>2];f[n>>2]=f[A>>2];if(!(f[A>>2]|0))f[(f[f[o>>2]>>2]|0)+840>>2]=0;f[C>>2]=0;if(!(Yf(v,f[E>>2]|0,j+14|0,C,g+-16|0,0)|0))break;i=f[C>>2]|0;I=i+2|0;f[C>>2]=I;h=h+I|0;e=e+12+I|0;g=g+-12+(-2-i)|0;i=i+14|0;yb(j+6|0,i,4);if(((d[w>>1]|0)+-3&65535)<4){yb(f[p>>2]|0,f[E>>2]|0,1);I=(f[p>>2]|0)+1|0;f[p>>2]=I;yb(I,i,4);f[p>>2]=(f[p>>2]|0)+4}f[A>>2]=(f[A>>2]|0)+1;k=k+1|0;if(k>>>0>=l>>>0){t=12;break a}else j=h}Mb(c,1,15332,s)|0}else{g=y;e=0;t=12}while(0);b:do if((t|0)==12){o=q+(r*5640|0)+420|0;c:do if(f[o>>2]|0){p=v+16|0;q=v+4|0;r=v+8|0;s=v+20|0;n=a+28|0;m=1;d:while(1){f[p>>2]=m;l=Zd(w,m,f[E>>2]|0)|0;if(l){k=0;while(1){f[x>>2]=k;f[C>>2]=0;yb(h,65424,2);yb(h+2|0,10,2);yb(h+4|0,f[E>>2]|0,2);yb(h+10|0,f[A>>2]|0,1);yb(h+11|0,f[(f[B>>2]|0)+((f[E>>2]|0)*5640|0)+5588>>2]|0,1);i=h+12|0;f[C>>2]=0;yb(i,65427,2);f[q>>2]=f[z>>2];f[r>>2]=f[A>>2];if(!(f[A>>2]|0))f[(f[f[s>>2]>>2]|0)+840>>2]=0;f[C>>2]=0;if(!(Yf(v,f[E>>2]|0,h+14|0,C,g+-16|0,0)|0))break d;I=f[C>>2]|0;j=I+2|0;f[C>>2]=j;e=e+12+j|0;j=i+j|0;g=g+-12+(-2-I)|0;i=I+14|0;yb(h+6|0,i,4);if(((d[w>>1]|0)+-3&65535)<4){yb(f[n>>2]|0,f[E>>2]|0,1);I=(f[n>>2]|0)+1|0;f[n>>2]=I;yb(I,i,4);f[n>>2]=(f[n>>2]|0)+4}f[A>>2]=(f[A>>2]|0)+1;k=k+1|0;if(k>>>0>=l>>>0){h=j;break}else h=j}}m=m+1|0;if(m>>>0>(f[o>>2]|0)>>>0)break c}Mb(c,1,15332,D)|0;break b}while(0);I=e-y+F|0;if((Fb(b,f[G>>2]|0,I,c)|0)!=(I|0)){I=0;u=H;return I|0}f[E>>2]=(f[E>>2]|0)+1;I=1;u=H;return I|0}while(0);I=0;u=H;return I|0}function Yd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;g=f[b+(c*5640|0)+5584>>2]|0;l=(f[b+(c*5640|0)+420>>2]|0)+1|0;i=a>>>0<257?1:2;k=X(l,(i<<1)+5|0)|0;j=k+4|0;yb(d,65375,2);yb(d+2|0,k+2|0,2);if(!l){f[e>>2]=j;return}k=b+(c*5640|0)+8|0;h=g+4|0;b=b+(c*5640|0)+424|0;c=0;g=d+4|0;while(1){yb(g,f[b>>2]|0,1);g=g+1|0;yb(g,f[b+4>>2]|0,i);g=g+i|0;o=b+8|0;yb(g,f[o>>2]|0,2);g=g+2|0;m=b+12|0;yb(g,f[m>>2]|0,1);g=g+1|0;d=b+16|0;yb(g,f[d>>2]|0,i);g=g+i|0;yb(g,f[b+36>>2]|0,1);p=f[o>>2]|0;n=f[k>>2]|0;f[o>>2]=(p|0)<(n|0)?p:n;o=f[m>>2]|0;n=f[h>>2]|0;f[m>>2]=(o|0)<(n|0)?o:n;m=f[d>>2]|0;f[d>>2]=(m|0)<(a|0)?m:a;c=c+1|0;if((c|0)==(l|0))break;else{b=b+148|0;g=g+1|0}}f[e>>2]=j;return}function Zd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;i=f[a+76>>2]|0;e=f[i+(d*5640|0)+4>>2]|0;j=696;while(1){m=f[j>>2]|0;if((m|0)==-1|(m|0)==(e|0))break;else j=j+12|0}if(!(b[a+93>>0]&8)){a=1;return a|0}m=h[a+92>>0]|0;g=i+(d*5640|0)+424+(c*148|0)+92|0;k=i+(d*5640|0)+424+(c*148|0)+88|0;l=i+(d*5640|0)+424+(c*148|0)+96|0;i=i+(d*5640|0)+424+(c*148|0)+84|0;c=b[j+4>>0]|0;switch(c|0){case 67:{e=g;n=8;break}case 82:{e=k;n=8;break}case 80:{e=l;n=8;break}case 76:{e=i;n=8;break}default:e=1}if((n|0)==8)e=f[e>>2]|0;if((m|0)!=(c|0)){d=b[j+5>>0]|0;switch(d|0){case 67:{c=g;n=16;break}case 82:{c=k;n=16;break}case 80:{c=l;n=16;break}case 76:{c=i;n=16;break}default:{}}if((n|0)==16)e=X(f[c>>2]|0,e)|0;if((m|0)!=(d|0)){d=b[j+6>>0]|0;switch(d|0){case 67:{c=g;n=22;break}case 82:{c=k;n=22;break}case 80:{c=l;n=22;break}case 76:{c=i;n=22;break}default:{}}if((n|0)==22)e=X(f[c>>2]|0,e)|0;if((m|0)!=(d|0)){c=b[j+7>>0]|0;switch(c|0){case 67:{n=28;break}case 82:{g=k;n=28;break}case 80:{g=l;n=28;break}case 76:{g=i;n=28;break}default:{}}if((n|0)==28)e=X(f[g>>2]|0,e)|0;if((m|0)==(c|0))g=3;else{a=e;return a|0}}else g=2}else g=1}else g=0;f[a+84>>2]=g;a=e;return a|0}function _d(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0;e=a+188|0;if(!(kg(f[e>>2]|0,30,c)|0)){j=0;return j|0}if(((d[a+88>>1]|0)+-3&65535)<4?(kg(f[e>>2]|0,31,c)|0)==0:0){j=0;return j|0}if(!(kg(f[e>>2]|0,32,c)|0)){j=0;return j|0}if(!(kg(f[e>>2]|0,33,c)|0)){j=0;return j|0}if(!(kg(f[e>>2]|0,34,c)|0)){j=0;return j|0}j=f[e>>2]|0;i=lg(j)|0;e=mg(j)|0;if(!i)e=1;else{g=e;e=1;h=0;while(1){if(!e)e=0;else e=(Ma[f[g>>2]&63](a,b,c)|0)!=0;e=e&1;h=h+1|0;if((h|0)==(i|0))break;else g=g+4|0}}ng(j);j=e;return j|0}function $d(a,b,c){a=a|0;b=b|0;c=c|0;a=a+44|0;yb(f[a>>2]|0,65497,2);if((Fb(b,f[a>>2]|0,2,c)|0)!=2){c=0;return c|0}c=(Gb(b,c)|0)!=0&1;return c|0}function ae(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;g=(f[a+32>>2]|0)*5|0;i=a+16|0;i=Zi(f[i>>2]|0,f[i+4>>2]|0,6,0)|0;h=I;d=Hb(b)|0;e=I;if(!(Kb(b,i,h,c)|0)){i=0;return i|0}if((Fb(b,f[a+24>>2]|0,g,c)|0)!=(g|0)){i=0;return i|0}i=(Kb(b,d,e,c)|0)!=0&1;return i|0}function be(a,b,c){a=a|0;b=b|0;c=c|0;a=f[a+196>>2]|0;if(!a)return 1;b=Hb(b)|0;c=a;c=_i(b|0,I|0,f[c>>2]|0,f[c+4>>2]|0)|0;b=a+16|0;f[b>>2]=c;f[b+4>>2]=I;return 1}function ce(a,b,c){a=a|0;b=b|0;c=c|0;b=a+204|0;Qf(f[b>>2]|0);f[b>>2]=0;b=a+24|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0;f[a+28>>2]=0}c=a+36|0;b=f[c>>2]|0;if(!b){a=a+40|0;f[a>>2]=0;return 1}Mc(b);f[c>>2]=0;a=a+40|0;f[a>>2]=0;return 1}function de(a,b,c){a=a|0;b=b|0;c=c|0;b=a+44|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}f[a+48>>2]=0;return 1}function ee(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=u;u=u+16|0;g=Sb()|0;k=a+80|0;f[k>>2]=g;if(!g){Mb(e,1,15352,l)|0;e=0;u=l;return e|0}Ub(c,g);i=f[c+24>>2]|0;if(i|0?(j=f[c+16>>2]|0,j|0):0){g=0;do{c=i+(g*52|0)+44|0;h=f[c>>2]|0;if(h|0){f[(f[(f[k>>2]|0)+24>>2]|0)+(g*52|0)+44>>2]=h;f[c>>2]=0}g=g+1|0}while(g>>>0>>0)}g=a+192|0;if(!(kg(f[g>>2]|0,35,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,36,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,37,e)|0)){e=0;u=l;return e|0}i=f[g>>2]|0;j=lg(i)|0;g=mg(i)|0;if(j){c=1;h=0;while(1){if(!c)c=0;else c=(Ma[f[g>>2]&63](a,b,e)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{g=g+4|0;c=c&1}}ng(i);if(!c){e=0;u=l;return e|0}}else ng(i);g=a+188|0;if(!(kg(f[g>>2]|0,38,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,39,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,40,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,41,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,42,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,43,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,44,e)|0)){e=0;u=l;return e|0}c=a+88|0;if(((d[c>>1]|0)+-3&65535)<4){if(!(kg(f[g>>2]|0,45,e)|0)){e=0;u=l;return e|0}if((d[c>>1]|0)==4?(kg(f[g>>2]|0,46,e)|0)==0:0){e=0;u=l;return e|0}}if(!(kg(f[g>>2]|0,47,e)|0)){e=0;u=l;return e|0}if(f[a+108>>2]|0?(kg(f[g>>2]|0,48,e)|0)==0:0){e=0;u=l;return e|0}if(d[c>>1]&256?(kg(f[g>>2]|0,49,e)|0)==0:0){e=0;u=l;return e|0}if(f[a+196>>2]|0?(kg(f[g>>2]|0,50,e)|0)==0:0){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,51,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,52,e)|0)){e=0;u=l;return e|0}j=f[g>>2]|0;i=lg(j)|0;g=mg(j)|0;if(!i)g=1;else{c=g;g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[c>>2]&63](a,b,e)|0)!=0;g=g&1;h=h+1|0;if((h|0)==(i|0))break;else c=c+4|0}}ng(j);e=g;u=l;return e|0}function fe(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function ge(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=u;u=u+32|0;d=(f[a+8>>2]|0)==0&(f[a+188>>2]|0)!=0&(f[a+192>>2]|0)!=0&1;b=(f[(f[(f[a+164>>2]|0)+5584>>2]|0)+4>>2]|0)+-1|0;if(b>>>0>31){Mb(c,1,16016,e)|0;c=0;u=e;return c|0}b=1<>2]|0)>>>0>>0){Mb(c,1,16016,e+8|0)|0;c=0;u=e;return c|0}if((f[a+104>>2]|0)>>>0>=b>>>0){c=d;u=e;return c|0}Mb(c,1,16016,e+16|0)|0;c=0;u=e;return c|0}function he(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0;if((d[a+88>>1]&-32256)<<16>>16!=-32256){j=1;return j|0}i=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;if(!i){j=1;return j|0}j=a+80|0;g=f[a+164>>2]|0;b=1;h=0;while(1){if((f[g+16>>2]|0)==2){b=b&(f[g+5608>>2]|0)!=0;e=f[(f[j>>2]|0)+16>>2]|0;if(e){c=0;a=f[g+5584>>2]|0;while(1){b=(f[a+20>>2]&1^1)&b;c=c+1|0;if(c>>>0>=e>>>0)break;else a=a+1080|0}}}h=h+1|0;if((h|0)==(i|0))break;else g=g+5640|0}return b|0}function ie(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;h=a+88|0;i=a+32|0;j=f[a+80>>2]|0;g=X(f[a+116>>2]|0,f[a+112>>2]|0)|0;f[i>>2]=0;if(!g)return 1;a=f[a+164>>2]|0;d=0;while(1){Jf(j,h,d);e=a+420|0;b=0;c=0;do{k=Zd(h,b,d)|0;f[i>>2]=(f[i>>2]|0)+k;c=k+c|0;b=b+1|0}while(b>>>0<=(f[e>>2]|0)>>>0);f[a+5588>>2]=c;d=d+1|0;if((d|0)==(g|0))break;else a=a+5640|0}return 1}function je(a,b,c){a=a|0;b=b|0;c=c|0;a=f[a+44>>2]|0;yb(a,65359,2);return (Fb(b,a,2,c)|0)==2|0}function ke(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+16|0;h=o;i=f[a+80>>2]|0;m=i+16|0;k=(f[m>>2]|0)*3|0;n=k+40|0;g=f[i+24>>2]|0;e=a+48|0;l=a+44|0;d=f[l>>2]|0;do if(n>>>0>(f[e>>2]|0)>>>0){d=Lc(d,n)|0;if(d|0){f[l>>2]=d;f[e>>2]=n;break}Mc(f[l>>2]|0);f[l>>2]=0;f[e>>2]=0;Mb(c,1,15978,h)|0;n=0;u=o;return n|0}while(0);yb(d,65361,2);yb(d+2|0,k+38|0,2);yb(d+4|0,j[a+88>>1]|0,2);yb(d+6|0,f[i+8>>2]|0,4);yb(d+10|0,f[i+12>>2]|0,4);yb(d+14|0,f[i>>2]|0,4);yb(d+18|0,f[i+4>>2]|0,4);yb(d+22|0,f[a+100>>2]|0,4);yb(d+26|0,f[a+104>>2]|0,4);yb(d+30|0,f[a+92>>2]|0,4);yb(d+34|0,f[a+96>>2]|0,4);yb(d+38|0,f[m>>2]|0,2);if(f[m>>2]|0){d=d+40|0;e=0;while(1){yb(d,(f[g+24>>2]|0)+-1+(f[g+32>>2]<<7)|0,1);yb(d+1|0,f[g>>2]|0,1);yb(d+2|0,f[g+4>>2]|0,1);e=e+1|0;if(e>>>0>=(f[m>>2]|0)>>>0)break;else{g=g+52|0;d=d+3|0}}}n=(Fb(b,f[l>>2]|0,n,c)|0)==(n|0)&1;u=o;return n|0}function le(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=u;u=u+32|0;p=q+16|0;o=q+8|0;i=q;j=q+20|0;k=a+164|0;l=f[k>>2]|0;m=a+200|0;n=f[m>>2]|0;d=f[l+(n*5640|0)+5584>>2]|0;if(!(f[d>>2]&1))g=5;else g=(f[d+4>>2]|0)+5|0;h=g+9|0;f[j>>2]=h;e=a+48|0;a=a+44|0;d=f[a>>2]|0;do if(h>>>0>(f[e>>2]|0)>>>0){d=Lc(d,h)|0;if(d|0){f[a>>2]=d;f[e>>2]=h;break}Mc(f[a>>2]|0);f[a>>2]=0;f[e>>2]=0;Mb(c,1,15913,i)|0;p=0;u=q;return p|0}while(0);yb(d,65362,2);yb(d+2|0,g+7|0,2);yb(d+4|0,f[l+(n*5640|0)>>2]|0,1);yb(d+5|0,f[l+(n*5640|0)+4>>2]|0,1);yb(d+6|0,f[l+(n*5640|0)+8>>2]|0,2);yb(d+8|0,f[l+(n*5640|0)+16>>2]|0,1);f[j>>2]=g;if(!(Ae(f[k>>2]|0,f[m>>2]|0,d+9|0,j,c)|0)){Mb(c,1,15952,o)|0;p=0;u=q;return p|0}if(!(f[j>>2]|0)){p=(Fb(b,f[a>>2]|0,h,c)|0)==(h|0)&1;u=q;return p|0}else{Mb(c,1,15952,p)|0;p=0;u=q;return p|0}return 0}function me(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+32|0;n=o+16|0;m=o+8|0;i=o;k=o+20|0;l=a+200|0;j=a+164|0;d=f[(f[j>>2]|0)+((f[l>>2]|0)*5640|0)+5584>>2]|0;e=f[d+24>>2]|0;if((e|0)==1)d=1;else d=((f[d+4>>2]|0)*3|0)+-2|0;g=(e|0)==0?d+1|0:d<<1|1;h=g+4|0;f[k>>2]=h;e=a+48|0;a=a+44|0;d=f[a>>2]|0;do if(h>>>0>(f[e>>2]|0)>>>0){d=Lc(d,h)|0;if(d|0){f[a>>2]=d;f[e>>2]=h;break}Mc(f[a>>2]|0);f[a>>2]=0;f[e>>2]=0;Mb(c,1,15848,i)|0;n=0;u=o;return n|0}while(0);yb(d,65372,2);yb(d+2|0,g+2|0,2);f[k>>2]=g;if(!(ze(f[j>>2]|0,f[l>>2]|0,0,d+4|0,k,c)|0)){Mb(c,1,15887,m)|0;n=0;u=o;return n|0}if(!(f[k>>2]|0)){n=(Fb(b,f[a>>2]|0,h,c)|0)==(h|0)&1;u=o;return n|0}else{Mb(c,1,15887,n)|0;n=0;u=o;return n|0}return 0}function ne(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0;w=u;u=u+16|0;t=w;q=w+4|0;r=a+80|0;d=f[(f[r>>2]|0)+16>>2]|0;if(d>>>0<=1){v=1;u=w;return v|0}n=a+164|0;o=a+200|0;s=a+48|0;m=a+44|0;l=1;a=d;while(1){e=f[n>>2]|0;h=f[o>>2]|0;g=f[e+(h*5640|0)+5584>>2]|0;i=f[g+(l*1080|0)>>2]|0;a:do if((((((f[g>>2]|0)==(i|0)?(p=f[g+4>>2]|0,(p|0)==(f[g+(l*1080|0)+4>>2]|0)):0)?(f[g+8>>2]|0)==(f[g+(l*1080|0)+8>>2]|0):0)?(f[g+12>>2]|0)==(f[g+(l*1080|0)+12>>2]|0):0)?(f[g+16>>2]|0)==(f[g+(l*1080|0)+16>>2]|0):0)?(f[g+20>>2]|0)==(f[g+(l*1080|0)+20>>2]|0):0){if(p){d=0;do{if((f[g+812+(d<<2)>>2]|0)!=(f[g+(l*1080|0)+812+(d<<2)>>2]|0)){v=13;break a}if((f[g+944+(d<<2)>>2]|0)!=(f[g+(l*1080|0)+944+(d<<2)>>2]|0)){v=13;break a}d=d+1|0}while(d>>>0

>>0)}}else v=13;while(0);if((v|0)==13){v=0;if(!(i&1))d=5;else d=(f[g+(l*1080|0)+4>>2]|0)+5|0;k=d+(a>>>0<257?6:7)|0;d=f[m>>2]|0;if(k>>>0>(f[s>>2]|0)>>>0){d=Lc(d,k)|0;if(!d){v=17;break}f[m>>2]=d;f[s>>2]=k;j=f[n>>2]|0;h=f[o>>2]|0;g=f[j+(h*5640|0)+5584>>2]|0;a=f[(f[r>>2]|0)+16>>2]|0;i=f[g+(l*1080|0)>>2]|0}else j=e;e=a>>>0<257?1:2;if(!(i&1))a=5;else a=(f[g+(l*1080|0)+4>>2]|0)+5|0;yb(d,65363,2);yb(d+2|0,e+3+a|0,2);i=d+4|0;yb(i,l,e);i=i+e|0;yb(i,f[(f[j+(h*5640|0)+5584>>2]|0)+(l*1080|0)>>2]|0,1);f[q>>2]=a;Ae(f[n>>2]|0,f[o>>2]|0,i+1|0,q,c)|0;if((Fb(b,f[m>>2]|0,k,c)|0)!=(k|0)){a=0;v=24;break}a=f[(f[r>>2]|0)+16>>2]|0}l=l+1|0;if(l>>>0>=a>>>0){a=1;v=24;break}}if((v|0)==17){Mc(f[m>>2]|0);f[m>>2]=0;f[s>>2]=0;Mb(c,1,15774,t)|0;v=0;u=w;return v|0}else if((v|0)==24){u=w;return a|0}return 0}\r\nfunction oe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=u;u=u+16|0;r=t;o=t+4|0;p=a+80|0;d=f[(f[p>>2]|0)+16>>2]|0;if(d>>>0<=1){s=1;u=t;return s|0}m=a+164|0;n=a+200|0;q=a+48|0;l=a+44|0;k=1;a=d;while(1){i=f[(f[m>>2]|0)+((f[n>>2]|0)*5640|0)+5584>>2]|0;g=f[i+24>>2]|0;h=f[i+(k*1080|0)+24>>2]|0;a:do if((g|0)==(h|0)?(f[i+804>>2]|0)==(f[i+(k*1080|0)+804>>2]|0):0){if((g|0)!=1){j=(f[i+4>>2]|0)*3|0;d=j+-2|0;if((j|0)!=((f[i+(k*1080|0)+4>>2]|0)*3|0)){s=14;break}if(!d)break;else e=d}else e=1;d=0;do{if((f[i+28+(d<<3)>>2]|0)!=(f[i+(k*1080|0)+28+(d<<3)>>2]|0)){s=14;break a}d=d+1|0}while(d>>>0>>0);if(g){d=0;do{if((f[i+28+(d<<3)+4>>2]|0)!=(f[i+(k*1080|0)+28+(d<<3)+4>>2]|0)){s=14;break a}d=d+1|0}while(d>>>0>>0)}}else s=14;while(0);if((s|0)==14){s=0;if((h|0)==1)d=1;else d=((f[i+(k*1080|0)+4>>2]|0)*3|0)+-2|0;j=((h|0)==0?d+1|0:d<<1|1)+5+(a>>>0>256&1)|0;a=f[l>>2]|0;if(j>>>0>(f[q>>2]|0)>>>0){a=Lc(a,j)|0;if(!a){s=18;break}f[l>>2]=a;f[q>>2]=j;d=f[(f[m>>2]|0)+((f[n>>2]|0)*5640|0)+5584>>2]|0;e=f[d+(k*1080|0)+24>>2]|0;g=a}else{e=h;d=i;g=a}if((e|0)==1)a=1;else a=((f[d+(k*1080|0)+4>>2]|0)*3|0)+-2|0;d=(e|0)==0?a+1|0:a<<1|1;f[o>>2]=d+6;yb(g,65373,2);a=g+2|0;if((f[(f[p>>2]|0)+16>>2]|0)>>>0<257){yb(a,d+3|0,2);yb(g+4|0,k,1);a=5}else{yb(a,d+4|0,2);yb(g+4|0,k,2);a=6}f[o>>2]=d;ze(f[m>>2]|0,f[n>>2]|0,k,g+a|0,o,c)|0;if((Fb(b,f[l>>2]|0,j,c)|0)!=(j|0)){a=0;s=28;break}a=f[(f[p>>2]|0)+16>>2]|0}k=k+1|0;if(k>>>0>=a>>>0){a=1;s=28;break}}if((s|0)==18){Mc(f[l>>2]|0);f[l>>2]=0;f[q>>2]=0;Mb(c,1,15702,r)|0;s=0;u=t;return s|0}else if((s|0)==28){u=t;return a|0}return 0}function pe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+16|0;g=k;i=(f[a+32>>2]|0)*5|0;j=i+6|0;e=a+48|0;h=a+44|0;d=f[h>>2]|0;do if(j>>>0>(f[e>>2]|0)>>>0){d=Lc(d,j)|0;if(d|0){f[h>>2]=d;f[e>>2]=j;break}Mc(f[h>>2]|0);f[h>>2]=0;f[e>>2]=0;Mb(c,1,15663,g)|0;j=0;u=k;return j|0}while(0);g=Hb(b)|0;a=a+16|0;f[a>>2]=g;f[a+4>>2]=I;yb(d,65365,2);yb(d+2|0,i+4|0,2);yb(d+4|0,0,1);yb(d+5|0,80,1);j=(Fb(b,f[h>>2]|0,j,c)|0)==(j|0)&1;u=k;return j|0}function qe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=u;u=u+16|0;j=p;o=p+4|0;f[o>>2]=0;k=a+164|0;e=f[k>>2]|0;l=a+200|0;d=f[l>>2]|0;i=a+80|0;g=f[(f[i>>2]|0)+16>>2]|0;n=(X(g>>>0<257?7:9,(f[e+(d*5640|0)+420>>2]|0)+1|0)|0)+4|0;h=a+48|0;m=a+44|0;a=f[m>>2]|0;do if(n>>>0>(f[h>>2]|0)>>>0){a=Lc(a,n)|0;if(a|0){f[m>>2]=a;f[h>>2]=n;g=f[(f[i>>2]|0)+16>>2]|0;e=f[k>>2]|0;d=f[l>>2]|0;break}Mc(f[m>>2]|0);f[m>>2]=0;f[h>>2]=0;Mb(c,1,15624,j)|0;o=0;u=p;return o|0}while(0);Yd(g,e,d,a,o);o=(Fb(b,f[m>>2]|0,n,c)|0)==(n|0)&1;u=p;return o|0}function re(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;j=a+164|0;k=a+80|0;e=f[k>>2]|0;d=f[e+16>>2]|0;if(!d){k=1;return k|0}i=a+44|0;g=0;h=f[(f[j>>2]|0)+5584>>2]|0;a=e;while(1){if(f[h+808>>2]|0){a=f[(f[j>>2]|0)+5584>>2]|0;d=d>>>0<257?1:2;e=d+6|0;l=f[i>>2]|0;yb(l,65374,2);yb(l+2|0,d|4,2);l=l+4|0;yb(l,g,d);d=l+d|0;yb(d,0,1);yb(d+1|0,f[a+(g*1080|0)+808>>2]|0,1);if((Fb(b,f[i>>2]|0,e,c)|0)!=(e|0)){a=0;d=7;break}a=f[k>>2]|0}g=g+1|0;d=f[a+16>>2]|0;if(g>>>0>=d>>>0){a=1;d=7;break}else h=h+1080|0}if((d|0)==7)return a|0;return 0}function se(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+16|0;g=k;h=f[a+108>>2]|0;i=Kh(h)|0;j=i+6|0;e=a+48|0;d=a+44|0;a=f[d>>2]|0;do if(j>>>0>(f[e>>2]|0)>>>0){a=Lc(a,j)|0;if(a|0){f[d>>2]=a;f[e>>2]=j;break}Mc(f[d>>2]|0);f[d>>2]=0;f[e>>2]=0;Mb(c,1,15581,g)|0;j=0;u=k;return j|0}while(0);yb(a,65380,2);yb(a+2|0,i+4|0,2);yb(a+4|0,1,2);hj(a+6|0,h|0,i|0)|0;j=(Fb(b,f[d>>2]|0,j,c)|0)==(j|0)&1;u=k;return j|0}function te(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;x=u;u=u+32|0;v=x+24|0;r=x+16|0;n=x+8|0;g=x;h=f[a+80>>2]|0;j=h+16|0;i=f[j>>2]|0;k=i+6|0;t=a+48|0;w=a+44|0;e=f[w>>2]|0;do if(k>>>0>(f[t>>2]|0)>>>0){e=Lc(e,k)|0;if(e|0){f[w>>2]=e;f[t>>2]=k;break}Mc(f[w>>2]|0);f[w>>2]=0;f[t>>2]=0;Mb(d,1,15425,g)|0;d=0;u=x;return d|0}while(0);yb(e,65400,2);yb(e+2|0,i+4|0,2);yb(e+4|0,f[j>>2]|0,2);if(f[j>>2]|0){h=f[h+24>>2]|0;e=e+6|0;g=0;while(1){yb(e,(f[h+24>>2]|0)+-1|f[h+32>>2]<<7,1);g=g+1|0;if(g>>>0>=(f[j>>2]|0)>>>0)break;else{h=h+52|0;e=e+1|0}}}if((Fb(c,f[w>>2]|0,k,d)|0)!=(k|0)){d=0;u=x;return d|0}o=a+164|0;m=f[o>>2]|0;p=a+200|0;l=f[p>>2]|0;i=m+(l*5640|0)+5616|0;a:do if(f[i>>2]|0){g=f[m+(l*5640|0)+5612>>2]|0;h=0;while(1){j=g+16|0;k=f[j>>2]|0;a=k+10|0;e=f[w>>2]|0;if(a>>>0>(f[t>>2]|0)>>>0){e=Lc(e,a)|0;if(!e)break;f[w>>2]=e;f[t>>2]=a}yb(e,65396,2);yb(e+2|0,k+8|0,2);yb(e+4|0,0,2);yb(e+6|0,f[g+4>>2]<<8|f[g+8>>2]&255|f[g>>2]<<10,2);yb(e+8|0,0,2);hj(e+10|0,f[g+12>>2]|0,f[j>>2]|0)|0;if((Fb(c,f[w>>2]|0,a,d)|0)!=(a|0)){q=0;s=41;break}h=h+1|0;if(h>>>0>=(f[i>>2]|0)>>>0)break a;else g=g+20|0}if((s|0)==41){u=x;return q|0}Mc(f[w>>2]|0);f[w>>2]=0;f[t>>2]=0;Mb(d,1,15464,n)|0;d=0;u=x;return d|0}while(0);n=m+(l*5640|0)+5628|0;b:do if(f[n>>2]|0){a=f[m+(l*5640|0)+5624>>2]|0;l=0;while(1){k=a+4|0;g=f[k>>2]|0;i=g>>>0>255;j=i?2:1;i=i?32768:0;g=X(j,g<<1)|0;m=g+19|0;e=f[w>>2]|0;if(m>>>0>(f[t>>2]|0)>>>0){e=Lc(e,m)|0;if(!e)break;f[w>>2]=e;f[t>>2]=m}yb(e,65397,2);yb(e+2|0,g+17|0,2);yb(e+4|0,0,2);yb(e+6|0,f[a>>2]|0,1);yb(e+7|0,0,2);yb(e+9|0,1,2);yb(e+11|0,1,1);yb(e+12|0,f[k>>2]|i,2);e=e+14|0;if(!(f[k>>2]|0))g=0;else{h=0;do{yb(e,h,j);e=e+j|0;h=h+1|0;g=f[k>>2]|0}while(h>>>0>>0)}yb(e,g|i,2);e=e+2|0;if(!(f[k>>2]|0))h=e;else{g=0;do{yb(e,g,j);e=e+j|0;g=g+1|0}while(g>>>0<(f[k>>2]|0)>>>0);h=e}e=((b[a+16>>0]&1^1)&255)<<16;g=f[a+8>>2]|0;if(g)e=f[g+8>>2]|e;g=f[a+12>>2]|0;if(g)e=f[g+8>>2]<<8|e;yb(h,e,3);if((Fb(c,f[w>>2]|0,m,d)|0)!=(m|0)){q=0;s=41;break}l=l+1|0;if(l>>>0>=(f[n>>2]|0)>>>0)break b;else a=a+20|0}if((s|0)==41){u=x;return q|0}Mc(f[w>>2]|0);f[w>>2]=0;f[t>>2]=0;Mb(d,1,15503,r)|0;d=0;u=x;return d|0}while(0);j=f[o>>2]|0;i=f[p>>2]|0;k=j+(i*5640|0)+5628|0;g=f[k>>2]|0;a=g+5|0;e=f[w>>2]|0;do if(a>>>0>(f[t>>2]|0)>>>0){e=Lc(e,a)|0;if(e|0){f[w>>2]=e;f[t>>2]=a;break}Mc(f[w>>2]|0);f[w>>2]=0;f[t>>2]=0;Mb(d,1,15542,v)|0;d=0;u=x;return d|0}while(0);yb(e,65399,2);yb(e+2|0,g+3|0,2);yb(e+4|0,f[k>>2]|0,1);if(f[k>>2]|0){h=0;g=f[j+(i*5640|0)+5624>>2]|0;e=e+5|0;while(1){yb(e,f[g>>2]|0,1);h=h+1|0;if(h>>>0>=(f[k>>2]|0)>>>0)break;else{g=g+20|0;e=e+1|0}}}d=(Fb(c,f[w>>2]|0,a,d)|0)==(a|0)&1;u=x;return d|0}function ue(a,b,c){a=a|0;b=b|0;c=c|0;b=Hb(b)|0;c=(f[a+196>>2]|0)+8|0;f[c>>2]=b;f[c+4>>2]=I;return 1}function ve(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=u;u=u+16|0;b=Lf(0)|0;d=a+204|0;f[d>>2]=b;if(!b){Mb(c,1,15385,e)|0;c=0;u=e;return c|0}if(Pf(b,f[a+80>>2]|0,a+88|0)|0){c=1;u=e;return c|0}Qf(f[d>>2]|0);f[d>>2]=0;c=0;u=e;return c|0}function we(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0,H=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0,Q=0,R=0,S=0;P=a+80|0;E=f[P>>2]|0;S=a+164|0;h=f[S>>2]|0;O=E+24|0;D=f[O>>2]|0;g=f[D>>2]|0;e=f[D+4>>2]|0;G=E+16|0;D=X(f[D+24>>2]|0,f[G>>2]|0)|0;C=Hb(c)|0;Q=a+116|0;c=f[Q>>2]|0;R=a+112|0;i=f[R>>2]|0;F=(+(C>>>0)+4294967296.0*+(I|0))/+((X(i,c)|0)>>>0);C=(b[a+181>>0]&8)==0?1:2;if(c|0){s=a+92|0;u=a+100|0;x=a+96|0;y=a+104|0;z=E+4|0;A=E+8|0;B=E+12|0;w=+((X(g<<3,e)|0)>>>0);p=0;g=i;e=i;while(1){o=p;p=p+1|0;if(!e){r=c;q=g;e=0}else{l=0;do{v=+Ja[C&3](h);k=f[h+8>>2]|0;v=v/+(k>>>0);r=f[s>>2]|0;g=f[u>>2]|0;j=(X(g,l)|0)+r|0;e=f[E>>2]|0;e=(j|0)>(e|0)?j:e;j=f[x>>2]|0;i=f[y>>2]|0;q=(X(i,o)|0)+j|0;c=f[z>>2]|0;c=(q|0)>(c|0)?q:c;l=l+1|0;r=(X(g,l)|0)+r|0;g=f[A>>2]|0;g=(r|0)<(g|0)?r:g;j=(X(i,p)|0)+j|0;i=f[B>>2]|0;i=(j|0)<(i|0)?j:i;j=h+20|0;m=+n[j>>2];if(m>0.0){t=+((X(X(g-e|0,D)|0,i-c|0)|0)>>>0)/(m*w)-v;n[j>>2]=t}if(k>>>0>1){m=+((X(X(g-e|0,D)|0,i-c|0)|0)>>>0);e=h+24|0;c=1;while(1){t=+n[e>>2];if(t>0.0)n[e>>2]=m/(t*w)-v;c=c+1|0;if(c>>>0>=k>>>0)break;else e=e+4|0}}h=h+5640|0;e=f[R>>2]|0}while(l>>>0>>0);r=f[Q>>2]|0;q=e}if(p>>>0>=r>>>0)break;else{g=q;c=r}}if(r|0?(K=F+2.0,q|0):0){l=0;e=f[S>>2]|0;while(1){o=0;p=e;k=e+16|0;while(1){e=p+20|0;m=+n[e>>2];if(m>0.0?(w=m-F,n[e>>2]=w,w<30.0):0)n[e>>2]=30.0;c=p+24|0;e=f[p+8>>2]|0;j=e+-1|0;m=+n[c>>2];h=m>0.0;if(j>>>0>1){i=k+(e<<2)|0;g=1;e=h;do{if(e?(w=m-F,n[c>>2]=w,M=+n[c+-4>>2],w>2]=M+20.0;c=c+4|0;g=g+1|0;m=+n[c>>2];e=m>0.0}while((g|0)!=(j|0));if(e){H=i;J=m;N=25}}else if(h){H=c;J=m;N=25}if((N|0)==25?(N=0,w=J-K,n[H>>2]=w,L=+n[H+-4>>2],w>2]=L+20.0;p=p+5640|0;o=o+1|0;if(o>>>0>=q>>>0)break;else k=k+5640|0}l=l+1|0;if(l>>>0>=r>>>0)break;else e=p}}}h=f[G>>2]|0;if(!h)u=0;else{i=(f[a+100>>2]|0)+-1|0;j=(f[a+104>>2]|0)+-1|0;g=0;e=f[O>>2]|0;c=0;while(1){O=f[e>>2]|0;N=f[e+4>>2]|0;O=X(((j+N|0)>>>0)/(N>>>0)|0,((i+O|0)>>>0)/(O>>>0)|0)|0;g=(X(O,f[e+24>>2]|0)|0)+g|0;c=c+1|0;if(c>>>0>=h>>>0)break;else e=e+52|0}u=~~(+(g>>>0)*.1625)>>>0}o=f[(f[P>>2]|0)+16>>2]|0;r=o+-1|0;e=f[S>>2]|0;s=X(f[Q>>2]|0,f[R>>2]|0)|0;p=(s|0)==0;if(p)h=0;else{c=0;g=0;h=e;while(1){S=f[h+5588>>2]|0;c=c>>>0>S>>>0?c:S;g=g+1|0;if((g|0)==(s|0))break;else h=h+5640|0}h=c*12|0}q=a+88|0;if(((d[q>>1]|0)+-3&65535)>=4){if((o|0)==0|p){g=6;c=6}else{i=0;c=0;do{k=f[e+(i*5640|0)+5584>>2]|0;j=0;do{if(!(f[k+(j*1080|0)>>2]&1))g=5;else g=(f[k+(j*1080|0)+4>>2]|0)+5|0;c=c>>>0>g>>>0?c:g;j=j+1|0}while((j|0)!=(o|0));i=i+1|0}while((i|0)!=(s|0));c=c+6|0;j=0;g=0;do{l=f[e+(j*5640|0)+5584>>2]|0;k=0;do{if(!(f[l+(k*1080|0)>>2]&1))i=5;else i=(f[l+(k*1080|0)+4>>2]|0)+5|0;g=g>>>0>i>>>0?g:i;k=k+1|0}while((k|0)!=(o|0));j=j+1|0}while((j|0)!=(s|0));g=g+6|0}h=(X(g+c|0,r)|0)+h|0}if(p)e=13;else{g=0;c=0;while(1){S=f[e+420>>2]|0;g=g>>>0>S>>>0?g:S;c=c+1|0;if((c|0)==(s|0))break;else e=e+5640|0}e=(g*9|0)+13|0}S=h+u+e|0;f[a+40>>2]=S;S=Hc(S)|0;f[a+36>>2]=S;if(!S){a=0;return a|0}if(((d[q>>1]|0)+-3&65535)>=4){a=1;return a|0}e=Hc((f[a+32>>2]|0)*5|0)|0;f[a+24>>2]=e;if(!e){a=0;return a|0}f[a+28>>2]=e;a=1;return a|0}function xe(a){a=a|0;return 0.0}function ye(a){a=a|0;return +(+((((f[a+5588>>2]|0)*14|0)+-14|0)>>>0))}function ze(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;m=u;u=u+16|0;j=m+8|0;i=m;k=f[a+(b*5640|0)+5584>>2]|0;b=f[k+(c*1080|0)+24>>2]|0;do if((b|0)!=1){a=(f[k+(c*1080|0)+4>>2]|0)*3|0;h=a+-2|0;if(!b){a=a+-1|0;if((f[e>>2]|0)>>>0>>0){Mb(g,1,15741,i)|0;e=0;u=m;return e|0}else{yb(d,f[k+(c*1080|0)+804>>2]<<5,1);if(!h)break;else b=0;do{d=d+1|0;yb(d,f[k+(c*1080|0)+28+(b<<3)>>2]<<3,1);b=b+1|0}while((b|0)!=(h|0))}}else l=7}else{h=1;b=1;l=7}while(0);if((l|0)==7){a=h<<1|1;if((f[e>>2]|0)>>>0>>0){Mb(g,1,15741,j)|0;e=0;u=m;return e|0}yb(d,(f[k+(c*1080|0)+804>>2]<<5)+b|0,1);if(h){d=d+1|0;b=0;while(1){yb(d,(f[k+(c*1080|0)+28+(b<<3)>>2]<<11)+(f[k+(c*1080|0)+28+(b<<3)+4>>2]|0)|0,2);b=b+1|0;if((b|0)==(h|0))break;else d=d+2|0}}}f[e>>2]=(f[e>>2]|0)-a;e=1;u=m;return e|0}function Ae(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0;i=u;u=u+16|0;g=f[a+(b*5640|0)+5584>>2]|0;if((f[d>>2]|0)>>>0<5){Mb(e,1,15813,i)|0;d=0;u=i;return d|0}h=g+4|0;yb(c,(f[h>>2]|0)+-1|0,1);yb(c+1|0,(f[g+8>>2]|0)+-2|0,1);yb(c+2|0,(f[g+12>>2]|0)+-2|0,1);yb(c+3|0,f[g+16>>2]|0,1);yb(c+4|0,f[g+20>>2]|0,1);a=(f[d>>2]|0)+-5|0;f[d>>2]=a;if(!(f[g>>2]&1)){d=1;u=i;return d|0}b=f[h>>2]|0;if(a>>>0>>0){Mb(e,1,15813,i+8|0)|0;d=0;u=i;return d|0}if(!b)b=0;else{a=c+5|0;c=0;while(1){yb(a,(f[g+944+(c<<2)>>2]<<4)+(f[g+812+(c<<2)>>2]|0)|0,1);c=c+1|0;b=f[h>>2]|0;if(c>>>0>=b>>>0)break;else a=a+1|0}a=f[d>>2]|0}f[d>>2]=a-b;d=1;u=i;return d|0}function Be(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+48|0;m=o+40|0;n=o+32|0;l=o+24|0;j=o+16|0;h=o+8|0;i=a+200|0;if((f[i>>2]|0)!=(b|0)){Mb(g,1,15150,o)|0;f[j>>2]=b;Mb(g,1,16086,j)|0;u=o;return 0}k=X(f[a+116>>2]|0,f[a+112>>2]|0)|0;f[h>>2]=b+1;f[h+4>>2]=k;Mb(g,4,15187,h)|0;f[a+12>>2]=0;k=a+204|0;h=f[k>>2]|0;f[h+12>>2]=f[(f[a+164>>2]|0)+(b*5640|0)+5588>>2];f[a+8>>2]=0;if(!(Uf(h,f[i>>2]|0,g)|0)){f[j>>2]=b;Mb(g,1,16086,j)|0;u=o;return 0}h=f[k>>2]|0;a:do if(f[(f[h+24>>2]|0)+16>>2]|0){i=0;while(1){if(!(Tf((f[(f[f[h+20>>2]>>2]|0)+20>>2]|0)+(i*52|0)|0)|0))break;i=i+1|0;h=f[k>>2]|0;if(i>>>0>=(f[(f[h+24>>2]|0)+16>>2]|0)>>>0)break a}Mb(g,1,15208,l)|0;n=0;u=o;return n|0}while(0);if(!(ag(h,c,d)|0)){Mb(g,1,15285,n)|0;n=0;u=o;return n|0}if(Xd(a,e,g)|0){n=1;u=o;return n|0}f[m>>2]=b;Mb(g,1,16143,m)|0;n=0;u=o;return n|0}function Ce(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+16|0;if(!c){c=0;u=i;return c|0}if(!(Qd(f[a>>2]|0,b,c,d)|0)){Mb(d,1,16201,i)|0;c=0;u=i;return c|0}if(f[a+128>>2]|0){c=1;u=i;return c|0}h=a+108|0;if(!(De(c,h,d)|0)){c=0;u=i;return c|0}b=f[a+48>>2]|0;switch(b|0){case 16:{f[c+20>>2]=1;break}case 17:{f[c+20>>2]=2;break}case 18:{f[c+20>>2]=3;break}case 24:{f[c+20>>2]=4;break}default:f[c+20>>2]=(b|0)==12?5:-1}g=a+120|0;b=f[g>>2]|0;do if(b|0){if(f[b+12>>2]|0){Ee(c,h);break}Mc(f[b+4>>2]|0);Mc(f[(f[g>>2]|0)+8>>2]|0);Mc(f[f[g>>2]>>2]|0);b=f[g>>2]|0;e=f[b+12>>2]|0;if(e){Mc(e);b=f[g>>2]|0}Mc(b);f[g>>2]=0}while(0);if(f[a+116>>2]|0)Fe(c,h,d);b=f[h>>2]|0;if(!b){c=1;u=i;return c|0}f[c+28>>2]=b;f[c+32>>2]=f[a+112>>2];f[h>>2]=0;c=1;u=i;return c|0}function De(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=u;u=u+80|0;A=B+72|0;z=B+64|0;y=B+56|0;x=B+48|0;w=B+40|0;v=B+32|0;t=B+24|0;q=B+16|0;n=B+8|0;m=B;g=f[c+8>>2]|0;a:do if(!g)g=f[c+12>>2]|0;else{p=f[g>>2]|0;o=d[g+4>>1]|0;i=f[a+16>>2]|0;g=f[c+12>>2]|0;if((g|0)!=0?(f[g+12>>2]|0)!=0:0)i=h[g+18>>0]|0;b:do if(!(o<<16>>16)){if(!i)break a}else{l=0;c:while(1){c=l&65535;k=j[p+(c*6|0)>>1]|0;if(i>>>0<=k>>>0){l=14;break}c=d[p+(c*6|0)+4>>1]|0;switch(c<<16>>16){case 0:case -1:break;default:{c=(c&65535)+-1|0;if(c>>>0>=i>>>0){l=17;break c}}}l=l+1<<16>>16;if((l&65535)>=(o&65535)){l=8;break}}if((l|0)==8)while(1){i=i+-1|0;c=0;do{if((i|0)==(j[p+((c&65535)*6|0)>>1]|0))break;c=c+1<<16>>16}while((c&65535)<(o&65535));if(c<<16>>16==o<<16>>16)break b;if(!i)break a;else l=8}else if((l|0)==14){f[m>>2]=k;f[m+4>>2]=i;Mb(e,1,16331,m)|0;A=0;u=B;return A|0}else if((l|0)==17){f[n>>2]=c;f[n+4>>2]=i;Mb(e,1,16331,n)|0;A=0;u=B;return A|0}}while(0);Mb(e,1,16368,q)|0;A=0;u=B;return A|0}while(0);if(!g){A=1;u=B;return A|0}s=f[g+12>>2]|0;if(!s){A=1;u=B;return A|0}o=b[g+18>>0]|0;r=o&255;q=o<<24>>24==0;if(q)g=1;else{l=a+16|0;g=1;k=0;c=0;do{c=j[s+(c<<2)>>1]|0;i=f[l>>2]|0;if(i>>>0<=c>>>0){f[t>>2]=c;f[t+4>>2]=i;Mb(e,1,16331,t)|0;g=0}k=k+1<<16>>16;c=k&65535}while(c>>>0>>0)}p=Ic(r,4)|0;if(!p){Mb(e,1,16401,v)|0;A=0;u=B;return A|0}if(!q){m=0;n=0;do{i=b[s+(n<<2)+3>>0]|0;k=i&255;do if((i&255)<(o&255)){l=p+(k<<2)|0;c=b[s+(n<<2)+2>>0]|0;if((f[l>>2]|0)!=0&c<<24>>24==1){f[x>>2]=k;Mb(e,1,16474,x)|0;g=0;break}if(c<<24>>24!=0|i<<24>>24==0){f[l>>2]=1;break}else{f[y>>2]=n;f[y+4>>2]=k;Mb(e,1,16505,y)|0;g=0;break}}else{f[w>>2]=k;Mb(e,1,16418,w)|0;g=0}while(0);m=m+1<<16>>16;n=m&65535}while(n>>>0>>0);if(!q){i=0;c=0;do{if((f[p+(c<<2)>>2]|0)==0?(b[s+(c<<2)+2>>0]|0)!=0:0){f[z>>2]=c;Mb(e,1,16541,z)|0;g=0}i=i+1<<16>>16;c=i&65535}while(c>>>0>>0)}}if(!g){Mc(p);A=0;u=B;return A|0}d:do if(!((f[a+16>>2]|0)!=1|q)){c=0;g=0;while(1){c=c+1<<16>>16;if(!(f[p+(g<<2)>>2]|0))break;g=c&65535;if(g>>>0>=r>>>0)break d}f[A>>2]=g;Mb(e,2,16579,A)|0;g=0;c=0;do{b[s+(c<<2)+2>>0]=1;b[s+(c<<2)+3>>0]=g;g=g+1<<16>>16;c=g&65535}while(c>>>0>>0)}while(0);Mc(p);A=1;u=B;return A|0}function Ee(a,c){a=a|0;c=c|0;var e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=c+12|0;c=f[w>>2]|0;m=f[c+8>>2]|0;n=f[c+4>>2]|0;r=f[c>>2]|0;q=f[c+12>>2]|0;c=b[c+18>>0]|0;s=a+24|0;t=f[s>>2]|0;u=c&255;v=Hc(u*52|0)|0;if(!v)return;o=c<<24>>24==0;if(!o){k=0;l=0;do{c=d[q+(l<<2)>>1]|0;if(!(b[q+(l<<2)+2>>0]|0)){c=c&65535;e=v+(l*52|0)|0;g=t+(c*52|0)|0;i=e+52|0;do{f[e>>2]=f[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(i|0))}else{c=c&65535;e=v+((h[q+(l<<2)+3>>0]|0)*52|0)|0;g=t+(c*52|0)|0;i=e+52|0;do{f[e>>2]=f[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(i|0))}i=Hc(X(f[t+(c*52|0)+8>>2]<<2,f[t+(c*52|0)+12>>2]|0)|0)|0;f[v+(l*52|0)+44>>2]=i;if(!i){p=7;break}f[v+(l*52|0)+24>>2]=h[m+l>>0];f[v+(l*52|0)+32>>2]=h[n+l>>0];k=k+1<<16>>16;l=k&65535}while(l>>>0>>0);if((p|0)==7){Mc(v);return}m=j[(f[w>>2]|0)+16>>1]|0;n=m+-1|0;if(!o){i=0;c=0;do{k=f[t+((j[q+(c<<2)>>1]|0)*52|0)+44>>2]|0;g=h[q+(c<<2)+3>>0]|0;l=X(f[v+(g*52|0)+12>>2]|0,f[v+(g*52|0)+8>>2]|0)|0;if(!(b[q+(c<<2)+2>>0]|0)){e=f[v+(c*52|0)+44>>2]|0;if(l|0){c=0;do{f[e+(c<<2)>>2]=f[k+(c<<2)>>2];c=c+1|0}while((c|0)!=(l|0))}}else{e=f[v+(g*52|0)+44>>2]|0;if(l|0){c=0;do{p=f[k+(c<<2)>>2]|0;p=r+((X((p|0)<0?0:(p|0)<(m|0)?p:n,u)|0)+g<<2)|0;f[e+(c<<2)>>2]=f[p>>2];c=c+1|0}while((c|0)!=(l|0))}}i=i+1<<16>>16;c=i&65535}while(c>>>0>>0)}}g=a+16|0;i=f[g>>2]|0;if(i|0){e=0;c=0;do{c=f[t+(c*52|0)+44>>2]|0;if(c|0)Mc(c);e=e+1<<16>>16;c=e&65535}while(i>>>0>c>>>0)}Mc(t);f[s>>2]=v;f[g>>2]=u;Mc(f[(f[w>>2]|0)+4>>2]|0);Mc(f[(f[w>>2]|0)+8>>2]|0);Mc(f[f[w>>2]>>2]|0);c=f[w>>2]|0;e=f[c+12>>2]|0;if(e){Mc(e);c=f[w>>2]|0}Mc(c);f[w>>2]=0;return}function Fe(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=u;u=u+80|0;y=B+8|0;x=B;w=B+16|0;A=b+8|0;e=f[A>>2]|0;b=f[e>>2]|0;v=d[e+4>>1]|0;if(v<<16>>16){t=a+16|0;m=a+24|0;s=v&65535;q=1;r=0;while(1){n=d[b+(r*6|0)>>1]|0;o=n&65535;a=f[t>>2]|0;a:do if(a>>>0>o>>>0){e=d[b+(r*6|0)+4>>1]|0;switch(e<<16>>16){case -1:case 0:{d[(f[m>>2]|0)+(o*52|0)+48>>1]=d[b+(r*6|0)+2>>1]|0;break a}default:{}}p=(e&65535)+65535&65535;l=e+-1<<16>>16;j=l&65535;if(a>>>0<=j>>>0){f[y>>2]=j;f[y+4>>2]=a;Mb(c,2,16290,y)|0;break}k=b+(r*6|0)+2|0;if(n<<16>>16!=l<<16>>16?(d[k>>1]|0)==0:0){e=f[m>>2]|0;a=e+(o*52|0)|0;g=w;h=a;i=g+52|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=a;h=e+(j*52|0)|0;i=g+52|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=(f[m>>2]|0)+(j*52|0)|0;h=w;i=g+52|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));if((v&65535)>(r+1&65535)){g=q;do{a=b+(g*6|0)|0;e=d[a>>1]|0;if(e<<16>>16!=n<<16>>16){if(e<<16>>16==l<<16>>16){e=n;z=14}}else{e=p;z=14}if((z|0)==14){z=0;d[a>>1]=e}g=g+1|0}while(v<<16>>16!=(g&65535)<<16>>16)}}d[(f[m>>2]|0)+(o*52|0)+48>>1]=d[k>>1]|0}else{f[x>>2]=o;f[x+4>>2]=a;Mb(c,2,16250,x)|0}while(0);r=r+1|0;if((r|0)==(s|0))break;else q=q+1|0}b=f[A>>2]|0;e=b;b=f[b>>2]|0}if(!b){z=e;Mc(z);f[A>>2]=0;u=B;return}else{Mc(b);z=f[A>>2]|0;Mc(z);f[A>>2]=0;u=B;return}}function Ge(a,c){a=a|0;c=c|0;Oc(f[a>>2]|0,c);b[a+124>>0]=0;f[a+128>>2]=f[c+8248>>2]&1;return}function He(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;x=u;u=u+80|0;v=x+64|0;s=x+56|0;o=x+48|0;r=x+40|0;q=x+32|0;p=x+24|0;if(!((a|0)!=0&(c|0)!=0&(e|0)!=0)){c=0;u=x;return c|0}t=e+16|0;if(((f[t>>2]|0)+-1|0)>>>0>16383){Mb(g,1,16630,x)|0;c=0;u=x;return c|0}if(!(Tc(f[a>>2]|0,c,e,g)|0)){c=0;u=x;return c|0}f[a+56>>2]=1785737760;f[a+60>>2]=0;f[a+64>>2]=1;h=Hc(4)|0;f[a+68>>2]=h;if(!h){Mb(g,1,16699,x+8|0)|0;c=0;u=x;return c|0}f[h>>2]=1785737760;m=f[t>>2]|0;f[a+20>>2]=m;m=Hc(m*12|0)|0;f[a+72>>2]=m;if(!m){Mb(g,1,16699,x+16|0)|0;c=0;u=x;return c|0}f[a+16>>2]=(f[e+12>>2]|0)-(f[e+4>>2]|0);f[a+12>>2]=(f[e+8>>2]|0)-(f[e>>2]|0);w=e+24|0;n=f[w>>2]|0;i=f[n+24>>2]|0;j=f[n+32>>2]|0;k=a+24|0;f[k>>2]=i+-1+(j<<7);l=f[t>>2]|0;if(l>>>0>1){h=1;do{if((i|0)!=(f[n+(h*52|0)+24>>2]|0))f[k>>2]=255;h=h+1|0}while(h>>>0>>0)}f[a+28>>2]=7;f[a+32>>2]=0;f[a+36>>2]=0;if(l|0?(f[m+8>>2]=i+-1+(j<<7),(l|0)!=1):0){h=1;do{f[m+(h*12|0)+8>>2]=(f[n+(h*52|0)+24>>2]|0)+-1+(f[n+(h*52|0)+32>>2]<<7);h=h+1|0}while(h>>>0>>0)}h=e+32|0;i=f[h>>2]|0;j=a+40|0;a:do if(!i){f[j>>2]=1;switch(f[e+20>>2]|0){case 1:{f[a+48>>2]=16;break a}case 2:{f[a+48>>2]=17;break a}case 3:{f[a+48>>2]=18;break a}default:break a}}else{f[j>>2]=2;f[a+48>>2]=0;f[a+112>>2]=i;l=Ic(1,i)|0;f[a+108>>2]=l;hj(l|0,f[e+28>>2]|0,f[h>>2]|0)|0;b[a+124>>0]=1;l=f[t>>2]|0}while(0);b:do if(l|0){j=f[w>>2]|0;k=0;h=0;i=0;do{e=(d[j+(i*52|0)+48>>1]|0)==0;h=h+((e^1)&1)|0;k=e?k:i;i=i+1|0}while(i>>>0>>0);switch(h|0){case 0:break b;case 1:break;default:{Mb(g,2,16995,o)|0;break b}}switch(f[a+48>>2]|0){case 18:case 16:{h=3;break}case 17:{h=1;break}default:{Mb(g,2,16745,p)|0;break b}}if(l>>>0<=h>>>0){Mb(g,2,16819,q)|0;break}if(k>>>0>>0){Mb(g,2,16912,r)|0;break}r=Hc(8)|0;i=a+116|0;f[i>>2]=r;if(!r){Mb(g,1,17060,s)|0;c=0;u=x;return c|0}k=Hc((f[t>>2]|0)*6|0)|0;i=f[i>>2]|0;f[i>>2]=k;if(!k){Mb(g,1,17060,v)|0;c=0;u=x;return c|0}j=f[t>>2]|0;d[i+4>>1]=j;i=0;do{d[k+(i*6|0)>>1]=i;d[k+(i*6|0)+2>>1]=0;v=i;i=i+1|0;d[k+(v*6|0)+4>>1]=i}while((i|0)!=(h|0));if(h>>>0>>0){i=f[w>>2]|0;do{w=(d[i+(h*52|0)+48>>1]|0)==0;d[k+(h*6|0)>>1]=h;d[k+(h*6|0)+2>>1]=w?-1:1;d[k+(h*6|0)+4>>1]=w<<31>>31;h=h+1|0}while(h>>>0>>0)}}while(0);f[a+52>>2]=0;f[a+44>>2]=0;f[a+96>>2]=f[c+18692>>2];c=1;u=x;return c|0}function Ie(a,b,c){a=a|0;b=b|0;c=c|0;return Wd(f[a>>2]|0,b,c)|0}function Je(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;d=a+8|0;if(!(kg(f[d>>2]|0,53,c)|0)){c=0;return c|0}h=f[d>>2]|0;i=lg(h)|0;d=mg(h)|0;if(i){e=1;g=0;while(1){if(!e)e=0;else e=(Ma[f[d>>2]&63](a,b,c)|0)!=0;g=g+1|0;if((g|0)==(i|0))break;else{d=d+4|0;e=e&1}}ng(h);if(!e){c=0;return c|0}}else ng(h);c=Zc(f[a>>2]|0,b,c)|0;return c|0}function Ke(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0;J=u;u=u+192|0;D=J+152|0;C=J+144|0;B=J+136|0;A=J+128|0;z=J+120|0;x=J+88|0;w=J+80|0;v=J+64|0;t=J+48|0;F=J+40|0;E=J+32|0;H=J+24|0;y=J+16|0;s=J+8|0;n=J+176|0;o=J+168|0;p=J+156|0;d=Ic(1,1024)|0;if(!d){Mb(c,1,17104,J)|0;H=0;u=J;return H|0}q=n+4|0;r=p+4|0;G=a+100|0;l=d;k=1024;a:while(1){if((Eb(b,n,8,c)|0)!=8)break;b:while(1){zb(n,p,4);zb(q,r,4);switch(f[p>>2]|0){case 0:{d=Ib(b)|0;m=I;if((m|0)>0|(m|0)==0&d>>>0>4294967287){m=6;break a}f[p>>2]=d+8;h=8;break}case 1:{if((Eb(b,n,8,c)|0)!=8){m=12;break a}zb(n,o,4);if(f[o>>2]|0){m=10;break a}zb(q,p,4);h=16;break}default:h=8}g=f[r>>2]|0;if((g|0)==1785737827){m=14;break a}i=f[p>>2]|0;if(!i){m=18;break a}if(i>>>0>>0){m=20;break a}c:do if((g|0)<1718909296)if((g|0)<1668112752)if((g|0)<1667523942){switch(g|0){case 1651532643:break;default:{m=43;break c}}e=1124;m=30;break}else{switch(g|0){case 1667523942:break;default:{m=43;break c}}e=1148;m=30;break}else if((g|0)<1668246642){switch(g|0){case 1668112752:break;default:{m=43;break c}}e=1140;m=30;break}else{switch(g|0){case 1668246642:break;default:{m=43;break c}}e=1116;m=30;break}else{if((g|0)<1783636e3)if((g|0)<1768449138)switch(g|0){case 1718909296:{m=27;break b}default:{m=43;break c}}else switch(g|0){case 1768449138:{e=1108;m=30;break c}default:{m=43;break c}}if((g|0)<1785737832)switch(g|0){case 1783636e3:{d=1084;m=29;break b}default:{m=43;break c}}if((g|0)<1885564018)switch(g|0){case 1785737832:{m=28;break b}default:{m=43;break c}}switch(g|0){case 1885564018:break;default:{m=43;break c}}e=1132;m=30}while(0);if((m|0)==30){m=0;d=i-h|0;f[t>>2]=g>>>24;f[t+4>>2]=g>>>16&255;f[t+8>>2]=g>>>8&255;f[t+12>>2]=g&255;Mb(c,2,17288,t)|0;if(f[G>>2]&4|0){j=e;g=d;break}j=f[r>>2]|0;f[v>>2]=j>>>24;f[v+4>>2]=j>>>16&255;f[v+8>>2]=j>>>8&255;f[v+12>>2]=j&255;Mb(c,2,17339,v)|0;f[G>>2]=f[G>>2]|2147483647;j=Jb(b,d,0,c)|0;if(!((j|0)==(d|0)&(I|0)==0)){m=32;break a}}else if((m|0)==43){m=0;d=i-h|0;e=f[G>>2]|0;if(!(e&1)){m=44;break a}if(!(e&2)){m=46;break a}f[G>>2]=e|2147483647;j=Jb(b,d,0,c)|0;if(!((j|0)==(d|0)&(I|0)==0)){m=49;break a}}if((Eb(b,n,8,c)|0)!=8)break a}if((m|0)==27){d=1092;m=29}else if((m|0)==28){d=1100;m=29}if((m|0)==29){m=0;j=d;g=i-h|0}i=Ib(b)|0;h=I;if((h|0)<0|(h|0)==0&i>>>0>>0){m=34;break}if(g>>>0>k>>>0){d=Lc(l,g)|0;if(!d){m=37;break}else e=g}else{d=l;e=k}if((Eb(b,d,g,c)|0)!=(g|0)){m=39;break}if(!(Na[f[j+4>>2]&63](a,d,g,c)|0)){m=42;break}else{l=d;k=e}}switch(m|0){case 6:{Mb(c,1,17154,s)|0;break}case 10:{Mb(c,1,17154,y)|0;break}case 12:break;case 14:{d=f[G>>2]|0;if(!(d&4)){Mb(c,1,17196,H)|0;Mc(l);H=0;u=J;return H|0}else{f[G>>2]=d|8;Mc(l);H=1;u=J;return H|0}}case 18:{Mb(c,1,17224,E)|0;Mc(l);H=0;u=J;return H|0}case 20:{f[F>>2]=i;f[F+4>>2]=g;Mb(c,1,17262,F)|0;Mc(l);H=0;u=J;return H|0}case 32:{Mb(c,1,17405,w)|0;Mc(l);H=0;u=J;return H|0}case 34:{F=f[p>>2]|0;G=f[r>>2]|0;H=Ib(b)|0;f[x>>2]=F;f[x+4>>2]=G>>>24;f[x+8>>2]=G>>>16&255;f[x+12>>2]=G>>>8&255;f[x+16>>2]=G&255;f[x+20>>2]=g;f[x+24>>2]=H;Mb(c,1,17455,x)|0;Mc(l);H=0;u=J;return H|0}case 37:{Mc(l);Mb(c,1,17531,z)|0;H=0;u=J;return H|0}case 39:{Mb(c,1,17573,A)|0;Mc(d);H=0;u=J;return H|0}case 42:{Mc(d);H=0;u=J;return H|0}case 44:{Mb(c,1,17622,B)|0;Mc(l);H=0;u=J;return H|0}case 46:{Mb(c,1,17692,C)|0;Mc(l);H=0;u=J;return H|0}case 49:{Mb(c,1,17405,D)|0;Mc(l);H=0;u=J;return H|0}}Mc(l);H=1;u=J;return H|0}function Le(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0;h=u;u=u+48|0;g=h+32|0;e=a+72|0;if(f[e>>2]|0){Mb(d,2,18543,h)|0;g=1;u=h;return g|0}if((c|0)!=14){Mb(d,1,18591,h+8|0)|0;g=0;u=h;return g|0}zb(b,a+16|0,4);zb(b+4|0,a+12|0,4);c=a+20|0;zb(b+8|0,c,2);c=f[c>>2]|0;if((c+-1|0)>>>0>16383){Mb(d,1,18624,h+16|0)|0;g=0;u=h;return g|0}c=Ic(c,12)|0;f[e>>2]=c;if(!c){Mb(d,1,18661,h+24|0)|0;g=0;u=h;return g|0}zb(b+10|0,a+24|0,1);c=a+28|0;zb(b+11|0,c,1);c=f[c>>2]|0;if((c|0)!=7){f[g>>2]=c;Mb(d,4,18710,g)|0}zb(b+12|0,a+32|0,1);zb(b+13|0,a+36|0,1);g=1;u=h;return g|0}function Me(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0;y=u;u=u+96|0;i=y+48|0;o=y+40|0;l=y+32|0;k=y+24|0;j=y+16|0;m=y+80|0;n=y+76|0;r=y+72|0;p=y+68|0;s=y+64|0;q=y+60|0;t=y+56|0;v=y+52|0;if(d>>>0<3){Mb(e,1,18186,y)|0;x=0;u=y;return x|0}w=a+108|0;x=a+124|0;if(b[x>>0]|0){Mb(e,4,18218,y+8|0)|0;x=1;u=y;return x|0}h=a+40|0;zb(c,h,1);zb(c+1|0,a+52|0,1);zb(c+2|0,a+44|0,1);g=c+3|0;h=f[h>>2]|0;switch(h|0){case 1:{if(d>>>0<7){f[j>>2]=d;Mb(e,1,18327,j)|0;x=0;u=y;return x|0}h=a+48|0;if((d|0)!=7?(f[h>>2]|0)!=14:0){f[k>>2]=d;Mb(e,2,18327,k)|0}zb(g,h,4);i=c+7|0;if((f[h>>2]|0)==14){m=Hc(36)|0;if(!m){Mb(e,1,18363,l)|0;x=0;u=y;return x|0}f[m>>2]=14;f[t>>2]=0;f[s>>2]=0;f[r>>2]=0;f[q>>2]=0;f[p>>2]=0;f[n>>2]=0;f[v>>2]=4470064;g=m+4|0;f[g>>2]=1145390592;switch(d|0){case 35:{zb(i,n,4);zb(c+11|0,r,4);zb(c+15|0,p,4);zb(c+19|0,s,4);zb(c+23|0,q,4);zb(c+27|0,t,4);zb(c+31|0,v,4);f[g>>2]=0;c=f[n>>2]|0;l=f[p>>2]|0;k=f[q>>2]|0;j=f[r>>2]|0;i=f[s>>2]|0;h=f[t>>2]|0;g=f[v>>2]|0;break}case 7:{c=0;l=0;k=0;j=0;i=0;h=0;g=4470064;break}default:{f[o>>2]=d;Mb(e,2,18393,o)|0;c=0;l=0;k=0;j=0;i=0;h=0;g=4470064}}f[m+8>>2]=c;f[m+16>>2]=l;f[m+24>>2]=k;f[m+12>>2]=j;f[m+20>>2]=i;f[m+28>>2]=h;f[m+32>>2]=g;f[w>>2]=m;f[a+112>>2]=0}b[x>>0]=1;x=1;u=y;return x|0}case 2:{i=d+-3|0;h=a+112|0;f[h>>2]=i;a=Ic(1,i)|0;f[w>>2]=a;if(!a){f[h>>2]=0;x=0;u=y;return x|0}if((d|0)>3){h=0;while(1){zb(g,m,1);b[(f[w>>2]|0)+h>>0]=f[m>>2];h=h+1|0;if((h|0)==(i|0))break;else g=g+1|0}}b[x>>0]=1;x=1;u=y;return x|0}default:{if(h>>>0<=2){x=1;u=y;return x|0}f[i>>2]=h;Mb(e,4,18437,i)|0;x=1;u=y;return x|0}}return 0}function Ne(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+16|0;g=i;e=f[a+24>>2]|0;if((e|0)!=255){f[g>>2]=e;Mb(d,2,18040,g)|0}h=a+20|0;if((f[h>>2]|0)!=(c|0)){Mb(d,1,18154,i+8|0)|0;h=0;u=i;return h|0}if(!c){h=1;u=i;return h|0}g=a+72|0;e=0;while(1){zb(b,(f[g>>2]|0)+(e*12|0)+8|0,1);e=e+1|0;if(e>>>0>=(f[h>>2]|0)>>>0){b=1;break}else b=b+1|0}u=i;return b|0}function Oe(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=u;u=u+16|0;i=r;q=r+12|0;j=a+120|0;if(e>>>0<3|(f[j>>2]|0)!=0){q=0;u=r;return q|0}zb(c,q,2);k=f[q>>2]|0;p=k&65535;if((p+-1|0)>>>0>1023){f[i>>2]=p;Mb(g,1,17957,i)|0;q=0;u=r;return q|0}zb(c+2|0,q,1);o=f[q>>2]&65535;if(!o){Mb(g,1,17995,r+8|0)|0;q=0;u=r;return q|0}if((o+3|0)>>>0>e>>>0){q=0;u=r;return q|0}m=Hc(X(p<<2,o)|0)|0;if(!m){q=0;u=r;return q|0}n=Hc(o)|0;if(!n){Mc(m);q=0;u=r;return q|0}l=Hc(o)|0;if(!l){Mc(m);Mc(n);q=0;u=r;return q|0}a=Hc(20)|0;if(!a){Mc(m);Mc(n);Mc(l);q=0;u=r;return q|0}f[a+4>>2]=l;f[a+8>>2]=n;f[a>>2]=m;d[a+16>>1]=k;b[a+18>>0]=f[q>>2];f[a+12>>2]=0;f[j>>2]=a;a=0;g=c+3|0;i=0;do{zb(g,q,1);g=g+1|0;b[n+i>>0]=(f[q>>2]&127)+1;b[l+i>>0]=(f[q>>2]|0)>>>7&1;a=a+1<<16>>16;i=a&65535}while(o>>>0>i>>>0);if(!p){q=1;u=r;return q|0}l=c;k=0;i=m;a=g;a:while(1){j=0;g=a;a=0;do{a=((h[n+a>>0]|0)+7|0)>>>3;a=a>>>0<4?a:4;if((g-l+a|0)>(e|0)){a=0;i=22;break a}zb(g,q,a);g=g+a|0;f[i>>2]=f[q>>2];i=i+4|0;j=j+1<<16>>16;a=j&65535}while(o>>>0>a>>>0);k=k+1<<16>>16;if(p>>>0<=(k&65535)>>>0){a=1;i=22;break}else a=g}if((i|0)==22){u=r;return a|0}return 0}function Pe(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=u;u=u+32|0;k=l+20|0;j=a+120|0;a=f[j>>2]|0;if(!a){Mb(g,1,17847,l)|0;k=0;u=l;return k|0}if(f[a+12>>2]|0){Mb(g,1,17893,l+8|0)|0;k=0;u=l;return k|0}h=b[a+18>>0]|0;i=h&255;a=i<<2;if(a>>>0>e>>>0){Mb(g,1,17924,l+16|0)|0;k=0;u=l;return k|0}e=Hc(a)|0;if(!e){k=0;u=l;return k|0}if(h<<24>>24){a=c;h=0;while(1){zb(a,k,2);d[e+(h<<2)>>1]=f[k>>2];zb(a+2|0,k,1);b[e+(h<<2)+2>>0]=f[k>>2];zb(a+3|0,k,1);b[e+(h<<2)+3>>0]=f[k>>2];h=h+1|0;if((h|0)==(i|0))break;else a=a+4|0}}f[(f[j>>2]|0)+12>>2]=e;k=1;u=l;return k|0}function Qe(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,k=0;k=u;u=u+32|0;i=k+20|0;h=a+116|0;if(f[h>>2]|0){i=0;u=k;return i|0}if(c>>>0<2){Mb(e,1,17753,k)|0;i=0;u=k;return i|0}zb(b,i,2);g=f[i>>2]|0;a=g&65535;if(!a){Mb(e,1,17786,k+8|0)|0;i=0;u=k;return i|0}if(((a*6|0)+2|0)>>>0>c>>>0){Mb(e,1,17753,k+16|0)|0;i=0;u=k;return i|0}g=Hc(g*6|0)|0;if(!g){i=0;u=k;return i|0}a=Hc(8)|0;f[h>>2]=a;if(!a){Mc(g);i=0;u=k;return i|0}f[a>>2]=g;e=f[i>>2]&65535;d[a+4>>1]=e;if(!(e<<16>>16)){i=1;u=k;return i|0}else a=0;do{e=a&65535;zb(b+2|0,i,2);d[g+(e*6|0)>>1]=f[i>>2];zb(b+4|0,i,2);b=b+6|0;d[g+(e*6|0)+2>>1]=f[i>>2];zb(b,i,2);d[g+(e*6|0)+4>>1]=f[i>>2];a=a+1<<16>>16}while((a&65535)<(j[(f[h>>2]|0)+4>>1]|0));b=1;u=k;return b|0}function Re(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;g=u;u=u+32|0;e=g+20|0;a=a+100|0;if(f[a>>2]|0){Mb(d,1,19251,g)|0;e=0;u=g;return e|0}if((c|0)!=4){Mb(d,1,19305,g+8|0)|0;e=0;u=g;return e|0}zb(b,e,4);if((f[e>>2]|0)==218793738){f[a>>2]=f[a>>2]|1;e=1;u=g;return e|0}else{Mb(d,1,19339,g+16|0)|0;e=0;u=g;return e|0}return 0}function Se(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+32|0;g=i+24|0;h=a+100|0;if((f[h>>2]|0)!=1){Mb(d,1,19132,i)|0;h=0;u=i;return h|0}if(c>>>0<8){Mb(d,1,19182,i+8|0)|0;h=0;u=i;return h|0}zb(b,a+56|0,4);zb(b+4|0,a+60|0,4);b=b+8|0;c=c+-8|0;if(c&3|0){Mb(d,1,19182,i+16|0)|0;h=0;u=i;return h|0}c=c>>>2;e=a+64|0;f[e>>2]=c;if(c|0){c=Ic(c,4)|0;f[a+68>>2]=c;if(!c){Mb(d,1,19218,g)|0;h=0;u=i;return h|0}if(f[e>>2]|0){a=a+68|0;c=0;while(1){zb(b,(f[a>>2]|0)+(c<<2)|0,4);c=c+1|0;if(c>>>0>=(f[e>>2]|0)>>>0)break;else b=b+4|0}}}f[h>>2]=f[h>>2]|2;h=1;u=i;return h|0}function Te(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0;z=u;u=u+96|0;t=z+72|0;s=z+64|0;r=z+56|0;q=z+48|0;y=z+40|0;x=z+32|0;w=z+24|0;v=z+16|0;p=z+8|0;m=z+80|0;n=z+76|0;o=a+100|0;if(!(f[o>>2]&2)){Mb(d,1,18800,z)|0;y=0;u=z;return y|0}l=a+104|0;f[l>>2]=0;do if(c|0){i=0;a:while(1){if(c>>>0<8){h=6;break}zb(b,m,4);e=f[m>>2]|0;zb(b+4|0,m,4);k=f[m>>2]|0;switch(e|0){case 0:{h=15;break a}case 1:{if(c>>>0<16){h=9;break a}zb(b+8|0,n,4);if(f[n>>2]|0){h=11;break a}zb(b+12|0,m,4);e=f[m>>2]|0;if(!e){h=13;break a}j=16;break}default:j=8}if(e>>>0>>0){h=17;break}if(c>>>0>>0){h=20;break}b:do if((k|0)<1668246642){if((k|0)<1667523942){switch(k|0){case 1651532643:break;default:{h=28;break b}}g=1124;h=27;break}if((k|0)<1668112752){switch(k|0){case 1667523942:break;default:{h=28;break b}}g=1148;h=27;break}else{switch(k|0){case 1668112752:break;default:{h=28;break b}}g=1140;h=27;break}}else{if((k|0)<1768449138){switch(k|0){case 1668246642:break;default:{h=28;break b}}g=1116;h=27;break}if((k|0)<1885564018)switch(k|0){case 1768449138:{g=1108;h=27;break b}default:{h=28;break b}}switch(k|0){case 1885564018:break;default:{h=28;break b}}g=1132;h=27}while(0);if((h|0)==27){if(!(Na[f[g+4>>2]&63](a,b+j|0,e-j|0,d)|0)){b=0;h=33;break}}else if((h|0)==28)f[l>>2]=f[l>>2]|2147483647;i=(k|0)==1768449138?1:i;c=c-e|0;if(!c){h=30;break}else b=b+e|0}if((h|0)==6)Mb(d,1,18845,p)|0;else if((h|0)==9)Mb(d,1,18885,v)|0;else if((h|0)==11)Mb(d,1,17154,w)|0;else if((h|0)==13)Mb(d,1,17224,x)|0;else if((h|0)==15)Mb(d,1,17224,y)|0;else if((h|0)==17)Mb(d,1,18929,q)|0;else if((h|0)==20){Mb(d,1,19001,s)|0;y=0;u=z;return y|0}else if((h|0)==30){if(!i)break;f[o>>2]=f[o>>2]|4;y=1;u=z;return y|0}else if((h|0)==33){u=z;return b|0}Mb(d,1,18958,r)|0;y=0;u=z;return y|0}while(0);Mb(d,1,19073,t)|0;y=0;u=z;return y|0}function Ue(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;d=a+8|0;if(!(kg(f[d>>2]|0,54,c)|0)){i=0;return i|0}if(!(_d(f[a>>2]|0,b,c)|0)){i=0;return i|0}i=f[d>>2]|0;h=lg(i)|0;d=mg(i)|0;if(!h)d=1;else{e=d;d=1;g=0;while(1){if(!d)d=0;else d=(Ma[f[e>>2]&63](a,b,c)|0)!=0;d=d&1;g=g+1|0;if((g|0)==(h|0))break;else e=e+4|0}}ng(i);i=d;return i|0}function Ve(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;h=u;u=u+32|0;d=h+24|0;e=Hb(b)|0;g=I;a=a+80|0;i=a;i=_i(e|0,g|0,f[i>>2]|0,f[i+4>>2]|0)|0;yb(d,i,4);yb(d+4|0,1785737827,4);if(!(Kb(b,f[a>>2]|0,f[a+4>>2]|0,c)|0)){Mb(c,1,19383,h)|0;i=0;u=h;return i|0}if((Fb(b,d,8,c)|0)!=8){Mb(c,1,19383,h+8|0)|0;i=0;u=h;return i|0}if(Kb(b,e,g,c)|0){i=1;u=h;return i|0}Mb(c,1,19383,h+16|0)|0;i=0;u=h;return i|0}function We(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;e=a+4|0;if(!(kg(f[e>>2]|0,55,d)|0)){d=0;return d|0}i=f[e>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](a,b,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){d=0;return d|0}}else ng(i);e=a+8|0;if(!(kg(f[e>>2]|0,56,d)|0)){d=0;return d|0}if(!(kg(f[e>>2]|0,57,d)|0)){d=0;return d|0}if(!(kg(f[e>>2]|0,58,d)|0)){d=0;return d|0}if(f[a+96>>2]|0?(kg(f[e>>2]|0,59,d)|0)==0:0){d=0;return d|0}if(!(kg(f[e>>2]|0,60,d)|0)){d=0;return d|0}i=f[e>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](a,b,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){d=0;return d|0}}else ng(i);d=ee(f[a>>2]|0,b,c,d)|0;return d|0}function Xe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;c=(f[a>>2]|0?(f[a+104>>2]|f[a+100>>2]|0)==0:0)&(f[a+8>>2]|0)!=0&(f[a+4>>2]|0)!=0&(f[a+64>>2]|0)!=0&(f[a+16>>2]|0)!=0&(f[a+12>>2]|0)!=0&1;e=f[a+20>>2]|0;if(!e){g=c;a=a+40|0;a=f[a>>2]|0;a=a+-1|0;a=a>>>0<2;a=a&1;b=Lb(b)|0;b=b&g;b=b&a;return b|0}g=f[a+72>>2]|0;d=0;do{c=c&(f[g+(d*12|0)+8>>2]&126)>>>0<38;d=d+1|0}while(d>>>0>>0);a=a+40|0;a=f[a>>2]|0;a=a+-1|0;a=a>>>0<2;a=a&1;b=Lb(b)|0;b=b&c;b=b&a;return b|0}function Ye(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=u;u=u+16|0;d=a;yb(d,12,4);yb(d+4|0,1783636e3,4);yb(d+8|0,218793738,4);c=(Fb(b,d,12,c)|0)==12&1;u=a;return c|0}function Ze(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+16|0;j=k+8|0;g=a+64|0;h=(f[g>>2]<<2)+16|0;i=Ic(1,h)|0;if(!i){Mb(c,1,19500,k)|0;j=0;u=k;return j|0}yb(i,h,4);yb(i+4|0,1718909296,4);yb(i+8|0,f[a+56>>2]|0,4);yb(i+12|0,f[a+60>>2]|0,4);e=i+16|0;if(f[g>>2]|0){d=a+68|0;a=0;do{yb(e,f[(f[d>>2]|0)+(a<<2)>>2]|0,4);a=a+1|0}while(a>>>0<(f[g>>2]|0)>>>0)}a=(Fb(b,i,h,c)|0)==(h|0);if(!a)Mb(c,1,19539,j)|0;Mc(i);j=a&1;u=k;return j|0}function _e(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=u;u=u+80|0;n=p+16|0;l=p+8|0;k=p;e=p+24|0;j=p+72|0;d=e;g=d+48|0;do{f[d>>2]=0;d=d+4|0}while((d|0)<(g|0));if((f[a+24>>2]|0)==255){f[e>>2]=1;d=3;g=2;h=1;i=4}else{d=2;g=1;h=0;i=1}f[e+(h*12|0)>>2]=i;f[e+(g*12|0)>>2]=2;if(!(f[a+116>>2]|0))o=d;else{f[e+(d*12|0)>>2]=3;o=d+1|0}yb(j+4|0,1785737832,4);d=8;g=0;h=e;while(1){i=h+8|0;q=La[f[h>>2]&7](a,i)|0;f[h+4>>2]=q;if(!q){m=7;break}d=(f[i>>2]|0)+d|0;g=g+1|0;if((g|0)>=(o|0))break;else h=h+12|0}if((m|0)==7){Mb(c,1,19414,k)|0;g=0;d=e;while(1){e=f[d+4>>2]|0;if(e|0)Mc(e);g=g+1|0;if((g|0)>=(o|0)){d=0;break}else d=d+12|0}u=p;return d|0}yb(j,d,4);a:do if((Fb(b,j,8,c)|0)==8){d=0;g=e;while(1){q=g+8|0;m=Fb(b,f[g+4>>2]|0,f[q>>2]|0,c)|0;if((m|0)!=(f[q>>2]|0))break;d=d+1|0;if((d|0)>=(o|0)){d=1;break a}else g=g+12|0}Mb(c,1,19457,n)|0;d=0}else{Mb(c,1,19457,l)|0;d=0}while(0);g=0;while(1){h=f[e+4>>2]|0;if(h|0)Mc(h);g=g+1|0;if((g|0)>=(o|0))break;else e=e+12|0}u=p;return d|0}function $e(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=Hb(b)|0;a=a+88|0;f[a>>2]=d;f[a+4>>2]=I;c=Jb(b,24,0,c)|0;return (c|0)==24&(I|0)==0&1|0}function af(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=Hb(b)|0;a=a+80|0;f[a>>2]=d;f[a+4>>2]=I;c=Jb(b,8,0,c)|0;return (c|0)==8&(I|0)==0&1|0}function bf(a,b){a=a|0;b=b|0;var c=0;c=Ic(1,22)|0;if(!c){c=0;return c|0}yb(c,22,4);yb(c+4|0,1768449138,4);yb(c+8|0,f[a+16>>2]|0,4);yb(c+12|0,f[a+12>>2]|0,4);yb(c+16|0,f[a+20>>2]|0,2);yb(c+18|0,f[a+24>>2]|0,1);yb(c+19|0,f[a+28>>2]|0,1);yb(c+20|0,f[a+32>>2]|0,1);yb(c+21|0,f[a+36>>2]|0,1);f[b>>2]=22;return c|0}function cf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0;e=a+20|0;g=(f[e>>2]|0)+8|0;h=Ic(1,g)|0;if(!h){h=0;return h|0}yb(h,g,4);yb(h+4|0,1651532643,4);if(f[e>>2]|0){d=a+72|0;a=0;c=h+8|0;while(1){yb(c,f[(f[d>>2]|0)+(a*12|0)+8>>2]|0,1);a=a+1|0;if(a>>>0>=(f[e>>2]|0)>>>0)break;else c=c+1|0}}f[b>>2]=g;return h|0}function df(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,j=0;c=a+40|0;switch(f[c>>2]|0){case 1:{i=15;break}case 2:{i=(f[a+112>>2]|0)+11|0;break}default:{j=0;return j|0}}j=Ic(1,i)|0;if(!j){j=0;return j|0}yb(j,i,4);yb(j+4|0,1668246642,4);yb(j+8|0,f[c>>2]|0,1);yb(j+9|0,f[a+52>>2]|0,1);yb(j+10|0,f[a+44>>2]|0,1);d=j+11|0;switch(f[c>>2]|0){case 1:{yb(d,f[a+48>>2]|0,4);break}case 2:{g=a+112|0;if(f[g>>2]|0){e=a+108|0;c=d;a=0;while(1){yb(c,h[(f[e>>2]|0)+a>>0]|0,1);a=a+1|0;if(a>>>0>=(f[g>>2]|0)>>>0)break;else c=c+1|0}}break}default:{}}f[b>>2]=i;return j|0}function ef(a,b){a=a|0;b=b|0;var c=0,e=0,g=0,h=0,i=0,k=0;h=a+116|0;i=((j[(f[h>>2]|0)+4>>1]|0)*6|0)+10|0;k=Hc(i)|0;if(!k){b=0;return b|0}yb(k,i,4);yb(k+4|0,1667523942,4);yb(k+8|0,j[(f[h>>2]|0)+4>>1]|0,2);a=f[h>>2]|0;if(d[a+4>>1]|0){e=k+10|0;g=0;c=0;while(1){yb(e,j[(f[a>>2]|0)+(c*6|0)>>1]|0,2);yb(e+2|0,j[(f[f[h>>2]>>2]|0)+(c*6|0)+2>>1]|0,2);yb(e+4|0,j[(f[f[h>>2]>>2]|0)+(c*6|0)+4>>1]|0,2);c=g+1<<16>>16;a=f[h>>2]|0;if((c&65535)>=(j[a+4>>1]|0))break;else{e=e+6|0;g=c;c=c&65535}}}f[b>>2]=i;b=k;return b|0}function ff(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;i=b+8|0;if(!(kg(f[i>>2]|0,53,d)|0)){d=0;return d|0}j=f[b+4>>2]|0;k=lg(j)|0;e=mg(j)|0;if(k){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](b,a,d)|0)!=0;h=h+1|0;if((h|0)==(k|0))break;else{e=e+4|0;g=g&1}}ng(j);if(!g){d=0;return d|0}}else ng(j);i=f[i>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](b,a,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){d=0;return d|0}}else ng(i);d=_c(a,f[b>>2]|0,c,d)|0;return d|0}function gf(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return Gd(f[a>>2]|0,b,c,d,e,g,h,i,j,k,l)|0}function hf(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;return Be(f[a>>2]|0,b,c,d,e,g)|0}function jf(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;return Hd(f[a>>2]|0,b,c,d,e,g)|0}function kf(a){a=a|0;var b=0,c=0,d=0;if(!a)return;Qc(f[a>>2]|0);f[a>>2]=0;b=a+72|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}b=a+68|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}c=a+108|0;b=f[c>>2]|0;if(b|0){Mc(b);f[c>>2]=0}d=a+116|0;b=f[d>>2]|0;if(b|0){c=f[b>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b>>2]=0}Mc(b);f[d>>2]=0}d=a+120|0;b=f[d>>2]|0;if(b|0){c=f[b+12>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b+12>>2]=0}c=f[b+4>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b+4>>2]=0}c=f[b+8>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b+8>>2]=0}c=f[b>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b>>2]=0}Mc(b);f[d>>2]=0}b=a+4|0;c=f[b>>2]|0;if(c|0){jg(c);f[b>>2]=0}b=a+8|0;c=f[b>>2]|0;if(c|0){jg(c);f[b>>2]=0}Mc(a);return}function lf(a,b,c,d,e,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;return Id(f[a>>2]|0,b,c,d,e,g,h)|0}function mf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0;i=u;u=u+16|0;if(!c){c=0;u=i;return c|0}Mb(d,2,19580,i)|0;if(!(Td(f[a>>2]|0,b,c,d,e)|0)){Mb(d,1,16201,i+8|0)|0;c=0;u=i;return c|0}h=a+108|0;if(!(De(c,h,d)|0)){c=0;u=i;return c|0}b=f[a+48>>2]|0;switch(b|0){case 16:{f[c+20>>2]=1;break}case 17:{f[c+20>>2]=2;break}case 18:{f[c+20>>2]=3;break}case 24:{f[c+20>>2]=4;break}default:f[c+20>>2]=(b|0)==12?5:-1}g=a+120|0;b=f[g>>2]|0;do if(b|0){if(f[b+12>>2]|0){Ee(c,h);break}Mc(f[b+4>>2]|0);Mc(f[(f[g>>2]|0)+8>>2]|0);Mc(f[f[g>>2]>>2]|0);b=f[g>>2]|0;e=f[b+12>>2]|0;if(e){Mc(e);b=f[g>>2]|0}Mc(b);f[g>>2]=0}while(0);if(f[a+116>>2]|0)Fe(c,h,d);b=f[h>>2]|0;if(!b){c=1;u=i;return c|0}f[c+28>>2]=b;f[c+32>>2]=f[a+112>>2];f[h>>2]=0;c=1;u=i;return c|0}function nf(a){a=a|0;var c=0;c=Ic(1,136)|0;if(!c)return c|0;if(!a)a=Pc()|0;else a=Jd()|0;f[c>>2]=a;if(!a){kf(c);c=0;return c|0}a=c+108|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;b[a+16>>0]=0;a=ig()|0;f[c+4>>2]=a;if(!a){kf(c);c=0;return c|0}a=ig()|0;f[c+8>>2]=a;if(a|0)return c|0;kf(c);c=0;return c|0}function of(a,b,c){a=a|0;b=b|0;c=c|0;Kd(f[a>>2]|0,b,c);return}function pf(a){a=a|0;return Pd(f[a>>2]|0)|0}function qf(a){a=a|0;return Od(f[a>>2]|0)|0}function rf(a,b,c){a=a|0;b=b|0;c=c|0;return Vd(f[a>>2]|0,b,c)|0}function sf(){return 8}function tf(){return 32}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!d)return;else e=0;do{l=a+(e<<2)|0;i=f[l>>2]|0;j=b+(e<<2)|0;h=f[j>>2]|0;g=c+(e<<2)|0;k=f[g>>2]|0;f[l>>2]=(h<<1)+i+k>>2;f[j>>2]=k-h;f[g>>2]=i-h;e=e+1|0}while((e|0)!=(d|0));return}function vf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!d)return;else e=0;do{k=a+(e<<2)|0;j=b+(e<<2)|0;h=f[j>>2]|0;g=c+(e<<2)|0;l=f[g>>2]|0;i=(f[k>>2]|0)-(l+h>>2)|0;f[k>>2]=i+l;f[j>>2]=i;f[g>>2]=i+h;e=e+1|0}while((e|0)!=(d|0));return}function wf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!d)return;else e=0;do{o=a+(e<<2)|0;u=f[o>>2]|0;k=b+(e<<2)|0;t=f[k>>2]|0;g=c+(e<<2)|0;s=f[g>>2]|0;j=((u|0)<0)<<31>>31;q=Yi(u|0,j|0,2449,0)|0;q=Zi(q|0,I|0,4096,0)|0;q=ej(q|0,I|0,13)|0;i=((t|0)<0)<<31>>31;r=Yi(t|0,i|0,4809,0)|0;r=Zi(r|0,I|0,4096,0)|0;r=ej(r|0,I|0,13)|0;h=((s|0)<0)<<31>>31;p=Yi(s|0,h|0,934,0)|0;p=Zi(p|0,I|0,4096,0)|0;p=ej(p|0,I|0,13)|0;l=Yi(u|0,j|0,1382,0)|0;l=Zi(l|0,I|0,4096,0)|0;l=ej(l|0,I|0,13)|0;m=Yi(t|0,i|0,2714,0)|0;m=Zi(m|0,I|0,4096,0)|0;m=ej(m|0,I|0,13)|0;n=fj(s|0,h|0,12)|0;n=Zi(n|0,I|0,4096,0)|0;n=ej(n|0,I|0,13)|0;j=fj(u|0,j|0,12)|0;j=Zi(j|0,I|0,4096,0)|0;j=ej(j|0,I|0,13)|0;i=Yi(t|0,i|0,3430,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;h=Yi(s|0,h|0,666,0)|0;h=Zi(h|0,I|0,4096,0)|0;h=ej(h|0,I|0,13)|0;f[o>>2]=r+q+p;f[k>>2]=n-(m+l);f[g>>2]=j-i-h;e=e+1|0}while((e|0)!=(d|0));return}function xf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0.0,h=0.0,i=0,j=0.0,k=0;if(!d)return;else e=0;do{k=a+(e<<2)|0;h=+n[k>>2];i=b+(e<<2)|0;g=+n[i>>2];f=c+(e<<2)|0;j=+n[f>>2];n[k>>2]=h+j*1.4019999504089355;n[i>>2]=h-g*.3441300094127655-j*.714139997959137;n[f>>2]=h+g*1.7719999551773071;e=e+1|0}while((e|0)!=(d|0));return}function yf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0;g=X(d,d)|0;o=Hc(g+d<<2)|0;if(!o){b=0;return b|0}m=o+(d<<2)|0;if(g|0){e=a;a=0;while(1){f[m+(a<<2)>>2]=~~(+n[e>>2]*8192.0);a=a+1|0;if((a|0)==(g|0))break;else e=e+4|0}}a:do if(b|0){if(!d){e=0;while(1){e=e+1|0;if((e|0)==(b|0))break a}}else l=0;do{e=0;do{f[o+(e<<2)>>2]=f[f[c+(e<<2)>>2]>>2];e=e+1|0}while((e|0)!=(d|0));a=m;g=0;while(1){i=c+(g<<2)|0;j=f[i>>2]|0;f[j>>2]=0;e=0;h=a;k=0;while(1){p=f[h>>2]|0;q=f[o+(e<<2)>>2]|0;p=Yi(q|0,((q|0)<0)<<31>>31|0,p|0,((p|0)<0)<<31>>31|0)|0;p=Zi(p|0,I|0,4096,0)|0;p=ej(p|0,I|0,13)|0;k=k+p|0;f[j>>2]=k;e=e+1|0;if((e|0)==(d|0))break;else h=h+4|0}f[i>>2]=j+4;g=g+1|0;if((g|0)==(d|0))break;else a=a+(d<<2)|0}l=l+1|0}while((l|0)!=(b|0))}while(0);Mc(o);q=1;return q|0}function zf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0.0,l=0,m=0,o=0;o=Hc(d<<3)|0;if(!o){b=0;return b|0}m=o+(d<<2)|0;a:do if(b|0){if(!d){e=0;while(1){e=e+1|0;if((e|0)==(b|0))break a}}else l=0;do{e=0;do{f[o+(e<<2)>>2]=f[f[c+(e<<2)>>2]>>2];e=e+1|0}while((e|0)!=(d|0));g=a;i=0;while(1){j=m+(i<<2)|0;n[j>>2]=0.0;e=0;h=g;k=0.0;while(1){k=k+ +n[h>>2]*+n[o+(e<<2)>>2];n[j>>2]=k;e=e+1|0;if((e|0)==(d|0))break;else h=h+4|0}h=c+(i<<2)|0;j=f[h>>2]|0;f[h>>2]=j+4;n[j>>2]=k;i=i+1|0;if((i|0)==(d|0))break;else g=g+(d<<2)|0}l=l+1|0}while((l|0)!=(b|0))}while(0);Mc(o);b=1;return b|0}function Af(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0.0,h=0,i=0.0;if(!b)return;else f=0;do{h=a+(f<<3)|0;p[h>>3]=0.0;d=0;e=f;g=0.0;while(1){i=+n[c+(e<<2)>>2];g=g+i*i;d=d+1|0;if((d|0)==(b|0))break;else e=e+b|0}i=+L(+g);p[h>>3]=i;f=f+1|0}while((f|0)!=(b|0));return}function Bf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+32|0;n=G+28|0;k=G+24|0;o=G+20|0;q=G+16|0;p=G+12|0;r=G+8|0;l=G+4|0;j=G;e=c+76|0;E=f[e>>2]|0;A=E+(d*5640|0)+420|0;F=(f[A>>2]|0)+1|0;m=a+16|0;B=Hc((f[m>>2]|0)*528|0)|0;if(!B){F=0;u=G;return F|0}C=Hc(f[m>>2]<<2)|0;if(!C){Mc(B);F=0;u=G;return F|0}e=Cf(a,f[e>>2]|0,d)|0;if(!e){Mc(B);Mc(C);F=0;u=G;return F|0}i=f[m>>2]|0;if(i|0){g=B;h=0;while(1){f[C+(h<<2)>>2]=g;h=h+1|0;if(h>>>0>=i>>>0)break;else g=g+528|0}}Df(a,c,d,o,q,p,r,l,j,k,n,C);D=f[k>>2]|0;x=X(f[m>>2]|0,D)|0;z=f[n>>2]|0;w=X(z,x)|0;h=e+4|0;f[h>>2]=0;y=E+(d*5640|0)+8|0;g=(f[y>>2]|0)+1|0;if(w>>>0<=(4294967295/(g>>>0)|0)>>>0?(v=Ic(X(g,w)|0,2)|0,f[h>>2]=v,v|0):0){g=f[e+196>>2]|0;v=f[a+24>>2]|0;t=f[o>>2]|0;f[e+200>>2]=t;s=f[p>>2]|0;f[e+204>>2]=s;p=f[q>>2]|0;f[e+208>>2]=p;o=f[r>>2]|0;f[e+212>>2]=o;f[e+20>>2]=1;f[e+16>>2]=D;f[e+12>>2]=x;f[e+8>>2]=w;m=f[e+192>>2]|0;if(m|0){l=v;c=g;j=0;while(1){g=f[c+12>>2]|0;h=f[C+(j<<2)>>2]|0;f[c>>2]=f[l>>2];f[c+4>>2]=f[l+4>>2];k=f[c+8>>2]|0;if(k|0){i=0;while(1){f[g>>2]=f[h>>2];f[g+4>>2]=f[h+4>>2];f[g+8>>2]=f[h+8>>2];f[g+12>>2]=f[h+12>>2];i=i+1|0;if(i>>>0>=k>>>0)break;else{g=g+16|0;h=h+16|0}}}j=j+1|0;if(j>>>0>=m>>>0)break;else{l=l+52|0;c=c+16|0}}}if(F>>>0>1){l=1;n=e;do{g=f[n+428>>2]|0;f[n+432>>2]=t;f[n+436>>2]=s;f[n+440>>2]=p;f[n+444>>2]=o;f[n+252>>2]=1;f[n+248>>2]=D;f[n+244>>2]=x;f[n+240>>2]=w;a=f[n+424>>2]|0;if(a|0){m=v;j=0;while(1){h=f[g+12>>2]|0;i=f[C+(j<<2)>>2]|0;f[g>>2]=f[m>>2];f[g+4>>2]=f[m+4>>2];k=f[g+8>>2]|0;if(k|0){c=0;while(1){f[h>>2]=f[i>>2];f[h+4>>2]=f[i+4>>2];f[h+8>>2]=f[i+8>>2];f[h+12>>2]=f[i+12>>2];c=c+1|0;if(c>>>0>=k>>>0)break;else{h=h+16|0;i=i+16|0}}}j=j+1|0;if(j>>>0>=a>>>0)break;else{m=m+52|0;g=g+16|0}}}f[n+236>>2]=f[n+4>>2];n=n+232|0;l=l+1|0}while((l|0)!=(F|0))}Mc(B);Mc(C);j=(f[A>>2]|0)+1|0;g=(j|0)==0;if(!(b[E+(d*5640|0)+5636>>0]&4)){if(g){F=e;u=G;return F|0}c=f[E+(d*5640|0)+4>>2]|0;i=f[y>>2]|0;g=0;h=e;while(1){f[h+80>>2]=c;f[h+40>>2]=1;f[h+44>>2]=0;f[h+48>>2]=0;f[h+64>>2]=0;f[h+68>>2]=0;f[h+56>>2]=z;f[h+60>>2]=f[h+192>>2];f[h+52>>2]=i;f[h+72>>2]=D;g=g+1|0;if((g|0)==(j|0))break;else h=h+232|0}u=G;return e|0}else{if(g){F=e;u=G;return F|0}g=E+(d*5640|0)+424|0;h=e;i=0;while(1){f[h+80>>2]=f[g+36>>2];f[h+40>>2]=1;f[h+44>>2]=f[g>>2];f[h+48>>2]=f[g+4>>2];f[h+64>>2]=0;f[h+68>>2]=0;f[h+56>>2]=f[g+12>>2];f[h+60>>2]=f[g+16>>2];f[h+52>>2]=f[g+8>>2];f[h+72>>2]=D;i=i+1|0;if((i|0)==(j|0))break;else{g=g+148|0;h=h+232|0}}u=G;return e|0}}Mc(B);Mc(C);g=f[h>>2]|0;if(g|0){Mc(g);f[h>>2]=0}if(F|0){l=e;m=0;while(1){n=l+196|0;g=f[n>>2]|0;if(g|0){k=l+192|0;h=f[k>>2]|0;if(h){j=0;while(1){i=g+12|0;c=f[i>>2]|0;if(c){Mc(c);f[i>>2]=0;h=f[k>>2]|0}j=j+1|0;if(j>>>0>=h>>>0)break;else g=g+16|0}g=f[n>>2]|0}Mc(g);f[n>>2]=0}m=m+1|0;if((m|0)==(F|0))break;else l=l+232|0}}Mc(e);F=0;u=G;return F|0}function Cf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;l=(f[b+(c*5640|0)+420>>2]|0)+1|0;d=Ic(l,232)|0;if(!d){l=0;return l|0}if(!l){l=d;return l|0}j=a+16|0;i=b+(c*5640|0)+5584|0;g=d;h=0;a=f[j>>2]|0;a:while(1){b=Ic(a,16)|0;e=g+196|0;f[e>>2]=b;if(!b){a=5;break}k=f[j>>2]|0;f[g+192>>2]=k;b:do if(!k)a=0;else{a=(f[i>>2]|0)+4|0;k=Ic(f[a>>2]|0,16)|0;f[b+12>>2]=k;if(!k){a=19;break a}c=0;while(1){f[b+(c<<4)+8>>2]=f[a>>2];c=c+1|0;a=f[j>>2]|0;if(c>>>0>=a>>>0)break b;b=f[e>>2]|0;a=(f[i>>2]|0)+(c*1080|0)+4|0;k=Ic(f[a>>2]|0,16)|0;f[b+(c<<4)+12>>2]=k;if(!k){a=19;break a}}}while(0);h=h+1|0;if(h>>>0>=l>>>0){a=33;break}else g=g+232|0}if((a|0)==5){a=d+4|0;b=f[a>>2]|0;if(!b){i=d;j=0}else{Mc(b);f[a>>2]=0;i=d;j=0}while(1){k=i+196|0;a=f[k>>2]|0;if(a|0){h=i+192|0;b=f[h>>2]|0;if(b){g=0;while(1){c=a+12|0;e=f[c>>2]|0;if(e){Mc(e);f[c>>2]=0;b=f[h>>2]|0}g=g+1|0;if(g>>>0>=b>>>0)break;else a=a+16|0}a=f[k>>2]|0}Mc(a);f[k>>2]=0}j=j+1|0;if((j|0)==(l|0))break;else i=i+232|0}Mc(d);l=0;return l|0}else if((a|0)==19){a=d+4|0;b=f[a>>2]|0;if(!b){i=d;j=0}else{Mc(b);f[a>>2]=0;i=d;j=0}while(1){k=i+196|0;a=f[k>>2]|0;if(a|0){h=i+192|0;b=f[h>>2]|0;if(b){g=0;while(1){c=a+12|0;e=f[c>>2]|0;if(e){Mc(e);f[c>>2]=0;b=f[h>>2]|0}g=g+1|0;if(g>>>0>=b>>>0)break;else a=a+16|0}a=f[k>>2]|0}Mc(a);f[k>>2]=0}j=j+1|0;if((j|0)==(l|0))break;else i=i+232|0}Mc(d);l=0;return l|0}else if((a|0)==33)return d|0;return 0}function Df(a,b,c,d,e,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0;n=f[(f[b+76>>2]|0)+(c*5640|0)+5584>>2]|0;o=f[a+24>>2]|0;B=f[b+24>>2]|0;C=b+12|0;A=(X(f[C>>2]|0,(c>>>0)%(B>>>0)|0)|0)+(f[b+4>>2]|0)|0;z=f[a>>2]|0;f[d>>2]=A>>>0>z>>>0?A:z;A=Zi(f[C>>2]|0,0,A|0,0)|0;A=0-I|A;C=f[a+8>>2]|0;f[e>>2]=A>>>0>>0?A:C;C=b+16|0;B=(X(f[C>>2]|0,(c>>>0)/(B>>>0)|0)|0)+(f[b+8>>2]|0)|0;A=f[a+4>>2]|0;f[g>>2]=B>>>0>A>>>0?B:A;B=Zi(f[C>>2]|0,0,B|0,0)|0;B=0-I|B;C=f[a+12>>2]|0;f[h>>2]=B>>>0>>0?B:C;f[k>>2]=0;f[l>>2]=0;f[i>>2]=2147483647;f[j>>2]=2147483647;C=a+16|0;if(!(f[C>>2]|0))return;else z=0;while(1){u=f[m+(z<<2)>>2]|0;p=f[o>>2]|0;b=((f[d>>2]|0)+-1+p|0)/(p|0)|0;A=o+4|0;q=f[A>>2]|0;c=((f[g>>2]|0)+-1+q|0)/(q|0)|0;p=(p+-1+(f[e>>2]|0)|0)/(p|0)|0;q=(q+-1+(f[h>>2]|0)|0)/(q|0)|0;B=n+4|0;a=f[B>>2]|0;if(a>>>0>(f[l>>2]|0)>>>0){f[l>>2]=a;a=f[B>>2]|0}if(a|0){x=Zi(b|0,((b|0)<0)<<31>>31|0,-1,-1)|0;y=I;v=Zi(c|0,((c|0)<0)<<31>>31|0,-1,-1)|0;w=I;t=Zi(p|0,((p|0)<0)<<31>>31|0,-1,-1)|0;s=I;q=Zi(q|0,((q|0)<0)<<31>>31|0,-1,-1)|0;r=I;p=0;c=u;while(1){a=a+-1|0;b=f[n+812+(p<<2)>>2]|0;u=f[n+944+(p<<2)>>2]|0;f[c>>2]=b;f[c+4>>2]=u;F=f[o>>2]<>2]<>2]|0;f[i>>2]=(G|0)<(F|0)?G:F;F=f[j>>2]|0;f[j>>2]=(F|0)<(K|0)?F:K;K=fj(1,0,a|0)|0;F=I;G=Zi(x|0,y|0,K|0,F|0)|0;G=dj(G|0,I|0,a|0)|0;D=Zi(v|0,w|0,K|0,F|0)|0;D=dj(D|0,I|0,a|0)|0;J=Zi(t|0,s|0,K|0,F|0)|0;J=dj(J|0,I|0,a|0)|0;F=Zi(q|0,r|0,K|0,F|0)|0;F=dj(F|0,I|0,a|0)|0;K=fj(1,0,b|0)|0;H=I;E=Zi(J|0,((J|0)<0)<<31>>31|0,-1,-1)|0;H=Zi(E|0,I|0,K|0,H|0)|0;H=dj(H|0,I|0,b|0)|0;K=fj(1,0,u|0)|0;E=I;L=Zi(F|0,((F|0)<0)<<31>>31|0,-1,-1)|0;E=Zi(L|0,I|0,K|0,E|0)|0;E=dj(E|0,I|0,u|0)|0;b=(G|0)==(J|0)?0:(H<>b<>b;u=(D|0)==(F|0)?0:(E<>u<>u;f[c+8>>2]=b;f[c+12>>2]=u;b=X(u,b)|0;if(b>>>0>(f[k>>2]|0)>>>0)f[k>>2]=b;p=p+1|0;if(p>>>0>=(f[B>>2]|0)>>>0)break;else c=c+16|0}}z=z+1|0;if(z>>>0>=(f[C>>2]|0)>>>0)break;else{n=n+1080|0;o=o+52|0}}return}function Ef(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!a)return;c=a+4|0;d=f[c>>2]|0;if(d|0){Mc(d);f[c>>2]=0}if(b|0){j=a;k=0;while(1){l=j+196|0;c=f[l>>2]|0;if(c|0){i=j+192|0;d=f[i>>2]|0;if(d){h=0;while(1){e=c+12|0;g=f[e>>2]|0;if(g){Mc(g);f[e>>2]=0;d=f[i>>2]|0}h=h+1|0;if(h>>>0>=d>>>0)break;else c=c+16|0}c=f[l>>2]|0}Mc(c);f[l>>2]=0}k=k+1|0;if((k|0)==(b|0))break;else j=j+232|0}}Mc(a);return}function Ff(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;L=u;u=u+32|0;n=L+28|0;m=L+24|0;o=L+20|0;q=L+16|0;p=L+12|0;r=L+8|0;s=L+4|0;t=L;H=c+76|0;C=f[H>>2]|0;K=(f[C+(e*5640|0)+420>>2]|0)+1|0;G=a+16|0;D=Hc((f[G>>2]|0)*528|0)|0;if(!D){K=0;u=L;return K|0}E=Hc(f[G>>2]<<2)|0;if(!E){Mc(D);K=0;u=L;return K|0}i=Cf(a,f[H>>2]|0,e)|0;if(!i){Mc(D);Mc(E);K=0;u=L;return K|0}l=f[G>>2]|0;if(l|0){j=D;k=0;while(1){f[E+(k<<2)>>2]=j;k=k+1|0;if(k>>>0>=l>>>0)break;else j=j+528|0}}Df(a,c,e,o,q,p,r,s,t,m,n,E);J=f[m>>2]|0;x=X(f[G>>2]|0,J)|0;I=f[n>>2]|0;w=X(I,x)|0;b[i>>0]=(h[c+93>>0]|0)>>>3&1;F=Ic(X(f[C+(e*5640|0)+8>>2]|0,w)|0,2)|0;k=i+4|0;f[k>>2]=F;if(!F){Mc(D);Mc(E);j=f[k>>2]|0;if(j|0){Mc(j);f[k>>2]=0}if(K|0){o=i;p=0;while(1){q=o+196|0;j=f[q>>2]|0;if(j|0){a=o+192|0;k=f[a>>2]|0;if(k){n=0;while(1){l=j+12|0;m=f[l>>2]|0;if(m){Mc(m);f[l>>2]=0;k=f[a>>2]|0}n=n+1|0;if(n>>>0>=k>>>0)break;else j=j+16|0}j=f[q>>2]|0}Mc(j);f[q>>2]=0}p=p+1|0;if((p|0)==(K|0))break;else o=o+232|0}}Mc(i);K=0;u=L;return K|0}m=f[i+196>>2]|0;v=f[a+24>>2]|0;F=f[o>>2]|0;f[i+200>>2]=F;B=f[p>>2]|0;f[i+204>>2]=B;A=f[q>>2]|0;f[i+208>>2]=A;z=f[r>>2]|0;f[i+212>>2]=z;y=f[s>>2]|0;f[i+224>>2]=y;s=f[t>>2]|0;f[i+228>>2]=s;f[i+20>>2]=1;f[i+16>>2]=J;f[i+12>>2]=x;f[i+8>>2]=w;p=f[i+192>>2]|0;if(p|0){o=v;n=0;while(1){j=f[m+12>>2]|0;k=f[E+(n<<2)>>2]|0;f[m>>2]=f[o>>2];f[m+4>>2]=f[o+4>>2];a=f[m+8>>2]|0;if(a|0){l=0;while(1){f[j>>2]=f[k>>2];f[j+4>>2]=f[k+4>>2];f[j+8>>2]=f[k+8>>2];f[j+12>>2]=f[k+12>>2];l=l+1|0;if(l>>>0>=a>>>0)break;else{j=j+16|0;k=k+16|0}}}n=n+1|0;if(n>>>0>=p>>>0)break;else{o=o+52|0;m=m+16|0}}}if(K>>>0>1){o=1;q=i;do{j=f[q+428>>2]|0;f[q+432>>2]=F;f[q+436>>2]=B;f[q+440>>2]=A;f[q+444>>2]=z;f[q+456>>2]=y;f[q+460>>2]=s;f[q+252>>2]=1;f[q+248>>2]=J;f[q+244>>2]=x;f[q+240>>2]=w;r=f[q+424>>2]|0;if(r|0){p=v;n=0;while(1){k=f[j+12>>2]|0;l=f[E+(n<<2)>>2]|0;f[j>>2]=f[p>>2];f[j+4>>2]=f[p+4>>2];a=f[j+8>>2]|0;if(a|0){m=0;while(1){f[k>>2]=f[l>>2];f[k+4>>2]=f[l+4>>2];f[k+8>>2]=f[l+8>>2];f[k+12>>2]=f[l+12>>2];m=m+1|0;if(m>>>0>=a>>>0)break;else{k=k+16|0;l=l+16|0}}}n=n+1|0;if(n>>>0>=r>>>0)break;else{p=p+52|0;j=j+16|0}}}f[q+236>>2]=f[q+4>>2];q=q+232|0;o=o+1|0}while((o|0)!=(K|0))}Mc(D);Mc(E);do if(b[C+(e*5640|0)+5636>>0]&4){j=d[c>>1]|0;if((j&65535)>2){if(!((g|0)==1|(j&65535)<7))break}else if((g|0)!=1)break;Gf(f[H>>2]|0,e,F,A,B,z,J,y,s);K=i;u=L;return K|0}while(0);a=f[G>>2]|0;j=f[H>>2]|0;l=(f[j+(e*5640|0)+420>>2]|0)+1|0;if(!l){K=i;u=L;return K|0}m=f[j+(e*5640|0)+8>>2]|0;n=f[j+(e*5640|0)+4>>2]|0;k=0;j=j+(e*5640|0)+424|0;while(1){f[j+76>>2]=0;f[j+92>>2]=a;f[j+72>>2]=0;f[j+88>>2]=I;f[j+68>>2]=0;f[j+84>>2]=m;f[j+36>>2]=n;f[j+80>>2]=0;f[j+96>>2]=J;f[j+100>>2]=F;f[j+104>>2]=A;f[j+108>>2]=B;f[j+112>>2]=z;f[j+116>>2]=y;f[j+120>>2]=s;k=k+1|0;if((k|0)==(l|0))break;else j=j+148|0}u=L;return i|0}function Gf(a,b,c,d,e,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;l=(f[a+(b*5640|0)+420>>2]|0)+1|0;f[a+(b*5640|0)+500>>2]=f[a+(b*5640|0)+428>>2];f[a+(b*5640|0)+516>>2]=f[a+(b*5640|0)+440>>2];f[a+(b*5640|0)+496>>2]=f[a+(b*5640|0)+424>>2];f[a+(b*5640|0)+512>>2]=f[a+(b*5640|0)+436>>2];f[a+(b*5640|0)+508>>2]=f[a+(b*5640|0)+432>>2];f[a+(b*5640|0)+492>>2]=0;f[a+(b*5640|0)+460>>2]=f[a+(b*5640|0)+456>>2];f[a+(b*5640|0)+504>>2]=0;f[a+(b*5640|0)+520>>2]=h;f[a+(b*5640|0)+524>>2]=c;f[a+(b*5640|0)+528>>2]=d;f[a+(b*5640|0)+532>>2]=e;f[a+(b*5640|0)+536>>2]=g;f[a+(b*5640|0)+540>>2]=i;f[a+(b*5640|0)+544>>2]=j;if(l>>>0<=1)return;k=1;a=a+(b*5640|0)+572|0;while(1){f[a+76>>2]=f[a+4>>2];f[a+92>>2]=f[a+16>>2];f[a+72>>2]=f[a>>2];f[a+88>>2]=f[a+12>>2];b=f[a+8>>2]|0;f[a+84>>2]=b;f[a+36>>2]=f[a+32>>2];f[a+80>>2]=0;f[a+68>>2]=b>>>0>(f[a+-64>>2]|0)>>>0?b:0;f[a+96>>2]=h;f[a+100>>2]=c;f[a+104>>2]=d;f[a+108>>2]=e;f[a+112>>2]=g;f[a+116>>2]=i;f[a+120>>2]=j;k=k+1|0;if((k|0)==(l|0))break;else a=a+148|0}return}function Hf(a,c,e,g,h,i,j){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;V=f[c+76>>2]|0;Y=V+(e*5640|0)+424+(g*148|0)+36|0;W=Nc(f[Y>>2]|0)|0;f[a+(g*232|0)+40>>2]=1;X=a+(g*232|0)+44|0;f[a+(g*232|0)+80>>2]=f[Y>>2];do if(b[c+93>>0]&8){k=d[c>>1]|0;if((k&65535)>2){if(!((j|0)==1&(k&65535)>6|(k+-3&65535)<4))break}else if(!((j|0)==1|(k+-3&65535)<4))break;a:do if((i|0)<3){p=V+(e*5640|0)+424+(g*148|0)+72|0;q=V+(e*5640|0)+424+(g*148|0)+88|0;r=a+(g*232|0)+56|0;s=V+(e*5640|0)+424+(g*148|0)+76|0;t=a+(g*232|0)+48|0;u=V+(e*5640|0)+424+(g*148|0)+92|0;v=a+(g*232|0)+60|0;w=V+(e*5640|0)+424+(g*148|0)+68|0;x=a+(g*232|0)+64|0;y=V+(e*5640|0)+424+(g*148|0)+84|0;z=a+(g*232|0)+52|0;A=V+(e*5640|0)+424+(g*148|0)+80|0;B=a+(g*232|0)+68|0;C=V+(e*5640|0)+424+(g*148|0)+96|0;D=a+(g*232|0)+72|0;E=V+(e*5640|0)+424+(g*148|0)+100|0;F=a+(g*232|0)+96|0;G=V+(e*5640|0)+424+(g*148|0)+108|0;H=a+(g*232|0)+104|0;I=V+(e*5640|0)+424+(g*148|0)+104|0;J=a+(g*232|0)+100|0;K=V+(e*5640|0)+424+(g*148|0)+112|0;L=a+(g*232|0)+108|0;k=i;while(1){j=k;k=k+1|0;switch(b[W+k>>0]|0){case 82:{l=r;m=q;n=X;o=p;U=10;break}case 67:{l=v;m=u;n=t;o=s;U=10;break}case 76:{l=z;m=y;n=x;o=w;U=10;break}case 80:{if((f[Y>>2]|0)>>>0<2){l=D;m=C;n=B;o=A;U=10}else{f[F>>2]=f[E>>2];f[H>>2]=f[G>>2];l=L;m=K;n=J;o=I;U=10}break}default:{}}if((U|0)==10){U=0;f[n>>2]=f[o>>2];f[l>>2]=f[m>>2]}if((j|0)>=2)break a}}while(0);k=(i|0)>-1;if(!h){if(!k)return;m=V+(e*5640|0)+424+(g*148|0)+76|0;n=V+(e*5640|0)+424+(g*148|0)+132|0;o=a+(g*232|0)+48|0;p=a+(g*232|0)+60|0;q=V+(e*5640|0)+424+(g*148|0)+72|0;r=V+(e*5640|0)+424+(g*148|0)+128|0;s=a+(g*232|0)+56|0;t=V+(e*5640|0)+424+(g*148|0)+68|0;u=V+(e*5640|0)+424+(g*148|0)+124|0;v=a+(g*232|0)+64|0;w=a+(g*232|0)+52|0;x=V+(e*5640|0)+424+(g*148|0)+80|0;y=V+(e*5640|0)+424+(g*148|0)+136|0;z=a+(g*232|0)+68|0;A=a+(g*232|0)+72|0;B=V+(e*5640|0)+424+(g*148|0)+100|0;C=V+(e*5640|0)+424+(g*148|0)+140|0;D=V+(e*5640|0)+424+(g*148|0)+108|0;E=V+(e*5640|0)+424+(g*148|0)+144|0;F=a+(g*232|0)+96|0;G=V+(e*5640|0)+424+(g*148|0)+116|0;H=a+(g*232|0)+100|0;I=a+(g*232|0)+104|0;l=V+(e*5640|0)+424+(g*148|0)+120|0;j=a+(g*232|0)+108|0;k=i;while(1){b:do switch(b[W+k>>0]|0){case 67:{g=f[m>>2]|0;f[o>>2]=g;g=g+1|0;f[p>>2]=g;f[n>>2]=g;break}case 82:{g=f[q>>2]|0;f[X>>2]=g;g=g+1|0;f[s>>2]=g;f[r>>2]=g;break}case 76:{g=f[t>>2]|0;f[v>>2]=g;g=g+1|0;f[w>>2]=g;f[u>>2]=g;break}case 80:if((f[Y>>2]|0)>>>0<2){g=f[x>>2]|0;f[z>>2]=g;g=g+1|0;f[A>>2]=g;f[y>>2]=g;break b}else{g=f[B>>2]|0;i=f[D>>2]|0;f[F>>2]=g;e=f[G>>2]|0;e=e+g-((g>>>0)%(e>>>0)|0)|0;f[H>>2]=e;f[I>>2]=i;g=f[l>>2]|0;g=g+i-((i>>>0)%(g>>>0)|0)|0;f[j>>2]=g;f[C>>2]=e;f[E>>2]=g;break b}default:{}}while(0);if((k|0)>0)k=k+-1|0;else break}return}if(!k)return;P=V+(e*5640|0)+424+(g*148|0)+128|0;Q=V+(e*5640|0)+424+(g*148|0)+88|0;R=V+(e*5640|0)+424+(g*148|0)+72|0;S=a+(g*232|0)+56|0;T=V+(e*5640|0)+424+(g*148|0)+132|0;t=V+(e*5640|0)+424+(g*148|0)+92|0;u=V+(e*5640|0)+424+(g*148|0)+76|0;v=a+(g*232|0)+48|0;w=a+(g*232|0)+60|0;x=V+(e*5640|0)+424+(g*148|0)+124|0;y=V+(e*5640|0)+424+(g*148|0)+84|0;z=V+(e*5640|0)+424+(g*148|0)+68|0;A=a+(g*232|0)+64|0;B=a+(g*232|0)+52|0;C=V+(e*5640|0)+424+(g*148|0)+136|0;D=V+(e*5640|0)+424+(g*148|0)+96|0;E=V+(e*5640|0)+424+(g*148|0)+80|0;F=a+(g*232|0)+68|0;G=a+(g*232|0)+72|0;H=V+(e*5640|0)+424+(g*148|0)+140|0;I=V+(e*5640|0)+424+(g*148|0)+104|0;J=a+(g*232|0)+96|0;K=V+(e*5640|0)+424+(g*148|0)+116|0;L=a+(g*232|0)+100|0;h=V+(e*5640|0)+424+(g*148|0)+144|0;M=V+(e*5640|0)+424+(g*148|0)+112|0;N=a+(g*232|0)+104|0;O=V+(e*5640|0)+424+(g*148|0)+120|0;r=a+(g*232|0)+108|0;s=V+(e*5640|0)+424+(g*148|0)+100|0;q=V+(e*5640|0)+424+(g*148|0)+108|0;k=1;p=i;while(1){o=W+p|0;c:do switch(b[o>>0]|0){case 67:{j=w;l=T;m=(f[T>>2]|0)+-1|0;n=v;U=35;break}case 82:{j=S;l=P;m=(f[P>>2]|0)+-1|0;n=X;U=35;break}case 76:{j=B;l=x;m=(f[x>>2]|0)+-1|0;n=A;U=35;break}case 80:if((f[Y>>2]|0)>>>0<2){j=G;l=C;m=(f[C>>2]|0)+-1|0;n=F;U=35;break c}else{n=f[H>>2]|0;m=f[K>>2]|0;f[J>>2]=n-m-((n>>>0)%(m>>>0)|0);f[L>>2]=n;n=f[h>>2]|0;m=f[O>>2]|0;j=r;l=h;m=n-m-((n>>>0)%(m>>>0)|0)|0;n=N;U=35;break c}default:{}}while(0);if((U|0)==35){U=0;f[n>>2]=m;f[j>>2]=f[l>>2]}d:do if((k|0)==1)switch(b[o>>0]|0){case 82:{k=f[P>>2]|0;if((k|0)!=(f[Q>>2]|0)){f[X>>2]=k;k=k+1|0;f[S>>2]=k;f[P>>2]=k;k=0;break d}if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}k=f[R>>2]|0;f[X>>2]=k;k=k+1|0;f[S>>2]=k;f[P>>2]=k;k=1;break d}case 67:{k=f[T>>2]|0;if((k|0)!=(f[t>>2]|0)){f[v>>2]=k;k=k+1|0;f[w>>2]=k;f[T>>2]=k;k=0;break d}if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}k=f[u>>2]|0;f[v>>2]=k;k=k+1|0;f[w>>2]=k;f[T>>2]=k;k=1;break d}case 76:{k=f[x>>2]|0;if((k|0)!=(f[y>>2]|0)){f[A>>2]=k;k=k+1|0;f[B>>2]=k;f[x>>2]=k;k=0;break d}if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}k=f[z>>2]|0;f[A>>2]=k;k=k+1|0;f[B>>2]=k;f[x>>2]=k;k=1;break d}case 80:{if((f[Y>>2]|0)>>>0<2){k=f[C>>2]|0;if((k|0)!=(f[D>>2]|0)){f[F>>2]=k;k=k+1|0;f[G>>2]=k;f[C>>2]=k;k=0;break d}if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}k=f[E>>2]|0;f[F>>2]=k;k=k+1|0;f[G>>2]=k;f[C>>2]=k;k=1;break d}k=f[H>>2]|0;if(k>>>0<(f[I>>2]|0)>>>0){f[J>>2]=k;i=f[K>>2]|0;k=i+k-((k>>>0)%(i>>>0)|0)|0;f[L>>2]=k;f[H>>2]=k;k=0;break d}j=f[h>>2]|0;if(j>>>0<(f[M>>2]|0)>>>0){f[N>>2]=j;i=f[O>>2]|0;k=0;l=i+j|0;j=(j>>>0)%(i>>>0)|0}else{if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}i=f[q>>2]|0;f[h>>2]=i;f[N>>2]=i;j=f[O>>2]|0;k=1;l=j+i|0;j=(i>>>0)%(j>>>0)|0}V=l-j|0;f[r>>2]=V;f[h>>2]=V;V=f[s>>2]|0;f[J>>2]=V;i=f[K>>2]|0;i=i+V-((V>>>0)%(i>>>0)|0)|0;f[L>>2]=i;f[H>>2]=i;break d}default:{k=1;break d}}while(0);if((p|0)>0)p=p+-1|0;else break}return}while(0);f[X>>2]=f[V+(e*5640|0)+424+(g*148|0)+72>>2];f[a+(g*232|0)+56>>2]=f[V+(e*5640|0)+424+(g*148|0)+88>>2];f[a+(g*232|0)+48>>2]=f[V+(e*5640|0)+424+(g*148|0)+76>>2];f[a+(g*232|0)+60>>2]=f[V+(e*5640|0)+424+(g*148|0)+92>>2];f[a+(g*232|0)+64>>2]=f[V+(e*5640|0)+424+(g*148|0)+68>>2];f[a+(g*232|0)+52>>2]=f[V+(e*5640|0)+424+(g*148|0)+84>>2];f[a+(g*232|0)+68>>2]=f[V+(e*5640|0)+424+(g*148|0)+80>>2];f[a+(g*232|0)+72>>2]=f[V+(e*5640|0)+424+(g*148|0)+96>>2];f[a+(g*232|0)+96>>2]=f[V+(e*5640|0)+424+(g*148|0)+100>>2];f[a+(g*232|0)+104>>2]=f[V+(e*5640|0)+424+(g*148|0)+108>>2];f[a+(g*232|0)+100>>2]=f[V+(e*5640|0)+424+(g*148|0)+104>>2];f[a+(g*232|0)+108>>2]=f[V+(e*5640|0)+424+(g*148|0)+112>>2];return}function If(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0;i=f[c+76>>2]|0;if((a|0)>-1)h=a;else{j=0;j=j&1;return j|0}a:while(1){switch(b[g+h>>0]|0){case 82:{j=3;break a}case 67:{j=5;break a}case 76:{j=7;break a}case 80:{j=9;break a}default:{}}h=h+-1|0}if((j|0)==3){if((f[i+(d*5640|0)+424+(e*148|0)+128>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+88>>2]|0)){j=1;j=j&1;return j|0}j=(If(a+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}else if((j|0)==5){if((f[i+(d*5640|0)+424+(e*148|0)+132>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+92>>2]|0)){j=1;j=j&1;return j|0}j=(If(a+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}else if((j|0)==7){if((f[i+(d*5640|0)+424+(e*148|0)+124>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+84>>2]|0)){j=1;j=j&1;return j|0}j=(If(a+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}else if((j|0)==9){if((f[i+(d*5640|0)+424+(e*148|0)+36>>2]|0)>>>0<2){if((f[i+(d*5640|0)+424+(e*148|0)+136>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+96>>2]|0)){j=1;j=j&1;return j|0}j=(If(h+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}if((f[i+(d*5640|0)+424+(e*148|0)+140>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+104>>2]|0)){j=1;j=j&1;return j|0}if((f[i+(d*5640|0)+424+(e*148|0)+144>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+112>>2]|0)){j=1;j=j&1;return j|0}j=(If(h+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}return 0}function Jf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;E=f[c+76>>2]|0;F=f[c+24>>2]|0;J=(d>>>0)%(F>>>0)|0;F=(d>>>0)/(F>>>0)|0;G=f[c+4>>2]|0;B=f[c+12>>2]|0;A=(X(B,J)|0)+G|0;H=f[a>>2]|0;H=(A|0)>(H|0)?A:H;G=(X(B,J+1|0)|0)+G|0;J=f[a+8>>2]|0;J=(G|0)<(J|0)?G:J;G=f[c+8>>2]|0;B=f[c+16>>2]|0;A=(X(B,F)|0)+G|0;D=f[a+4>>2]|0;D=(A|0)>(D|0)?A:D;G=(X(B,F+1|0)|0)+G|0;F=f[a+12>>2]|0;F=(G|0)<(F|0)?G:F;G=f[a+16>>2]|0;if(!G){l=0;k=2147483647;j=2147483647;e=0}else{y=H+-1|0;z=D+-1|0;A=J+-1|0;B=F+-1|0;k=2147483647;x=f[E+(d*5640|0)+5584>>2]|0;v=f[a+24>>2]|0;w=0;j=2147483647;l=0;e=0;while(1){s=f[v>>2]|0;c=(y+s|0)/(s|0)|0;t=f[v+4>>2]|0;a=(z+t|0)/(t|0)|0;g=(A+s|0)/(s|0)|0;h=(B+t|0)/(t|0)|0;u=f[x+4>>2]|0;if(u>>>0<=l>>>0){if(u)C=5}else{l=u;C=5}if((C|0)==5){C=0;q=Zi(c|0,((c|0)<0)<<31>>31|0,-1,-1)|0;r=I;o=Zi(a|0,((a|0)<0)<<31>>31|0,-1,-1)|0;p=I;m=Zi(g|0,((g|0)<0)<<31>>31|0,-1,-1)|0;n=I;h=Zi(h|0,((h|0)<0)<<31>>31|0,-1,-1)|0;i=I;L=f[x+812>>2]|0;g=f[x+944>>2]|0;K=u+-1|0;N=s<>>0>>0?j:N;k=k>>>0>>0?k:c;c=fj(1,0,K|0)|0;N=I;M=Zi(q|0,r|0,c|0,N|0)|0;M=dj(M|0,I|0,K|0)|0;a=Zi(o|0,p|0,c|0,N|0)|0;a=dj(a|0,I|0,K|0)|0;O=Zi(m|0,n|0,c|0,N|0)|0;O=dj(O|0,I|0,K|0)|0;N=Zi(h|0,i|0,c|0,N|0)|0;K=dj(N|0,I|0,K|0)|0;N=fj(1,0,L|0)|0;N=Zi(N|0,I|0,-1,-1)|0;N=Zi(N|0,I|0,O|0,((O|0)<0)<<31>>31|0)|0;N=dj(N|0,I|0,L|0)|0;c=fj(1,0,g|0)|0;c=Zi(c|0,I|0,-1,-1)|0;c=Zi(c|0,I|0,K|0,((K|0)<0)<<31>>31|0)|0;c=dj(c|0,I|0,g|0)|0;g=X((M|0)==(O|0)?0:(N<>L<>L,(a|0)==(K|0)?0:(c<>g<>g)|0;e=g>>>0>e>>>0?g:e;if(u>>>0>1){a=-1;g=1;while(1){L=f[x+812+(g<<2)>>2]|0;c=f[x+944+(g<<2)>>2]|0;M=a+-1+u|0;a=s<>>0>>0?j:a;k=k>>>0>>0?k:N;N=fj(1,0,M|0)|0;a=I;K=Zi(q|0,r|0,N|0,a|0)|0;K=dj(K|0,I|0,M|0)|0;O=Zi(o|0,p|0,N|0,a|0)|0;O=dj(O|0,I|0,M|0)|0;P=Zi(m|0,n|0,N|0,a|0)|0;P=dj(P|0,I|0,M|0)|0;a=Zi(h|0,i|0,N|0,a|0)|0;M=dj(a|0,I|0,M|0)|0;a=fj(1,0,L|0)|0;a=Zi(a|0,I|0,-1,-1)|0;a=Zi(a|0,I|0,P|0,((P|0)<0)<<31>>31|0)|0;a=dj(a|0,I|0,L|0)|0;N=fj(1,0,c|0)|0;N=Zi(N|0,I|0,-1,-1)|0;N=Zi(N|0,I|0,M|0,((M|0)<0)<<31>>31|0)|0;N=dj(N|0,I|0,c|0)|0;c=X((K|0)==(P|0)?0:(a<>L<>L,(O|0)==(M|0)?0:(N<>c<>c)|0;e=c>>>0>e>>>0?c:e;c=g+1|0;if(c>>>0>>0){a=~g;g=c}else break}}}w=w+1|0;if(w>>>0>=G>>>0)break;else{x=x+1080|0;v=v+52|0}}}if(b[E+(d*5640|0)+5636>>0]&4){Gf(E,d,H,J,D,F,e,j,k);return}g=(f[E+(d*5640|0)+420>>2]|0)+1|0;if(!g)return;h=f[E+(d*5640|0)+8>>2]|0;i=f[E+(d*5640|0)+4>>2]|0;a=0;c=E+(d*5640|0)+424|0;while(1){f[c+76>>2]=0;f[c+92>>2]=G;f[c+72>>2]=0;f[c+88>>2]=l;f[c+68>>2]=0;f[c+84>>2]=h;f[c+36>>2]=i;f[c+80>>2]=0;f[c+96>>2]=e;f[c+100>>2]=H;f[c+104>>2]=J;f[c+108>>2]=D;f[c+112>>2]=F;f[c+116>>2]=j;f[c+120>>2]=k;a=a+1|0;if((a|0)==(g|0))break;else c=c+148|0}return}function Kf(a){a=a|0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0;switch(f[a+80>>2]|0){case 0:{c=a+40|0;if(!(f[c>>2]|0)){E=a+32|0;l=E;E=f[E>>2]|0;e=18}else{f[c>>2]=0;v=f[a+64>>2]|0;f[a+36>>2]=v;e=5}while(1){if((e|0)==5){if(v>>>0>=(f[a+52>>2]|0)>>>0){nb=0;e=153;break}z=f[a+44>>2]|0;f[a+28>>2]=z;e=7}else if((e|0)==18){j=E+1|0;f[l>>2]=j;h=l;e=14}while(1){if((e|0)==7){e=0;if(z>>>0>=(f[a+56>>2]|0)>>>0){e=21;break}A=f[a+48>>2]|0;p=a+24|0;f[p>>2]=A}else if((e|0)==14){if(j>>>0<(f[a+72>>2]|0)>>>0){e=16;break}F=a+24|0;n=F;F=f[F>>2]|0;e=19}while(1){if((e|0)==19){e=0;A=F+1|0;f[n>>2]=A;p=n}if(A>>>0>=(f[a+60>>2]|0)>>>0){e=20;break}B=f[a+196>>2]|0;C=f[a+28>>2]|0;if(C>>>0<(f[B+(A<<4)+8>>2]|0)>>>0)break;else{n=p;F=A;e=19}}if((e|0)==20){e=a+28|0;z=(f[e>>2]|0)+1|0;f[e>>2]=z;e=7;continue}c=f[B+(A<<4)+12>>2]|0;if(!(b[a>>0]|0)){mb=X(f[c+(C<<4)+12>>2]|0,f[c+(C<<4)+8>>2]|0)|0;f[a+72>>2]=mb}j=f[a+68>>2]|0;h=a+32|0;f[h>>2]=j;e=14}if((e|0)==16){e=0;D=X(f[a+8>>2]|0,f[a+36>>2]|0)|0;D=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+D|0;D=D+(X(f[a+16>>2]|0,f[a+24>>2]|0)|0)|0;D=D+(X(f[a+20>>2]|0,j)|0)|0;D=(f[a+4>>2]|0)+(D<<1)|0;if(!(d[D>>1]|0))break;else{l=h;E=j;e=18;continue}}else if((e|0)==21){e=a+36|0;v=(f[e>>2]|0)+1|0;f[e>>2]=v;e=5;continue}}if((e|0)==153)return nb|0;d[D>>1]=1;a=1;return a|0}case 1:{c=a+40|0;if(!(f[c>>2]|0)){x=a+32|0;k=x;x=f[x>>2]|0;e=38}else{f[c>>2]=0;G=f[a+44>>2]|0;f[a+28>>2]=G;e=25}while(1){if((e|0)==25){if(G>>>0>=(f[a+56>>2]|0)>>>0){nb=0;e=153;break}r=f[a+64>>2]|0;f[a+36>>2]=r;e=27}else if((e|0)==38){i=x+1|0;f[k>>2]=i;g=k;e=34}while(1){if((e|0)==27){e=0;if(r>>>0>=(f[a+52>>2]|0)>>>0){e=41;break}s=f[a+48>>2]|0;o=a+24|0;f[o>>2]=s}else if((e|0)==34){if(i>>>0<(f[a+72>>2]|0)>>>0){e=36;break}y=a+24|0;m=y;y=f[y>>2]|0;e=39}while(1){if((e|0)==39){e=0;s=y+1|0;f[m>>2]=s;o=m}if(s>>>0>=(f[a+60>>2]|0)>>>0){e=40;break}t=f[a+196>>2]|0;u=f[a+28>>2]|0;if(u>>>0<(f[t+(s<<4)+8>>2]|0)>>>0)break;else{m=o;y=s;e=39}}if((e|0)==40){e=a+36|0;r=(f[e>>2]|0)+1|0;f[e>>2]=r;e=27;continue}c=f[t+(s<<4)+12>>2]|0;if(!(b[a>>0]|0)){mb=X(f[c+(u<<4)+12>>2]|0,f[c+(u<<4)+8>>2]|0)|0;f[a+72>>2]=mb}i=f[a+68>>2]|0;g=a+32|0;f[g>>2]=i;e=34}if((e|0)==36){e=0;w=X(f[a+8>>2]|0,f[a+36>>2]|0)|0;w=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+w|0;w=w+(X(f[a+16>>2]|0,f[a+24>>2]|0)|0)|0;w=w+(X(f[a+20>>2]|0,i)|0)|0;w=(f[a+4>>2]|0)+(w<<1)|0;if(!(d[w>>1]|0))break;else{k=g;x=i;e=38;continue}}else if((e|0)==41){e=a+28|0;G=(f[e>>2]|0)+1|0;f[e>>2]=G;e=25;continue}}if((e|0)==153)return nb|0;d[w>>1]=1;a=1;return a|0}case 2:{c=a+40|0;if(!(f[c>>2]|0)){lb=a+36|0;Ta=lb;lb=f[lb>>2]|0;e=75}else{f[c>>2]=0;p=a+224|0;f[p>>2]=0;q=a+228|0;f[q>>2]=0;r=f[a+192>>2]|0;if(r|0){s=f[a+196>>2]|0;o=0;e=0;c=0;do{j=f[s+(o<<4)+8>>2]|0;if(j){k=f[s+(o<<4)+12>>2]|0;l=f[s+(o<<4)>>2]|0;m=f[s+(o<<4)+4>>2]|0;n=j+-1|0;Ra=l<<(f[k>>2]|0)+n;Sa=m<<(f[k+4>>2]|0)+n;e=(e|0)==0?Ra:e>>>0>>0?e:Ra;c=(c|0)==0?Sa:c>>>0>>0?c:Sa;if((j|0)!=1){h=-1;i=1;while(1){g=n+h|0;Sa=l<>2]|0);g=m<<(f[k+(i<<4)+4>>2]|0)+g;e=(e|0)==0?Sa:e>>>0>>0?e:Sa;c=(c|0)==0?g:c>>>0>>0?c:g;g=i+1|0;if(g>>>0>>0){h=~i;i=g}else break}}f[p>>2]=e;f[q>>2]=c}o=o+1|0}while((o|0)!=(r|0))}if(!(b[a>>0]|0)){f[a+104>>2]=f[a+204>>2];f[a+96>>2]=f[a+200>>2];f[a+108>>2]=f[a+212>>2];f[a+100>>2]=f[a+208>>2]}J=f[a+44>>2]|0;f[a+28>>2]=J;e=54}while(1){if((e|0)==54){if(J>>>0>=(f[a+56>>2]|0)>>>0){nb=0;e=153;break}Xa=f[a+104>>2]|0;f[a+220>>2]=Xa;e=56}else if((e|0)==75){jb=lb+1|0;f[Ta>>2]=jb;Ua=Ta;e=71}while(1){if((e|0)==56){if((Xa|0)>=(f[a+108>>2]|0)){e=79;break}Ya=f[a+96>>2]|0;f[a+216>>2]=Ya;e=58}else if((e|0)==71){if(jb>>>0<(f[a+52>>2]|0)>>>0){e=73;break}mb=a+24|0;Va=mb;mb=f[mb>>2]|0;e=76}while(1){if((e|0)==58){if((Ya|0)>=(f[a+100>>2]|0)){e=78;break}Za=f[a+48>>2]|0;Wa=a+24|0;f[Wa>>2]=Za}else if((e|0)==76){Za=mb+1|0;f[Va>>2]=Za;Wa=Va}if(Za>>>0>=(f[a+60>>2]|0)>>>0){Ya=f[a+224>>2]|0;e=a+216|0;Sa=f[e>>2]|0;Ya=Sa+Ya-((Sa|0)%(Ya|0)|0)|0;f[e>>2]=Ya;e=58;continue}e=f[a+196>>2]|0;m=f[a+28>>2]|0;c=f[e+(Za<<4)+8>>2]|0;if(m>>>0>=c>>>0){Va=Wa;mb=Za;e=76;continue}n=f[e+(Za<<4)+12>>2]|0;i=c+~m|0;j=f[a+200>>2]|0;k=f[e+(Za<<4)>>2]|0;_a=k<>2]|0;Sa=f[e+(Za<<4)+4>>2]|0;ab=Sa<>2]|0)|0)/(_a|0)|0;db=ab+-1|0;e=(db+(f[a+212>>2]|0)|0)/(ab|0)|0;eb=f[n+(m<<4)>>2]|0;g=eb+i|0;fb=f[n+(m<<4)+4>>2]|0;h=fb+i|0;gb=f[a+220>>2]|0;if((gb|0)%(Sa<>2]|0;if((hb|0)%(k<>2]|0;if(!ib){Va=Wa;mb=Za;e=76;continue}if((bb|0)==(e|0)|(($a|0)==(c|0)?1:(f[n+(m<<4)+12>>2]|0)==0)){Va=Wa;mb=Za;e=76}else{e=70;break}}if((e|0)==70){jb=(((cb+hb|0)/(_a|0)|0)>>eb)-($a>>eb)+(X((((db+gb|0)/(ab|0)|0)>>fb)-(bb>>fb)|0,ib)|0)|0;f[a+32>>2]=jb;jb=f[a+64>>2]|0;Ua=a+36|0;f[Ua>>2]=jb;e=71;continue}else if((e|0)==78){Xa=f[a+228>>2]|0;e=a+220|0;Sa=f[e>>2]|0;Xa=Sa+Xa-((Sa|0)%(Xa|0)|0)|0;f[e>>2]=Xa;e=56;continue}}if((e|0)==73){e=0;kb=X(f[a+8>>2]|0,jb)|0;kb=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+kb|0;kb=kb+(X(f[a+16>>2]|0,f[a+24>>2]|0)|0)|0;kb=kb+(X(f[a+20>>2]|0,f[a+32>>2]|0)|0)|0;kb=(f[a+4>>2]|0)+(kb<<1)|0;if(!(d[kb>>1]|0))break;else{Ta=Ua;lb=jb;e=75;continue}}else if((e|0)==79){e=a+28|0;J=(f[e>>2]|0)+1|0;f[e>>2]=J;e=54;continue}}if((e|0)==153)return nb|0;d[kb>>1]=1;a=1;return a|0}case 3:{e=a+40|0;if(!(f[e>>2]|0)){Ra=f[a+24>>2]|0;Oa=a+36|0;ra=(f[a+196>>2]|0)+(Ra<<4)|0;ta=Oa;Oa=f[Oa>>2]|0;e=113}else{f[e>>2]=0;p=a+224|0;f[p>>2]=0;q=a+228|0;f[q>>2]=0;r=f[a+192>>2]|0;if(r|0){s=f[a+196>>2]|0;o=0;e=0;c=0;do{j=f[s+(o<<4)+8>>2]|0;if(j){k=f[s+(o<<4)+12>>2]|0;l=f[s+(o<<4)>>2]|0;m=f[s+(o<<4)+4>>2]|0;n=j+-1|0;lb=l<<(f[k>>2]|0)+n;mb=m<<(f[k+4>>2]|0)+n;e=(e|0)==0?lb:e>>>0>>0?e:lb;c=(c|0)==0?mb:c>>>0>>0?c:mb;if((j|0)!=1){h=-1;i=1;while(1){g=n+h|0;mb=l<>2]|0);g=m<<(f[k+(i<<4)+4>>2]|0)+g;e=(e|0)==0?mb:e>>>0>>0?e:mb;c=(c|0)==0?g:c>>>0>>0?c:g;g=i+1|0;if(g>>>0>>0){h=~i;i=g}else break}}f[p>>2]=e;f[q>>2]=c}o=o+1|0}while((o|0)!=(r|0))}if(!(b[a>>0]|0)){c=f[a+204>>2]|0;f[a+104>>2]=c;f[a+96>>2]=f[a+200>>2];f[a+108>>2]=f[a+212>>2];f[a+100>>2]=f[a+208>>2]}else c=f[a+104>>2]|0;f[a+220>>2]=c;e=93}while(1){if((e|0)==93){if((c|0)>=(f[a+108>>2]|0)){nb=0;e=153;break}xa=f[a+96>>2]|0;f[a+216>>2]=xa;e=95}else if((e|0)==113){La=Oa+1|0;f[ta>>2]=La;qa=ra;ua=ta;Ma=Ra;e=109}while(1){if((e|0)==95){if((xa|0)>=(f[a+100>>2]|0)){e=117;break}ya=f[a+48>>2]|0;f[a+24>>2]=ya;e=97}else if((e|0)==109){if(La>>>0<(f[a+52>>2]|0)>>>0){e=111;break}Pa=a+28|0;sa=qa;va=Pa;Pa=f[Pa>>2]|0;Sa=Ma;e=114}while(1){if((e|0)==97){if(ya>>>0>=(f[a+60>>2]|0)>>>0){e=116;break}pa=(f[a+196>>2]|0)+(ya<<4)|0;za=f[a+44>>2]|0;wa=a+28|0;f[wa>>2]=za;Qa=ya}else if((e|0)==114){za=Pa+1|0;f[va>>2]=za;pa=sa;wa=va;Qa=Sa}mb=f[a+56>>2]|0;e=f[pa+8>>2]|0;if(za>>>0>=(mb>>>0>>0?mb:e)>>>0){ya=Qa+1|0;f[a+24>>2]=ya;e=97;continue}n=f[pa+12>>2]|0;e=e+~za|0;g=f[a+200>>2]|0;h=f[pa>>2]|0;Aa=h<>2]|0;mb=f[pa+4>>2]|0;Ca=mb<>2]|0)|0)/(Aa|0)|0;Fa=Ca+-1|0;k=(Fa+(f[a+212>>2]|0)|0)/(Ca|0)|0;Ga=f[n+(za<<4)>>2]|0;l=Ga+e|0;Ha=f[n+(za<<4)+4>>2]|0;m=Ha+e|0;Ia=f[a+220>>2]|0;if((Ia|0)%(mb<>2]|0;if((Ja|0)%(h<>2]|0;if(!Ka){sa=pa;va=wa;Pa=za;Sa=Qa;e=114;continue}if((Da|0)==(k|0)|((Ba|0)==(j|0)?1:(f[n+(za<<4)+12>>2]|0)==0)){sa=pa;va=wa;Pa=za;Sa=Qa;e=114}else{e=108;break}}if((e|0)==108){La=(((Ea+Ja|0)/(Aa|0)|0)>>Ga)-(Ba>>Ga)+(X((((Fa+Ia|0)/(Ca|0)|0)>>Ha)-(Da>>Ha)|0,Ka)|0)|0;f[a+32>>2]=La;La=f[a+64>>2]|0;ua=a+36|0;f[ua>>2]=La;qa=pa;Ma=Qa;e=109;continue}else if((e|0)==116){xa=f[a+224>>2]|0;e=a+216|0;mb=f[e>>2]|0;xa=mb+xa-((mb|0)%(xa|0)|0)|0;f[e>>2]=xa;e=95;continue}}if((e|0)==111){e=0;Na=X(f[a+8>>2]|0,La)|0;Na=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+Na|0;Na=Na+(X(f[a+16>>2]|0,Ma)|0)|0;Na=Na+(X(f[a+20>>2]|0,f[a+32>>2]|0)|0)|0;Na=(f[a+4>>2]|0)+(Na<<1)|0;if(!(d[Na>>1]|0))break;else{ra=qa;ta=ua;Oa=La;Ra=Ma;e=113;continue}}else if((e|0)==117){c=f[a+228>>2]|0;e=a+220|0;mb=f[e>>2]|0;c=mb+c-((mb|0)%(c|0)|0)|0;f[e>>2]=c;e=93;continue}}if((e|0)==153)return nb|0;d[Na>>1]=1;a=1;return a|0}case 4:{c=a+40|0;if(!(f[c>>2]|0)){la=f[a+24>>2]|0;ja=a+36|0;N=(f[a+196>>2]|0)+(la<<4)|0;P=ja;ja=f[ja>>2]|0;e=148}else{f[c>>2]=0;T=f[a+48>>2]|0;f[a+24>>2]=T;e=121}while(1){if((e|0)==121){if(T>>>0>=(f[a+60>>2]|0)>>>0){nb=0;e=153;break}c=f[a+196>>2]|0;q=c+(T<<4)|0;o=a+224|0;f[o>>2]=0;p=a+228|0;f[p>>2]=0;l=f[c+(T<<4)+8>>2]|0;if(l|0){m=f[c+(T<<4)+12>>2]|0;n=f[q>>2]|0;j=f[c+(T<<4)+4>>2]|0;k=l+-1|0;e=n<<(f[m>>2]|0)+k;c=j<<(f[m+4>>2]|0)+k;if((l|0)!=1){h=-1;i=1;while(1){g=k+h|0;mb=n<>2]|0);g=j<<(f[m+(i<<4)+4>>2]|0)+g;e=(e|0)==0?mb:e>>>0>>0?e:mb;c=(c|0)==0?g:c>>>0>>0?c:g;g=i+1|0;if(g>>>0>>0){h=~i;i=g}else break}}f[o>>2]=e;f[p>>2]=c}if(!(b[a>>0]|0)){c=f[a+204>>2]|0;f[a+104>>2]=c;f[a+96>>2]=f[a+200>>2];f[a+108>>2]=f[a+212>>2];f[a+100>>2]=f[a+208>>2]}else c=f[a+104>>2]|0;f[a+220>>2]=c;H=c;I=T;e=130}else if((e|0)==148){ga=ja+1|0;f[P>>2]=ga;M=N;Q=P;ha=la;e=144}while(1){if((e|0)==130){if((H|0)>=(f[a+108>>2]|0)){e=152;break}U=f[a+96>>2]|0;f[a+216>>2]=U;K=q;ma=I;e=132}else if((e|0)==144){if(ga>>>0<(f[a+52>>2]|0)>>>0){e=146;break}ka=a+28|0;O=M;R=ka;ka=f[ka>>2]|0;oa=ha;e=149}while(1){if((e|0)==132){if((U|0)>=(f[a+100>>2]|0)){e=151;break}V=f[a+44>>2]|0;S=a+28|0;f[S>>2]=V;L=K;na=ma}else if((e|0)==149){V=ka+1|0;f[R>>2]=V;L=O;S=R;na=oa}mb=f[a+56>>2]|0;c=f[L+8>>2]|0;if(V>>>0>=(mb>>>0>>0?mb:c)>>>0){U=f[a+224>>2]|0;K=a+216|0;ma=f[K>>2]|0;U=ma+U-((ma|0)%(U|0)|0)|0;f[K>>2]=U;K=L;ma=na;e=132;continue}m=f[L+12>>2]|0;c=c+~V|0;e=f[a+200>>2]|0;g=f[L>>2]|0;W=g<>2]|0;mb=f[L+4>>2]|0;Z=mb<>2]|0)|0)/(W|0)|0;aa=Z+-1|0;j=(aa+(f[a+212>>2]|0)|0)/(Z|0)|0;ba=f[m+(V<<4)>>2]|0;k=ba+c|0;ca=f[m+(V<<4)+4>>2]|0;l=ca+c|0;da=f[a+220>>2]|0;if((da|0)%(mb<>2]|0;if((ea|0)%(g<>2]|0;if(!fa){O=L;R=S;ka=V;oa=na;e=149;continue}if((_|0)==(j|0)|((Y|0)==(i|0)?1:(f[m+(V<<4)+12>>2]|0)==0)){O=L;R=S;ka=V;oa=na;e=149}else{e=143;break}}if((e|0)==143){ga=((($+ea|0)/(W|0)|0)>>ba)-(Y>>ba)+(X((((aa+da|0)/(Z|0)|0)>>ca)-(_>>ca)|0,fa)|0)|0;f[a+32>>2]=ga;ga=f[a+64>>2]|0;Q=a+36|0;f[Q>>2]=ga;M=L;ha=na;e=144;continue}else if((e|0)==151){H=f[a+228>>2]|0;q=a+220|0;I=f[q>>2]|0;H=I+H-((I|0)%(H|0)|0)|0;f[q>>2]=H;q=K;I=ma;e=130;continue}}if((e|0)==146){e=0;ia=X(f[a+8>>2]|0,ga)|0;ia=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+ia|0;ia=ia+(X(f[a+16>>2]|0,ha)|0)|0;ia=ia+(X(f[a+20>>2]|0,f[a+32>>2]|0)|0)|0;ia=(f[a+4>>2]|0)+(ia<<1)|0;if(!(d[ia>>1]|0))break;else{N=M;P=Q;ja=ga;la=ha;e=148;continue}}else if((e|0)==152){T=I+1|0;f[a+24>>2]=T;e=121;continue}}if((e|0)==153)return nb|0;d[ia>>1]=1;a=1;return a|0}default:{a=0;return a|0}}return 0}function Lf(a){a=a|0;var c=0,d=0;c=Ic(1,44)|0;if(!c){c=0;return c|0}d=c+40|0;b[d>>0]=b[d>>0]&-2|(a|0)!=0;a=Ic(1,4)|0;f[c+20>>2]=a;if(a|0){d=c;return d|0}Mc(c);d=0;return d|0}function Mf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;O=u;u=u+1200|0;M=O;d=f[f[a+20>>2]>>2]|0;N=d+16|0;e=f[N>>2]|0;if(!e){u=O;return}J=d+20|0;K=(f[a+32>>2]|0)+8|0;L=(f[a+28>>2]|0)+88|0;H=a+24|0;I=(b|0)==0;F=(c|0)==0;G=b+-1|0;E=0;d=e;do{i=f[J>>2]|0;j=f[K>>2]|0;C=i+(E*52|0)+16|0;k=f[C>>2]|0;if(j){if(k){e=f[L>>2]|0;g=+((f[(f[(f[H>>2]|0)+24>>2]|0)+(E*52|0)+24>>2]|0)>>>0)*.0625;a=0;do{h=X(k,a)|0;c=0;do{D=(h+c|0)*3|0;f[M+(a*120|0)+(c*12|0)>>2]=~~(+(f[e+(D<<2)>>2]|0)*g);f[M+(a*120|0)+(c*12|0)+4>>2]=~~(+(f[e+(D+1<<2)>>2]|0)*g);f[M+(a*120|0)+(c*12|0)+8>>2]=~~(+(f[e+(D+2<<2)>>2]|0)*g);c=c+1|0}while(c>>>0>>0);a=a+1|0}while(a>>>0>>0);D=9}}else D=9;if((D|0)==9){D=0;if(k){B=i+(E*52|0)+24|0;A=0;d=k;do{y=f[B>>2]|0;z=y+(A*136|0)+24|0;a=f[z>>2]|0;if(a){w=y+(A*136|0)+16|0;x=y+(A*136|0)+20|0;v=0;c=f[x>>2]|0;d=f[w>>2]|0;do{if(X(c,d)|0){r=y+(A*136|0)+28+(v*36|0)+20|0;s=M+(b*120|0)+(A*12|0)+(v<<2)|0;t=M+(G*120|0)+(A*12|0)+(v<<2)|0;q=0;do{d=f[r>>2]|0;p=X(f[d+(q*40|0)+20>>2]|0,f[d+(q*40|0)+16>>2]|0)|0;a:do if(p|0){o=d+(q*40|0)+24|0;i=f[s>>2]|0;if(I){d=0;while(1){c=f[o>>2]|0;e=f[c+(d*52|0)+4>>2]|0;a=(f[(f[(f[H>>2]|0)+24>>2]|0)+(E*52|0)+24>>2]|0)-(f[c+(d*52|0)+28>>2]|0)|0;a=(i|0)>(a|0)?i-a|0:0;h=c+(d*52|0)+44|0;f[h>>2]=0;a=(a|0)==0?0:(a*3|0)+-2|0;f[e>>2]=a;if(a|0?(n=f[c+(d*52|0)>>2]|0,f[e+4>>2]=f[(f[c+(d*52|0)+8>>2]|0)+((a+-1|0)*24|0)>>2],f[e+16>>2]=n,!F):0)f[h>>2]=a;d=d+1|0;if(d>>>0>=p>>>0)break a}}n=f[t>>2]|0;m=i-n|0;j=0;do{a=f[o>>2]|0;c=a+(j*52|0)|0;k=f[a+(j*52|0)+4>>2]|0;l=(f[(f[(f[H>>2]|0)+24>>2]|0)+(E*52|0)+24>>2]|0)-(f[a+(j*52|0)+28>>2]|0)|0;d=m+(n-l)|0;d=(n|0)>(l|0)?m:(d|0)>0?d:0;l=a+(j*52|0)+44|0;e=f[l>>2]|0;h=(e|0)==0;if(h)i=(d|0)==0?0:(d*3|0)+-2|0;else i=(d*3|0)+e|0;d=i-e|0;f[k+(b*24|0)>>2]=d;do if(d|0){a=f[a+(j*52|0)+8>>2]|0;d=f[a+((i+-1|0)*24|0)>>2]|0;if(h)a=f[c>>2]|0;else{h=f[a+((e+-1|0)*24|0)>>2]|0;a=(f[c>>2]|0)+h|0;d=d-h|0}f[k+(b*24|0)+4>>2]=d;f[k+(b*24|0)+16>>2]=a;if(F)break;f[l>>2]=i}while(0);j=j+1|0}while(j>>>0

>>0)}while(0);q=q+1|0;d=f[w>>2]|0;c=f[x>>2]|0}while(q>>>0<(X(c,d)|0)>>>0);a=f[z>>2]|0}v=v+1|0}while(v>>>0>>0);d=f[C>>2]|0}A=A+1|0}while(A>>>0>>0);d=f[N>>2]|0}}E=E+1|0}while(E>>>0>>0);u=O;return}function Nf(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;a=f[f[a+20>>2]>>2]|0;G=a+40+(b<<3)|0;p[G>>3]=0.0;H=a+16|0;e=f[H>>2]|0;if(!e)return;E=a+20|0;F=(b|0)==0;D=(d|0)==0;C=0;a=e;do{d=f[E>>2]|0;B=d+(C*52|0)+16|0;e=f[B>>2]|0;if(e){A=d+(C*52|0)+24|0;z=0;a=e;do{x=f[A>>2]|0;y=x+(z*136|0)+24|0;d=f[y>>2]|0;if(d){v=x+(z*136|0)+16|0;w=x+(z*136|0)+20|0;u=0;e=f[w>>2]|0;a=f[v>>2]|0;do{if(X(e,a)|0){t=x+(z*136|0)+28+(u*36|0)+20|0;s=0;do{d=f[t>>2]|0;r=X(f[d+(s*40|0)+20>>2]|0,f[d+(s*40|0)+16>>2]|0)|0;if(r){n=d+(s*40|0)+24|0;m=0;do{j=f[n>>2]|0;k=j+(m*52|0)|0;o=f[j+(m*52|0)+4>>2]|0;q=j+(m*52|0)+44|0;if(F){f[q>>2]=0;l=0}else l=f[q>>2]|0;h=f[j+(m*52|0)+48>>2]|0;if(l>>>0>>0){i=f[j+(m*52|0)+8>>2]|0;a=l;e=l;do{d=f[i+(e*24|0)>>2]|0;if(!a)g=+p[i+(e*24|0)+8>>3];else{I=a+-1|0;g=+p[i+(e*24|0)+8>>3]-+p[i+(I*24|0)+8>>3];d=d-(f[i+(I*24|0)>>2]|0)|0}if(!d)d=g!=0.0;else d=c-g/+(d>>>0)<2.220446049250313e-16;e=e+1|0;a=d?e:a}while(e>>>0>>0);h=a}else h=l;I=h-l|0;f[o+(b*24|0)>>2]=I;if(I){d=f[j+(m*52|0)+8>>2]|0;e=h+-1|0;a=f[d+(e*24|0)>>2]|0;if(!l){f[o+(b*24|0)+16>>2]=f[k>>2];g=+p[d+(e*24|0)+8>>3]}else{l=l+-1|0;I=f[d+(l*24|0)>>2]|0;f[o+(b*24|0)+16>>2]=(f[k>>2]|0)+I;g=+p[d+(e*24|0)+8>>3]-+p[d+(l*24|0)+8>>3];a=a-I|0}f[o+(b*24|0)+4>>2]=a;p[o+(b*24|0)+8>>3]=g;p[G>>3]=g+ +p[G>>3];if(!D)f[q>>2]=h}else p[o+(b*24|0)+8>>3]=0.0;m=m+1|0}while(m>>>0>>0);e=f[w>>2]|0;a=f[v>>2]|0}s=s+1|0}while(s>>>0<(X(e,a)|0)>>>0);d=f[y>>2]|0}u=u+1|0}while(u>>>0>>0);a=f[B>>2]|0}z=z+1|0}while(z>>>0>>0);a=f[H>>2]|0}C=C+1|0}while(C>>>0>>0);return}function Of(a,c,e,g,h){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0.0,l=0.0,m=0.0,o=0.0,q=0.0,r=0.0,s=0,t=0,v=0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,Y=0,Z=0,_=0,$=0,aa=0;$=u;u=u+800|0;Y=$;Z=f[a+28>>2]|0;U=f[f[a+20>>2]>>2]|0;V=f[a+32>>2]|0;R=U+24|0;f[R>>2]=0;S=f[U+16>>2]|0;if(!S){J=1797693134862315708145274.0e284;m=0.0;k=0.0;i=0}else{T=a+24|0;Q=f[U+20>>2]|0;P=0;l=1797693134862315708145274.0e284;m=0.0;k=0.0;i=0;do{N=Q+(P*52|0)+48|0;f[N>>2]=0;O=f[Q+(P*52|0)+16>>2]|0;if(!O)j=0;else{L=f[Q+(P*52|0)+24>>2]|0;K=0;j=0;do{G=f[L+(K*136|0)+24>>2]|0;if(G){H=X(f[L+(K*136|0)+20>>2]|0,f[L+(K*136|0)+16>>2]|0)|0;I=(H|0)==0;F=0;do{if(!I){E=f[L+(K*136|0)+28+(F*36|0)+20>>2]|0;D=0;do{B=X(f[E+(D*40|0)+20>>2]|0,f[E+(D*40|0)+16>>2]|0)|0;if(B){C=E+(D*40|0)+24|0;A=0;do{y=f[C>>2]|0;v=f[y+(A*52|0)+48>>2]|0;if(v){w=f[y+(A*52|0)+8>>2]|0;x=w+8|0;t=0;do{s=f[w+(t*24|0)>>2]|0;if(!t)o=+p[x>>3];else{aa=t+-1|0;o=+p[w+(t*24|0)+8>>3]-+p[w+(aa*24|0)+8>>3];s=s-(f[w+(aa*24|0)>>2]|0)|0}if(s){J=o/+(s|0);l=Jm?J:m}t=t+1|0}while(t>>>0>>0)}aa=X((f[y+(A*52|0)+24>>2]|0)-(f[y+(A*52|0)+16>>2]|0)|0,(f[y+(A*52|0)+20>>2]|0)-(f[y+(A*52|0)+12>>2]|0)|0)|0;i=aa+i|0;f[R>>2]=i;j=aa+j|0;f[N>>2]=j;A=A+1|0}while(A>>>0>>0)}D=D+1|0}while(D>>>0>>0)}F=F+1|0}while(F>>>0>>0)}K=K+1|0}while(K>>>0>>0)}J=+(1<>2]|0)+24>>2]|0)+(P*52|0)+24>>2]|0)+-1.0;k=k+J*J*+(j|0);P=P+1|0}while(P>>>0>>0);J=l}I=(h|0)!=0;if(I){S=f[h+88>>2]|0;T=f[a+36>>2]|0;f[S+(T*592|0)+552>>2]=i;p[S+(T*592|0)+560>>3]=+p[U+32>>3];i=V+8|0;aa=Hc(f[i>>2]<<3)|0;f[S+(T*592|0)>>2]=aa;if(!aa){aa=0;u=$;return aa|0}}else i=V+8|0;if(!(f[i>>2]|0)){aa=1;u=$;return aa|0}A=U+32|0;B=Z+93|0;C=h+88|0;D=a+36|0;E=U+40|0;F=a+24|0;G=a+8|0;H=a+16|0;y=0;while(1){r=+n[V+20+(y<<2)>>2];T=r>0.0;v=~~+W(+r)>>>0;v=T&v>>>0>>0?v:g;r=+n[V+5184+(y<<2)>>2];z=+p[A>>3]-k/+M(10.0,+(r/10.0));aa=b[B>>0]|0;if((aa&1)==0|T^1?!((aa&4)!=0&r>0.0):0)l=J;else{x=Yg(f[F>>2]|0,Z)|0;if(!x){i=0;_=56;break}w=y+1|0;s=Y+(y+-1<<3)|0;t=U+40+(y<<3)|0;if(!y){j=0;l=0.0;q=m;r=J;do{o=(r+q)*.5;Nf(a,0,o,0);do if(!(b[B>>0]&4))if(!(Ug(x,f[D>>2]|0,U,w,c,e,v,h,f[G>>2]|0,f[a>>2]|0,f[H>>2]|0,0)|0))r=o;else{l=o;q=o;_=39}else{if(((d[Z>>1]|0)+-3&65535)>=4)if(+p[E>>3]>2]|0,U,w,c,e,v,h,f[G>>2]|0,f[a>>2]|0,f[H>>2]|0,0)|0)if(+p[E>>3]>0]&4))if(!(Ug(x,f[D>>2]|0,U,w,c,e,v,h,f[G>>2]|0,f[a>>2]|0,f[H>>2]|0,0)|0))r=o;else{l=o;q=o;_=47}else{if(((d[Z>>1]|0)+-3&65535)>=4)if(+p[s>>3]+ +p[t>>3]>2]|0,U,w,c,e,v,h,f[G>>2]|0,f[a>>2]|0,f[H>>2]|0,0)|0)if(+p[s>>3]+ +p[t>>3]>2]|0)+((f[D>>2]|0)*592|0)>>2]|0)+(y<<3)>>3]=l;Nf(a,y,l,1);if(!y)l=+p[E>>3];else l=+p[Y+(y+-1<<3)>>3]+ +p[U+40+(y<<3)>>3];p[Y+(y<<3)>>3]=l;y=y+1|0;if(y>>>0>=(f[i>>2]|0)>>>0){i=1;_=56;break}}if((_|0)==56){u=$;return i|0}return 0}function Pf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;f[a+24>>2]=b;f[a+28>>2]=c;e=Ic(1,848)|0;d=a+20|0;f[f[d>>2]>>2]=e;if(!e){c=0;return c|0}e=b+16|0;g=Ic(f[e>>2]|0,52)|0;b=f[f[d>>2]>>2]|0;f[b+20>>2]=g;if(!g){g=0;return g|0}f[b+16>>2]=f[e>>2];f[a>>2]=f[c+84>>2];g=1;return g|0}function Qf(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;if(!a)return;s=a+20|0;c=f[s>>2]|0;do if(c|0){r=(b[a+40>>0]&1)==0?3:4;d=f[c>>2]|0;if(d){o=d+20|0;c=f[o>>2]|0;n=d+16|0;if(f[n>>2]|0){m=0;while(1){l=c+24|0;d=f[l>>2]|0;if(d|0){j=f[c+28>>2]|0;k=(j>>>0)/136|0;if(j>>>0>135){j=0;while(1){i=d+48|0;e=f[i>>2]|0;if(e|0){g=f[d+52>>2]|0;h=(g>>>0)/40|0;if(g>>>0>39){g=0;while(1){t=e+32|0;eg(f[t>>2]|0);f[t>>2]=0;t=e+36|0;eg(f[t>>2]|0);f[t>>2]=0;Sa[r&7](e);g=g+1|0;if(g>>>0>=h>>>0)break;else e=e+40|0}e=f[i>>2]|0}Mc(e);f[i>>2]=0}i=d+84|0;e=f[i>>2]|0;if(e|0){t=f[d+88>>2]|0;h=(t>>>0)/40|0;if(t>>>0>39){g=0;while(1){t=e+32|0;eg(f[t>>2]|0);f[t>>2]=0;t=e+36|0;eg(f[t>>2]|0);f[t>>2]=0;Sa[r&7](e);g=g+1|0;if(g>>>0>=h>>>0)break;else e=e+40|0}e=f[i>>2]|0}Mc(e);f[i>>2]=0}i=d+120|0;e=f[i>>2]|0;if(e|0){t=f[d+124>>2]|0;h=(t>>>0)/40|0;if(t>>>0>39){g=0;while(1){t=e+32|0;eg(f[t>>2]|0);f[t>>2]=0;t=e+36|0;eg(f[t>>2]|0);f[t>>2]=0;Sa[r&7](e);g=g+1|0;if(g>>>0>=h>>>0)break;else e=e+40|0}e=f[i>>2]|0}Mc(e);f[i>>2]=0}j=j+1|0;if(j>>>0>=k>>>0)break;else d=d+136|0}d=f[l>>2]|0}Mc(d);f[l>>2]=0}if(f[c+36>>2]|0?(p=c+32|0,q=f[p>>2]|0,q|0):0){Kc(q);f[p>>2]=0;f[p+4>>2]=0;f[p+8>>2]=0;f[p+12>>2]=0}m=m+1|0;if(m>>>0>=(f[n>>2]|0)>>>0)break;else c=c+52|0}c=f[o>>2]|0}Mc(c);f[o>>2]=0;Mc(f[f[s>>2]>>2]|0);c=f[s>>2]|0;f[c>>2]=0;if(!c)break}Mc(c);f[s>>2]=0}while(0);Mc(a);return}function Rf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;g=a+24|0;b=f[g>>2]|0;if(!b)return;d=f[a+28>>2]|0;e=(d>>>0)/52|0;if(d>>>0>51){d=0;while(1){a=f[b>>2]|0;if(a|0){Mc(a+-1|0);f[b>>2]=0}a=b+4|0;c=f[a>>2]|0;if(c|0){Mc(c);f[a>>2]=0}a=b+8|0;c=f[a>>2]|0;if(c|0){Mc(c);f[a>>2]=0}d=d+1|0;if(d>>>0>=e>>>0)break;else b=b+52|0}b=f[g>>2]|0}Mc(b);f[g>>2]=0;return}function Sf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;g=a+24|0;b=f[g>>2]|0;if(!b)return;d=f[a+28>>2]|0;e=(d>>>0)/56|0;if(d>>>0>55){d=0;while(1){a=f[b>>2]|0;if(a|0){Mc(a);f[b>>2]=0}a=b+4|0;c=f[a>>2]|0;if(c|0){Mc(c);f[a>>2]=0}d=d+1|0;if(d>>>0>=e>>>0)break;else b=b+56|0}b=f[g>>2]|0}Mc(b);f[g>>2]=0;return}function Tf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;d=a+32|0;e=f[d>>2]|0;b=a+40|0;c=f[b>>2]|0;do if(e){g=a+44|0;if(c>>>0<=(f[g>>2]|0)>>>0){h=1;return h|0}if(f[a+36>>2]|0){Kc(e);e=Jc(f[b>>2]|0)|0;f[d>>2]=e;if(e|0){f[g>>2]=f[b>>2];break}f[g>>2]=0;f[b>>2]=0;f[a+36>>2]=0;h=0;return h|0}else h=4}else h=4;while(0);do if((h|0)==4){h=Jc(c)|0;f[d>>2]=h;if(!h){h=0;return h|0}else{f[a+44>>2]=f[b>>2];break}}while(0);f[a+36>>2]=1;h=1;return h|0}function Uf(a,b,c){a=a|0;b=b|0;c=c|0;return Vf(a,b,1,1.0,52,c)|0}function Vf(a,c,d,e,g,h){a=a|0;c=c|0;d=d|0;e=+e;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0.0;Xa=u;u=u+112|0;Ta=Xa+104|0;Sa=Xa+96|0;Ra=Xa+88|0;Qa=Xa+80|0;Pa=Xa+72|0;Oa=Xa+64|0;Na=Xa+56|0;Ma=Xa+48|0;Wa=Xa+40|0;Va=Xa+32|0;Ua=Xa+24|0;k=f[a+28>>2]|0;Ja=f[f[a+20>>2]>>2]|0;l=f[(f[k+76>>2]|0)+(c*5640|0)+5584>>2]|0;m=f[Ja+20>>2]|0;j=f[a+24>>2]|0;o=f[j+24>>2]|0;i=f[k+24>>2]|0;r=f[k+12>>2]|0;La=(X(r,(c>>>0)%(i>>>0)|0)|0)+(f[k+4>>2]|0)|0;p=f[j>>2]|0;p=La>>>0>p>>>0?La:p;f[Ja>>2]=p;La=Zi(r|0,0,La|0,0)|0;La=0-I|La;r=f[j+8>>2]|0;r=La>>>0>>0?La:r;La=Ja+8|0;f[La>>2]=r;if(!((p|0)>-1&(r|0)>(p|0))){Mb(h,1,19655,Xa)|0;Wa=0;u=Xa;return Wa|0}q=f[k+16>>2]|0;Fa=(X(q,(c>>>0)/(i>>>0)|0)|0)+(f[k+8>>2]|0)|0;i=f[j+4>>2]|0;i=Fa>>>0>i>>>0?Fa:i;Ia=Ja+4|0;f[Ia>>2]=i;Fa=Zi(q|0,0,Fa|0,0)|0;Fa=0-I|Fa;q=f[j+12>>2]|0;q=Fa>>>0>>0?Fa:q;Fa=Ja+12|0;f[Fa>>2]=q;if(!((i|0)>-1&(q|0)>(i|0))){Mb(h,1,19693,Xa+8|0)|0;Wa=0;u=Xa;return Wa|0}if(!(f[l+4>>2]|0)){Mb(h,1,19731,Xa+16|0)|0;Wa=0;u=Xa;return Wa|0}Ga=Ja+16|0;if(!(f[Ga>>2]|0)){Wa=1;u=Xa;return Wa|0}Ea=k+80|0;Da=a+40|0;Ca=(d|0)==0;c=0;Ba=m;j=p;k=r;a=q;a:while(1){f[o+36>>2]=0;za=f[o>>2]|0;xa=(j+-1+za|0)/(za|0)|0;f[Ba>>2]=xa;ya=f[o+4>>2]|0;j=(i+-1+ya|0)/(ya|0)|0;Aa=Ba+4|0;f[Aa>>2]=j;k=(k+-1+za|0)/(za|0)|0;za=Ba+8|0;f[za>>2]=k;i=(a+-1+ya|0)/(ya|0)|0;ya=Ba+12|0;f[ya>>2]=i;k=k-xa|0;if(k){i=i-j|0;if((4294967295/(k>>>0)|0)>>>0>>0){Ha=12;break}}else i=i-j|0;i=X(i,k)|0;if(i>>>0>1073741823){Ha=14;break}j=i<<2;i=f[l+4>>2]|0;xa=Ba+16|0;f[xa>>2]=i;k=f[Ea>>2]|0;f[Ba+20>>2]=i>>>0>>0?1:i-k|0;k=Ba+40|0;f[k>>2]=j;do if(b[Da>>0]&1){a=Ba+32|0;d=f[a>>2]|0;if(d){m=Ba+44|0;if(j>>>0<=(f[m>>2]|0)>>>0)break;i=Ba+36|0;if(f[i>>2]|0){Kc(d);wa=Jc(f[k>>2]|0)|0;f[a>>2]=wa;if(!wa){Ha=22;break a}f[m>>2]=f[k>>2]}else Ha=19}else Ha=19;if((Ha|0)==19){Ha=0;wa=Jc(j)|0;f[a>>2]=wa;if(!wa)break a;f[Ba+44>>2]=f[k>>2];i=Ba+36|0}f[i>>2]=1;i=f[xa>>2]|0}while(0);k=i*136|0;a=Ba+24|0;i=f[a>>2]|0;if(i){j=Ba+28|0;if(k>>>0>(f[j>>2]|0)>>>0){i=Lc(i,k)|0;if(!i){Ha=31;break}f[a>>2]=i;wa=f[j>>2]|0;ij(i+wa|0,0,k-wa|0)|0;f[j>>2]=k}}else{i=Hc(k)|0;f[a>>2]=i;if(!i){c=0;Ha=100;break}f[Ba+28>>2]=k;ij(i|0,0,k|0)|0}wa=(f[l+20>>2]|0)==0?7:8;i=f[xa>>2]|0;if(i|0){sa=l+8|0;ta=l+12|0;ua=o+24|0;va=l+804|0;ra=0;qa=f[a>>2]|0;q=l+28|0;while(1){ka=i;i=i+-1|0;pa=f[Ba>>2]|0;la=fj(1,0,i|0)|0;ma=I;na=Zi(la|0,ma|0,-1,-1)|0;oa=I;pa=Zi(na|0,oa|0,pa|0,((pa|0)<0)<<31>>31|0)|0;pa=dj(pa|0,I|0,i|0)|0;f[qa>>2]=pa;ha=f[Aa>>2]|0;ha=Zi(na|0,oa|0,ha|0,((ha|0)<0)<<31>>31|0)|0;ha=dj(ha|0,I|0,i|0)|0;f[qa+4>>2]=ha;j=f[za>>2]|0;j=Zi(na|0,oa|0,j|0,((j|0)<0)<<31>>31|0)|0;j=dj(j|0,I|0,i|0)|0;f[qa+8>>2]=j;ia=f[ya>>2]|0;ia=Zi(na|0,oa|0,ia|0,((ia|0)<0)<<31>>31|0)|0;ia=dj(ia|0,I|0,i|0)|0;f[qa+12>>2]=ia;d=f[l+812+(ra<<2)>>2]|0;a=f[l+944+(ra<<2)>>2]|0;p=pa>>d<>a<>31|0)|0;ja=dj(ja|0,I|0,d|0)|0;k=fj(1,0,a|0)|0;k=Zi(k|0,I|0,-1,-1)|0;k=Zi(k|0,I|0,ia|0,((ia|0)<0)<<31>>31|0)|0;k=dj(k|0,I|0,a|0)|0;ja=(ja<>d;j=(pa|0)==(j|0)?0:ja;pa=qa+16|0;f[pa>>2]=j;k=(ha|0)==(ia|0)?0:(k<>a;f[qa+20>>2]=k;if(j|0?(4294967295/(ja>>>0)|0)>>>0>>0:0){Ha=37;break a}ha=X(k,j)|0;if(ha>>>0>107374182){Ha=39;break a}ia=ha*40|0;ja=(ra|0)==0;if(ja)j=1;else{p=Zi(p|0,((p|0)<0)<<31>>31|0,1,0)|0;p=ej(p|0,I|0,1)|0;m=Zi(m|0,((m|0)<0)<<31>>31|0,1,0)|0;m=ej(m|0,I|0,1)|0;a=a+-1|0;d=d+-1|0;j=3}ga=qa+24|0;f[ga>>2]=j;R=f[sa>>2]|0;R=R>>>0>>0?R:d;S=f[ta>>2]|0;S=S>>>0>>0?S:a;T=(ha|0)!=0;U=(ha|0)==0;V=1<>2]|0;j=Zi(na|0,oa|0,j|0,((j|0)<0)<<31>>31|0)|0;j=dj(j|0,I|0,i|0)|0;k=f[Aa>>2]|0;k=Zi(na|0,oa|0,k|0,((k|0)<0)<<31>>31|0)|0;k=dj(k|0,I|0,i|0)|0;r=f[za>>2]|0;r=Zi(na|0,oa|0,r|0,((r|0)<0)<<31>>31|0)|0;r=dj(r|0,I|0,i|0)|0;t=f[ya>>2]|0;y=0;s=t;t=((t|0)<0)<<31>>31;v=la;w=ma;x=i}else{y=P+1|0;j=f[Ba>>2]|0;w=fj(y&1|0,0,i|0)|0;w=_i(ea|0,fa|0,w|0,I|0)|0;v=I;j=Zi(w|0,v|0,j|0,((j|0)<0)<<31>>31|0)|0;j=dj(j|0,I|0,ka|0)|0;k=f[Aa>>2]|0;t=fj(y>>>1|0,0,i|0)|0;s=I;r=_i(ea|0,fa|0,t|0,s|0)|0;k=Zi(r|0,I|0,k|0,((k|0)<0)<<31>>31|0)|0;k=dj(k|0,I|0,ka|0)|0;r=f[za>>2]|0;r=Zi(w|0,v|0,r|0,((r|0)<0)<<31>>31|0)|0;r=dj(r|0,I|0,ka|0)|0;v=f[ya>>2]|0;s=_i(v|0,((v|0)<0)<<31>>31|0,t|0,s|0)|0;t=I;v=ca;w=da;x=ka}f[Q+16>>2]=y;f[Q>>2]=j;O=Q+4|0;f[O>>2]=k;N=Q+8|0;f[N>>2]=r;r=Zi(s|0,t|0,-1,-1)|0;r=Zi(r|0,I|0,v|0,w|0)|0;r=dj(r|0,I|0,x|0)|0;M=Q+12|0;f[M>>2]=r;r=Ka[wa&15](y)|0;Ya=+(f[q+4>>2]|0)*.00048828125+1.0;Ya=+Ni(1.0,(f[ua>>2]|0)+r-(f[q>>2]|0)|0)*Ya*e;n[Q+32>>2]=Ya;f[Q+28>>2]=(f[q>>2]|0)+-1+(f[va>>2]|0);r=Q+20|0;k=f[r>>2]|0;if(!(T&(k|0)==0)){j=Q+24|0;if((f[j>>2]|0)>>>0>>0){k=Lc(k,ia)|0;if(!k){Ha=53;break a}f[r>>2]=k;Ha=f[j>>2]|0;ij(k+Ha|0,0,ia-Ha|0)|0;Ha=54}}else{j=Hc(ia)|0;f[r>>2]=j;if(!j){Ha=48;break a}ij(j|0,0,ia|0)|0;j=Q+24|0;Ha=54}if((Ha|0)==54){Ha=0;f[j>>2]=ia}if(!U){L=0;B=f[r>>2]|0;while(1){C=f[pa>>2]|0;G=(((L>>>0)%(C>>>0)|0)<>>0)/(C>>>0)|0)<>2]|0;F=(G|0)>(F|0)?G:F;f[B>>2]=F;G=f[O>>2]|0;G=(C|0)>(G|0)?C:G;C=B+4|0;f[C>>2]=G;r=f[N>>2]|0;r=(D|0)<(r|0)?D:r;D=B+8|0;f[D>>2]=r;k=f[M>>2]|0;k=(E|0)<(k|0)?E:k;E=B+12|0;f[E>>2]=k;F=F>>R<>S<>31|0)|0;r=dj(r|0,I|0,R|0)|0;k=Zi(_|0,$|0,k|0,((k|0)<0)<<31>>31|0)|0;k=dj(k|0,I|0,S|0)|0;r=(r<>R;H=B+16|0;f[H>>2]=r;k=(k<>S;v=B+20|0;f[v>>2]=k;J=X(r,k)|0;t=X(J,g)|0;K=B+24|0;s=f[K>>2]|0;do if((s|0)==0&(J|0)!=0){j=Hc(t)|0;f[K>>2]=j;if(!j){c=0;Ha=100;break a}ij(j|0,0,t|0)|0;j=B+28|0;Ha=64}else{j=B+28|0;if(t>>>0<=(f[j>>2]|0)>>>0)break;k=Lc(s,t)|0;if(!k){Ha=63;break a}f[K>>2]=k;Ha=f[j>>2]|0;ij(k+Ha|0,0,t-Ha|0)|0;Ha=64}while(0);if((Ha|0)==64){Ha=0;f[j>>2]=t;r=f[H>>2]|0;k=f[v>>2]|0}s=B+32|0;j=f[s>>2]|0;if(!j)j=bg(r,k,h)|0;else j=dg(j,r,k,h)|0;f[s>>2]=j;if(!j)Mb(h,2,19944,Sa)|0;s=B+36|0;k=f[s>>2]|0;r=f[H>>2]|0;j=f[v>>2]|0;if(!k)j=bg(r,j,h)|0;else j=dg(k,r,j,h)|0;f[s>>2]=j;if(!j)Mb(h,2,19966,Ta)|0;if(J|0){A=0;do{x=f[H>>2]|0;w=(((A>>>0)%(x>>>0)|0)<>>0)/(x>>>0)|0)<>2]|0;j=v+(A*56|0)|0;if(!(f[j>>2]|0)){t=Hc(8192)|0;f[j>>2]=t;if(!t){c=0;Ha=100;break a}f[v+(A*56|0)+32>>2]=8192;t=Ic(10,32)|0;f[v+(A*56|0)+4>>2]=t;if(!t){c=0;Ha=100;break a}f[v+(A*56|0)+52>>2]=10;j=v+(A*56|0)+8|0}else{k=v+(A*56|0)+32|0;r=f[k>>2]|0;j=v+(A*56|0)+8|0;s=j;t=s+44|0;do{f[s>>2]=0;s=s+4|0}while((s|0)<(t|0));f[k>>2]=r}t=f[B>>2]|0;f[j>>2]=(w|0)>(t|0)?w:t;w=f[C>>2]|0;f[v+(A*56|0)+12>>2]=(x|0)>(w|0)?x:w;x=f[D>>2]|0;f[v+(A*56|0)+16>>2]=(y|0)<(x|0)?y:x;y=f[E>>2]|0;f[v+(A*56|0)+20>>2]=(z|0)<(y|0)?z:y}else{k=f[K>>2]|0;j=k+(A*52|0)+4|0;if((f[j>>2]|0)==0?(v=Ic(100,24)|0,f[j>>2]=v,(v|0)==0):0){c=0;Ha=100;break a}j=k+(A*52|0)+8|0;if((f[j>>2]|0)==0?(v=Ic(100,24)|0,f[j>>2]=v,(v|0)==0):0){c=0;Ha=100;break a}r=f[B>>2]|0;r=(w|0)>(r|0)?w:r;f[k+(A*52|0)+12>>2]=r;s=f[C>>2]|0;x=(x|0)>(s|0)?x:s;f[k+(A*52|0)+16>>2]=x;s=f[D>>2]|0;s=(y|0)<(s|0)?y:s;f[k+(A*52|0)+20>>2]=s;y=f[E>>2]|0;z=(z|0)<(y|0)?z:y;f[k+(A*52|0)+24>>2]=z;r=X(z-x|0,s-r<<2)|0;s=k+(A*52|0)+36|0;if(r>>>0<=(f[s>>2]|0)>>>0)break;k=k+(A*52|0)|0;j=f[k>>2]|0;if(j|0)Mc(j+-1|0);j=Hc(r|1)|0;f[k>>2]=j;if(!j){Ha=87;break a}f[s>>2]=r;b[j>>0]=0;f[k>>2]=(f[k>>2]|0)+1}while(0);A=A+1|0}while(A>>>0>>0)}L=L+1|0;if(L>>>0>=ha>>>0)break;else B=B+40|0}}q=q+8|0;P=P+1|0;if(P>>>0>=(f[ga>>2]|0)>>>0)break;else Q=Q+36|0}ra=ra+1|0;if(ra>>>0>=(f[xa>>2]|0)>>>0)break;else qa=qa+136|0}}c=c+1|0;if(c>>>0>=(f[Ga>>2]|0)>>>0){c=1;Ha=100;break}l=l+1080|0;Ba=Ba+52|0;o=o+52|0;j=f[Ja>>2]|0;i=f[Ia>>2]|0;k=f[La>>2]|0;a=f[Fa>>2]|0}switch(Ha|0){case 12:{Mb(h,1,19770,Ua)|0;Wa=0;u=Xa;return Wa|0}case 14:{Mb(h,1,19770,Va)|0;Wa=0;u=Xa;return Wa|0}case 22:{f[m>>2]=0;f[k>>2]=0;f[i>>2]=0;break}case 31:{Mb(h,1,19803,Ma)|0;Mc(f[a>>2]|0);f[a>>2]=0;f[j>>2]=0;Wa=0;u=Xa;return Wa|0}case 37:{Mb(h,1,19770,Na)|0;Wa=0;u=Xa;return Wa|0}case 39:{Mb(h,1,19770,Oa)|0;Wa=0;u=Xa;return Wa|0}case 48:{Mb(h,1,19843,Pa)|0;Wa=0;u=Xa;return Wa|0}case 53:{Mb(h,1,19843,Qa)|0;Mc(f[r>>2]|0);f[r>>2]=0;f[j>>2]=0;Wa=0;u=Xa;return Wa|0}case 63:{Mc(f[K>>2]|0);f[K>>2]=0;f[j>>2]=0;Mb(h,1,19886,Ra)|0;Wa=0;u=Xa;return Wa|0}case 87:{f[s>>2]=0;Wa=0;u=Xa;return Wa|0}case 100:{u=Xa;return c|0}}Mb(h,1,19770,Wa)|0;Wa=0;u=Xa;return Wa|0}function Wf(a,b,c){a=a|0;b=b|0;c=c|0;return Vf(a,b,0,.5,56,c)|0}function Xf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;b=f[a+24>>2]|0;e=f[b+16>>2]|0;if(!e){e=0;return e|0}d=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;b=f[b+24>>2]|0;a=0;c=0;while(1){h=f[b+24>>2]|0;h=(h>>>3)+((h&7|0)!=0&1)|0;g=(f[d+24>>2]|0)+((f[d+20>>2]|0)*136|0)+-136|0;a=(X(X((h|0)==3?4:h,(f[g+8>>2]|0)-(f[g>>2]|0)|0)|0,(f[g+12>>2]|0)-(f[g+4>>2]|0)|0)|0)+a|0;c=c+1|0;if(c>>>0>=e>>>0)break;else{d=d+52|0;b=b+52|0}}return a|0}function Yf(a,c,d,e,g,h){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0;y=u;u=u+16|0;w=y;if(!(f[a+8>>2]|0)){f[a+36>>2]=c;t=a+28|0;i=f[(f[t>>2]|0)+76>>2]|0;x=a+32|0;f[x>>2]=i+(c*5640|0);v=(h|0)==0;s=a+20|0;if(!v){j=f[(f[f[s>>2]>>2]|0)+20>>2]|0;n=f[i+(c*5640|0)+5584>>2]|0;o=j+16|0;if(!(f[o>>2]|0)){j=0;i=h+88|0}else{l=f[j+24>>2]|0;i=h+88|0;m=f[i>>2]|0;j=0;k=0;do{r=l+(k*136|0)+16|0;f[m+(c*592|0)+20+(k<<2)>>2]=f[r>>2];q=l+(k*136|0)+20|0;f[m+(c*592|0)+152+(k<<2)>>2]=f[q>>2];j=(X(f[q>>2]|0,f[r>>2]|0)|0)+j|0;f[m+(c*592|0)+284+(k<<2)>>2]=f[n+812+(k<<2)>>2];f[m+(c*592|0)+416+(k<<2)>>2]=f[n+944+(k<<2)>>2];k=k+1|0}while(k>>>0<(f[o>>2]|0)>>>0)}r=Ic(X(X(f[h+52>>2]|0,j)|0,f[h+56>>2]|0)|0,32)|0;f[(f[i>>2]|0)+(c*592|0)+548>>2]=r;if(!r){h=0;u=y;return h|0}}i=f[f[s>>2]>>2]|0;r=i+16|0;if(!(f[r>>2]|0)){j=f[i+20>>2]|0;m=f[x>>2]|0;i=0}else{m=f[x>>2]|0;j=f[i+20>>2]|0;c=0;p=j;q=f[m+5584>>2]|0;while(1){n=f[p+32>>2]|0;o=X((f[p+12>>2]|0)-(f[p+4>>2]|0)|0,(f[p+8>>2]|0)-(f[p>>2]|0)|0)|0;i=(o|0)!=0;if((f[q+20>>2]|0)==1){if(i){l=q+1076|0;k=0;i=n;while(1){f[i>>2]=(f[i>>2]|0)-(f[l>>2]|0);k=k+1|0;if((k|0)==(o|0))break;else i=i+4|0}}}else if(i){l=q+1076|0;i=n;k=0;while(1){f[i>>2]=(f[i>>2]|0)-(f[l>>2]|0)<<11;k=k+1|0;if((k|0)==(o|0))break;else i=i+4|0}}c=c+1|0;i=f[r>>2]|0;if(c>>>0>=i>>>0)break;else{p=p+52|0;q=q+1080|0}}}n=X((f[j+12>>2]|0)-(f[j+4>>2]|0)|0,(f[j+8>>2]|0)-(f[j>>2]|0)|0)|0;a:do switch(f[m+16>>2]|0){case 0:break;case 2:{if(f[m+5608>>2]|0){l=Hc(i<<2)|0;if(!l){h=0;u=y;return h|0}i=f[r>>2]|0;if(!i)i=0;else{k=0;while(1){f[l+(k<<2)>>2]=f[j+32>>2];k=k+1|0;if((k|0)==(i|0))break;else j=j+52|0}}r=(yf(f[(f[x>>2]|0)+5608>>2]|0,n,l,i,f[(f[(f[a+24>>2]|0)+24>>2]|0)+32>>2]|0)|0)==0;Mc(l);if(r){h=0;u=y;return h|0}}break}default:{k=f[j+32>>2]|0;l=f[j+84>>2]|0;i=f[j+136>>2]|0;if(!(f[(f[m+5584>>2]|0)+20>>2]|0)){wf(k,l,i,n);break a}else{uf(k,l,i,n);break a}}}while(0);i=f[f[s>>2]>>2]|0;l=i+16|0;b:do if(f[l>>2]|0){k=f[(f[x>>2]|0)+5584>>2]|0;i=f[i+20>>2]|0;j=0;c:while(1){switch(f[k+20>>2]|0){case 1:{if(!(xg(i)|0)){i=0;j=53;break c}break}case 0:{if(!(Eg(i)|0)){i=0;j=53;break c}break}default:{}}j=j+1|0;if(j>>>0>=(f[l>>2]|0)>>>0)break b;else{k=k+1080|0;i=i+52|0}}if((j|0)==53){u=y;return i|0}}while(0);k=f[x>>2]|0;l=Og(1)|0;if(!l){h=0;u=y;return h|0}do if((f[k+16>>2]|0)==1)if(!(f[(f[k+5584>>2]|0)+20>>2]|0)){i=3;j=tf()|0;break}else{i=3;j=sf()|0;break}else{i=f[(f[a+24>>2]|0)+16>>2]|0;j=f[k+5600>>2]|0}while(0);s=(Tg(l,f[f[s>>2]>>2]|0,k,j,i)|0)==0;Pg(l);if(s){h=0;u=y;return h|0}i=f[t>>2]|0;f[w>>2]=0;if(!v)f[h+12>>2]=0;if(!(b[i+93>>0]&5)){if(f[(f[x>>2]|0)+8>>2]|0){i=0;do{Mf(a,i,1);i=i+1|0}while(i>>>0<(f[(f[x>>2]|0)+8>>2]|0)>>>0)}}else if(!(Of(a,d,w,g,h)|0)){h=0;u=y;return h|0}}if(h|0)f[h+12>>2]=1;i=Yg(f[a+24>>2]|0,f[a+28>>2]|0)|0;if(!i){h=0;u=y;return h|0}h=(Ug(i,f[a+36>>2]|0,f[f[a+20>>2]>>2]|0,f[(f[a+32>>2]|0)+8>>2]|0,d,e,g,h,f[a+4>>2]|0,f[a>>2]|0,f[a+16>>2]|0,1)|0)!=0;Zg(i);h=h&1;u=y;return h|0}function Zf(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0;v=u;u=u+16|0;k=v+8|0;j=v;h=v+12|0;i=a+36|0;f[i>>2]=d;p=f[a+28>>2]|0;q=a+32|0;f[q>>2]=(f[p+76>>2]|0)+(d*5640|0);f[h>>2]=0;r=a+24|0;d=Yg(f[r>>2]|0,p)|0;if(!d){t=0;u=v;return t|0}l=a+20|0;p=(Wg(d,f[i>>2]|0,f[f[l>>2]>>2]|0,b,h,c,e,g)|0)==0;Zg(d);if(p){t=0;u=v;return t|0}d=f[f[l>>2]>>2]|0;c=f[(f[q>>2]|0)+5584>>2]|0;a=f[d+20>>2]|0;h=Og(0)|0;if(!h){t=0;u=v;return t|0}e=d+16|0;a:do if(f[e>>2]|0){b=0;d=c;while(1){if(!(Qg(h,a,d)|0))break;b=b+1|0;if(b>>>0>=(f[e>>2]|0)>>>0)break a;else{a=a+52|0;d=d+1080|0}}Pg(h);t=0;u=v;return t|0}while(0);Pg(h);d=f[f[l>>2]>>2]|0;h=d+16|0;do if(f[h>>2]|0){e=f[(f[q>>2]|0)+5584>>2]|0;d=f[d+20>>2]|0;a=0;b=f[(f[r>>2]|0)+24>>2]|0;while(1){c=(f[b+36>>2]|0)+1|0;if((f[e+20>>2]|0)==1){if(!(Ag(d,c)|0)){d=0;a=47;break}}else if(!(Jg(d,c)|0)){d=0;a=47;break}a=a+1|0;if(a>>>0>=(f[h>>2]|0)>>>0){a=14;break}else{e=e+1080|0;d=d+52|0;b=b+52|0}}if((a|0)==14){d=f[f[l>>2]>>2]|0;break}else if((a|0)==47){u=v;return d|0}}while(0);c=f[q>>2]|0;a=f[d+20>>2]|0;b=f[c+16>>2]|0;do if(b|0){i=X((f[a+12>>2]|0)-(f[a+4>>2]|0)|0,(f[a+8>>2]|0)-(f[a>>2]|0)|0)|0;h=d+16|0;d=f[h>>2]|0;if(d>>>0<=2){f[k>>2]=d;Mb(g,1,20049,k)|0;break}if((X((f[a+64>>2]|0)-(f[a+56>>2]|0)|0,(f[a+60>>2]|0)-(f[a+52>>2]|0)|0)|0)>=(i|0)?(X((f[a+116>>2]|0)-(f[a+108>>2]|0)|0,(f[a+112>>2]|0)-(f[a+104>>2]|0)|0)|0)>=(i|0):0){if((b|0)!=2){d=f[a+32>>2]|0;if((f[(f[c+5584>>2]|0)+20>>2]|0)==1){vf(d,f[a+84>>2]|0,f[a+136>>2]|0,i);break}else{xf(d,f[a+84>>2]|0,f[a+136>>2]|0,i);break}}e=c+5604|0;if(!(f[e>>2]|0))break;c=Hc(d<<2)|0;if(!c){t=0;u=v;return t|0}d=f[h>>2]|0;if(!d)d=0;else{b=0;while(1){f[c+(b<<2)>>2]=f[a+32>>2];b=b+1|0;if((b|0)==(d|0))break;else a=a+52|0}}p=(zf(f[e>>2]|0,i,c,d,f[(f[(f[r>>2]|0)+24>>2]|0)+32>>2]|0)|0)==0;Mc(c);if(p)d=0;else break;u=v;return d|0}Mb(g,1,19988,j)|0;t=0;u=v;return t|0}while(0);d=f[f[l>>2]>>2]|0;p=d+16|0;if(!(f[p>>2]|0)){t=1;u=v;return t|0}o=0;m=f[d+20>>2]|0;l=f[(f[q>>2]|0)+5584>>2]|0;i=f[(f[r>>2]|0)+24>>2]|0;while(1){k=f[m+24>>2]|0;j=f[i+36>>2]|0;g=(f[k+(j*136|0)+8>>2]|0)-(f[k+(j*136|0)>>2]|0)|0;j=(f[k+(j*136|0)+12>>2]|0)-(f[k+(j*136|0)+4>>2]|0)|0;k=(f[m+8>>2]|0)-(f[m>>2]|0)|0;d=f[i+24>>2]|0;if(!(f[i+32>>2]|0)){d=1<>2]|0;d=(j|0)!=0;if((f[l+20>>2]|0)==1){if(d?(t=l+1076|0,g|0):0){d=0;while(1){b=0;c=a;while(1){r=(f[t>>2]|0)+(f[c>>2]|0)|0;f[c>>2]=(r|0)<(h|0)?h:(r|0)>(e|0)?e:r;b=b+1|0;if((b|0)==(g|0))break;else c=c+4|0}d=d+1|0;if((d|0)==(j|0))break;else a=a+(k<<2)|0}}}else if(d?(s=l+1076|0,g|0):0){c=0;while(1){d=0;b=a;while(1){r=Oi(+n[b>>2])|0;r=(f[s>>2]|0)+r|0;f[b>>2]=(r|0)<(h|0)?h:(r|0)>(e|0)?e:r;d=d+1|0;if((d|0)==(g|0))break;else b=b+4|0}c=c+1|0;if((c|0)==(j|0))break;else a=a+(k<<2)|0}}o=o+1|0;if(o>>>0>=(f[p>>2]|0)>>>0){d=1;break}else{m=m+52|0;l=l+1080|0;i=i+52|0}}u=v;return d|0}function _f(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=a+24|0;g=f[r>>2]|0;j=f[g+16>>2]|0;l=(j|0)==0;if(l){r=1;return r|0}m=f[g+24>>2]|0;k=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;g=k;a=m;h=0;i=0;while(1){p=f[a+24>>2]|0;p=(p>>>3)+((p&7|0)!=0&1)|0;q=(f[g+24>>2]|0)+((f[g+20>>2]|0)*136|0)+-136|0;h=(X(X((p|0)==3?4:p,(f[q+8>>2]|0)-(f[q>>2]|0)|0)|0,(f[q+12>>2]|0)-(f[q+4>>2]|0)|0)|0)+h|0;i=i+1|0;if((i|0)==(j|0))break;else{g=g+52|0;a=a+52|0}}g=h>>>0>e>>>0;if(g|l){r=(g^1)&1;return r|0}else q=0;while(1){l=f[m+24>>2]|0;o=f[k+24>>2]|0;j=f[m+36>>2]|0;h=f[o+(j*136|0)+8>>2]|0;i=f[o+(j*136|0)>>2]|0;n=h-i|0;e=f[o+(j*136|0)+12>>2]|0;j=f[o+(j*136|0)+4>>2]|0;o=e-j|0;p=(f[k+8>>2]|0)-(f[k>>2]|0)|0;l=(l>>>3)+((l&7|0)!=0&1)|0;a:do switch(((l|0)==3?4:l)&1073741823|0){case 1:{a=f[k+32>>2]|0;g=(o|0)==0|(n|0)==0;if(!(f[m+32>>2]|0)){if(g)break a;l=h+(X(e+-1-j|0,n)|0)-i|0;j=0;h=c;while(1){g=0;i=a;e=h;while(1){b[e>>0]=f[i>>2];g=g+1|0;if((g|0)==(n|0))break;else{i=i+4|0;e=e+1|0}}j=j+1|0;if((j|0)==(o|0))break;else{a=a+(p<<2)|0;h=h+n|0}}c=c+l|0;break a}else{if(g)break a;l=h+(X(e+-1-j|0,n)|0)-i|0;g=a;a=c;h=0;while(1){i=0;e=g;j=a;while(1){b[j>>0]=f[e>>2];i=i+1|0;if((i|0)==(n|0))break;else{e=e+4|0;j=j+1|0}}h=h+1|0;if((h|0)==(o|0))break;else{g=g+(p<<2)|0;a=a+n|0}}c=c+l|0;break a}}case 2:{g=f[k+32>>2]|0;a=(o|0)==0|(n|0)==0;if(!(f[m+32>>2]|0)){if(a)break a;l=h<<1;h=i<<1;j=c+((X(e+-1-j|0,l-h|0)|0)+l-h)|0;h=0;while(1){a=g;i=0;e=c;while(1){d[e>>1]=f[a>>2];i=i+1|0;if((i|0)==(n|0))break;else{a=a+4|0;e=e+2|0}}h=h+1|0;if((h|0)==(o|0)){c=j;break}else{g=g+(p<<2)|0;c=c+(n<<1)|0}}}else{if(a)break a;l=h<<1;i=i<<1;j=c+((X(e+-1-j|0,l-i|0)|0)+l-i)|0;i=0;while(1){a=c;h=g;e=0;while(1){d[a>>1]=f[h>>2];e=e+1|0;if((e|0)==(n|0))break;else{a=a+2|0;h=h+4|0}}i=i+1|0;if((i|0)==(o|0)){c=j;break}else{c=c+(n<<1)|0;g=g+(p<<2)|0}}}break}case 4:{if(!((o|0)==0|(n|0)==0)){l=h<<2;g=i<<2;j=c+((X(e+-1-j|0,l-g|0)|0)+l-g)|0;g=f[k+32>>2]|0;i=0;while(1){a=c;h=g;e=0;while(1){f[a>>2]=f[h>>2];e=e+1|0;if((e|0)==(n|0))break;else{a=a+4|0;h=h+4|0}}i=i+1|0;if((i|0)==(o|0)){c=j;break}else{c=c+(n<<2)|0;g=g+(p<<2)|0}}}break}default:{}}while(0);q=q+1|0;if(q>>>0>=(f[(f[r>>2]|0)+16>>2]|0)>>>0){c=1;break}else{k=k+52|0;m=m+52|0}}return c|0}function $f(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;b=f[a+24>>2]|0;e=f[b+16>>2]|0;if(!e){e=0;return e|0}d=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;b=f[b+24>>2]|0;a=0;c=0;while(1){g=f[b+24>>2]|0;g=(g>>>3)+((g&7|0)!=0&1)|0;a=(X(X((f[d+12>>2]|0)-(f[d+4>>2]|0)|0,(f[d+8>>2]|0)-(f[d>>2]|0)|0)|0,(g|0)==3?4:g)|0)+a|0;c=c+1|0;if(c>>>0>=e>>>0)break;else{d=d+52|0;b=b+52|0}}return a|0}function ag(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=f[a+24>>2]|0;p=o+16|0;m=f[p>>2]|0;n=(m|0)==0;if(n)g=0;else{i=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;k=f[o+24>>2]|0;g=0;l=0;while(1){q=f[k+24>>2]|0;q=(q>>>3)+((q&7|0)!=0&1)|0;g=(X(X((f[i+12>>2]|0)-(f[i+4>>2]|0)|0,(f[i+8>>2]|0)-(f[i>>2]|0)|0)|0,(q|0)==3?4:q)|0)+g|0;l=l+1|0;if((l|0)==(m|0))break;else{i=i+52|0;k=k+52|0}}}g=(g|0)!=(e|0);if(g|n){q=(g^1)&1;return q|0}a=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;e=f[o+24>>2]|0;n=0;while(1){q=f[e+24>>2]|0;i=(f[a+8>>2]|0)-(f[a>>2]|0)|0;k=(f[a+12>>2]|0)-(f[a+4>>2]|0)|0;m=X(k,i)|0;q=(q>>>3)+((q&7|0)!=0&1)|0;a:do switch(((q|0)==3?4:q)&1073741823|0){case 1:{i=f[a+32>>2]|0;g=(m|0)!=0;if(!(f[e+32>>2]|0)){if(g){k=0;g=i;i=c}else break a;while(1){f[g>>2]=h[i>>0];k=k+1|0;if((k|0)==(m|0))break;else{g=g+4|0;i=i+1|0}}c=c+m|0;break a}else{if(g){g=i;i=c;k=0}else break a;while(1){f[g>>2]=b[i>>0];k=k+1|0;if((k|0)==(m|0))break;else{g=g+4|0;i=i+1|0}}c=c+m|0;break a}}case 2:{g=f[a+32>>2]|0;l=(m|0)!=0;if(!(f[e+32>>2]|0)){if(!l)break a;k=c+(X(k<<1,i)|0)|0;i=0;while(1){f[g>>2]=j[c>>1];i=i+1|0;if((i|0)==(m|0)){c=k;break}else{c=c+2|0;g=g+4|0}}}else{if(!l)break a;k=c+(X(k<<1,i)|0)|0;i=0;while(1){f[g>>2]=d[c>>1];i=i+1|0;if((i|0)==(m|0)){c=k;break}else{c=c+2|0;g=g+4|0}}}break}case 4:{if(m){k=c+(X(k<<2,i)|0)|0;i=f[a+32>>2]|0;g=0;while(1){f[i>>2]=f[c>>2];g=g+1|0;if((g|0)==(m|0)){c=k;break}else{i=i+4|0;c=c+4|0}}}break}default:{}}while(0);n=n+1|0;if(n>>>0>=(f[p>>2]|0)>>>0){c=1;break}else{a=a+52|0;e=e+52|0}}return c|0}function bg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=u;u=u+288|0;j=t+16|0;h=t+8|0;r=t+152|0;s=t+24|0;d=Ic(1,20)|0;if(!d){Mb(c,1,20123,t)|0;s=0;u=t;return s|0}f[d>>2]=a;k=d+4|0;f[k>>2]=b;f[r>>2]=a;f[s>>2]=b;i=d+8|0;f[i>>2]=0;q=0;g=0;while(1){p=X(b,a)|0;a=(a+1|0)/2|0;e=q+1|0;f[r+(e<<2)>>2]=a;b=(b+1|0)/2|0;f[s+(e<<2)>>2]=b;g=g+p|0;if(p>>>0<=1)break;else q=e}f[i>>2]=g;if(!g){Mc(d);Mb(c,2,20161,h)|0;s=0;u=t;return s|0}b=Ic(g,16)|0;f[d+12>>2]=b;if(!b){Mb(c,1,20211,j)|0;Mc(d);s=0;u=t;return s|0}p=f[i>>2]|0;f[d+16>>2]=p<<4;a=b+((X(f[k>>2]|0,f[d>>2]|0)|0)<<4)|0;if(!q)a=b;else{o=0;g=a;e=a;a=b;do{m=f[s+(o<<2)>>2]|0;a:do if((m|0)>0){n=f[r+(o<<2)>>2]|0;if((n|0)<=0){i=m+-1|0;c=0;while(1){l=(c&1|0)!=0|(c|0)==(i|0);h=l?e:g;g=l?e:g+(n<<4)|0;c=c+1|0;if((c|0)>=(m|0)){e=h;break a}else e=h}}k=~n;k=(n+2+((k|0)>-3?k:-3)|0)>>>1;l=m+-1|0;j=0;do{i=e+16|0;c=n;while(1){f[a>>2]=e;h=a+16|0;if((c|0)==1){a=h;break}f[h>>2]=e;a=a+32|0;if((c|0)>2){c=c+-2|0;e=e+16|0}else break}i=i+(k<<4)|0;c=(j&1|0)!=0|(j|0)==(l|0);e=c?i:g;g=c?i:g+(n<<4)|0;j=j+1|0}while((j|0)<(m|0))}while(0);o=o+1|0}while((o|0)!=(q|0))}f[a>>2]=0;if(!p){s=d;u=t;return s|0}else a=0;while(1){f[b+4>>2]=999;f[b+8>>2]=0;f[b+12>>2]=0;a=a+1|0;if((a|0)==(p|0))break;else b=b+16|0}u=t;return d|0}function cg(a){a=a|0;var b=0,c=0;if(!a)return;c=f[a+8>>2]|0;if(!c)return;b=0;a=f[a+12>>2]|0;while(1){f[a+4>>2]=999;f[a+8>>2]=0;f[a+12>>2]=0;b=b+1|0;if(b>>>0>=c>>>0)break;else a=a+16|0}return}function dg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=u;u=u+272|0;l=s;q=s+136|0;r=s+8|0;if(!a){r=0;u=s;return r|0}k=a+4|0;if((f[a>>2]|0)==(b|0)?(f[k>>2]|0)==(c|0):0)e=a+8|0;else{f[a>>2]=b;f[k>>2]=c;f[q>>2]=b;f[r>>2]=c;e=a+8|0;f[e>>2]=0;p=0;g=c;h=b;j=0;while(1){o=X(g,h)|0;h=(h+1|0)/2|0;i=p+1|0;f[q+(i<<2)>>2]=h;g=(g+1|0)/2|0;f[r+(i<<2)>>2]=g;j=j+o|0;if(o>>>0<=1)break;else p=i}f[e>>2]=j;if(!j){e=a+12|0;g=f[e>>2]|0;if(g|0){Mc(g);f[e>>2]=0}Mc(a);r=0;u=s;return r|0}h=j<<4;i=a+16|0;j=a+12|0;do if(h>>>0>(f[i>>2]|0)>>>0){g=Lc(f[j>>2]|0,h)|0;if(g|0){f[j>>2]=g;c=f[i>>2]|0;ij(g+c|0,0,h-c|0)|0;f[i>>2]=h;c=f[k>>2]|0;b=f[a>>2]|0;break}Mb(d,1,20255,l)|0;e=f[j>>2]|0;if(e|0){Mc(e);f[j>>2]=0}Mc(a);r=0;u=s;return r|0}while(0);g=f[j>>2]|0;b=g+((X(c,b)|0)<<4)|0;if(p){c=b;o=0;do{m=f[r+(o<<2)>>2]|0;a:do if((m|0)>0){n=f[q+(o<<2)>>2]|0;if((n|0)<=0){j=m+-1|0;i=0;while(1){l=(i&1|0)!=0|(i|0)==(j|0);h=l?b:c+(n<<4)|0;b=l?b:c;i=i+1|0;if((i|0)>=(m|0)){c=h;break a}else c=h}}k=~n;k=(n+2+((k|0)>-3?k:-3)|0)>>>1;l=m+-1|0;d=0;while(1){j=b+16|0;i=n;while(1){f[g>>2]=b;h=g+16|0;if((i|0)==1){g=h;break}f[h>>2]=b;g=g+32|0;if((i|0)>2){i=i+-2|0;b=b+16|0}else break}b=j+(k<<4)|0;j=(d&1|0)!=0|(d|0)==(l|0);h=j?b:c+(n<<4)|0;b=j?b:c;d=d+1|0;if((d|0)>=(m|0)){c=h;break}else c=h}}while(0);o=o+1|0}while((o|0)!=(p|0))}f[g>>2]=0}b=f[e>>2]|0;if(!b){r=a;u=s;return r|0}e=0;g=f[a+12>>2]|0;while(1){f[g+4>>2]=999;f[g+8>>2]=0;f[g+12>>2]=0;e=e+1|0;if((e|0)==(b|0))break;else g=g+16|0}u=s;return a|0}function eg(a){a=a|0;var b=0,c=0;if(!a)return;b=a+12|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}Mc(a);return}function fg(a,b,c){a=a|0;b=b|0;c=c|0;a=(f[a+12>>2]|0)+(b<<4)|0;if(!a)return;while(1){b=a+4|0;if((f[b>>2]|0)<=(c|0)){a=4;break}f[b>>2]=c;a=f[a>>2]|0;if(!a){a=4;break}}if((a|0)==4)return}function gg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;j=u;u=u+128|0;i=j;c=(f[b+12>>2]|0)+(c<<4)|0;b=f[c>>2]|0;if(!b){b=0;h=0}else{e=0;g=b;while(1){h=e+1|0;f[i+(e<<2)>>2]=c;b=f[g>>2]|0;if(!b){b=0;c=g;break}else{c=g;e=h;g=b}}}while(1){g=c+8|0;e=f[g>>2]|0;if((b|0)>(e|0))f[g>>2]=b;else b=e;a:do if((b|0)<(d|0)){e=c+4|0;while(1){if((b|0)>=(f[e>>2]|0))break;tg(a,0,1);b=b+1|0;if((b|0)>=(d|0))break a}c=c+12|0;if(!(f[c>>2]|0)){tg(a,1,1);f[c>>2]=1}}while(0);f[g>>2]=b;if(!h)break;g=h+-1|0;c=f[i+(g<<2)>>2]|0;h=g}u=j;return}function hg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;j=u;u=u+128|0;i=j;b=(f[b+12>>2]|0)+(c<<4)|0;c=f[b>>2]|0;if(!c){e=0;g=0}else{e=0;while(1){g=e+1|0;f[i+(e<<2)>>2]=b;b=f[c>>2]|0;if(!b){e=0;b=c;break}else{h=c;e=g;c=b;b=h}}}while(1){h=b+8|0;c=f[h>>2]|0;if((e|0)>(c|0)){f[h>>2]=e;c=e}e=b+4|0;a:do if((c|0)<(d|0)){b=c;while(1){if((b|0)>=(f[e>>2]|0))break a;if(ug(a,1)|0)break;b=b+1|0;if((b|0)>=(d|0))break a}f[e>>2]=b}else b=c;while(0);f[h>>2]=b;if(!g)break;h=g+-1|0;e=b;b=f[i+(h<<2)>>2]|0;g=h}u=j;return (f[e>>2]|0)<(d|0)|0}function ig(){var a=0,b=0;a=Ic(1,12)|0;if(!a){a=0;return a|0}f[a+4>>2]=10;b=Ic(10,4)|0;f[a+8>>2]=b;if(b|0){b=a;return b|0}Mc(a);b=0;return b|0}function jg(a){a=a|0;var b=0;if(!a)return;b=f[a+8>>2]|0;if(b|0)Mc(b);Mc(a);return}function kg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;i=u;u=u+16|0;h=i;g=a+4|0;e=f[g>>2]|0;d=f[a>>2]|0;do if((e|0)==(d|0)){e=e+10|0;f[g>>2]=e;d=a+8|0;e=Lc(f[d>>2]|0,e<<2)|0;if(e|0){f[d>>2]=e;d=f[a>>2]|0;break}Mc(f[d>>2]|0);f[g>>2]=0;f[a>>2]=0;Mb(c,1,20303,h)|0;b=0;u=i;return b|0}else e=f[a+8>>2]|0;while(0);f[e+(d<<2)>>2]=b;f[a>>2]=d+1;b=1;u=i;return b|0}function lg(a){a=a|0;return f[a>>2]|0}function mg(a){a=a|0;return f[a+8>>2]|0}function ng(a){a=a|0;f[a>>2]=0;return}function og(){return Hc(20)|0}function pg(a){a=a|0;if(!a)return;Mc(a);return}function qg(a){a=a|0;return (f[a+8>>2]|0)-(f[a>>2]|0)|0}function rg(a,b,c){a=a|0;b=b|0;c=c|0;f[a>>2]=b;f[a+4>>2]=b+c;f[a+8>>2]=b;f[a+12>>2]=0;f[a+16>>2]=8;return}function sg(a,b,c){a=a|0;b=b|0;c=c|0;f[a>>2]=b;f[a+4>>2]=b+c;f[a+8>>2]=b;f[a+12>>2]=0;f[a+16>>2]=0;return}function tg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!d)return;k=a+16|0;l=a+12|0;m=a+8|0;i=a+4|0;h=d+-1|0;a=f[k>>2]|0;do{j=c>>>h&1;if(!a){e=f[l>>2]|0;a=e<<8&65280;f[l>>2]=a;a=(a|0)==65280?7:8;f[k>>2]=a;g=f[m>>2]|0;if((f[i>>2]|0)>>>0>g>>>0){f[m>>2]=g+1;b[g>>0]=e;a=f[k>>2]|0}}a=a+-1|0;f[k>>2]=a;f[l>>2]=f[l>>2]|j<>>0>>0);return}function ug(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0;if(!b){l=0;return l|0}j=a+16|0;k=a+12|0;l=a+8|0;i=a+4|0;g=b+-1|0;a=0;c=f[k>>2]|0;d=f[j>>2]|0;do{if(!d){c=c<<8&65280;f[k>>2]=c;d=(c|0)==65280?7:8;f[j>>2]=d;e=f[l>>2]|0;if((f[i>>2]|0)>>>0>e>>>0){f[l>>2]=e+1;c=c|(h[e>>0]|0);f[k>>2]=c}}d=d+-1|0;f[j>>2]=d;a=(c>>>d&1)<>>0>>0);return a|0}function vg(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0;e=a+12|0;c=f[e>>2]|0;i=c<<8&65280;f[e>>2]=i;h=a+16|0;f[h>>2]=(i|0)==65280?7:8;i=a+8|0;d=f[i>>2]|0;g=a+4|0;if((f[g>>2]|0)>>>0<=d>>>0){i=0;return i|0}f[i>>2]=d+1;b[d>>0]=c;if((f[h>>2]|0)!=7){i=1;return i|0}c=f[e>>2]|0;a=c<<8&65280;f[e>>2]=a;f[h>>2]=(a|0)==65280?7:8;a=f[i>>2]|0;if((f[g>>2]|0)>>>0<=a>>>0){i=0;return i|0}f[i>>2]=a+1;b[a>>0]=c;i=1;return i|0}function wg(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;g=a+12|0;b=f[g>>2]|0;do if((b&255|0)==255){e=b<<8&65280;f[g>>2]=e;b=a+16|0;f[b>>2]=(e|0)==65280?7:8;c=a+8|0;d=f[c>>2]|0;if((f[a+4>>2]|0)>>>0>d>>>0){f[c>>2]=d+1;f[g>>2]=e|(h[d>>0]|0);break}else{g=0;return g|0}}else b=a+16|0;while(0);f[b>>2]=0;g=1;return g|0}function xg(a){a=a|0;return zg(a,1)|0}function yg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0;if(!d){d=(b|0)>0;if(!(d|(c|0)>1))return;if(d){e=c+-1|0;d=0;do{h=d;d=d+1|0;g=a+((h<<1|1)<<2)|0;f[g>>2]=(f[g>>2]|0)-((f[a+(((d|0)>=(c|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((h|0)>=(c|0)?e:h)<<1<<2)>>2]|0)>>1)}while((d|0)!=(b|0))}if((c|0)<=0)return;e=b+-1|0;d=0;do{h=a+(d<<1<<2)|0;f[h>>2]=((f[a+(((d|0)<1?1:(((d|0)>(b|0)?b:d)<<1)+-1|0)<<2)>>2]|0)+2+(f[a+((((d|0)>=(b|0)?e:d)<<1|1)<<2)>>2]|0)>>2)+(f[h>>2]|0);d=d+1|0}while((d|0)!=(c|0));return}if((b|0)==1&(c|0)==0){f[a>>2]=f[a>>2]<<1;return}if((b|0)>0){e=c+-1|0;d=0;do{h=a+(d<<1<<2)|0;f[h>>2]=(f[h>>2]|0)-((f[a+(((d|0)<1?1:(((d|0)>(c|0)?c:d)<<1)+-1|0)<<2)>>2]|0)+(f[a+((((d|0)>=(c|0)?e:d)<<1|1)<<2)>>2]|0)>>1);d=d+1|0}while((d|0)!=(b|0))}if((c|0)<=0)return;e=b+-1|0;d=0;do{g=d;d=d+1|0;h=a+((g<<1|1)<<2)|0;f[h>>2]=((f[a+(((g|0)>=(b|0)?e:g)<<1<<2)>>2]|0)+2+(f[a+(((d|0)>=(b|0)?e:d)<<1<<2)>>2]|0)>>2)+(f[h>>2]|0)}while((d|0)!=(c|0));return}function zg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=(f[a+8>>2]|0)-(f[a>>2]|0)|0;h=f[a+16>>2]|0;c=h+-1|0;y=f[a+32>>2]|0;a=f[a+24>>2]|0;g=a+(c*136|0)|0;e=(c|0)==0;if(e)a=0;else{d=0;do{w=a;a=a+136|0;x=(f[w+144>>2]|0)-(f[a>>2]|0)|0;x=d>>>0>>0?x:d;w=(f[w+148>>2]|0)-(f[w+140>>2]|0)|0;d=x>>>0>>0?w:x;c=c+-1|0}while((c|0)!=0);a=d<<2}x=Hc(a)|0;if(!((a|0)==0|(x|0)!=0)){z=0;return z|0}if(!e){w=x+4|0;s=h+-2|0;while(1){j=g;g=g+-136|0;v=f[j>>2]|0;r=(f[j+8>>2]|0)-v|0;l=f[j+4>>2]|0;t=(f[j+12>>2]|0)-l|0;u=(f[j+-128>>2]|0)-(f[g>>2]|0)|0;j=(f[j+-124>>2]|0)-(f[j+-132>>2]|0)|0;v=v&1;l=l&1;m=t-j|0;q=(r|0)>0;a:do if(q){i=(j|0)==0;n=(m|0)==0;o=w+(0-l<<2)|0;p=X(j,z)|0;k=x+(l<<2)|0;if((t|0)>0){h=0;while(1){e=y+(h<<2)|0;a=0;do{d=e+((X(a,z)|0)<<2)|0;f[x+(a<<2)>>2]=f[d>>2];a=a+1|0}while((a|0)!=(t|0));Va[b&3](x,m,j,l);if(!i){a=e;c=j;d=k;while(1){c=c+-1|0;f[a>>2]=f[d>>2];if(!c)break;else{a=a+(z<<2)|0;d=d+8|0}}}if(!n){a=e+(p<<2)|0;c=m;d=o;while(1){c=c+-1|0;f[a>>2]=f[d>>2];if(!c)break;else{a=a+(z<<2)|0;d=d+8|0}}}h=h+1|0;if((h|0)==(r|0))break a}}if(i){a=0;while(1){Va[b&3](x,m,0,l);if(!n){c=y+(a<<2)+(p<<2)|0;d=m;e=o;while(1){d=d+-1|0;f[c>>2]=f[e>>2];if(!d)break;else{c=c+(z<<2)|0;e=e+8|0}}}a=a+1|0;if((a|0)==(r|0))break a}}else h=0;do{e=y+(h<<2)|0;Va[b&3](x,m,j,l);a=e;c=j;d=k;while(1){c=c+-1|0;f[a>>2]=f[d>>2];if(!c)break;else{a=a+(z<<2)|0;d=d+8|0}}if(!n){a=e+(p<<2)|0;c=m;d=o;while(1){c=c+-1|0;f[a>>2]=f[d>>2];if(!c)break;else{a=a+(z<<2)|0;d=d+8|0}}}h=h+1|0}while((h|0)!=(r|0))}while(0);k=r-u|0;b:do if((t|0)>0){i=(u|0)>0;j=x+(v<<2)|0;l=(k|0)>0;m=w+(0-v<<2)|0;if(q){h=0;while(1){e=y+((X(h,z)|0)<<2)|0;a=0;do{f[x+(a<<2)>>2]=f[e+(a<<2)>>2];a=a+1|0}while((a|0)!=(r|0));Va[b&3](x,k,u,v);if(i){a=e;c=0;d=j;while(1){f[a>>2]=f[d>>2];c=c+1|0;if((c|0)==(u|0))break;else{a=a+4|0;d=d+8|0}}}if(l){a=e+(u<<2)|0;c=0;d=m;while(1){f[a>>2]=f[d>>2];c=c+1|0;if((c|0)==(k|0))break;else{a=a+4|0;d=d+8|0}}}h=h+1|0;if((h|0)==(t|0))break b}}if(i)h=0;else{a=0;while(1){Va[b&3](x,k,u,v);if(l){c=y+((X(a,z)|0)<<2)+(u<<2)|0;d=0;e=m;while(1){f[c>>2]=f[e>>2];d=d+1|0;if((d|0)==(k|0))break;else{c=c+4|0;e=e+8|0}}}a=a+1|0;if((a|0)==(t|0))break b}}do{e=y+((X(h,z)|0)<<2)|0;Va[b&3](x,k,u,v);a=e;c=0;d=j;while(1){f[a>>2]=f[d>>2];c=c+1|0;if((c|0)==(u|0))break;else{a=a+4|0;d=d+8|0}}if(l){a=e+(u<<2)|0;c=0;d=m;while(1){f[a>>2]=f[d>>2];c=c+1|0;if((c|0)==(k|0))break;else{a=a+4|0;d=d+8|0}}}h=h+1|0}while((h|0)!=(t|0))}while(0);if(!s)break;else s=s+-1|0}}Mc(x);z=1;return z|0}function Ag(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+32|0;E=G+16|0;F=G;h=f[a+24>>2]|0;g=(f[h+8>>2]|0)-(f[h>>2]|0)|0;i=(f[h+12>>2]|0)-(f[h+4>>2]|0)|0;D=(f[a+8>>2]|0)-(f[a>>2]|0)|0;if((b|0)==1){F=1;u=G;return F|0}j=b+-1|0;e=(j|0)==0;if(e)b=0;else{b=h;c=0;d=j;do{B=b;b=b+136|0;C=(f[B+144>>2]|0)-(f[b>>2]|0)|0;C=c>>>0>>0?C:c;B=(f[B+148>>2]|0)-(f[B+140>>2]|0)|0;c=C>>>0>>0?B:C;d=d+-1|0}while((d|0)!=0);b=c<<2}C=Jc(b)|0;f[E>>2]=C;if(!C){F=0;u=G;return F|0}f[F>>2]=C;if(!e){t=a+32|0;v=E+8|0;w=F+8|0;x=E+4|0;y=E+12|0;z=F+4|0;A=F+12|0;B=C+4|0;do{s=f[t>>2]|0;p=h;h=h+136|0;f[v>>2]=g;f[w>>2]=i;c=f[h>>2]|0;n=g;g=(f[p+144>>2]|0)-c|0;o=p+140|0;b=f[o>>2]|0;r=i;i=(f[p+148>>2]|0)-b|0;p=g-n|0;f[x>>2]=p;c=(c|0)%2|0;f[y>>2]=c;q=(i|0)==0;if(!q){k=g<<2;l=(n|0)==0;m=(p|0)==0;b=0;while(1){a=s+((X(b,D)|0)<<2)|0;if(l)d=0;else{c=C+(c<<2)|0;d=a;e=n;while(1){e=e+-1|0;f[c>>2]=f[d>>2];if(!e)break;else{c=c+8|0;d=d+4|0}}c=f[y>>2]|0;d=n}if(!m){e=B+(0-c<<2)|0;c=a+(d<<2)|0;d=p;while(1){d=d+-1|0;f[e>>2]=f[c>>2];if(!d)break;else{e=e+8|0;c=c+4|0}}}Bg(E);hj(a|0,C|0,k|0)|0;b=b+1|0;if((b|0)==(i|0))break;c=f[y>>2]|0}b=f[o>>2]|0}m=i-r|0;f[z>>2]=m;c=(b|0)%2|0;f[A>>2]=c;a:do if(g|0){k=(r|0)==0;l=(m|0)==0;if(q){b=0;while(1){a=s+(b<<2)|0;if(k)d=0;else{c=C+(c<<2)|0;d=a;e=r;while(1){e=e+-1|0;f[c>>2]=f[d>>2];if(!e)break;else{c=c+8|0;d=d+(D<<2)|0}}c=f[A>>2]|0;d=r}if(!l){e=B+(0-c<<2)|0;c=a+((X(d,D)|0)<<2)|0;d=m;while(1){d=d+-1|0;f[e>>2]=f[c>>2];if(!d)break;else{e=e+8|0;c=c+(D<<2)|0}}}Bg(F);b=b+1|0;if((b|0)==(g|0))break a;c=f[A>>2]|0}}else b=0;while(1){a=s+(b<<2)|0;if(k)d=0;else{c=C+(c<<2)|0;d=a;e=r;while(1){e=e+-1|0;f[c>>2]=f[d>>2];if(!e)break;else{c=c+8|0;d=d+(D<<2)|0}}c=f[A>>2]|0;d=r}if(!l){e=B+(0-c<<2)|0;c=a+((X(d,D)|0)<<2)|0;d=m;while(1){d=d+-1|0;f[e>>2]=f[c>>2];if(!d)break;else{e=e+8|0;c=c+(D<<2)|0}}}Bg(F);c=0;do{q=s+((X(c,D)|0)+b<<2)|0;f[q>>2]=f[C+(c<<2)>>2];c=c+1|0}while((c|0)!=(i|0));b=b+1|0;if((b|0)==(g|0))break a;c=f[A>>2]|0}}while(0);j=j+-1|0}while((j|0)!=0)}Kc(C);F=1;u=G;return F|0}function Bg(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;d=f[a>>2]|0;e=f[a+4>>2]|0;g=f[a+8>>2]|0;if(!(f[a+12>>2]|0)){c=(e|0)>0;if(!(c|(g|0)>1))return;if((g|0)>0){b=e+-1|0;a=0;do{h=d+(a<<1<<2)|0;f[h>>2]=(f[h>>2]|0)-((f[d+(((a|0)<1?1:(((a|0)>(e|0)?e:a)<<1)+-1|0)<<2)>>2]|0)+2+(f[d+((((a|0)>=(e|0)?b:a)<<1|1)<<2)>>2]|0)>>2);a=a+1|0}while((a|0)!=(g|0))}if(!c)return;b=g+-1|0;a=0;do{c=a;a=a+1|0;h=d+((c<<1|1)<<2)|0;f[h>>2]=((f[d+(((a|0)>=(g|0)?b:a)<<1<<2)>>2]|0)+(f[d+(((c|0)>=(g|0)?b:c)<<1<<2)>>2]|0)>>1)+(f[h>>2]|0)}while((a|0)!=(e|0));return}if((e|0)==1&(g|0)==0){f[d>>2]=(f[d>>2]|0)/2|0;return}if((g|0)>0){b=e+-1|0;a=0;do{c=a;a=a+1|0;h=d+((c<<1|1)<<2)|0;f[h>>2]=(f[h>>2]|0)-((f[d+(((c|0)>=(e|0)?b:c)<<1<<2)>>2]|0)+2+(f[d+(((a|0)>=(e|0)?b:a)<<1<<2)>>2]|0)>>2)}while((a|0)!=(g|0))}if((e|0)<=0)return;b=g+-1|0;a=0;do{h=d+(a<<1<<2)|0;f[h>>2]=((f[d+(((a|0)<1?1:(((a|0)>(g|0)?g:a)<<1)+-1|0)<<2)>>2]|0)+(f[d+((((a|0)>=(g|0)?b:a)<<1|1)<<2)>>2]|0)>>1)+(f[h>>2]|0);a=a+1|0}while((a|0)!=(e|0));return}function Cg(a){a=a|0;return ((a|0)==0?0:(a+-1|0)>>>0<2?1:2)|0}function Dg(a,b){a=a|0;b=b|0;return +(+p[56+(b*80|0)+(a<<3)>>3])}function Eg(a){a=a|0;return zg(a,2)|0}\r\nfunction Fg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;if(!d){h=(b|0)>0;if(!(h|(c|0)>1))return;if(h){e=c+-1|0;d=0;do{g=d;d=d+1|0;i=(f[a+(((d|0)>=(c|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((g|0)>=(c|0)?e:g)<<1<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,12993,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;g=a+((g<<1|1)<<2)|0;f[g>>2]=(f[g>>2]|0)-i}while((d|0)!=(b|0))}g=(c|0)>0;if(g){e=b+-1|0;d=0;do{j=(f[a+((((d|0)>=(b|0)?e:d)<<1|1)<<2)>>2]|0)+(f[a+(((d|0)<1?1:(((d|0)>(b|0)?b:d)<<1)+-1|0)<<2)>>2]|0)|0;j=Yi(j|0,((j|0)<0)<<31>>31|0,434,0)|0;j=Zi(j|0,I|0,4096,0)|0;j=ej(j|0,I|0,13)|0;i=a+(d<<1<<2)|0;f[i>>2]=(f[i>>2]|0)-j;d=d+1|0}while((d|0)!=(c|0))}if(h){e=c+-1|0;d=0;do{j=d;d=d+1|0;i=(f[a+(((d|0)>=(c|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((j|0)>=(c|0)?e:j)<<1<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,7233,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+((j<<1|1)<<2)|0;f[j>>2]=(f[j>>2]|0)+i}while((d|0)!=(b|0))}if(g){e=b+-1|0;d=0;do{i=(f[a+((((d|0)>=(b|0)?e:d)<<1|1)<<2)>>2]|0)+(f[a+(((d|0)<1?1:(((d|0)>(b|0)?b:d)<<1)+-1|0)<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,3633,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+(d<<1<<2)|0;f[j>>2]=(f[j>>2]|0)+i;d=d+1|0}while((d|0)!=(c|0))}if(h){d=0;do{j=a+((d<<1|1)<<2)|0;i=f[j>>2]|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,5038,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;f[j>>2]=i;d=d+1|0}while((d|0)!=(b|0))}if(g)d=0;else return;do{j=a+(d<<1<<2)|0;i=f[j>>2]|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,6659,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;f[j>>2]=i;d=d+1|0}while((d|0)!=(c|0));return}else{h=(c|0)>0;if(!((b|0)>1|h))return;g=(b|0)>0;if(g){e=c+-1|0;d=0;do{i=(f[a+(((d|0)<1?1:(((d|0)>(c|0)?c:d)<<1)+-1|0)<<2)>>2]|0)+(f[a+((((d|0)>=(c|0)?e:d)<<1|1)<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,12993,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+(d<<1<<2)|0;f[j>>2]=(f[j>>2]|0)-i;d=d+1|0}while((d|0)!=(b|0))}if(h){e=b+-1|0;d=0;do{j=d;d=d+1|0;i=(f[a+(((d|0)>=(b|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((j|0)>=(b|0)?e:j)<<1<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,434,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+((j<<1|1)<<2)|0;f[j>>2]=(f[j>>2]|0)-i}while((d|0)!=(c|0))}if(g){e=c+-1|0;d=0;do{i=(f[a+(((d|0)<1?1:(((d|0)>(c|0)?c:d)<<1)+-1|0)<<2)>>2]|0)+(f[a+((((d|0)>=(c|0)?e:d)<<1|1)<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,7233,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+(d<<1<<2)|0;f[j>>2]=(f[j>>2]|0)+i;d=d+1|0}while((d|0)!=(b|0))}if(h){e=b+-1|0;d=0;do{j=d;d=d+1|0;i=(f[a+(((d|0)>=(b|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((j|0)>=(b|0)?e:j)<<1<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,3633,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+((j<<1|1)<<2)|0;f[j>>2]=(f[j>>2]|0)+i}while((d|0)!=(c|0))}if(g){d=0;do{j=a+(d<<1<<2)|0;i=f[j>>2]|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,5038,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;f[j>>2]=i;d=d+1|0}while((d|0)!=(b|0))}if(h)d=0;else return;do{j=a+((d<<1|1)<<2)|0;i=f[j>>2]|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,6659,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;f[j>>2]=i;d=d+1|0}while((d|0)!=(c|0));return}}function Gg(a){a=a|0;return 0}function Hg(a,b){a=a|0;b=b|0;return +(+p[376+(b*80|0)+(a<<3)>>3])}function Ig(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=a+4|0;l=((f[k>>2]|0)*3|0)+-2|0;if(!l)return;m=a+20|0;n=a+24|0;j=0;do{if(!j){d=0;e=0}else{e=j+-1|0;d=((e>>>0)%3|0)+1|0;e=((e>>>0)/3|0)+1|0}g=(d|0)==0|(f[m>>2]|0)==0?0:(d+-1|0)>>>0<2?1:2;if(!(f[n>>2]|0))c=1.0;else c=+(1<>2]|0)+~e<<3)>>3];i=~~+J(+(c*8192.0));h=g+b|0;if((i|0)>1){d=i;g=0;while(1)if(d>>>0>3){d=d>>>1;g=g+1|0}else{d=i;e=0;break}while(1)if(d>>>0>3){d=d>>>1;e=e+1|0}else break;e=10-e|0;d=g+-12|0}else{e=11;d=-13}f[a+28+(j<<3)+4>>2]=((e|0)<0?i>>0-e:i<>2]=h-d;j=j+1|0}while((j|0)!=(l|0));return}function Jg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;S=u;u=u+32|0;Q=S+16|0;R=S;j=f[a+24>>2]|0;g=f[j+8>>2]|0;h=f[j>>2]|0;n=f[j+12>>2]|0;o=f[j+4>>2]|0;O=a+8|0;l=f[O>>2]|0;m=f[a>>2]|0;P=l-m|0;i=b+-1|0;e=(i|0)==0;if(e)b=80;else{b=j;c=0;d=i;do{L=b;b=b+136|0;M=(f[L+144>>2]|0)-(f[b>>2]|0)|0;M=c>>>0>>0?M:c;L=(f[L+148>>2]|0)-(f[L+140>>2]|0)|0;c=M>>>0>>0?L:M;d=d+-1|0}while((d|0)!=0);b=(c<<4)+80|0}k=Jc(b)|0;f[Q>>2]=k;if(!k){R=0;u=S;return R|0}f[R>>2]=k;a:do if(e)b=k;else{z=a+32|0;A=a+12|0;B=a+4|0;C=Q+8|0;D=R+8|0;E=Q+4|0;F=Q+12|0;G=P<<2;H=P<<1;I=P*3|0;J=R+4|0;K=R+12|0;L=l-m<<2;M=m-l<<2;p=g-h|0;c=i;b=k;d=k;g=l;e=m;t=n-o|0;n=k;while(1){v=f[z>>2]|0;e=X((f[A>>2]|0)-(f[B>>2]|0)|0,g-e|0)|0;f[C>>2]=p;f[D>>2]=t;w=j+136|0;o=f[j+144>>2]|0;q=f[w>>2]|0;x=o-q|0;h=f[j+148>>2]|0;m=j+140|0;g=f[m>>2]|0;y=h-g|0;f[E>>2]=x-p;f[F>>2]=(q|0)%2|0;do if((y|0)>3){k=g+-1-h|0;k=(h+4+((k|0)>-8?k:-8)-g|0)>>>2;l=v+(G<<2)+((X(L,k)|0)<<2)|0;k=X(M,k)|0;if((x|0)>0){g=y;h=e;i=v}else{g=y;h=e;i=v;while(1){Kg(Q,i,P,h);Lg(Q);if((g|0)>7){g=g+-4|0;h=h-G|0;i=i+(G<<2)|0}else break}e=M+e+k|0;h=l;break}while(1){Kg(Q,i,P,h);Lg(Q);j=x;do{s=j;j=j+-1|0;f[i+(j<<2)>>2]=f[n+(j<<4)>>2];f[i+(j+P<<2)>>2]=f[n+(j<<4)+4>>2];f[i+(j+H<<2)>>2]=f[n+(j<<4)+8>>2];f[i+(j+I<<2)>>2]=f[n+(j<<4)+12>>2]}while((s|0)>1);if((g|0)>7){g=g+-4|0;h=h-G|0;i=i+(G<<2)|0}else break}e=M+e+k|0;h=l}else h=v;while(0);b:do if(!(y&3)){s=n;N=22}else{Kg(Q,h,P,e);Lg(Q);e=x+-1|0;if((x|0)<=0){l=y-t|0;f[J>>2]=l;k=(f[m>>2]|0)%2|0;f[K>>2]=k;m=v;break}g=f[Q>>2]|0;switch(y&3){case 3:{b=e;while(1){f[h+(b+H<<2)>>2]=f[g+(b<<4)+8>>2];f[h+(b+P<<2)>>2]=f[g+(b<<4)+4>>2];f[h+(b<<2)>>2]=f[g+(b<<4)>>2];if((b|0)>0)b=b+-1|0;else{b=g;s=g;N=22;break}}break}case 2:{b=e;while(1){f[h+(b+P<<2)>>2]=f[g+(b<<4)+4>>2];f[h+(b<<2)>>2]=f[g+(b<<4)>>2];if((b|0)>0)b=b+-1|0;else{b=g;s=g;N=22;break}}break}case 1:{b=e;while(1){f[h+(b<<2)>>2]=f[g+(b<<4)>>2];if((b|0)>0)b=b+-1|0;else{b=g;s=g;N=22;break}}break}default:{b=g;s=g;N=22;break b}}}while(0);do if((N|0)==22){N=0;r=y-t|0;f[J>>2]=r;p=(f[m>>2]|0)%2|0;f[K>>2]=p;if((x|0)>3){n=q+-1-o|0;o=o+4+((n|0)>-8?n:-8)-q&-4;if(!y){k=(t|0)>0;l=X(t,P)|0;m=0-p|0;n=(r|0)>0;i=v;j=x;while(1){d=f[R>>2]|0;g=d+(p<<4)|0;if(k){e=0;do{q=g+(e<<1<<4)|0;h=i+((X(e,P)|0)<<2)|0;f[q>>2]=f[h>>2];f[q+4>>2]=f[h+4>>2];f[q+8>>2]=f[h+8>>2];f[q+12>>2]=f[h+12>>2];e=e+1|0}while((e|0)!=(t|0))}g=i+(l<<2)|0;h=d+16+(m<<4)|0;if(n){e=0;do{q=h+(e<<1<<4)|0;T=g+((X(e,P)|0)<<2)|0;f[q>>2]=f[T>>2];f[q+4>>2]=f[T+4>>2];f[q+8>>2]=f[T+8>>2];f[q+12>>2]=f[T+12>>2];e=e+1|0}while((e|0)!=(r|0))}Lg(R);if((j|0)>7){i=i+16|0;j=j+-4|0}else break}m=v+16+(o<<2)|0;k=p;l=r;n=s;break}j=f[D>>2]|0;k=(j|0)>0;l=X(j,P)|0;m=0-p|0;n=(r|0)>0;h=v;i=x;while(1){g=d+(p<<4)|0;if(k){e=0;do{T=g+(e<<1<<4)|0;t=h+((X(e,P)|0)<<2)|0;f[T>>2]=f[t>>2];f[T+4>>2]=f[t+4>>2];f[T+8>>2]=f[t+8>>2];f[T+12>>2]=f[t+12>>2];e=e+1|0}while((e|0)!=(j|0))}g=h+(l<<2)|0;e=d+16+(m<<4)|0;if(n){d=0;do{T=e+(d<<1<<4)|0;t=g+((X(d,P)|0)<<2)|0;f[T>>2]=f[t>>2];f[T+4>>2]=f[t+4>>2];f[T+8>>2]=f[t+8>>2];f[T+12>>2]=f[t+12>>2];d=d+1|0}while((d|0)!=(r|0))}Lg(R);e=0;do{T=h+((X(e,P)|0)<<2)|0;d=f[R>>2]|0;t=d+(e<<4)|0;f[T>>2]=f[t>>2];f[T+4>>2]=f[t+4>>2];f[T+8>>2]=f[t+8>>2];f[T+12>>2]=f[t+12>>2];e=e+1|0}while((e|0)!=(y|0));if((i|0)>7){h=h+16|0;i=i+-4|0}else break}m=v+16+(o<<2)|0;k=p;l=r;n=s}else{m=v;k=p;l=r;n=s}}while(0);i=x&3;if(i){j=f[R>>2]|0;e=j+(k<<4)|0;g=f[D>>2]|0;if((g|0)>0){h=i<<2;d=0;do{hj(e+(d<<1<<4)|0,m+((X(d,P)|0)<<2)|0,h|0)|0;d=d+1|0}while((d|0)!=(g|0))}h=m+((X(g,P)|0)<<2)|0;e=j+16+(0-k<<4)|0;if((l|0)>0){g=i<<2;d=0;do{hj(e+(d<<1<<4)|0,h+((X(d,P)|0)<<2)|0,g|0)|0;d=d+1|0}while((d|0)!=(l|0))}Lg(R);if(!y)d=j;else{e=i<<2;d=0;do{hj(m+((X(d,P)|0)<<2)|0,j+(d<<4)|0,e|0)|0;d=d+1|0}while((d|0)!=(y|0));d=j}}c=c+-1|0;if(!c)break a;p=x;j=w;g=f[O>>2]|0;e=f[a>>2]|0;t=y}}while(0);Kc(b);T=1;u=S;return T|0}function Kg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;h=f[a>>2]|0;j=f[a+12>>2]|0;g=h+(j<<4)|0;l=f[a+8>>2]|0;m=c*3|0;q=h+16+(0-j<<4)|0;n=f[a+4>>2]|0;if(((l+m|0)<(d|0)?(b&15|0)==0:0)?((g|c)&15|0)==0:0){if((l|0)>0){a=0;do{g=a<<3;f[h+(j<<4)+(g<<2)>>2]=f[b+(a<<2)>>2];r=a+c|0;f[h+(j<<4)+((g|1)<<2)>>2]=f[b+(r<<2)>>2];r=r+c|0;f[h+(j<<4)+((g|2)<<2)>>2]=f[b+(r<<2)>>2];f[h+(j<<4)+((g|3)<<2)>>2]=f[b+(r+c<<2)>>2];a=a+1|0}while((a|0)!=(l|0))}}else e=2;if((e|0)==2?(l|0)>0:0){a=0;do{e=a<<3;f[h+(j<<4)+(e<<2)>>2]=f[b+(a<<2)>>2];g=a+c|0;if(((g|0)<(d|0)?(f[h+(j<<4)+((e|1)<<2)>>2]=f[b+(g<<2)>>2],i=g+c|0,(i|0)<(d|0)):0)?(f[h+(j<<4)+((e|2)<<2)>>2]=f[b+(i<<2)>>2],k=i+c|0,(k|0)<(d|0)):0)f[h+(j<<4)+((e|3)<<2)>>2]=f[b+(k<<2)>>2];a=a+1|0}while((a|0)!=(l|0))}h=b+(l<<2)|0;b=d-l|0;if(((n+m|0)<(b|0)?(h&15|0)==0:0)?((q|c)&15|0)==0:0){if((n|0)>0)a=0;else return;do{r=a<<3;f[q+(r<<2)>>2]=f[h+(a<<2)>>2];p=a+c|0;f[q+((r|1)<<2)>>2]=f[h+(p<<2)>>2];p=p+c|0;f[q+((r|2)<<2)>>2]=f[h+(p<<2)>>2];f[q+((r|3)<<2)>>2]=f[h+(p+c<<2)>>2];a=a+1|0}while((a|0)!=(n|0));return}if((n|0)>0)a=0;else return;do{e=a<<3;f[q+(e<<2)>>2]=f[h+(a<<2)>>2];g=a+c|0;if(((g|0)<(b|0)?(f[q+((e|1)<<2)>>2]=f[h+(g<<2)>>2],o=g+c|0,(o|0)<(b|0)):0)?(f[q+((e|2)<<2)>>2]=f[h+(o<<2)>>2],p=o+c|0,(p|0)<(b|0)):0)f[q+((e|3)<<2)>>2]=f[h+(p<<2)>>2];a=a+1|0}while((a|0)!=(n|0));return}function Lg(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0.0,o=0;do if(!(f[a+12>>2]|0)){d=f[a+8>>2]|0;if((f[a+4>>2]|0)>0){b=f[a>>2]|0;if((d|0)>0){e=0;c=1;g=b;i=9;break}else{e=0;h=1;g=b;break}}if((d|0)>1){c=1;b=0;i=7}else return}else{d=f[a+8>>2]|0;if((d|0)<=0)if((f[a+4>>2]|0)>1){e=1;h=0;g=f[a>>2]|0;break}else return;else{c=0;b=1;i=7}}while(0);if((i|0)==7){e=b;g=f[a>>2]|0;i=9}if((i|0)==9){b=0;do{i=b<<3;o=g+(e<<4)+(i<<2)|0;l=g+(e<<4)+((i|1)<<2)|0;m=+n[l>>2];h=g+(e<<4)+((i|2)<<2)|0;k=+n[h>>2];i=g+(e<<4)+((i|3)<<2)|0;j=+n[i>>2];n[o>>2]=+n[o>>2]*1.2301740646362305;n[l>>2]=m*1.2301740646362305;n[h>>2]=k*1.2301740646362305;n[i>>2]=j*1.2301740646362305;b=b+1|0}while((b|0)!=(d|0));h=c}c=f[a+4>>2]|0;if((c|0)>0){b=0;do{o=b<<3;i=g+(h<<4)+(o<<2)|0;a=g+(h<<4)+((o|1)<<2)|0;j=+n[a>>2];l=g+(h<<4)+((o|2)<<2)|0;k=+n[l>>2];o=g+(h<<4)+((o|3)<<2)|0;m=+n[o>>2];n[i>>2]=+n[i>>2]*1.625732421875;n[a>>2]=j*1.625732421875;n[l>>2]=k*1.625732421875;n[o>>2]=m*1.625732421875;b=b+1|0}while((b|0)!=(c|0))}b=g+(h<<4)|0;a=g+(e<<4)|0;g=a+16|0;i=c-e|0;i=(d|0)<(i|0)?d:i;Mg(b,g,d,i,-.4435068666934967);l=b+16|0;o=d-h|0;o=(c|0)<(o|0)?c:o;Mg(a,l,c,o,-.8829110860824585);Mg(b,g,d,i,.05298011749982834);Mg(a,l,c,o,1.5861343145370483);return}function Mg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0.0,g=0.0,h=0.0,i=0.0,j=0,k=0,l=0,m=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0,x=0.0;if((d|0)>0){m=d<<1;l=m+-2|0;j=b;k=0;g=+n[a>>2];h=+n[a+4>>2];i=+n[a+8>>2];f=+n[a+12>>2];while(1){w=j+-16|0;t=j+-12|0;v=+n[t>>2];q=j+-8|0;s=+n[q>>2];a=j+-4|0;p=+n[a>>2];x=g;g=+n[j>>2];u=h;h=+n[j+4>>2];r=i;i=+n[j+8>>2];o=f;f=+n[j+12>>2];n[w>>2]=+n[w>>2]+(x+g)*e;n[t>>2]=v+(u+h)*e;n[q>>2]=s+(r+i)*e;n[a>>2]=p+(o+f)*e;k=k+1|0;if((k|0)==(d|0))break;else j=j+32|0}a=b+(l<<4)|0;b=b+(m<<4)|0}if((d|0)>=(c|0))return;f=e+e;g=f*+n[a>>2];h=f*+n[a+4>>2];i=f*+n[a+8>>2];f=f*+n[a+12>>2];while(1){m=b+-16|0;q=b+-12|0;u=+n[q>>2];t=b+-8|0;v=+n[t>>2];w=b+-4|0;x=+n[w>>2];n[m>>2]=g+ +n[m>>2];n[q>>2]=h+u;n[t>>2]=i+v;n[w>>2]=f+x;d=d+1|0;if((d|0)==(c|0))break;else b=b+32|0}return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0.0,h=0,i=0,j=0,k=0,l=0.0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;x=c<<2;y=Hc(c<<4)|0;if(!y){z=0;return z|0}z=y+x|0;ij(y|0,0,x|0)|0;t=c+-1|0;u=(c|0)==0;if(!u){d=y;e=0;while(1){f[d>>2]=e;e=e+1|0;if((e|0)==(c|0))break;else d=d+4|0}}a:do if(t|0){m=1;o=a;p=0;d=0;q=y;s=c;while(1){r=o+(p<<2)|0;if(p>>>0>>0){e=r;g=0.0;h=p}else break;while(1){l=+n[e>>2];l=l>0.0?l:-l;w=l>g;d=w?h:d;g=w?l:g;h=h+1|0;if((h|0)==(c|0))break;else e=e+(c<<2)|0}if(g==0.0)break;if((d|0)!=(p|0)){w=q+(d<<2)+(0-p<<2)|0;v=f[q>>2]|0;f[q>>2]=f[w>>2];f[w>>2]=v;w=o+((X(d-p|0,c)|0)<<2)|0;hj(z|0,w|0,x|0)|0;hj(w|0,o|0,x|0)|0;hj(o|0,z|0,x|0)|0}g=+n[r>>2];if(m>>>0>>0){h=r+(c<<2)|0;j=m;while(1){l=+n[h>>2]/g;n[h>>2]=l;e=m;i=h;k=r;do{k=k+4|0;i=i+4|0;n[i>>2]=+n[i>>2]-l*+n[k>>2];e=e+1|0}while((e|0)!=(c|0));j=j+1|0;if((j|0)==(c|0))break;else h=h+(s<<2)+(p<<2)|0}}p=p+1|0;if(p>>>0>=t>>>0)break a;else{m=m+1|0;o=o+(c<<2)|0;q=q+4|0;s=s+-1|0}}Mc(y);z=0;return z|0}while(0);v=z+(c<<2)|0;w=z+(c<<1<<2)|0;if(!u){q=v+(c<<2)|0;r=w+(c<<2)|0;s=a+((X(c,c)|0)<<2)+-4|0;t=~c;p=0;while(1){ij(z|0,0,x|0)|0;n[z+(p<<2)>>2]=1.0;i=y;j=a;k=w;m=0;o=1;while(1){if(!m)g=0.0;else{d=j;e=w;g=0.0;h=1;while(1){g=g+ +n[d>>2]*+n[e>>2];h=h+1|0;if((h|0)==(o|0))break;else{d=d+4|0;e=e+4|0}}}n[k>>2]=+n[z+(f[i>>2]<<2)>>2]-g;m=m+1|0;if((m|0)==(c|0)){i=c;j=s;k=q;m=r;break}else{i=i+4|0;j=j+(c<<2)|0;k=k+4|0;o=o+1|0}}while(1){m=m+-4|0;l=+n[j>>2];if(i>>>0>>0){d=j;e=k;g=0.0;h=i;while(1){d=d+4|0;g=g+ +n[d>>2]*+n[e>>2];h=h+1|0;if((h|0)==(c|0))break;else e=e+4|0}}else g=0.0;k=k+-4|0;i=i+-1|0;n[k>>2]=(+n[m>>2]-g)/l;if(!i){d=b;e=0;break}else j=j+(t<<2)|0}while(1){f[d>>2]=f[v+(e<<2)>>2];e=e+1|0;if((e|0)==(c|0))break;else d=d+(c<<2)|0}p=p+1|0;if((p|0)==(c|0))break;else b=b+4|0}}Mc(y);z=1;return z|0}function Og(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;g=Ic(1,44)|0;if(!g){g=0;return g|0}h=_g()|0;f[g>>2]=h;if(!h){$g(0);f[g>>2]=0;h=g+4|0;ph(f[h>>2]|0);f[h>>2]=0;if((f[g+40>>2]|0)==0?(b=g+8|0,c=f[b>>2]|0,c|0):0){Kc(c);f[b>>2]=0}b=g+12|0;c=f[b>>2]|0;if(c|0){Kc(c);f[b>>2]=0}Mc(g);h=0;return h|0}h=oh()|0;b=g+4|0;f[b>>2]=h;if(h|0){f[g+40>>2]=a;h=g;return h|0}$g(f[g>>2]|0);f[g>>2]=0;ph(f[b>>2]|0);f[b>>2]=0;if((f[g+40>>2]|0)==0?(d=g+8|0,e=f[d>>2]|0,e|0):0){Kc(e);f[d>>2]=0}b=g+12|0;c=f[b>>2]|0;if(c|0){Kc(c);f[b>>2]=0}Mc(g);h=0;return h|0}function Pg(a){a=a|0;var b=0,c=0,d=0;if(!a)return;$g(f[a>>2]|0);f[a>>2]=0;d=a+4|0;ph(f[d>>2]|0);f[d>>2]=0;if((f[a+40>>2]|0)==0?(b=a+8|0,c=f[b>>2]|0,c|0):0){Kc(c);f[b>>2]=0}b=a+12|0;c=f[b>>2]|0;if(c|0){Kc(c);f[b>>2]=0}Mc(a);return}function Qg(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,i=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0;Aa=(f[b+8>>2]|0)-(f[b>>2]|0)|0;Ba=b+20|0;e=f[Ba>>2]|0;if(!e){Ba=1;return Ba|0}sa=b+24|0;ta=c+808|0;ua=c+16|0;va=a+4|0;xa=a+8|0;ya=a+16|0;za=a+20|0;ra=c+20|0;oa=b+32|0;pa=a+12|0;qa=a+32|0;na=0;c=e;a:while(1){la=f[sa>>2]|0;ma=la+(na*136|0)+24|0;b=f[ma>>2]|0;if(b){ia=la+(na*136|0)+16|0;ja=la+(na*136|0)+20|0;ka=na+-1|0;ha=0;e=f[ja>>2]|0;c=f[ia>>2]|0;do{if(X(e,c)|0){ca=la+(na*136|0)+28+(ha*36|0)+20|0;da=la+(na*136|0)+28+(ha*36|0)+16|0;ea=la+(na*136|0)+28+(ha*36|0)|0;fa=la+(na*136|0)+28+(ha*36|0)+4|0;ga=la+(na*136|0)+28+(ha*36|0)+32|0;ba=0;do{b=f[ca>>2]|0;$=b+(ba*40|0)+16|0;aa=b+(ba*40|0)+20|0;if(X(f[aa>>2]|0,f[$>>2]|0)|0){_=b+(ba*40|0)+24|0;Z=0;do{c=f[_>>2]|0;R=f[da>>2]|0;e=f[ta>>2]|0;b=f[ua>>2]|0;S=f[va>>2]|0;T=f[a>>2]|0;U=c+(Z*56|0)+8|0;Y=c+(Z*56|0)+12|0;if(!(Rg(a,(f[c+(Z*56|0)+16>>2]|0)-(f[U>>2]|0)|0,(f[c+(Z*56|0)+20>>2]|0)-(f[Y>>2]|0)|0)|0)){c=0;F=219;break a}V=c+(Z*56|0)+24|0;g=f[V>>2]|0;hh(T);ih(T,18,0,46);ih(T,17,0,3);ih(T,0,0,4);W=c+(Z*56|0)+48|0;if(f[W>>2]|0){M=c+(Z*56|0)+4|0;N=(b&1|0)!=0;O=(b&2|0)==0;P=(b&8|0)==0;Q=R<<8;L=(b&32|0)==0;K=0;b=2;c=g+e|0;do{i=f[M>>2]|0;J=N&(b>>>0<2?(c|0)<=((f[V>>2]|0)+-4|0):0);e=f[i+(K<<5)>>2]|0;b:do if(e){e=(f[e>>2]|0)+(f[i+(K<<5)+4>>2]|0)|0;g=f[i+(K<<5)+16>>2]|0;if(!J){if(!(mh(T,e,g)|0)){c=0;F=219;break a}}else qh(S,e,g);H=i+(K<<5)+12|0;if((c|0)>0&(f[H>>2]|0)!=0){I=O|J;G=0;while(1){c:do switch(b|0){case 0:{if(J){v=1<>1|v;e=f[za>>2]|0;if(!e)break c;u=0-v|0;t=0;g=f[ya>>2]|0;while(1){s=t;t=t+4|0;if(!g)g=0;else{q=(s|0)==-4;r=s|3;p=0;do{d:do if(!q)if(P){e=s;do{if(e>>>0>=(f[za>>2]|0)>>>0)break d;g=f[pa>>2]|0;l=e;e=e+1|0;i=(X(f[qa>>2]|0,e)|0)+p|0;k=g+(i+1<<1)|0;l=(f[xa>>2]|0)+((X(f[ya>>2]|0,l)|0)+p<<2)|0;m=f[va>>2]|0;F=d[k>>1]|0;if((F&255|0)!=0&(F&20480|0)==0){if(rh(m)|0){E=rh(m)|0;f[l>>2]=E|0?u:v;F=f[qa>>2]|0;D=k+(0-F<<1)|0;F=k+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=g+(i<<1)|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[k>>1]=d[k>>1]|4096;D=k+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[k>>1]=d[k>>1]|16384}}while(e>>>0>>0)}else{e=s;do{g=f[za>>2]|0;if(e>>>0>=g>>>0)break d;i=f[pa>>2]|0;E=e;e=e+1|0;k=(X(f[qa>>2]|0,e)|0)+p|0;l=i+(k+1<<1)|0;m=(f[xa>>2]|0)+((X(f[ya>>2]|0,E)|0)+p<<2)|0;o=f[va>>2]|0;F=d[l>>1]|0;F=(E|0)==(r|0)|(E|0)==(g+-1|0)?F&-1095:F;if((F&255|0)!=0&(F&20480|0)==0){if(rh(o)|0){E=rh(o)|0;f[m>>2]=E|0?u:v;F=f[qa>>2]|0;D=l+(0-F<<1)|0;F=l+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=i+(k<<1)|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[l>>1]=d[l>>1]|4096;D=l+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[l>>1]=d[l>>1]|16384}}while(e>>>0>>0)}while(0);p=p+1|0;g=f[ya>>2]|0}while(p>>>0>>0);e=f[za>>2]|0}if(t>>>0>=e>>>0){F=187;break c}}}if(!P){w=1<>1|w;e=f[za>>2]|0;if(!e){F=187;break c}x=0-w|0;g=f[ya>>2]|0;v=0;i=g;while(1){u=v;v=v+4|0;if(!g)g=0;else{s=(u|0)==-4;t=u|3;r=0;while(1){if(s)e=i;else{k=u;do{e=f[za>>2]|0;if(k>>>0>=e>>>0)break;l=f[pa>>2]|0;F=k;k=k+1|0;m=(X(f[qa>>2]|0,k)|0)+r|0;o=l+(m+1<<1)|0;p=(f[xa>>2]|0)+((X(f[ya>>2]|0,F)|0)+r<<2)|0;q=f[a>>2]|0;g=d[o>>1]|0;e=(F|0)==(t|0)|(F|0)==(e+-1|0)?g&-1095:g;g=e&255;if((g|0)!=0&(e&20480|0)==0){i=q+100|0;f[i>>2]=q+24+(h[20356+(g|Q)>>0]<<2);if(nh(q)|0){E=e>>>4&255;f[i>>2]=q+24+(h[21380+E>>0]<<2);F=nh(q)|0;E=F^h[21636+E>>0];f[p>>2]=E|0?x:w;F=f[qa>>2]|0;D=o+(0-F<<1)|0;F=o+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=l+(m<<1)|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[o>>1]=d[o>>1]|4096;D=o+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[o>>1]=d[o>>1]|16384}}while(k>>>0>>0);e=f[ya>>2]|0}r=r+1|0;if(r>>>0>=e>>>0)break;else i=e}i=e;g=e;e=f[za>>2]|0}if(v>>>0>=e>>>0){F=187;break c}}}g=f[xa>>2]|0;e=(f[pa>>2]|0)+2|0;v=1<>1|v;k=f[za>>2]|0;if(k>>>0>3){u=0-v|0;i=f[ya>>2]|0;m=0;l=i;do{if(!i)i=0;else{t=0;i=l;do{q=g+(t<<2)|0;k=f[qa>>2]|0;r=e+(t<<1)+(k<<1)|0;p=f[a>>2]|0;l=d[r>>1]|0;o=l&255;if((o|0)!=0&(l&20480|0)==0){i=p+100|0;f[i>>2]=p+24+(h[20356+(o|Q)>>0]<<2);if(!(nh(p)|0))k=f[qa>>2]|0;else{E=l>>>4&255;f[i>>2]=p+24+(h[21380+E>>0]<<2);k=nh(p)|0;E=k^h[21636+E>>0];f[q>>2]=E|0?u:v;k=f[qa>>2]|0;D=r+(0-k<<1)|0;F=r+(k<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=r+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[r>>1]=d[r>>1]|4096;D=r+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[r>>1]=d[r>>1]|16384;i=f[ya>>2]|0;p=f[a>>2]|0}q=q+(i<<2)|0;r=r+(k<<1)|0;l=d[r>>1]|0;o=l&255;if((o|0)!=0&(l&20480|0)==0){i=p+100|0;f[i>>2]=p+24+(h[20356+(o|Q)>>0]<<2);if(!(nh(p)|0))k=f[qa>>2]|0;else{E=l>>>4&255;f[i>>2]=p+24+(h[21380+E>>0]<<2);k=nh(p)|0;E=k^h[21636+E>>0];f[q>>2]=E|0?u:v;k=f[qa>>2]|0;D=r+(0-k<<1)|0;F=r+(k<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=r+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[r>>1]=d[r>>1]|4096;D=r+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[r>>1]=d[r>>1]|16384;i=f[ya>>2]|0;p=f[a>>2]|0}s=q+(i<<2)|0;r=r+(k<<1)|0;l=d[r>>1]|0;o=l&255;if((o|0)!=0&(l&20480|0)==0){i=p+100|0;f[i>>2]=p+24+(h[20356+(o|Q)>>0]<<2);if(!(nh(p)|0))k=f[qa>>2]|0;else{E=l>>>4&255;f[i>>2]=p+24+(h[21380+E>>0]<<2);k=nh(p)|0;E=k^h[21636+E>>0];f[s>>2]=E|0?u:v;k=f[qa>>2]|0;D=r+(0-k<<1)|0;F=r+(k<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=r+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[r>>1]=d[r>>1]|4096;D=r+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[r>>1]=d[r>>1]|16384;i=f[ya>>2]|0;q=f[a>>2]|0}else q=p;p=s+(i<<2)|0;k=r+(k<<1)|0;l=d[k>>1]|0;o=l&255;if((o|0)!=0&(l&20480|0)==0){i=q+100|0;f[i>>2]=q+24+(h[20356+(o|Q)>>0]<<2);if(nh(q)|0){E=l>>>4&255;f[i>>2]=q+24+(h[21380+E>>0]<<2);F=nh(q)|0;E=F^h[21636+E>>0];f[p>>2]=E|0?u:v;F=f[qa>>2]|0;D=k+(0-F<<1)|0;F=k+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=k+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[k>>1]=d[k>>1]|4096;D=k+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[k>>1]=d[k>>1]|16384;i=f[ya>>2]|0}t=t+1|0}while(t>>>0>>0);l=i;k=f[za>>2]|0}g=g+(i<<2<<2)|0;e=e+(f[qa>>2]<<2<<1)|0;m=m+4|0}while(m>>>0<(k&-4)>>>0);i=l}else{m=0;i=f[ya>>2]|0}if(!i){F=187;break c}u=0-v|0;t=0;do{if(m>>>0>>0){q=m;r=e+(t<<1)|0;s=g+(t<<2)|0;while(1){r=r+(f[qa>>2]<<1)|0;l=f[a>>2]|0;o=d[r>>1]|0;p=o&255;if((p|0)!=0&(o&20480|0)==0){i=l+100|0;f[i>>2]=l+24+(h[20356+(p|Q)>>0]<<2);if(nh(l)|0){E=o>>>4&255;f[i>>2]=l+24+(h[21380+E>>0]<<2);F=nh(l)|0;E=F^h[21636+E>>0];f[s>>2]=E|0?u:v;F=f[qa>>2]|0;D=r+(0-F<<1)|0;F=r+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=r+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[r>>1]=d[r>>1]|4096;D=r+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[r>>1]=d[r>>1]|16384;i=f[ya>>2]|0;k=f[za>>2]|0}q=q+1|0;if(q>>>0>=k>>>0)break;else s=s+(i<<2)|0}}t=t+1|0}while(t>>>0>>0);F=187;break}case 1:{if(J){p=1<>1;q=0-p|0;e=f[za>>2]|0;if(!e)break c;g=f[ya>>2]|0;o=0;i=g;while(1){m=o;o=o+4|0;do if(!g){k=i;g=0}else{if((m|0)==-4){k=i;g=i;break}else l=0;do{g=l;l=l+1|0;e=m;do{if(e>>>0>=(f[za>>2]|0)>>>0)break;k=e;e=e+1|0;i=(f[pa>>2]|0)+((X(f[qa>>2]|0,e)|0)+l<<1)|0;k=(f[xa>>2]|0)+((X(f[ya>>2]|0,k)|0)+g<<2)|0;if((d[i>>1]&20480)==4096){E=(rh(f[va>>2]|0)|0)!=0;E=E?p:q;F=f[k>>2]|0;f[k>>2]=((F|0)<0?0-E|0:E)+F;d[i>>1]=d[i>>1]|8192}}while(e>>>0>>0);e=f[ya>>2]|0}while(l>>>0>>0);k=e;g=e;e=f[za>>2]|0}while(0);if(o>>>0>=e>>>0){F=187;break c}else i=k}}if(!P){s=1<>1;t=0-s|0;e=f[za>>2]|0;if(!e){F=187;break c}g=f[ya>>2]|0;r=0;k=g;while(1){q=r;r=r+4|0;do if(!g){i=k;g=0}else{p=q|3;if((q|0)==-4){i=k;g=k;break}else o=0;do{i=o;o=o+1|0;g=q;do{e=f[za>>2]|0;if(g>>>0>=e>>>0)break;E=g;g=g+1|0;l=(f[pa>>2]|0)+((X(f[qa>>2]|0,g)|0)+o<<1)|0;m=(f[xa>>2]|0)+((X(f[ya>>2]|0,E)|0)+i<<2)|0;k=f[a>>2]|0;F=d[l>>1]|0;e=(E|0)==(p|0)|(E|0)==(e+-1|0)?F&-1095:F;if((e&20480|0)==4096){f[k+100>>2]=k+24+((e&8192|0?16:e&255|0?15:14)<<2);E=(nh(k)|0)!=0;E=E?s:t;F=f[m>>2]|0;f[m>>2]=((F|0)<0?0-E|0:E)+F;d[l>>1]=d[l>>1]|8192}}while(g>>>0>>0);e=f[ya>>2]|0}while(o>>>0>>0);i=e;g=e;e=f[za>>2]|0}while(0);if(r>>>0>=e>>>0){F=187;break c}else k=i}}g=f[xa>>2]|0;e=(f[pa>>2]|0)+2|0;t=1<>1;u=0-t|0;k=f[za>>2]|0;i=f[ya>>2]|0;if(k>>>0>3){m=0;l=i;do{if(!i)i=0;else{s=0;i=l;do{p=g+(s<<2)|0;o=f[qa>>2]|0;q=e+(s<<1)+(o<<1)|0;k=f[a>>2]|0;l=d[q>>1]|0;if((l&20480|0)==4096){f[k+100>>2]=k+24+((l&8192|0?16:l&255|0?15:14)<<2);i=(nh(k)|0)!=0;i=i?t:u;k=f[p>>2]|0;f[p>>2]=((k|0)<0?0-i|0:i)+k;d[q>>1]=d[q>>1]|8192;k=f[a>>2]|0;i=f[ya>>2]|0;o=f[qa>>2]|0}p=p+(i<<2)|0;q=q+(o<<1)|0;l=d[q>>1]|0;if((l&20480|0)==4096){f[k+100>>2]=k+24+((l&8192|0?16:l&255|0?15:14)<<2);i=(nh(k)|0)!=0;i=i?t:u;k=f[p>>2]|0;f[p>>2]=((k|0)<0?0-i|0:i)+k;d[q>>1]=d[q>>1]|8192;k=f[a>>2]|0;i=f[ya>>2]|0;o=f[qa>>2]|0}r=p+(i<<2)|0;q=q+(o<<1)|0;l=d[q>>1]|0;if((l&20480|0)==4096){f[k+100>>2]=k+24+((l&8192|0?16:l&255|0?15:14)<<2);i=(nh(k)|0)!=0;i=i?t:u;p=f[r>>2]|0;f[r>>2]=((p|0)<0?0-i|0:i)+p;d[q>>1]=d[q>>1]|8192;p=f[a>>2]|0;i=f[ya>>2]|0;k=f[qa>>2]|0}else{p=k;k=o}o=r+(i<<2)|0;k=q+(k<<1)|0;l=d[k>>1]|0;if((l&20480|0)==4096){f[p+100>>2]=p+24+((l&8192|0?16:l&255|0?15:14)<<2);F=(nh(p)|0)!=0;F=F?t:u;i=f[o>>2]|0;f[o>>2]=((i|0)<0?0-F|0:F)+i;d[k>>1]=d[k>>1]|8192;i=f[ya>>2]|0}s=s+1|0}while(s>>>0>>0);l=i;k=f[za>>2]|0}g=g+(i<<2<<2)|0;e=e+(f[qa>>2]<<2<<1)|0;m=m+4|0}while(m>>>0<(k&-4)>>>0);i=l}else m=0;if(!i){F=187;break c}else s=0;do{if(m>>>0>>0){p=m;q=e+(s<<1)|0;r=g+(s<<2)|0;while(1){q=q+(f[qa>>2]<<1)|0;l=f[a>>2]|0;o=d[q>>1]|0;if((o&20480|0)==4096){f[l+100>>2]=l+24+((o&8192|0?16:o&255|0?15:14)<<2);k=(nh(l)|0)!=0;k=k?t:u;i=f[r>>2]|0;f[r>>2]=((i|0)<0?0-k|0:k)+i;d[q>>1]=d[q>>1]|8192;i=f[ya>>2]|0;k=f[za>>2]|0}p=p+1|0;if(p>>>0>=k>>>0)break;else r=r+(i<<2)|0}}s=s+1|0}while(s>>>0>>0);F=187;break}case 2:{D=f[a>>2]|0;E=1<>1|E;do if(P){i=f[xa>>2]|0;g=(f[pa>>2]|0)+2|0;e=f[za>>2]|0;if(e>>>0>3){u=D+92|0;v=D+100|0;w=D+96|0;x=0-E|0;F=f[ya>>2]|0;k=g;m=0;l=F;g=F;while(1){if(!l)l=0;else{q=m|1;r=q+1|0;s=m|3;t=q+3|0;p=0;do{g=i+(p<<2)|0;l=k+(p<<1)|0;F=f[pa>>2]|0;e=f[qa>>2]|0;p=p+1|0;B=F+((X(e,q)|0)+p<<1)|0;A=F+((X(e,r)|0)+p<<1)|0;C=F+((X(e,s)|0)+p<<1)|0;F=F+((X(e,t)|0)+p<<1)|0;e:do if(!((d[A>>1]|d[B>>1]|d[C>>1]|d[F>>1])&20735)){f[v>>2]=u;if(!(nh(D)|0))break;f[v>>2]=w;o=(nh(D)|0)<<1;o=o|(nh(D)|0);if(o>>>0>=4)break;g=g+((X(f[ya>>2]|0,o)|0)<<2)|0;e=l+((X(f[qa>>2]|0,o)|0)<<1)|0;l=o;while(1){if(l>>>0>=(f[za>>2]|0)>>>0)break e;e=e+(f[qa>>2]<<1)|0;if((l|0)==(o|0)){F=f[a>>2]|0;C=(j[e>>1]|0)>>>4&255;f[F+100>>2]=F+24+(h[21380+C>>0]<<2);F=nh(F)|0;C=F^h[21636+C>>0];f[g>>2]=C|0?x:E;F=f[qa>>2]|0;B=e+(0-F<<1)|0;F=e+(F<<1)|0;A=B+-2|0;d[A>>1]=d[A>>1]|2;d[B>>1]=d[B>>1]|d[3160+(C<<1)>>1];B=B+2|0;d[B>>1]=d[B>>1]|4;B=e+-2|0;d[B>>1]=d[B>>1]|d[3160+(C+2<<1)>>1];d[e>>1]=d[e>>1]|4096;B=e+2|0;d[B>>1]=d[B>>1]|d[3160+(C+4<<1)>>1];B=F+-2|0;d[B>>1]=d[B>>1]|1;d[F>>1]=d[F>>1]|d[3160+(C+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8;d[e>>1]=d[e>>1]&-16385}else Sg(a,e,g,R,E);l=l+1|0;if(l>>>0>=4)break;else g=g+(f[ya>>2]<<2)|0}}else{C=l+(e<<1)|0;Sg(a,C,g,R,E);F=g+(f[ya>>2]<<2)|0;C=C+(f[qa>>2]<<1)|0;Sg(a,C,F,R,E);F=F+(f[ya>>2]<<2)|0;C=C+(f[qa>>2]<<1)|0;Sg(a,C,F,R,E);Sg(a,C+(f[qa>>2]<<1)|0,F+(f[ya>>2]<<2)|0,R,E)}while(0);g=f[ya>>2]|0}while(p>>>0>>0);l=g;e=f[za>>2]|0}i=i+(l<<2<<2)|0;k=k+(f[qa>>2]<<2<<1)|0;m=m+4|0;if(m>>>0>=(e&-4)>>>0){q=k;p=i;break}}}else{q=g;p=i;m=0;g=f[ya>>2]|0}if(!g)break;else o=0;do{if(m>>>0>>0){i=q+(o<<1)|0;k=p+(o<<2)|0;l=m;while(1){i=i+(f[qa>>2]<<1)|0;Sg(a,i,k,R,E);g=f[ya>>2]|0;l=l+1|0;e=f[za>>2]|0;if(l>>>0>=e>>>0)break;else k=k+(g<<2)|0}}o=o+1|0}while(o>>>0>>0)}else{e=f[za>>2]|0;if(!e)break;z=D+92|0;A=D+100|0;B=D+96|0;C=0-E|0;i=0;g=f[ya>>2]|0;do if(!g){i=i+4|0;g=0}else{u=i|3;v=i|1;w=v+1|0;x=v+3|0;y=i+4|0;t=0;while(1){do if(u>>>0>>0){e=f[pa>>2]|0;g=f[qa>>2]|0;k=t+1|0;s=e+((X(g,v)|0)+k<<1)|0;if(d[s>>1]&20735){e=0;s=0;F=152;break}s=e+((X(g,w)|0)+k<<1)|0;if(d[s>>1]&20735){e=0;s=0;F=152;break}s=e+((X(g,u)|0)+k<<1)|0;if(d[s>>1]&20735){e=0;s=0;F=152;break}s=e+((X(g,x)|0)+k<<1)|0;if(d[s>>1]&20665){e=0;s=0;F=152;break}f[A>>2]=z;if(!(nh(D)|0))break;f[A>>2]=B;e=(nh(D)|0)<<1;e=e|(nh(D)|0);s=1;F=152}else{e=0;s=0;F=152}while(0);f:do if((F|0)==152){F=0;l=e+i|0;if(l>>>0>>0)k=l;else break;do{e=f[za>>2]|0;if(k>>>0>=e>>>0)break f;m=f[pa>>2]|0;Ca=k;k=k+1|0;o=(X(f[qa>>2]|0,k)|0)+t|0;p=m+(o+1<<1)|0;q=(f[xa>>2]|0)+((X(f[ya>>2]|0,Ca)|0)+t<<2)|0;r=f[a>>2]|0;g=d[p>>1]|0;g=(Ca|0)==(u|0)|(Ca|0)==(e+-1|0)?g&-1095:g;do if(!(s&(Ca|0)==(l|0))){if(g&20480|0)break;e=r+100|0;f[e>>2]=r+24+(h[20356+(g&255|Q)>>0]<<2);if(nh(r)|0)F=158}else{e=r+100|0;F=158}while(0);if((F|0)==158){F=0;Ca=g>>>4&255;f[e>>2]=r+24+(h[21380+Ca>>0]<<2);r=nh(r)|0;r=r^h[21636+Ca>>0];f[q>>2]=r|0?C:E;Ca=f[qa>>2]|0;q=p+(0-Ca<<1)|0;Ca=p+(Ca<<1)|0;g=q+-2|0;d[g>>1]=d[g>>1]|2;d[q>>1]=d[q>>1]|d[3160+(r<<1)>>1];q=q+2|0;d[q>>1]=d[q>>1]|4;q=m+(o<<1)|0;d[q>>1]=d[q>>1]|d[3160+(r+2<<1)>>1];d[p>>1]=d[p>>1]|4096;q=p+2|0;d[q>>1]=d[q>>1]|d[3160+(r+4<<1)>>1];q=Ca+-2|0;d[q>>1]=d[q>>1]|1;d[Ca>>1]=d[Ca>>1]|d[3160+(r+6<<1)>>1];Ca=Ca+2|0;d[Ca>>1]=d[Ca>>1]|8}d[p>>1]=d[p>>1]&-16385}while(k>>>0>>0)}while(0);t=t+1|0;g=f[ya>>2]|0;e=f[za>>2]|0;if(t>>>0>=g>>>0){i=y;break}}}while(i>>>0>>0)}while(0);if(L){F=187;break c}f[D+100>>2]=D+96;nh(D)|0;nh(D)|0;nh(D)|0;nh(D)|0;F=187;break}default:F=187}while(0);do if((F|0)==187){F=0;if(I)break;hh(T);ih(T,18,0,46);ih(T,17,0,3);ih(T,0,0,4)}while(0);b=b+1|0;Ca=(b|0)==3;c=c+(Ca<<31>>31)|0;b=Ca?0:b;G=G+1|0;if(!((c|0)>0?G>>>0<(f[H>>2]|0)>>>0:0))break b}}}while(0);K=K+1|0}while(K>>>0<(f[W>>2]|0)>>>0)}c=(f[U>>2]|0)-(f[ea>>2]|0)|0;b=(f[Y>>2]|0)-(f[fa>>2]|0)|0;e=f[da>>2]|0;if(e&1){Ca=f[sa>>2]|0;c=(f[Ca+(ka*136|0)+8>>2]|0)+c-(f[Ca+(ka*136|0)>>2]|0)|0}if(e&2){Ca=f[sa>>2]|0;b=(f[Ca+(ka*136|0)+12>>2]|0)+b-(f[Ca+(ka*136|0)+4>>2]|0)|0}o=f[xa>>2]|0;p=f[ya>>2]|0;q=f[za>>2]|0;e=f[ta>>2]|0;if(e|0?(wa=1<>2]|0;m=(l|0)>-1?l:0-l|0;if((m|0)>=(wa|0)){Ca=m>>f[ta>>2];f[k>>2]=(l|0)<0?0-Ca|0:Ca}g=g+1|0}while((g|0)!=(p|0));e=e+1|0}while((e|0)!=(q|0))}k=(f[oa>>2]|0)+((X(b,Aa)|0)+c<<2)|0;c=(q|0)==0|(p|0)==0;if((f[ra>>2]|0)==1){if(!c){c=0;do{e=X(c,p)|0;g=X(c,Aa)|0;b=0;do{f[k+(b+g<<2)>>2]=(f[o+(b+e<<2)>>2]|0)/2|0;b=b+1|0}while((b|0)!=(p|0));c=c+1|0}while((c|0)!=(q|0))}}else if(!c){b=o;g=0;while(1){c=k;e=b;i=0;while(1){n[c>>2]=+n[ga>>2]*+(f[e>>2]|0);i=i+1|0;if((i|0)==(p|0))break;else{c=c+4|0;e=e+4|0}}g=g+1|0;if((g|0)==(q|0))break;else{k=k+(Aa<<2)|0;b=b+(p<<2)|0}}}Z=Z+1|0}while(Z>>>0<(X(f[aa>>2]|0,f[$>>2]|0)|0)>>>0);e=f[ja>>2]|0;c=f[ia>>2]|0}ba=ba+1|0}while(ba>>>0<(X(e,c)|0)>>>0);b=f[ma>>2]|0}ha=ha+1|0}while(ha>>>0>>0);c=f[Ba>>2]|0}na=na+1|0;if(na>>>0>=c>>>0){c=1;F=219;break}}if((F|0)==219)return c|0;return 0}function Rg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;h=X(c,b)|0;if(!(f[a+40>>2]|0)){e=a+24|0;d=a+8|0;do if(h>>>0>(f[e>>2]|0)>>>0){Kc(f[d>>2]|0);g=Jc(h<<2)|0;f[d>>2]=g;if(!g){c=0;return c|0}else{f[e>>2]=h;e=g;d=g;break}}else{d=f[d>>2]|0;e=d}while(0);if(e|0)ij(d|0,0,h<<2|0)|0}g=b+2|0;f[a+32>>2]=g;g=X(c+2|0,g)|0;h=a+28|0;i=a+12|0;d=f[i>>2]|0;do if(g>>>0>(f[h>>2]|0)>>>0){Kc(d);e=g<<1;d=Jc(e)|0;f[i>>2]=d;if(!d){c=0;return c|0}else{f[h>>2]=g;break}}else e=g<<1;while(0);ij(d|0,0,e|0)|0;f[a+16>>2]=b;f[a+20>>2]=c;c=1;return c|0}function Sg(a,b,c,e,g){a=a|0;b=b|0;c=c|0;e=e|0;g=g|0;var i=0,j=0,k=0;j=f[a>>2]|0;k=d[b>>1]|0;if(k&20480|0){k=d[b>>1]|0;k=k&-16385;d[b>>1]=k;return}i=j+100|0;f[i>>2]=j+24+(h[20356+(k&255|e<<8)>>0]<<2);if(!(nh(j)|0)){k=d[b>>1]|0;k=k&-16385;d[b>>1]=k;return}k=k>>>4&255;f[i>>2]=j+24+(h[21380+k>>0]<<2);j=nh(j)|0;j=j^h[21636+k>>0];f[c>>2]=j|0?0-g|0:g;k=f[a+32>>2]|0;g=b+(0-k<<1)|0;k=b+(k<<1)|0;e=g+-2|0;d[e>>1]=d[e>>1]|2;d[g>>1]=d[g>>1]|d[3160+(j<<1)>>1];g=g+2|0;d[g>>1]=d[g>>1]|4;g=b+-2|0;d[g>>1]=d[g>>1]|d[3160+(j+2<<1)>>1];d[b>>1]=d[b>>1]|4096;g=b+2|0;d[g>>1]=d[g>>1]|d[3160+(j+4<<1)>>1];g=k+-2|0;d[g>>1]=d[g>>1]|1;d[k>>1]=d[k>>1]|d[3160+(j+6<<1)>>1];k=k+2|0;d[k>>1]=d[k>>1]|8;k=d[b>>1]|0;k=k&-16385;d[b>>1]=k;return}function Tg(a,c,e,g,i){a=a|0;c=c|0;e=e|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,o=0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0;Za=c+32|0;p[Za>>3]=0.0;_a=c+16|0;j=f[_a>>2]|0;if(!j){_a=1;return _a|0}Ya=c+20|0;Qa=e+5584|0;Ra=a+16|0;Sa=a+20|0;Ta=a+8|0;Ua=a+36|0;Va=(g|0)!=0;Wa=a+12|0;Xa=a+32|0;Pa=0;c=j;a:while(1){e=f[Ya>>2]|0;j=f[Qa>>2]|0;Na=(f[e+(Pa*52|0)+8>>2]|0)-(f[e+(Pa*52|0)>>2]|0)|0;Oa=e+(Pa*52|0)+16|0;k=f[Oa>>2]|0;if(k){Ma=e+(Pa*52|0)+24|0;Ka=e+(Pa*52|0)+32|0;La=j+(Pa*1080|0)+20|0;Ha=j+(Pa*1080|0)+16|0;Ja=Va&Pa>>>0>>0;Ia=g+(Pa<<3)|0;Ga=0;c=k;do{Da=f[Ma>>2]|0;Ea=Da+(Ga*136|0)+24|0;e=f[Ea>>2]|0;if(e){za=Da+(Ga*136|0)+16|0;Aa=Da+(Ga*136|0)+20|0;Ba=~Ga;Ca=Ga+-1|0;ya=0;j=f[Aa>>2]|0;c=f[za>>2]|0;do{xa=Da+(Ga*136|0)+28+(ya*36|0)+32|0;if(X(j,c)|0){ra=67108864/(~~+J(+(+n[xa>>2]*8192.0))|0)|0;sa=Da+(Ga*136|0)+28+(ya*36|0)+20|0;ta=Da+(Ga*136|0)+28+(ya*36|0)|0;ua=Da+(Ga*136|0)+28+(ya*36|0)+4|0;va=Da+(Ga*136|0)+28+(ya*36|0)+16|0;wa=((ra|0)<0)<<31>>31;qa=0;do{e=f[sa>>2]|0;oa=e+(qa*40|0)+16|0;pa=e+(qa*40|0)+20|0;if(X(f[pa>>2]|0,f[oa>>2]|0)|0){na=e+(qa*40|0)+24|0;ma=0;do{la=f[na>>2]|0;k=f[la+(ma*52|0)+12>>2]|0;c=k-(f[ta>>2]|0)|0;l=f[la+(ma*52|0)+16>>2]|0;e=l-(f[ua>>2]|0)|0;j=f[va>>2]|0;if(j&1){ka=f[Ma>>2]|0;c=(f[ka+(Ca*136|0)+8>>2]|0)+c-(f[ka+(Ca*136|0)>>2]|0)|0}if(j&2){ka=f[Ma>>2]|0;e=(f[ka+(Ca*136|0)+12>>2]|0)+e-(f[ka+(Ca*136|0)+4>>2]|0)|0}if(!(Rg(a,(f[la+(ma*52|0)+20>>2]|0)-k|0,(f[la+(ma*52|0)+24>>2]|0)-l|0)|0)){c=0;Fa=163;break a}l=f[Ra>>2]|0;m=f[Sa>>2]|0;s=(f[Ka>>2]|0)+((X(e,Na)|0)+c<<2)|0;f[Ta>>2]=s;f[Ua>>2]=Na;c=f[La>>2]|0;e=(m|0)!=0;do if((c|0)==1)if(e){if(!l){Fa=27;break}else{c=0;e=0}while(1){j=0;k=c;while(1){Fa=s+(k<<2)|0;f[Fa>>2]=f[Fa>>2]<<6;j=j+1|0;if((j|0)==(l|0))break;else k=k+1|0}e=e+1|0;if((e|0)==(m|0)){Fa=27;break}else c=Na+c|0}}else c=1;else if(e){if(!l){Fa=27;break}else{c=0;j=0}while(1){e=0;k=j;while(1){Fa=s+(k<<2)|0;ka=f[Fa>>2]|0;ka=Yi(ka|0,((ka|0)<0)<<31>>31|0,ra|0,wa|0)|0;ka=Zi(ka|0,I|0,4096,0)|0;ka=ej(ka|0,I|0,18)|0;f[Fa>>2]=ka;e=e+1|0;if((e|0)==(l|0))break;else k=k+1|0}c=c+1|0;if((c|0)==(m|0)){Fa=27;break}else j=Na+j|0}}while(0);if((Fa|0)==27){Fa=0;c=f[La>>2]|0}ga=f[va>>2]|0;ha=(f[Oa>>2]|0)+Ba|0;ia=+n[xa>>2];ja=f[Ha>>2]|0;ka=f[a>>2]|0;m=f[Ra>>2]|0;do if(!m)e=0;else{o=f[Sa>>2]|0;if(!o){e=0;break}l=f[Ua>>2]|0;k=0;j=0;do{e=0;do{fa=s+((X(e,l)|0)+k<<2)|0;fa=f[fa>>2]|0;fa=(fa|0)>-1?fa:0-fa|0;j=(j|0)>(fa|0)?j:fa;e=e+1|0}while((e|0)!=(o|0));k=k+1|0}while((k|0)!=(m|0));if(!j){e=0;break}if((j|0)>1){e=0;while(1){e=e+1|0;if(j>>>0>3)j=j>>>1;else break}}else e=0;e=e+-5|0}while(0);ea=la+(ma*52|0)+28|0;f[ea>>2]=e;e=e+-1|0;hh(ka);ih(ka,18,0,46);ih(ka,17,0,3);ih(ka,0,0,4);fa=la+(ma*52|0)|0;bh(ka,f[fa>>2]|0);b:do if((e|0)>-1){ca=la+(ma*52|0)+8|0;U=ja&1;da=(U|0)!=0;V=(c|0)==1;W=(ja&4|0)==0;U=(U|0)==0;Y=(ja&2|0)==0;$=ja&8;Z=($|0)!=0;_=ga<<8;$=($|0)==0;aa=(ja&32|0)==0;ba=$^1;c=0;S=2;j=0;T=0.0;while(1){R=f[ca>>2]|0;G=da&(S>>>0<2?(e|0)<((f[ea>>2]|0)+-4|0):0);c:do switch(S|0){case 0:{E=1<>2]|0;if(!k){j=0;break c}F=(e|0)==0?3176:3432;m=f[Ra>>2]|0;D=0;j=0;l=m;do{C=D;D=D+4|0;if(!l)l=0;else{A=(C|0)==-4;B=C|3;z=0;while(1){if(A)l=m;else{y=C;do{k=f[Sa>>2]|0;if(y>>>0>=k>>>0)break;u=f[Wa>>2]|0;Q=y;y=y+1|0;v=(X(f[Xa>>2]|0,y)|0)+z|0;x=u+(v+1<<1)|0;o=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,Q)|0)+z<<2)|0;w=f[a>>2]|0;s=d[x>>1]|0;s=Z&((Q|0)==(B|0)|(Q|0)==(k+-1|0))?s&-1095:s;k=s&255;if((k|0)!=0&(s&20480|0)==0){l=f[o>>2]|0;l=(((l|0)<0?0-l|0:l)&E|0)!=0;m=l&1;t=w+100|0;f[t>>2]=w+24+(h[20356+(k|_)>>0]<<2);if(G)fh(w,m);else ch(w,m);if(l){k=f[o>>2]|0;l=k>>>31;j=j+(d[F+((((k|0)<0?0-k|0:k)>>>e&127)<<1)>>1]|0)|0;k=s>>>4&255;f[t>>2]=w+24+(h[21380+k>>0]<<2);if(G)fh(w,l);else ch(w,l^h[21636+k>>0]);Q=f[Xa>>2]|0;P=x+(0-Q<<1)|0;Q=x+(Q<<1)|0;O=P+-2|0;d[O>>1]=d[O>>1]|2;d[P>>1]=d[P>>1]|d[3160+(l<<1)>>1];P=P+2|0;d[P>>1]=d[P>>1]|4;P=u+(v<<1)|0;d[P>>1]=d[P>>1]|d[3160+((l|2)<<1)>>1];d[x>>1]=d[x>>1]|4096;P=x+2|0;d[P>>1]=d[P>>1]|d[3160+((l|4)<<1)>>1];P=Q+-2|0;d[P>>1]=d[P>>1]|1;d[Q>>1]=d[Q>>1]|d[3160+((l|6)<<1)>>1];Q=Q+2|0;d[Q>>1]=d[Q>>1]|8}d[x>>1]=d[x>>1]|16384}}while(y>>>0>>0);l=f[Ra>>2]|0}z=z+1|0;if(z>>>0>=l>>>0)break;else m=l}k=f[Sa>>2]|0;m=l}}while(D>>>0>>0);break}case 1:{z=1<>2]|0;if(!k){j=0;break c}A=(e|0)==0?3688:3944;y=0;j=0;l=f[Ra>>2]|0;do{x=y;y=y+4|0;if(!l)l=0;else{v=(x|0)==-4;w=x|3;u=0;do{t=u;u=u+1|0;d:do if(!v)if($)if(G){s=x;do{if(s>>>0>=(f[Sa>>2]|0)>>>0)break d;k=s;s=s+1|0;m=(f[Wa>>2]|0)+((X(f[Xa>>2]|0,s)|0)+u<<1)|0;l=f[a>>2]|0;o=d[m>>1]|0;if((o&20480|0)==4096){Q=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,k)|0)+t<<2)|0;Q=f[Q>>2]|0;Q=(Q|0)<0?0-Q|0:Q;j=j+(d[A+((Q>>>e&127)<<1)>>1]|0)|0;f[l+100>>2]=l+24+((o&8192|0?16:o&255|0?15:14)<<2);fh(l,(Q&z|0)!=0&1);d[m>>1]=d[m>>1]|8192}}while(s>>>0>>0)}else{s=x;do{if(s>>>0>=(f[Sa>>2]|0)>>>0)break d;k=s;s=s+1|0;m=(f[Wa>>2]|0)+((X(f[Xa>>2]|0,s)|0)+u<<1)|0;l=f[a>>2]|0;o=d[m>>1]|0;if((o&20480|0)==4096){Q=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,k)|0)+t<<2)|0;Q=f[Q>>2]|0;Q=(Q|0)<0?0-Q|0:Q;j=j+(d[A+((Q>>>e&127)<<1)>>1]|0)|0;f[l+100>>2]=l+24+((o&8192|0?16:o&255|0?15:14)<<2);ch(l,(Q&z|0)!=0&1);d[m>>1]=d[m>>1]|8192}}while(s>>>0>>0)}else if(G){s=x;do{k=f[Sa>>2]|0;if(s>>>0>=k>>>0)break d;l=s;s=s+1|0;o=(f[Wa>>2]|0)+((X(f[Xa>>2]|0,s)|0)+u<<1)|0;m=f[a>>2]|0;Q=d[o>>1]|0;k=(l|0)==(w|0)|(l|0)==(k+-1|0)?Q&-1095:Q;if((k&20480|0)==4096){Q=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,l)|0)+t<<2)|0;Q=f[Q>>2]|0;Q=(Q|0)<0?0-Q|0:Q;j=j+(d[A+((Q>>>e&127)<<1)>>1]|0)|0;f[m+100>>2]=m+24+((k&8192|0?16:k&255|0?15:14)<<2);fh(m,(Q&z|0)!=0&1);d[o>>1]=d[o>>1]|8192}}while(s>>>0>>0)}else{s=x;do{k=f[Sa>>2]|0;if(s>>>0>=k>>>0)break d;l=s;s=s+1|0;o=(f[Wa>>2]|0)+((X(f[Xa>>2]|0,s)|0)+u<<1)|0;m=f[a>>2]|0;Q=d[o>>1]|0;k=(l|0)==(w|0)|(l|0)==(k+-1|0)?Q&-1095:Q;if((k&20480|0)==4096){Q=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,l)|0)+t<<2)|0;Q=f[Q>>2]|0;Q=(Q|0)<0?0-Q|0:Q;j=j+(d[A+((Q>>>e&127)<<1)>>1]|0)|0;f[m+100>>2]=m+24+((k&8192|0?16:k&255|0?15:14)<<2);ch(m,(Q&z|0)!=0&1);d[o>>1]=d[o>>1]|8192}}while(s>>>0>>0)}while(0);l=f[Ra>>2]|0}while(u>>>0>>0);k=f[Sa>>2]|0}}while(y>>>0>>0);break}case 2:{L=f[a>>2]|0;M=1<>2]|0;if(!k)j=0;else{N=L+92|0;O=L+100|0;P=L+96|0;Q=(e|0)==0?3176:3432;m=0;j=0;l=f[Ra>>2]|0;do if(!l){m=m+4|0;l=0}else{B=m|3;C=m|1;D=C+1|0;E=C+3|0;K=m+4|0;F=m+1|0;G=m+2|0;H=m+3|0;A=0;while(1){do if(B>>>0>>0){k=f[Wa>>2]|0;l=f[Xa>>2]|0;o=A+1|0;s=k+((X(l,C)|0)+o<<1)|0;s=d[s>>1]|0;if($){x=k+((X(l,D)|0)+o<<1)|0;y=k+((X(l,B)|0)+o<<1)|0;z=k+((X(l,E)|0)+o<<1)|0;if((d[x>>1]|s|d[y>>1]|d[z>>1])&20735){z=0;k=0;Fa=105;break}}else{if(s&20735){z=0;k=0;Fa=105;break}z=k+((X(l,D)|0)+o<<1)|0;if(d[z>>1]&20735){z=0;k=0;Fa=105;break}z=k+((X(l,B)|0)+o<<1)|0;if(d[z>>1]&20735){z=0;k=0;Fa=105;break}z=k+((X(l,E)|0)+o<<1)|0;if(d[z>>1]&20665){z=0;k=0;Fa=105;break}}k=f[Ta>>2]|0;l=f[Ua>>2]|0;z=k+((X(l,m)|0)+A<<2)|0;z=f[z>>2]|0;do if(!(((z|0)<0?0-z|0:z)&M)){z=k+((X(l,F)|0)+A<<2)|0;z=f[z>>2]|0;if(((z|0)<0?0-z|0:z)&M|0){k=1;break}z=k+((X(l,G)|0)+A<<2)|0;z=f[z>>2]|0;if(((z|0)<0?0-z|0:z)&M|0){k=2;break}k=k+((X(l,H)|0)+A<<2)|0;k=f[k>>2]|0;k=(((k|0)<0?0-k|0:k)&M|0)==0?4:3}else k=0;while(0);f[O>>2]=N;ch(L,(k|0)!=4&1);if((k|0)==4)break;f[O>>2]=P;ch(L,k>>>1);ch(L,k&1);z=1;Fa=105}else{z=0;k=0;Fa=105}while(0);e:do if((Fa|0)==105){Fa=0;y=k+m|0;if(y>>>0>>0)x=y;else break;do{k=f[Sa>>2]|0;if(x>>>0>=k>>>0)break e;s=f[Wa>>2]|0;$a=x;x=x+1|0;t=(X(f[Xa>>2]|0,x)|0)+A|0;w=s+(t+1<<1)|0;u=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,$a)|0)+A<<2)|0;v=f[a>>2]|0;l=d[w>>1]|0;o=(($a|0)==(B|0)|($a|0)==(k+-1|0))&ba?l&-1095:l;do if(!(z&($a|0)==(y|0))){if(l&20480|0)break;k=v+100|0;f[k>>2]=v+24+(h[20356+(o&255|_)>>0]<<2);$a=f[u>>2]|0;$a=((($a|0)<0?0-$a|0:$a)&M|0)!=0;ch(v,$a&1);if($a)Fa=111}else{k=v+100|0;Fa=111}while(0);if((Fa|0)==111){Fa=0;u=f[u>>2]|0;j=j+(d[Q+((((u|0)<0?0-u|0:u)>>>e&127)<<1)>>1]|0)|0;$a=o>>>4&255;f[k>>2]=v+24+(h[21380+$a>>0]<<2);u=u>>>31;ch(v,u^h[21636+$a>>0]);$a=f[Xa>>2]|0;v=w+(0-$a<<1)|0;$a=w+($a<<1)|0;o=v+-2|0;d[o>>1]=d[o>>1]|2;d[v>>1]=d[v>>1]|d[3160+(u<<1)>>1];v=v+2|0;d[v>>1]=d[v>>1]|4;v=s+(t<<1)|0;d[v>>1]=d[v>>1]|d[3160+((u|2)<<1)>>1];d[w>>1]=d[w>>1]|4096;v=w+2|0;d[v>>1]=d[v>>1]|d[3160+((u|4)<<1)>>1];v=$a+-2|0;d[v>>1]=d[v>>1]|1;d[$a>>1]=d[$a>>1]|d[3160+((u|6)<<1)>>1];$a=$a+2|0;d[$a>>1]=d[$a>>1]|8}d[w>>1]=d[w>>1]&-16385}while(x>>>0>>0)}while(0);A=A+1|0;l=f[Ra>>2]|0;k=f[Sa>>2]|0;if(A>>>0>=l>>>0){m=K;break}}}while(m>>>0>>0)}if(aa)break c;lh(ka);break}default:{}}while(0);if(Ja)q=+p[Ia>>3];else q=1.0;if(V)r=+Dg(ha,ga);else r=+Hg(ha,ga);r=q*r*ia*+(1<>3]=+p[Za>>3]+r;do if(W)Fa=127;else{if((e|0)<1&(S|0)==2){Fa=127;break}dh(ka);k=R+(c*24|0)+20|0;l=b[k>>0]|1;b[k>>0]=l;k=1}while(0);do if((Fa|0)==127){k=(f[ea>>2]|0)+-4|0;if((S|0)!=0&(e|0)<(k|0))if(U)Fa=131;else Fa=130;else if(U|((S|0)!=2|(e|0)!=(k|0)))Fa=131;else Fa=130;if((Fa|0)==130){Fa=0;dh(ka);k=R+(c*24|0)+20|0;l=b[k>>0]|1;b[k>>0]=l;k=1;break}else if((Fa|0)==131){Fa=0;k=R+(c*24|0)+20|0;l=b[k>>0]&-2;b[k>>0]=l;k=3;break}}while(0);Q=S+1|0;$a=(Q|0)==3;S=$a?0:Q;e=e+($a<<31>>31)|0;do if((e|0)>0&(l&1)!=0)if(da&(S>>>0<2?(e|0)<((f[ea>>2]|0)+-4|0):0)){eh(ka);break}else{jh(ka);break}while(0);p[R+(c*24|0)+8>>3]=T;$a=(ah(ka)|0)+k|0;f[R+(c*24|0)>>2]=$a;if(!Y)gh(ka);c=c+1|0;if((e|0)<=-1)break b}}else c=0;while(0);do if(!(ja&16)){if(ja&1|0)break;dh(ka)}else kh(ka);while(0);o=la+(ma*52|0)+48|0;f[o>>2]=c;if(c|0){l=la+(ma*52|0)+8|0;k=0;do{m=f[l>>2]|0;e=m+(k*24|0)|0;$a=f[e>>2]|0;if($a>>>0>(ah(ka)|0)>>>0){c=ah(ka)|0;f[e>>2]=c}else c=f[e>>2]|0;do if(c>>>0>1){j=c+-1|0;if((b[(f[fa>>2]|0)+j>>0]|0)!=-1)break;f[e>>2]=j;c=j}while(0);if(!k)e=0;else e=f[(f[l>>2]|0)+((k+-1|0)*24|0)>>2]|0;f[m+(k*24|0)+16>>2]=c-e;k=k+1|0}while(k>>>0<(f[o>>2]|0)>>>0)}ma=ma+1|0}while(ma>>>0<(X(f[pa>>2]|0,f[oa>>2]|0)|0)>>>0);j=f[Aa>>2]|0;c=f[za>>2]|0}qa=qa+1|0}while(qa>>>0<(X(j,c)|0)>>>0);e=f[Ea>>2]|0}ya=ya+1|0}while(ya>>>0>>0);c=f[Oa>>2]|0}Ga=Ga+1|0}while(Ga>>>0>>0);c=f[_a>>2]|0}Pa=Pa+1|0;if(Pa>>>0>=c>>>0){c=1;Fa=163;break}}if((Fa|0)==163)return c|0;return 0}function Ug(a,b,c,e,g,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;e=e|0;g=g|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+16|0;E=G;f[E>>2]=0;p=f[a>>2]|0;z=f[a+4>>2]|0;a=f[z+76>>2]|0;C=a+(b*5640|0)|0;q=(d[z>>1]|0)==4?2:1;r=z+80|0;if(!(f[r>>2]|0))s=1;else s=f[p+16>>2]|0;F=(f[a+(b*5640|0)+420>>2]|0)+1|0;D=Ff(p,z,b,o)|0;if(!D){i=0;u=G;return i|0}f[i>>2]=0;a:do if(!o){if(s|0){o=0;b:while(1){a=0;l=0;n=D;while(1){Hf(D,z,b,l,o,m,0);if((f[n+80>>2]|0)==-1){g=9;break b}p=n+36|0;c:while(1){do if(!(Kf(n)|0))break c;while((f[p>>2]|0)>>>0>=e>>>0);f[E>>2]=0;if(!(Vg(b,c,C,n,g,E,j,k)|0)){g=13;break b}B=f[E>>2]|0;f[i>>2]=(f[i>>2]|0)+B;a=B+a|0;j=j-B|0;g=g+B|0}B=f[r>>2]|0;if((B|0)!=0&a>>>0>B>>>0){g=17;break b}l=l+1|0;if(l>>>0>=q>>>0)break;else n=n+232|0}o=o+1|0;if(o>>>0>=s>>>0)break a}if((g|0)==9){Ef(D,F);i=0;u=G;return i|0}else if((g|0)==13){Ef(D,F);i=0;u=G;return i|0}else if((g|0)==17){Ef(D,F);i=0;u=G;return i|0}}}else{Hf(D,z,b,n,l,m,o);y=D+(n*232|0)|0;if((f[D+(n*232|0)+80>>2]|0)==-1){Ef(D,F);i=0;u=G;return i|0}w=D+(n*232|0)+36|0;x=c+840|0;m=k+12|0;t=k+8|0;v=k+88|0;s=z+93|0;r=a+(b*5640|0)+5636|0;d:do if(!k)while(1){do if(!(Kf(y)|0))break a;while((f[w>>2]|0)>>>0>=e>>>0);f[E>>2]=0;if(!(Vg(b,c,C,y,g,E,j,0)|0))break d;k=f[E>>2]|0;f[i>>2]=(f[i>>2]|0)+k;f[x>>2]=(f[x>>2]|0)+1;j=j-k|0;g=g+k|0}else while(1){do if(!(Kf(y)|0))break a;while((f[w>>2]|0)>>>0>=e>>>0);f[E>>2]=0;if(!(Vg(b,c,C,y,g,E,j,k)|0))break d;q=f[E>>2]|0;g=g+q|0;j=j-q|0;f[i>>2]=(f[i>>2]|0)+q;if(!(f[m>>2]|0))a=f[t>>2]|0;else{p=f[v>>2]|0;n=f[p+(b*592|0)+548>>2]|0;a=f[t>>2]|0;l=n+(a<<5)|0;do if(!a){o=(f[p+(b*592|0)+12>>2]|0)+1|0;p=o;o=((o|0)<0)<<31>>31}else{if(((h[r>>0]|0)>>>2|(h[s>>0]|0)>>>3)&1?(B=l,A=f[B>>2]|0,B=f[B+4>>2]|0,!((A|0)==0&(B|0)==0)):0){p=A;o=B;break}p=n+(a+-1<<5)+16|0;p=Zi(f[p>>2]|0,f[p+4>>2]|0,1,0)|0;o=I}while(0);f[l>>2]=p;f[l+4>>2]=o;o=Zi(p|0,o|0,-1,-1)|0;l=I;q=Zi(o|0,l|0,q|0,0)|0;z=n+(a<<5)+16|0;f[z>>2]=q;f[z+4>>2]=I;z=n+(a<<5)+8|0;q=z;q=Zi(o|0,l|0,f[q>>2]|0,f[q+4>>2]|0)|0;f[z>>2]=q;f[z+4>>2]=I}f[t>>2]=a+1;f[x>>2]=(f[x>>2]|0)+1}while(0);Ef(D,F);i=0;u=G;return i|0}while(0);Ef(D,F);i=1;u=G;return i|0}function Vg(a,c,d,e,g,h,i,j){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0.0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;t=f[e+28>>2]|0;J=f[e+32>>2]|0;K=f[e+36>>2]|0;s=f[(f[c+20>>2]|0)+((f[e+24>>2]|0)*52|0)+24>>2]|0;if(!(f[d>>2]&2))G=g;else{b[g>>0]=-1;b[g+1>>0]=-111;b[g+2>>0]=0;b[g+3>>0]=4;G=c+840|0;b[g+4>>0]=(f[G>>2]|0)>>>8;b[g+5>>0]=f[G>>2];i=i+-6|0;G=g+6|0}if((K|0)==0?(r=s+(t*136|0)+24|0,f[r>>2]|0):0){m=0;n=s+(t*136|0)+28|0;while(1){e=f[n+20>>2]|0;cg(f[e+(J*40|0)+32>>2]|0);o=e+(J*40|0)+36|0;cg(f[o>>2]|0);q=X(f[e+(J*40|0)+20>>2]|0,f[e+(J*40|0)+16>>2]|0)|0;if(q|0){c=e+(J*40|0)+24|0;l=n+28|0;e=0;do{I=f[c>>2]|0;f[I+(e*52|0)+40>>2]=0;fg(f[o>>2]|0,e,(f[l>>2]|0)-(f[I+(e*52|0)+28>>2]|0)|0);e=e+1|0}while((e|0)!=(q|0))}m=m+1|0;if(m>>>0>=(f[r>>2]|0)>>>0)break;else n=n+36|0}}F=og()|0;if(!F){h=0;return h|0}rg(F,G,i);tg(F,1,1);H=s+(t*136|0)+28|0;I=s+(t*136|0)+24|0;if(f[I>>2]|0){D=K+1|0;B=0;C=H;while(1){n=f[C+20>>2]|0;E=X(f[n+(J*40|0)+20>>2]|0,f[n+(J*40|0)+16>>2]|0)|0;o=n+(J*40|0)+24|0;l=(E|0)==0;if(!l){m=n+(J*40|0)+32|0;e=f[o>>2]|0;c=0;while(1){if((f[e+40>>2]|0)==0?f[(f[e+4>>2]|0)+(K*24|0)>>2]|0:0)fg(f[m>>2]|0,c,K);c=c+1|0;if((c|0)==(E|0))break;else e=e+52|0}if(!l){A=n+(J*40|0)+32|0;z=n+(J*40|0)+36|0;w=f[o>>2]|0;x=0;while(1){e=(f[w+4>>2]|0)+(K*24|0)|0;y=w+40|0;if(!(f[y>>2]|0))gg(F,f[A>>2]|0,x,D);else tg(F,(f[e>>2]|0)!=0&1,1);c=f[e>>2]|0;if(c|0){if(!(f[y>>2]|0)){f[w+32>>2]=3;gg(F,f[z>>2]|0,x,999);c=f[e>>2]|0}a:do switch(c|0){case 1:{tg(F,0,1);break}case 2:{tg(F,2,2);break}default:{if(c>>>0<6){tg(F,c+-3|12,4);break a}if(c>>>0<37){tg(F,c+-6|480,9);break a}if(c>>>0<165)tg(F,c+-37|65408,16)}}while(0);m=f[y>>2]|0;c=f[e>>2]|0;v=c+m|0;u=w+8|0;if(m>>>0>>0){t=w+32|0;s=m+-1+c|0;r=m;l=0;c=0;n=0;q=(f[u>>2]|0)+(m*24|0)|0;while(1){m=c+1|0;l=(f[q+16>>2]|0)+l|0;if((b[q+20>>0]&1)!=0|(r|0)==(s|0)){if((l|0)>1){c=0;while(1){c=c+1|0;if(l>>>0>3)l=l>>>1;else{l=c;break}}}else l=0;o=f[t>>2]|0;if((m|0)>1){c=0;while(1){c=c+1|0;if(m>>>0>3)m=m>>>1;else break}}else c=0;o=l+1-o-c|0;l=0;m=0;n=(n|0)>(o|0)?n:o}r=r+1|0;if((r|0)==(v|0))break;else{c=m;q=q+24|0}}if((n|0)>0){c=n;while(1){tg(F,1,1);if((c|0)>1)c=c+-1|0;else{c=n;break}}}else c=n}else{l=0;m=0;c=0}tg(F,0,1);r=w+32|0;f[r>>2]=(f[r>>2]|0)+c;c=f[y>>2]|0;if(c>>>0>>0){q=c;o=(f[u>>2]|0)+(c*24|0)|0;c=m;while(1){c=c+1|0;l=(f[o+16>>2]|0)+l|0;if(!((b[o+20>>0]&1)==0?(q|0)!=((f[y>>2]|0)+-1+(f[e>>2]|0)|0):0)){n=f[r>>2]|0;if((c|0)>1){m=0;while(1){m=m+1|0;if(c>>>0>3)c=c>>>1;else{c=m;break}}}else c=0;tg(F,l,c+n|0);l=0;c=0}q=q+1|0;if((q|0)==(v|0))break;else o=o+24|0}}}x=x+1|0;if((x|0)==(E|0))break;else w=w+52|0}}}B=B+1|0;if(B>>>0>=(f[I>>2]|0)>>>0)break;else C=C+36|0}}if(!(vg(F)|0)){pg(F);h=0;return h|0}c=qg(F)|0;e=G+c|0;c=i-c|0;pg(F);if(f[d>>2]&4){b[e>>0]=-1;b[e+1>>0]=-110;c=c+-2|0;e=e+2|0}u=(j|0)!=0;if(u?f[j+12>>2]|0:0){G=e-g|0;d=(f[(f[j+88>>2]|0)+(a*592|0)+548>>2]|0)+(f[j+8>>2]<<5)+8|0;f[d>>2]=G;f[d+4>>2]=((G|0)<0)<<31>>31}b:do if(f[I>>2]|0){v=j+12|0;w=j+88|0;x=j+8|0;t=0;s=H;c:while(1){l=f[s+20>>2]|0;r=X(f[l+(J*40|0)+20>>2]|0,f[l+(J*40|0)+16>>2]|0)|0;l=f[l+(J*40|0)+24>>2]|0;d:do if(r){e:do if(u){q=0;while(1){o=f[l+4>>2]|0;i=o+(K*24|0)|0;if(f[i>>2]|0){m=o+(K*24|0)+4|0;n=f[m>>2]|0;if(n>>>0>c>>>0)i=1;else{hj(e|0,f[o+(K*24|0)+16>>2]|0,n|0)|0;d=l+40|0;f[d>>2]=(f[d>>2]|0)+(f[i>>2]|0);d=f[m>>2]|0;e=e+d|0;c=c-d|0;do if(f[v>>2]|0){d=(f[(f[w>>2]|0)+(a*592|0)+548>>2]|0)+(f[x>>2]<<5)+24|0;k=+p[o+(K*24|0)+8>>3]+ +p[d>>3];p[d>>3]=k;if(!(+p[j>>3]>3]=k}while(0);i=0;l=l+52|0}}else{i=28;l=l+52|0}switch(i&31){case 28:case 0:break;default:break e}q=q+1|0;if(q>>>0>=r>>>0){L=83;break d}}}else{q=0;while(1){i=f[l+4>>2]|0;m=i+(K*24|0)|0;if(f[m>>2]|0){n=i+(K*24|0)+4|0;o=f[n>>2]|0;if(o>>>0>c>>>0)i=1;else{hj(e|0,f[i+(K*24|0)+16>>2]|0,o|0)|0;d=l+40|0;f[d>>2]=(f[d>>2]|0)+(f[m>>2]|0);d=f[n>>2]|0;i=0;c=c-d|0;e=e+d|0;l=l+52|0}}else{i=28;l=l+52|0}switch(i&31){case 28:case 0:break;default:break e}q=q+1|0;if(q>>>0>=r>>>0){L=83;break d}}}while(0);if(!i)i=s;else{e=0;break c}}else L=83;while(0);if((L|0)==83){L=0;i=s+36|0}t=t+1|0;if(t>>>0>=(f[I>>2]|0)>>>0)break b;else s=i}return e|0}while(0);f[h>>2]=e-g+(f[h>>2]|0);h=1;return h|0}function Wg(a,b,c,d,e,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0;_=u;u=u+112|0;Z=_+64|0;U=_+32|0;T=_;R=_+96|0;S=_+92|0;j=f[a>>2]|0;L=a+4|0;Q=f[L>>2]|0;h=f[Q+76>>2]|0;M=h+(b*5640|0)|0;N=h+(b*5640|0)+420|0;P=(f[N>>2]|0)+1|0;Q=Bf(j,Q,b)|0;if(!Q){$=0;u=_;return $|0}O=j+16|0;K=h+(b*5640|0)+12|0;J=c+20|0;H=j+24|0;G=Q;a=g;h=d;F=0;a:while(1){if((f[G+80>>2]|0)==-1){$=4;break}I=Hc(f[O>>2]<<2)|0;if(!I){$=6;break}ij(I|0,1,f[O>>2]<<2|0)|0;if(Kf(G)|0){B=G+24|0;C=G+28|0;D=G+36|0;E=G+32|0;A=h;while(1){if((f[K>>2]|0)>>>0>(f[D>>2]|0)>>>0){h=f[J>>2]|0;b=f[B>>2]|0;if((f[C>>2]|0)>>>0<(f[h+(b*52|0)+20>>2]|0)>>>0){f[I+(b<<2)>>2]=0;z=f[L>>2]|0;f[S>>2]=0;if(!(Xg(z,h,M,G,R,A,S,a,i)|0)){$=45;break a}h=f[S>>2]|0;if(f[R>>2]|0){y=a-h|0;z=A+h|0;f[S>>2]=0;b=f[(f[J>>2]|0)+((f[B>>2]|0)*52|0)+24>>2]|0;c=f[C>>2]|0;w=b+(c*136|0)+24|0;g=f[w>>2]|0;b:do if(!g){b=z;$=43}else{x=A+a|0;j=0;v=b+(c*136|0)+28|0;b=z;c=g;c:while(1){g=f[v+20>>2]|0;k=f[E>>2]|0;if(((f[v+8>>2]|0)!=(f[v>>2]|0)?(f[v+12>>2]|0)!=(f[v+4>>2]|0):0)?(Y=X(f[g+(k*40|0)+20>>2]|0,f[g+(k*40|0)+16>>2]|0)|0,(Y|0)!=0):0){c=0;t=f[g+(k*40|0)+24>>2]|0;while(1){r=t+40|0;if(f[r>>2]|0){s=t+44|0;g=f[s>>2]|0;k=f[t+4>>2]|0;do if(!g){f[s>>2]=1;f[t+36>>2]=0}else{l=g+-1|0;if((f[k+(l<<5)+8>>2]|0)!=(f[k+(l<<5)+20>>2]|0)){k=k+(l<<5)|0;break}f[s>>2]=g+1;k=k+(g<<5)|0}while(0);p=t+36|0;q=t+32|0;o=b;n=k+28|0;g=f[n>>2]|0;if((g+o|0)>>>0>>0|(b+g|0)>>>0>x>>>0){b=g;break c}l=g;m=f[p>>2]|0;o=n;while(1){n=l+m|0;if(n>>>0>>0){$=29;break a}g=f[t>>2]|0;if(n>>>0>(f[q>>2]|0)>>>0){g=Lc(g,n)|0;if(!g){$=33;break a}m=f[p>>2]|0;l=f[o>>2]|0;f[q>>2]=l+m;f[t>>2]=g}hj(g+m|0,b|0,l|0)|0;g=k+8|0;l=f[g>>2]|0;if(!l){f[k>>2]=t;m=f[p>>2]|0;f[k+4>>2]=m}else m=f[p>>2]|0;aa=f[o>>2]|0;b=b+aa|0;o=f[k+24>>2]|0;n=o+l|0;f[g>>2]=n;o=(f[r>>2]|0)-o|0;f[r>>2]=o;f[k+12>>2]=n;m=aa+m|0;f[p>>2]=m;n=k+16|0;f[n>>2]=(f[n>>2]|0)+aa;if(!o)break;f[s>>2]=(f[s>>2]|0)+1;aa=b;o=k+60|0;g=f[o>>2]|0;if((g+aa|0)>>>0>>0|(b+g|0)>>>0>x>>>0){b=g;break c}else{k=k+32|0;l=g}}f[t+48>>2]=f[s>>2]}c=c+1|0;if(c>>>0>>0)t=t+56|0;else break}c=f[w>>2]|0}j=j+1|0;if(j>>>0>>0)v=v+36|0;else{$=43;break b}}x=f[E>>2]|0;z=f[C>>2]|0;aa=f[B>>2]|0;f[T>>2]=b;f[T+4>>2]=y;f[T+8>>2]=c;f[T+12>>2]=x;f[T+16>>2]=j;f[T+20>>2]=z;f[T+24>>2]=aa;Mb(i,2,21892,T)|0;b=0}while(0);if(($|0)==43){$=0;b=b-z|0;f[S>>2]=b}h=b+h|0}aa=f[B>>2]|0;y=f[C>>2]|0;b=(f[H>>2]|0)+(aa*52|0)+36|0;z=f[b>>2]|0;f[b>>2]=y>>>0>z>>>0?y:z;b=h;h=aa}else $=47}else{h=f[J>>2]|0;$=47}if(($|0)==47){$=0;aa=f[L>>2]|0;f[S>>2]=0;if(!(Xg(aa,h,M,G,R,A,S,a,i)|0))break a;b=f[S>>2]|0;if(!(f[R>>2]|0))h=f[B>>2]|0;else{v=a-b|0;x=f[B>>2]|0;h=f[(f[J>>2]|0)+(x*52|0)+24>>2]|0;w=f[C>>2]|0;f[S>>2]=0;s=f[h+(w*136|0)+24>>2]|0;if(!s)h=0;else{t=f[E>>2]|0;j=0;r=h+(w*136|0)+28|0;h=0;while(1){c=f[r+20>>2]|0;if(((f[r+8>>2]|0)!=(f[r>>2]|0)?(f[r+12>>2]|0)!=(f[r+4>>2]|0):0)?(V=X(f[c+(t*40|0)+20>>2]|0,f[c+(t*40|0)+16>>2]|0)|0,(V|0)!=0):0){q=f[c+(t*40|0)+24>>2]|0;c=0;n=h;while(1){o=q+40|0;m=f[o>>2]|0;if(!m)h=n;else{p=q+44|0;k=f[p>>2]|0;h=f[q+4>>2]|0;do if(!k){f[p>>2]=1;f[q+36>>2]=0;g=h;l=1}else{g=k+-1|0;l=k+1|0;if((f[h+(g<<5)+8>>2]|0)!=(f[h+(g<<5)+20>>2]|0)){g=h+(g<<5)|0;l=k;break}f[p>>2]=l;g=h+(k<<5)|0}while(0);h=f[g+28>>2]|0;k=h+n|0;if(k>>>0>>0|k>>>0>v>>>0){$=67;break a}else n=g;while(1){aa=f[n+24>>2]|0;z=n+8|0;f[z>>2]=(f[z>>2]|0)+aa;m=m-aa|0;if(!m)break;l=l+1|0;f[p>>2]=l;h=f[n+60>>2]|0;g=h+k|0;if(g>>>0>>0|g>>>0>v>>>0){$=68;break a}else{n=n+32|0;k=g}}f[o>>2]=0;h=k}c=c+1|0;if(c>>>0>>0){q=q+56|0;n=h}else break}}j=j+1|0;if(j>>>0>>0)r=r+36|0;else break}f[S>>2]=h}b=h+b|0;h=x}}if(f[I+(h<<2)>>2]|0?(W=(f[H>>2]|0)+(h*52|0)+36|0,(f[W>>2]|0)==0):0)f[W>>2]=(f[(f[J>>2]|0)+(h*52|0)+20>>2]|0)+-1;h=A+b|0;a=a-b|0;if(!(Kf(G)|0))break;else A=h}}Mc(I);F=F+1|0;if(F>>>0>(f[N>>2]|0)>>>0){$=79;break}else G=G+232|0}if(($|0)==4){Ef(Q,P);aa=0;u=_;return aa|0}else if(($|0)==6){Ef(Q,P);aa=0;u=_;return aa|0}else if(($|0)==29){Y=f[E>>2]|0;Z=f[C>>2]|0;aa=f[B>>2]|0;f[U>>2]=l;f[U+4>>2]=m;f[U+8>>2]=~l;f[U+12>>2]=c;f[U+16>>2]=Y;f[U+20>>2]=j;f[U+24>>2]=Z;f[U+28>>2]=aa;Mb(i,1,21977,U)|0;$=45}else if(($|0)==33){Mc(f[t>>2]|0);f[t>>2]=0;f[q>>2]=0;$=45}else if(($|0)==67){f[S>>2]=n;$=69}else if(($|0)==68){f[S>>2]=k;f[o>>2]=m;$=69}else if(($|0)==79){Ef(Q,P);f[e>>2]=h-d;aa=1;u=_;return aa|0}if(($|0)==45){Ef(Q,P);Mc(I);aa=0;u=_;return aa|0}else if(($|0)==69){f[Z>>2]=h;f[Z+4>>2]=v;f[Z+8>>2]=c;f[Z+12>>2]=t;f[Z+16>>2]=j;f[Z+20>>2]=w;f[Z+24>>2]=x;Mb(i,1,22076,Z)|0}Ef(Q,P);Mc(I);aa=0;u=_;return aa|0}function Xg(a,c,d,e,g,h,i,j,k){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;O=u;u=u+64|0;K=O+48|0;L=O+40|0;y=O+32|0;x=O+24|0;v=O+16|0;t=O+8|0;s=O;w=O+56|0;M=O+52|0;N=h;f[M>>2]=N;J=e+24|0;z=f[c+((f[J>>2]|0)*52|0)+24>>2]|0;A=f[e+28>>2]|0;I=e+36|0;a:do if((f[I>>2]|0)==0?(r=z+(A*136|0)+24|0,f[r>>2]|0):0){p=e+32|0;m=0;o=z+(A*136|0)+28|0;while(1){if((f[o+8>>2]|0)!=(f[o>>2]|0)?(f[o+12>>2]|0)!=(f[o+4>>2]|0):0){c=f[o+20>>2]|0;l=f[p>>2]|0;if(l>>>0>=(((f[o+24>>2]|0)>>>0)/40|0)>>>0)break;cg(f[c+(l*40|0)+32>>2]|0);cg(f[c+(l*40|0)+36>>2]|0);q=X(f[c+(l*40|0)+20>>2]|0,f[c+(l*40|0)+16>>2]|0)|0;if(q|0){n=0;c=f[c+(l*40|0)+24>>2]|0;while(1){f[c+44>>2]=0;f[c+48>>2]=0;n=n+1|0;if((n|0)==(q|0))break;else c=c+56|0}}}m=m+1|0;if(m>>>0>=(f[r>>2]|0)>>>0)break a;else o=o+36|0}Mb(k,1,22161,s)|0;N=0;u=O;return N|0}while(0);do if(!(f[d>>2]&2))c=N;else{if(j>>>0<6){Mb(k,2,22179,t)|0;c=N;break}if((b[h>>0]|0)==-1?(b[h+1>>0]|0)==-111:0){c=h+6|0;f[M>>2]=c;break}Mb(k,2,22221,v)|0;c=N}while(0);G=og()|0;if(!G){N=0;u=O;return N|0}do if(!(b[a+96>>0]&1))if(!(b[d+5636>>0]&2)){f[w>>2]=h+j-c;H=M;F=c;break}else{F=d+5168|0;H=F;F=f[F>>2]|0;w=d+5180|0;break}else{F=a+40|0;H=F;F=f[F>>2]|0;w=a+44|0}while(0);sg(G,F,f[w>>2]|0);if(!(ug(G,1)|0)){wg(G)|0;c=F+(qg(G)|0)|0;pg(G);do if(!(f[d>>2]&4))l=H;else{if(((f[w>>2]|0)-c+(f[H>>2]|0)|0)>>>0<2){Mb(k,2,22242,x)|0;l=H;break}if((b[c>>0]|0)==-1?(b[c+1>>0]|0)==-110:0){c=c+2|0;l=H;break}Mb(k,2,22284,y)|0;l=H}while(0);d=f[l>>2]|0;k=c-d|0;f[w>>2]=(f[w>>2]|0)-k;f[H>>2]=d+k;f[g>>2]=0;f[i>>2]=(f[M>>2]|0)-N;N=1;u=O;return N|0}E=z+(A*136|0)+24|0;b:do if(f[E>>2]|0){C=e+32|0;D=d+5584|0;y=0;c=z+(A*136|0)+28|0;c:while(1){l=f[c+20>>2]|0;m=f[C>>2]|0;d:do if((f[c+8>>2]|0)!=(f[c>>2]|0)?(f[c+12>>2]|0)!=(f[c+4>>2]|0):0){j=X(f[l+(m*40|0)+20>>2]|0,f[l+(m*40|0)+16>>2]|0)|0;e:do if(j|0){a=l+(m*40|0)+32|0;e=l+(m*40|0)+36|0;x=c+28|0;h=0;l=f[l+(m*40|0)+24>>2]|0;f:while(1){n=l+44|0;if(!(f[n>>2]|0))m=hg(G,f[a>>2]|0,h,(f[I>>2]|0)+1|0)|0;else m=ug(G,1)|0;g:do if(m){if(!(f[n>>2]|0)){m=0;while(1)if(!(hg(G,f[e>>2]|0,h,m)|0))m=m+1|0;else break;f[l+24>>2]=1-m+(f[x>>2]|0);f[l+28>>2]=3}do if(ug(G,1)|0){if(!(ug(G,1)|0)){m=2;break}m=ug(G,2)|0;if((m|0)!=3){m=m+3|0;break}m=ug(G,5)|0;if((m|0)==31){m=(ug(G,7)|0)+37|0;break}else{m=m+6|0;break}}else m=1;while(0);s=l+40|0;f[s>>2]=m;m=0;while(1)if(!(ug(G,1)|0))break;else m=m+1|0;v=l+28|0;f[v>>2]=(f[v>>2]|0)+m;q=f[n>>2]|0;do if(!q){p=f[(f[D>>2]|0)+((f[J>>2]|0)*1080|0)+16>>2]|0;m=l+52|0;do if(!(f[m>>2]|0)){f[m>>2]=10;n=l+4|0;o=Lc(f[n>>2]|0,320)|0;if(!o){Mc(f[n>>2]|0);f[n>>2]=0;f[m>>2]=0;pg(G);m=1;break g}else{f[n>>2]=o;m=o;n=o;break}}else{n=f[l+4>>2]|0;m=n}while(0);f[m>>2]=0;f[m+4>>2]=0;f[m+8>>2]=0;f[m+12>>2]=0;f[m+16>>2]=0;f[m+20>>2]=0;f[m+24>>2]=0;f[m+28>>2]=0;if(!(p&4))m=(p&1|0)==0?109:10;else m=1;o=0;p=l+4|0;n=n+20|0;B=77}else{m=q+-1|0;r=l+4|0;n=f[r>>2]|0;if((f[n+(m<<5)+8>>2]|0)!=(f[n+(m<<5)+20>>2]|0))break;p=f[(f[D>>2]|0)+((f[J>>2]|0)*1080|0)+16>>2]|0;o=l+52|0;m=f[o>>2]|0;do if((q+1|0)>>>0>m>>>0){m=m+10|0;f[o>>2]=m;m=Lc(n,m<<5)|0;if(!m){Mc(f[r>>2]|0);f[r>>2]=0;f[o>>2]=0;pg(G);m=1;break g}else{f[r>>2]=m;n=m;break}}while(0);m=n+(q<<5)|0;f[m>>2]=0;f[m+4>>2]=0;f[m+8>>2]=0;f[m+12>>2]=0;f[m+16>>2]=0;f[m+20>>2]=0;f[m+24>>2]=0;f[m+28>>2]=0;do if(!(p&4)){if(!(p&1)){m=109;break}m=f[m+-32+20>>2]|0;m=(m|0)==1|(m|0)==10?2:1}else m=1;while(0);o=q;p=r;n=n+(q<<5)+20|0;B=77}while(0);if((B|0)==77){f[n>>2]=m;m=o;r=p}t=l+52|0;p=f[s>>2]|0;s=m;while(1){o=f[r>>2]|0;m=(f[o+(s<<5)+20>>2]|0)-(f[o+(s<<5)+8>>2]|0)|0;m=(m|0)<(p|0)?m:p;f[o+(s<<5)+24>>2]=m;o=f[v>>2]|0;if(m>>>0>1){n=m;m=0;while(1){m=m+1|0;if(n>>>0>3)n=n>>>1;else break}}else m=0;B=ug(G,m+o|0)|0;n=f[r>>2]|0;f[n+(s<<5)+28>>2]=B;p=p-(f[n+(s<<5)+24>>2]|0)|0;if((p|0)<=0){B=90;break}q=s+1|0;o=f[(f[D>>2]|0)+((f[J>>2]|0)*1080|0)+16>>2]|0;m=f[t>>2]|0;if((s+2|0)>>>0>m>>>0){m=m+10|0;f[t>>2]=m;m=Lc(n,m<<5)|0;if(!m){B=89;break}f[r>>2]=m;n=m}B=n+(q<<5)|0;f[B>>2]=0;f[B+4>>2]=0;f[B+8>>2]=0;f[B+12>>2]=0;f[B+16>>2]=0;f[B+20>>2]=0;f[B+24>>2]=0;f[B+28>>2]=0;do if(!(o&4)){if(!(o&1)){m=109;break}m=f[n+(s<<5)+20>>2]|0;m=(m|0)==1|(m|0)==10?2:1}else m=1;while(0);f[n+(q<<5)+20>>2]=m;s=q}if((B|0)==89){B=0;Mc(f[r>>2]|0);f[r>>2]=0;f[t>>2]=0;pg(G);m=1;break}else if((B|0)==90){B=0;m=0;l=l+56|0;break}}else{f[l+40>>2]=0;m=13;l=l+56|0}while(0);switch(m&15){case 13:case 0:break;default:break f}h=h+1|0;if(h>>>0>=j>>>0)break e}if(!m)break d;else{c=0;break c}}while(0);c=c+36|0}else B=39;while(0);if((B|0)==39){B=0;c=c+36|0}y=y+1|0;if(y>>>0>=(f[E>>2]|0)>>>0)break b}u=O;return c|0}while(0);if(!(wg(G)|0)){pg(G);N=0;u=O;return N|0}c=F+(qg(G)|0)|0;pg(G);do if(!(f[d>>2]&4))l=H;else{if(((f[w>>2]|0)-c+(f[H>>2]|0)|0)>>>0<2){Mb(k,2,22242,L)|0;l=H;break}if((b[c>>0]|0)==-1?(b[c+1>>0]|0)==-110:0){c=c+2|0;l=H;break}Mb(k,2,22284,K)|0;l=H}while(0);d=f[l>>2]|0;k=c-d|0;f[w>>2]=(f[w>>2]|0)-k;f[H>>2]=d+k;f[g>>2]=1;f[i>>2]=(f[M>>2]|0)-N;N=1;u=O;return N|0}function Yg(a,b){a=a|0;b=b|0;var c=0;c=Ic(1,8)|0;if(!c){c=0;return c|0}f[c>>2]=a;f[c+4>>2]=b;return c|0}function Zg(a){a=a|0;if(!a)return;Mc(a);return}function _g(){return Hc(104)|0}function $g(a){a=a|0;if(!a)return;Mc(a);return}function ah(a){a=a|0;return (f[a+12>>2]|0)-(f[a+16>>2]|0)|0}function bh(a,b){a=a|0;b=b|0;f[a+100>>2]=a+24;f[a+4>>2]=32768;f[a>>2]=0;f[a+12>>2]=b+-1;f[a+8>>2]=12;f[a+16>>2]=b;return}function ch(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;e=f[a+100>>2]|0;g=f[e>>2]|0;k=(f[g+4>>2]|0)==(c|0);d=f[g>>2]|0;l=a+4|0;c=(f[l>>2]|0)-d|0;f[l>>2]=c;if(!k){if(c>>>0>>0){d=(f[a>>2]|0)+d|0;f[a>>2]=d;k=a}else{f[l>>2]=d;c=d;k=a;d=f[a>>2]|0}f[e>>2]=f[g+12>>2];i=a+8|0;j=a+12|0;h=a+16|0;a=d;e=f[i>>2]|0;while(1){c=c<<1;f[l>>2]=c;d=a<<1;f[k>>2]=d;e=e+-1|0;f[i>>2]=e;if(!e){c=f[j>>2]|0;do if((c|0)!=((f[h>>2]|0)+-1|0)){e=b[c>>0]|0;if(e<<24>>24==-1){e=c+1|0;f[j>>2]=e;g=7;d=1048575;c=a>>>19&4095;break}if(!(d&134217728)){e=c+1|0;f[j>>2]=e;g=8;d=524287;c=a>>>18&8191;break}b[c>>0]=e+1<<24>>24;c=f[j>>2]|0;if((b[c>>0]|0)==-1){a=f[k>>2]&134217727;f[k>>2]=a;e=c+1|0;f[j>>2]=e;g=7;d=1048575;c=a>>>20;break}else{e=c+1|0;f[j>>2]=e;g=8;d=524287;c=(f[k>>2]|0)>>>19;break}}else{e=c+1|0;f[j>>2]=e;g=8;d=524287;c=a>>>18&8191}while(0);b[e>>0]=c;d=f[k>>2]&d;f[k>>2]=d;f[i>>2]=g;c=f[l>>2]|0;e=g}if(!(c&32768))a=d;else break}return}if(c&32768|0){f[a>>2]=(f[a>>2]|0)+d;return}if(c>>>0>>0){f[l>>2]=d;c=d;k=a;d=f[a>>2]|0}else{d=(f[a>>2]|0)+d|0;f[a>>2]=d;k=a}f[e>>2]=f[g+8>>2];i=a+8|0;j=a+12|0;h=a+16|0;a=d;d=f[i>>2]|0;while(1){c=c<<1;f[l>>2]=c;e=a<<1;f[k>>2]=e;d=d+-1|0;f[i>>2]=d;if(!d){c=f[j>>2]|0;do if((c|0)!=((f[h>>2]|0)+-1|0)){d=b[c>>0]|0;if(d<<24>>24==-1){g=c+1|0;f[j>>2]=g;d=7;e=1048575;c=a>>>19&4095;break}if(!(e&134217728)){g=c+1|0;f[j>>2]=g;d=8;e=524287;c=a>>>18&8191;break}b[c>>0]=d+1<<24>>24;c=f[j>>2]|0;if((b[c>>0]|0)==-1){a=f[k>>2]&134217727;f[k>>2]=a;g=c+1|0;f[j>>2]=g;d=7;e=1048575;c=a>>>20;break}else{g=c+1|0;f[j>>2]=g;d=8;e=524287;c=(f[k>>2]|0)>>>19;break}}else{g=c+1|0;f[j>>2]=g;d=8;e=524287;c=a>>>18&8191}while(0);b[g>>0]=c;e=f[k>>2]&e;f[k>>2]=e;f[i>>2]=d;c=f[l>>2]|0}if(!(c&32768))a=e;else break}return}function dh(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=f[a>>2]|0;h=k|65535;j=a+8|0;h=(h>>>0<((f[a+4>>2]|0)+k|0)>>>0?h:h+-32768|0)<>2];f[a>>2]=h;k=a+12|0;c=f[k>>2]|0;i=a+16|0;do if((c|0)!=((f[i>>2]|0)+-1|0)){d=b[c>>0]|0;if(d<<24>>24==-1){g=c+1|0;f[k>>2]=g;d=7;e=1048575;c=h>>>20;break}if(!(h&134217728)){g=c+1|0;f[k>>2]=g;d=8;e=524287;c=h>>>19;break}b[c>>0]=d+1<<24>>24;c=f[k>>2]|0;if((b[c>>0]|0)==-1){h=f[a>>2]&134217727;f[a>>2]=h;g=c+1|0;f[k>>2]=g;d=7;e=1048575;c=h>>>20;break}else{g=c+1|0;f[k>>2]=g;d=8;e=524287;c=(f[a>>2]|0)>>>19;break}}else{g=c+1|0;f[k>>2]=g;d=8;e=524287;c=h>>>19}while(0);b[g>>0]=c;h=f[a>>2]&e;f[j>>2]=d;h=h<>2]=h;d=f[k>>2]|0;do if((d|0)!=((f[i>>2]|0)+-1|0)){c=b[d>>0]|0;if(c<<24>>24==-1){g=d+1|0;f[k>>2]=g;d=7;e=1048575;c=h>>>20;break}if(!(h&134217728)){g=d+1|0;f[k>>2]=g;d=8;e=524287;c=h>>>19;break}b[d>>0]=c+1<<24>>24;c=f[k>>2]|0;if((b[c>>0]|0)==-1){i=f[a>>2]&134217727;f[a>>2]=i;g=c+1|0;f[k>>2]=g;d=7;e=1048575;c=i>>>20;break}else{g=c+1|0;f[k>>2]=g;d=8;e=524287;c=(f[a>>2]|0)>>>19;break}}else{g=d+1|0;f[k>>2]=g;d=8;e=524287;c=h>>>19}while(0);b[g>>0]=c;f[a>>2]=f[a>>2]&e;f[j>>2]=d;c=f[k>>2]|0;if((b[c>>0]|0)==-1)return;f[k>>2]=c+1;return}function eh(a){a=a|0;f[a>>2]=0;f[a+8>>2]=8;return}function fh(a,c){a=a|0;c=c|0;var d=0,e=0,g=0;d=a+8|0;e=(f[d>>2]|0)+-1|0;f[d>>2]=e;c=(f[a>>2]|0)+(c<>2]=c;if(e|0)return;e=a+12|0;g=(f[e>>2]|0)+1|0;f[e>>2]=g;b[g>>0]=c;f[d>>2]=8;f[d>>2]=(b[f[e>>2]>>0]|0)==-1?7:8;f[a>>2]=0;return}function gh(a){a=a|0;f[a+28>>2]=1156;f[a+32>>2]=1156;f[a+36>>2]=1156;f[a+40>>2]=1156;f[a+44>>2]=1156;f[a+48>>2]=1156;f[a+52>>2]=1156;f[a+56>>2]=1156;f[a+60>>2]=1156;f[a+64>>2]=1156;f[a+68>>2]=1156;f[a+72>>2]=1156;f[a+76>>2]=1156;f[a+80>>2]=1156;f[a+84>>2]=1156;f[a+88>>2]=1156;f[a+96>>2]=2628;f[a+92>>2]=1252;f[a+24>>2]=1284;return}function hh(a){a=a|0;f[a+24>>2]=1156;f[a+28>>2]=1156;f[a+32>>2]=1156;f[a+36>>2]=1156;f[a+40>>2]=1156;f[a+44>>2]=1156;f[a+48>>2]=1156;f[a+52>>2]=1156;f[a+56>>2]=1156;f[a+60>>2]=1156;f[a+64>>2]=1156;f[a+68>>2]=1156;f[a+72>>2]=1156;f[a+76>>2]=1156;f[a+80>>2]=1156;f[a+84>>2]=1156;f[a+88>>2]=1156;f[a+92>>2]=1156;f[a+96>>2]=1156;return}function ih(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;f[a+24+(b<<2)>>2]=1156+((d<<1)+c<<4);return}function jh(a){a=a|0;var c=0,d=0;f[a+100>>2]=a+24;f[a+4>>2]=32768;f[a>>2]=0;c=a+8|0;f[c>>2]=12;d=a+12|0;a=(f[d>>2]|0)+-1|0;f[d>>2]=a;if((b[a>>0]|0)!=-1)return;f[c>>2]=13;return}function kh(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;l=a+8|0;d=f[l>>2]|0;c=12-d|0;if((c|0)>0){e=a+12|0;k=a+16|0;j=c;g=f[a>>2]|0;c=d;do{i=g<>2]=i;f[l>>2]=0;c=f[e>>2]|0;do if((c|0)!=((f[k>>2]|0)+-1|0)){d=b[c>>0]|0;if(d<<24>>24==-1){h=c+1|0;f[e>>2]=h;c=7;g=1048575;d=i>>>20;break}if(!(i&134217728)){h=c+1|0;f[e>>2]=h;c=8;g=524287;d=i>>>19;break}b[c>>0]=d+1<<24>>24;c=f[e>>2]|0;if((b[c>>0]|0)==-1){d=f[a>>2]&134217727;f[a>>2]=d;h=c+1|0;f[e>>2]=h;c=7;g=1048575;d=d>>>20;break}else{h=c+1|0;f[e>>2]=h;c=8;g=524287;d=(f[a>>2]|0)>>>19;break}}else{h=c+1|0;f[e>>2]=h;c=8;g=524287;d=i>>>19}while(0);b[h>>0]=d;g=f[a>>2]&g;f[a>>2]=g;f[l>>2]=c;j=j-c|0}while((j|0)>0)}else e=a+12|0;c=f[e>>2]|0;d=b[c>>0]|0;if(d<<24>>24==-1)return;do if((c|0)!=((f[a+16>>2]|0)+-1|0)){i=f[a>>2]|0;if(!(i&134217728)){h=c+1|0;f[e>>2]=h;d=a;e=8;g=524287;c=i>>>19;break}b[c>>0]=d+1<<24>>24;c=f[e>>2]|0;if((b[c>>0]|0)==-1){k=f[a>>2]&134217727;f[a>>2]=k;h=c+1|0;f[e>>2]=h;d=a;e=7;g=1048575;c=k>>>20;break}else{h=c+1|0;f[e>>2]=h;d=a;e=8;g=524287;c=(f[a>>2]|0)>>>19;break}}else{h=c+1|0;f[e>>2]=h;d=a;e=8;g=524287;c=(f[a>>2]|0)>>>19}while(0);b[h>>0]=c;f[d>>2]=f[d>>2]&g;f[l>>2]=e;return}function lh(a){a=a|0;f[a+100>>2]=a+96;ch(a,1);ch(a,0);ch(a,1);ch(a,0);return}function mh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0;f[a+100>>2]=a+24;f[a+16>>2]=c;f[a+20>>2]=c+d;j=a+12|0;f[j>>2]=c;do if(!d){f[a>>2]=16711680;g=8;c=65280;e=16711680;d=a}else{e=h[c>>0]<<16;f[a>>2]=e;g=c+1|0;if((d|0)==1)i=255;else i=h[g>>0]|0;if((b[c>>0]|0)==-1)if(i>>>0>143){g=8;c=65280;d=a;break}else{c=9;d=7}else{c=8;d=8}f[j>>2]=g;g=d;c=i<>2]=e+c<<7;f[a+8>>2]=g+-7;f[a+4>>2]=32768;return 1}function nh(a){a=a|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;c=f[a+100>>2]|0;d=f[c>>2]|0;g=f[d>>2]|0;p=a+4|0;i=(f[p>>2]|0)-g|0;f[p>>2]=i;e=f[a>>2]|0;if(e>>>16>>>0>>0){n=i>>>0>>0;f[p>>2]=g;o=f[d+4>>2]|0;f[c>>2]=f[(n?d+8|0:d+12|0)>>2];k=a+8|0;l=a+12|0;m=a+20|0;c=f[k>>2]|0;d=e;j=g;do{if(!c){e=f[l>>2]|0;c=f[m>>2]|0;do if((e|0)==(c|0)){g=8;c=65280}else{g=e+1|0;if((g|0)==(c|0))i=255;else i=h[g>>0]|0;if((b[e>>0]|0)==-1)if(i>>>0>143){g=8;c=65280;break}else{e=9;c=7}else{e=8;c=8}f[l>>2]=g;g=c;c=i<>2]=d;f[k>>2]=g;c=g}j=j<<1;f[p>>2]=j;d=d<<1;f[a>>2]=d;c=c+-1|0;f[k>>2]=c}while(j>>>0<32768);p=n?o:1-o|0;return p|0}e=e-(g<<16)|0;f[a>>2]=e;if(i&32768|0){p=f[d+4>>2]|0;return p|0}n=i>>>0>>0;o=f[d+4>>2]|0;f[c>>2]=f[(n?d+12|0:d+8|0)>>2];k=a+8|0;l=a+12|0;m=a+20|0;c=f[k>>2]|0;d=e;j=i;do{if(!c){e=f[l>>2]|0;c=f[m>>2]|0;do if((e|0)==(c|0)){g=8;c=65280}else{g=e+1|0;if((g|0)==(c|0))i=255;else i=h[g>>0]|0;if((b[e>>0]|0)==-1)if(i>>>0>143){g=8;c=65280;break}else{e=9;c=7}else{e=8;c=8}f[l>>2]=g;g=c;c=i<>2]=d;f[k>>2]=g;c=g}j=j<<1;f[p>>2]=j;d=d<<1;f[a>>2]=d;c=c+-1|0;f[k>>2]=c}while(j>>>0<32768);p=n?1-o|0:o;return p|0}function oh(){return Hc(28)|0}function ph(a){a=a|0;if(!a)return;Mc(a);return}function qh(a,c,d){a=a|0;c=c|0;d=d|0;f[a+20>>2]=c;f[a+8>>2]=d;f[a+12>>2]=0;b[a>>0]=0;f[a+4>>2]=0;return}function rh(a){a=a|0;var c=0,d=0,e=0,g=0,h=0;g=a+4|0;c=f[g>>2]|0;do if(!c){f[g>>2]=8;c=a+12|0;e=f[c>>2]|0;if((e|0)==(f[a+8>>2]|0)){b[a>>0]=-1;d=8;c=-1;break}if((b[a>>0]|0)==-1){f[g>>2]=7;d=7}else d=8;h=b[(f[a+20>>2]|0)+e>>0]|0;b[a>>0]=h;f[c>>2]=e+1;c=h}else{d=c;c=b[a>>0]|0}while(0);h=d+-1|0;f[g>>2]=h;return (c&255)>>>h&1|0}function sh(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;x=u;u=u+16|0;o=x;do if(a>>>0<245){l=a>>>0<11?16:a+11&-8;a=l>>>3;n=f[6184]|0;c=n>>>a;if(c&3|0){b=(c&1^1)+a|0;a=24776+(b<<1<<2)|0;c=a+8|0;d=f[c>>2]|0;e=d+8|0;g=f[e>>2]|0;if((g|0)==(a|0))f[6184]=n&~(1<>2]=a;f[c>>2]=g}w=b<<3;f[d+4>>2]=w|3;w=d+w+4|0;f[w>>2]=f[w>>2]|1;w=e;u=x;return w|0}m=f[6186]|0;if(l>>>0>m>>>0){if(c|0){b=2<>>12&16;b=b>>>i;c=b>>>5&8;b=b>>>c;g=b>>>2&4;b=b>>>g;a=b>>>1&2;b=b>>>a;d=b>>>1&1;d=(c|i|g|a|d)+(b>>>d)|0;b=24776+(d<<1<<2)|0;a=b+8|0;g=f[a>>2]|0;i=g+8|0;c=f[i>>2]|0;if((c|0)==(b|0)){a=n&~(1<>2]=b;f[a>>2]=c;a=n}w=d<<3;h=w-l|0;f[g+4>>2]=l|3;e=g+l|0;f[e+4>>2]=h|1;f[g+w>>2]=h;if(m|0){d=f[6189]|0;b=m>>>3;c=24776+(b<<1<<2)|0;b=1<>2]|0}f[a>>2]=d;f[b+12>>2]=d;f[d+8>>2]=b;f[d+12>>2]=c}f[6186]=h;f[6189]=e;w=i;u=x;return w|0}j=f[6185]|0;if(j){c=(j&0-j)+-1|0;i=c>>>12&16;c=c>>>i;h=c>>>5&8;c=c>>>h;k=c>>>2&4;c=c>>>k;d=c>>>1&2;c=c>>>d;a=c>>>1&1;a=f[25040+((h|i|k|d|a)+(c>>>a)<<2)>>2]|0;c=(f[a+4>>2]&-8)-l|0;d=f[a+16+(((f[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){k=a;h=c}else{do{i=(f[d+4>>2]&-8)-l|0;k=i>>>0>>0;c=k?i:c;a=k?d:a;d=f[d+16+(((f[d+16>>2]|0)==0&1)<<2)>>2]|0}while((d|0)!=0);k=a;h=c}i=k+l|0;if(i>>>0>k>>>0){e=f[k+24>>2]|0;b=f[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=f[a>>2]|0;if(!b){a=k+16|0;b=f[a>>2]|0;if(!b){c=0;break}}while(1){c=b+20|0;d=f[c>>2]|0;if(d|0){b=d;a=c;continue}c=b+16|0;d=f[c>>2]|0;if(!d)break;else{b=d;a=c}}f[a>>2]=0;c=b}else{c=f[k+8>>2]|0;f[c+12>>2]=b;f[b+8>>2]=c;c=b}while(0);do if(e|0){b=f[k+28>>2]|0;a=25040+(b<<2)|0;if((k|0)==(f[a>>2]|0)){f[a>>2]=c;if(!c){f[6185]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=c;if(!c)break}f[c+24>>2]=e;b=f[k+16>>2]|0;if(b|0){f[c+16>>2]=b;f[b+24>>2]=c}b=f[k+20>>2]|0;if(b|0){f[c+20>>2]=b;f[b+24>>2]=c}}while(0);if(h>>>0<16){w=h+l|0;f[k+4>>2]=w|3;w=k+w+4|0;f[w>>2]=f[w>>2]|1}else{f[k+4>>2]=l|3;f[i+4>>2]=h|1;f[i+h>>2]=h;if(m|0){d=f[6189]|0;b=m>>>3;c=24776+(b<<1<<2)|0;b=1<>2]|0}f[a>>2]=d;f[b+12>>2]=d;f[d+8>>2]=b;f[d+12>>2]=c}f[6186]=h;f[6189]=i}w=k+8|0;u=x;return w|0}else m=l}else m=l}else m=l}else if(a>>>0<=4294967231){a=a+11|0;l=a&-8;k=f[6185]|0;if(k){d=0-l|0;a=a>>>8;if(a)if(l>>>0>16777215)j=31;else{n=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(m|n|j)+(v<>>15)|0;j=l>>>(j+7|0)&1|j<<1}else j=0;c=f[25040+(j<<2)>>2]|0;a:do if(!c){c=0;a=0;v=57}else{a=0;i=c;h=l<<((j|0)==31?0:25-(j>>>1)|0);c=0;while(1){e=(f[i+4>>2]&-8)-l|0;if(e>>>0>>0)if(!e){d=0;c=i;a=i;v=61;break a}else{a=i;d=e}e=f[i+20>>2]|0;i=f[i+16+(h>>>31<<2)>>2]|0;c=(e|0)==0|(e|0)==(i|0)?c:e;e=(i|0)==0;if(e){v=57;break}else h=h<<((e^1)&1)}}while(0);if((v|0)==57){if((c|0)==0&(a|0)==0){a=2<>>12&16;n=n>>>i;h=n>>>5&8;n=n>>>h;j=n>>>2&4;n=n>>>j;m=n>>>1&2;n=n>>>m;c=n>>>1&1;a=0;c=f[25040+((h|i|j|m|c)+(n>>>c)<<2)>>2]|0}if(!c){i=a;h=d}else v=61}if((v|0)==61)while(1){v=0;m=(f[c+4>>2]&-8)-l|0;n=m>>>0>>0;d=n?m:d;a=n?c:a;c=f[c+16+(((f[c+16>>2]|0)==0&1)<<2)>>2]|0;if(!c){i=a;h=d;break}else v=61}if((i|0)!=0?h>>>0<((f[6186]|0)-l|0)>>>0:0){g=i+l|0;if(g>>>0<=i>>>0){w=0;u=x;return w|0}e=f[i+24>>2]|0;b=f[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=f[a>>2]|0;if(!b){a=i+16|0;b=f[a>>2]|0;if(!b){b=0;break}}while(1){c=b+20|0;d=f[c>>2]|0;if(d|0){b=d;a=c;continue}c=b+16|0;d=f[c>>2]|0;if(!d)break;else{b=d;a=c}}f[a>>2]=0}else{w=f[i+8>>2]|0;f[w+12>>2]=b;f[b+8>>2]=w}while(0);do if(e){a=f[i+28>>2]|0;c=25040+(a<<2)|0;if((i|0)==(f[c>>2]|0)){f[c>>2]=b;if(!b){d=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){d=k;break}}f[b+24>>2]=e;a=f[i+16>>2]|0;if(a|0){f[b+16>>2]=a;f[a+24>>2]=b}a=f[i+20>>2]|0;if(a){f[b+20>>2]=a;f[a+24>>2]=b;d=k}else d=k}else d=k;while(0);do if(h>>>0>=16){f[i+4>>2]=l|3;f[g+4>>2]=h|1;f[g+h>>2]=h;b=h>>>3;if(h>>>0<256){c=24776+(b<<1<<2)|0;a=f[6184]|0;b=1<>2]|0}f[a>>2]=g;f[b+12>>2]=g;f[g+8>>2]=b;f[g+12>>2]=c;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(t|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;c=25040+(b<<2)|0;f[g+28>>2]=b;a=g+16|0;f[a+4>>2]=0;f[a>>2]=0;a=1<>2]=g;f[g+24>>2]=c;f[g+12>>2]=g;f[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);c=f[c>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(h|0)){v=97;break}d=c+16+(a>>>31<<2)|0;b=f[d>>2]|0;if(!b){v=96;break}else{a=a<<1;c=b}}if((v|0)==96){f[d>>2]=g;f[g+24>>2]=c;f[g+12>>2]=g;f[g+8>>2]=g;break}else if((v|0)==97){v=c+8|0;w=f[v>>2]|0;f[w+12>>2]=g;f[v>>2]=g;f[g+8>>2]=w;f[g+12>>2]=c;f[g+24>>2]=0;break}}else{w=h+l|0;f[i+4>>2]=w|3;w=i+w+4|0;f[w>>2]=f[w>>2]|1}while(0);w=i+8|0;u=x;return w|0}else m=l}else m=l}else m=-1;while(0);c=f[6186]|0;if(c>>>0>=m>>>0){b=c-m|0;a=f[6189]|0;if(b>>>0>15){w=a+m|0;f[6189]=w;f[6186]=b;f[w+4>>2]=b|1;f[a+c>>2]=b;f[a+4>>2]=m|3}else{f[6186]=0;f[6189]=0;f[a+4>>2]=c|3;w=a+c+4|0;f[w>>2]=f[w>>2]|1}w=a+8|0;u=x;return w|0}i=f[6187]|0;if(i>>>0>m>>>0){t=i-m|0;f[6187]=t;w=f[6190]|0;v=w+m|0;f[6190]=v;f[v+4>>2]=t|1;f[w+4>>2]=m|3;w=w+8|0;u=x;return w|0}if(!(f[6302]|0)){f[6304]=4096;f[6303]=4096;f[6305]=-1;f[6306]=-1;f[6307]=0;f[6295]=0;f[6302]=o&-16^1431655768;a=4096}else a=f[6304]|0;j=m+48|0;k=m+47|0;h=a+k|0;e=0-a|0;l=h&e;if(l>>>0<=m>>>0){w=0;u=x;return w|0}a=f[6294]|0;if(a|0?(n=f[6292]|0,o=n+l|0,o>>>0<=n>>>0|o>>>0>a>>>0):0){w=0;u=x;return w|0}b:do if(!(f[6295]&4)){c=f[6190]|0;c:do if(c){d=25184;while(1){a=f[d>>2]|0;if(a>>>0<=c>>>0?(r=d+4|0,(a+(f[r>>2]|0)|0)>>>0>c>>>0):0)break;a=f[d+8>>2]|0;if(!a){v=118;break c}else d=a}b=h-i&e;if(b>>>0<2147483647){a=lj(b|0)|0;if((a|0)==((f[d>>2]|0)+(f[r>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{d=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){c=lj(0)|0;if((c|0)!=(-1|0)?(b=c,p=f[6303]|0,q=p+-1|0,b=((q&b|0)==0?0:(q+b&0-p)-b|0)+l|0,p=f[6292]|0,q=b+p|0,b>>>0>m>>>0&b>>>0<2147483647):0){r=f[6294]|0;if(r|0?q>>>0<=p>>>0|q>>>0>r>>>0:0){b=0;break}a=lj(b|0)|0;if((a|0)==(c|0)){h=b;g=c;v=135;break b}else{d=a;v=126}}else b=0}while(0);do if((v|0)==126){c=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(d|0)!=(-1|0))))if((d|0)==(-1|0)){b=0;break}else{h=b;g=d;v=135;break b}a=f[6304]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=d;v=135;break b}if((lj(a|0)|0)==(-1|0)){lj(c|0)|0;b=0;break}else{h=a+b|0;g=d;v=135;break b}}while(0);f[6295]=f[6295]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?l>>>0<2147483647:0)?(g=lj(l|0)|0,r=lj(0)|0,s=r-g|0,t=s>>>0>(m+40|0)>>>0,!((g|0)==(-1|0)|t^1|g>>>0>>0&((g|0)!=(-1|0)&(r|0)!=(-1|0))^1)):0){h=t?s:b;v=135}if((v|0)==135){b=(f[6292]|0)+h|0;f[6292]=b;if(b>>>0>(f[6293]|0)>>>0)f[6293]=b;j=f[6190]|0;do if(j){b=25184;while(1){a=f[b>>2]|0;c=b+4|0;d=f[c>>2]|0;if((g|0)==(a+d|0)){v=143;break}e=f[b+8>>2]|0;if(!e)break;else b=e}if(((v|0)==143?(f[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){f[c>>2]=d+h;w=(f[6187]|0)+h|0;t=j+8|0;t=(t&7|0)==0?0:0-t&7;v=j+t|0;t=w-t|0;f[6190]=v;f[6187]=t;f[v+4>>2]=t|1;f[j+w+4>>2]=40;f[6191]=f[6306];break}if(g>>>0<(f[6188]|0)>>>0)f[6188]=g;a=g+h|0;b=25184;while(1){if((f[b>>2]|0)==(a|0)){v=151;break}b=f[b+8>>2]|0;if(!b){a=25184;break}}if((v|0)==151)if(!(f[b+12>>2]&8)){f[b>>2]=g;l=b+4|0;f[l>>2]=(f[l>>2]|0)+h;l=g+8|0;l=g+((l&7|0)==0?0:0-l&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=l+m|0;i=b-l-m|0;f[l+4>>2]=m|3;do if((j|0)!=(b|0)){if((f[6189]|0)==(b|0)){w=(f[6186]|0)+i|0;f[6186]=w;f[6189]=k;f[k+4>>2]=w|1;f[k+w>>2]=w;break}a=f[b+4>>2]|0;if((a&3|0)==1){h=a&-8;d=a>>>3;d:do if(a>>>0<256){a=f[b+8>>2]|0;c=f[b+12>>2]|0;if((c|0)==(a|0)){f[6184]=f[6184]&~(1<>2]=c;f[c+8>>2]=a;break}}else{g=f[b+24>>2]|0;a=f[b+12>>2]|0;do if((a|0)==(b|0)){d=b+16|0;c=d+4|0;a=f[c>>2]|0;if(!a){a=f[d>>2]|0;if(!a){a=0;break}else c=d}while(1){d=a+20|0;e=f[d>>2]|0;if(e|0){a=e;c=d;continue}d=a+16|0;e=f[d>>2]|0;if(!e)break;else{a=e;c=d}}f[c>>2]=0}else{w=f[b+8>>2]|0;f[w+12>>2]=a;f[a+8>>2]=w}while(0);if(!g)break;c=f[b+28>>2]|0;d=25040+(c<<2)|0;do if((f[d>>2]|0)!=(b|0)){f[g+16+(((f[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{f[d>>2]=a;if(a|0)break;f[6185]=f[6185]&~(1<>2]=g;c=b+16|0;d=f[c>>2]|0;if(d|0){f[a+16>>2]=d;f[d+24>>2]=a}c=f[c+4>>2]|0;if(!c)break;f[a+20>>2]=c;f[c+24>>2]=a}while(0);b=b+h|0;e=h+i|0}else e=i;b=b+4|0;f[b>>2]=f[b>>2]&-2;f[k+4>>2]=e|1;f[k+e>>2]=e;b=e>>>3;if(e>>>0<256){c=24776+(b<<1<<2)|0;a=f[6184]|0;b=1<>2]|0}f[a>>2]=k;f[b+12>>2]=k;f[k+8>>2]=b;f[k+12>>2]=c;break}b=e>>>8;do if(!b)b=0;else{if(e>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(t|v|b)+(w<>>15)|0;b=e>>>(b+7|0)&1|b<<1}while(0);d=25040+(b<<2)|0;f[k+28>>2]=b;a=k+16|0;f[a+4>>2]=0;f[a>>2]=0;a=f[6185]|0;c=1<>2]=k;f[k+24>>2]=d;f[k+12>>2]=k;f[k+8>>2]=k;break}a=e<<((b|0)==31?0:25-(b>>>1)|0);c=f[d>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(e|0)){v=192;break}d=c+16+(a>>>31<<2)|0;b=f[d>>2]|0;if(!b){v=191;break}else{a=a<<1;c=b}}if((v|0)==191){f[d>>2]=k;f[k+24>>2]=c;f[k+12>>2]=k;f[k+8>>2]=k;break}else if((v|0)==192){v=c+8|0;w=f[v>>2]|0;f[w+12>>2]=k;f[v>>2]=k;f[k+8>>2]=w;f[k+12>>2]=c;f[k+24>>2]=0;break}}else{w=(f[6187]|0)+i|0;f[6187]=w;f[6190]=k;f[k+4>>2]=w|1}while(0);w=l+8|0;u=x;return w|0}else a=25184;while(1){b=f[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(f[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=f[a+8>>2]|0}e=w+-47|0;a=e+8|0;a=e+((a&7|0)==0?0:0-a&7)|0;e=j+16|0;a=a>>>0>>0?j:a;b=a+8|0;c=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;v=g+t|0;t=c-t|0;f[6190]=v;f[6187]=t;f[v+4>>2]=t|1;f[g+c+4>>2]=40;f[6191]=f[6306];c=a+4|0;f[c>>2]=27;f[b>>2]=f[6296];f[b+4>>2]=f[6297];f[b+8>>2]=f[6298];f[b+12>>2]=f[6299];f[6296]=g;f[6297]=h;f[6299]=0;f[6298]=b;b=a+24|0;do{v=b;b=b+4|0;f[b>>2]=7}while((v+8|0)>>>0>>0);if((a|0)!=(j|0)){g=a-j|0;f[c>>2]=f[c>>2]&-2;f[j+4>>2]=g|1;f[a>>2]=g;b=g>>>3;if(g>>>0<256){c=24776+(b<<1<<2)|0;a=f[6184]|0;b=1<>2]|0}f[a>>2]=j;f[b+12>>2]=j;f[j+8>>2]=b;f[j+12>>2]=c;break}b=g>>>8;if(b)if(g>>>0>16777215)c=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;c=14-(t|v|c)+(w<>>15)|0;c=g>>>(c+7|0)&1|c<<1}else c=0;d=25040+(c<<2)|0;f[j+28>>2]=c;f[j+20>>2]=0;f[e>>2]=0;b=f[6185]|0;a=1<>2]=j;f[j+24>>2]=d;f[j+12>>2]=j;f[j+8>>2]=j;break}a=g<<((c|0)==31?0:25-(c>>>1)|0);c=f[d>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(g|0)){v=213;break}d=c+16+(a>>>31<<2)|0;b=f[d>>2]|0;if(!b){v=212;break}else{a=a<<1;c=b}}if((v|0)==212){f[d>>2]=j;f[j+24>>2]=c;f[j+12>>2]=j;f[j+8>>2]=j;break}else if((v|0)==213){v=c+8|0;w=f[v>>2]|0;f[w+12>>2]=j;f[v>>2]=j;f[j+8>>2]=w;f[j+12>>2]=c;f[j+24>>2]=0;break}}}else{w=f[6188]|0;if((w|0)==0|g>>>0>>0)f[6188]=g;f[6296]=g;f[6297]=h;f[6299]=0;f[6193]=f[6302];f[6192]=-1;f[6197]=24776;f[6196]=24776;f[6199]=24784;f[6198]=24784;f[6201]=24792;f[6200]=24792;f[6203]=24800;f[6202]=24800;f[6205]=24808;f[6204]=24808;f[6207]=24816;f[6206]=24816;f[6209]=24824;f[6208]=24824;f[6211]=24832;f[6210]=24832;f[6213]=24840;f[6212]=24840;f[6215]=24848;f[6214]=24848;f[6217]=24856;f[6216]=24856;f[6219]=24864;f[6218]=24864;f[6221]=24872;f[6220]=24872;f[6223]=24880;f[6222]=24880;f[6225]=24888;f[6224]=24888;f[6227]=24896;f[6226]=24896;f[6229]=24904;f[6228]=24904;f[6231]=24912;f[6230]=24912;f[6233]=24920;f[6232]=24920;f[6235]=24928;f[6234]=24928;f[6237]=24936;f[6236]=24936;f[6239]=24944;f[6238]=24944;f[6241]=24952;f[6240]=24952;f[6243]=24960;f[6242]=24960;f[6245]=24968;f[6244]=24968;f[6247]=24976;f[6246]=24976;f[6249]=24984;f[6248]=24984;f[6251]=24992;f[6250]=24992;f[6253]=25e3;f[6252]=25e3;f[6255]=25008;f[6254]=25008;f[6257]=25016;f[6256]=25016;f[6259]=25024;f[6258]=25024;w=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;v=g+t|0;t=w-t|0;f[6190]=v;f[6187]=t;f[v+4>>2]=t|1;f[g+w+4>>2]=40;f[6191]=f[6306]}while(0);b=f[6187]|0;if(b>>>0>m>>>0){t=b-m|0;f[6187]=t;w=f[6190]|0;v=w+m|0;f[6190]=v;f[v+4>>2]=t|1;f[w+4>>2]=m|3;w=w+8|0;u=x;return w|0}}w=Eh()|0;f[w>>2]=12;w=0;u=x;return w|0}function th(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0;if(!a)return;c=a+-8|0;e=f[6188]|0;a=f[a+-4>>2]|0;b=a&-8;j=c+b|0;do if(!(a&1)){d=f[c>>2]|0;if(!(a&3))return;h=c+(0-d)|0;g=d+b|0;if(h>>>0>>0)return;if((f[6189]|0)==(h|0)){a=j+4|0;b=f[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}f[6186]=g;f[a>>2]=b&-2;f[h+4>>2]=g|1;f[h+g>>2]=g;return}c=d>>>3;if(d>>>0<256){a=f[h+8>>2]|0;b=f[h+12>>2]|0;if((b|0)==(a|0)){f[6184]=f[6184]&~(1<>2]=b;f[b+8>>2]=a;i=h;b=g;break}}e=f[h+24>>2]|0;a=f[h+12>>2]|0;do if((a|0)==(h|0)){c=h+16|0;b=c+4|0;a=f[b>>2]|0;if(!a){a=f[c>>2]|0;if(!a){a=0;break}else b=c}while(1){c=a+20|0;d=f[c>>2]|0;if(d|0){a=d;b=c;continue}c=a+16|0;d=f[c>>2]|0;if(!d)break;else{a=d;b=c}}f[b>>2]=0}else{i=f[h+8>>2]|0;f[i+12>>2]=a;f[a+8>>2]=i}while(0);if(e){b=f[h+28>>2]|0;c=25040+(b<<2)|0;if((f[c>>2]|0)==(h|0)){f[c>>2]=a;if(!a){f[6185]=f[6185]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a){i=h;b=g;break}}f[a+24>>2]=e;b=h+16|0;c=f[b>>2]|0;if(c|0){f[a+16>>2]=c;f[c+24>>2]=a}b=f[b+4>>2]|0;if(b){f[a+20>>2]=b;f[b+24>>2]=a;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=c;h=c}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;d=f[a>>2]|0;if(!(d&1))return;if(!(d&2)){if((f[6190]|0)==(j|0)){j=(f[6187]|0)+b|0;f[6187]=j;f[6190]=i;f[i+4>>2]=j|1;if((i|0)!=(f[6189]|0))return;f[6189]=0;f[6186]=0;return}if((f[6189]|0)==(j|0)){j=(f[6186]|0)+b|0;f[6186]=j;f[6189]=h;f[i+4>>2]=j|1;f[h+j>>2]=j;return}e=(d&-8)+b|0;c=d>>>3;do if(d>>>0<256){b=f[j+8>>2]|0;a=f[j+12>>2]|0;if((a|0)==(b|0)){f[6184]=f[6184]&~(1<>2]=a;f[a+8>>2]=b;break}}else{g=f[j+24>>2]|0;a=f[j+12>>2]|0;do if((a|0)==(j|0)){c=j+16|0;b=c+4|0;a=f[b>>2]|0;if(!a){a=f[c>>2]|0;if(!a){c=0;break}else b=c}while(1){c=a+20|0;d=f[c>>2]|0;if(d|0){a=d;b=c;continue}c=a+16|0;d=f[c>>2]|0;if(!d)break;else{a=d;b=c}}f[b>>2]=0;c=a}else{c=f[j+8>>2]|0;f[c+12>>2]=a;f[a+8>>2]=c;c=a}while(0);if(g|0){a=f[j+28>>2]|0;b=25040+(a<<2)|0;if((f[b>>2]|0)==(j|0)){f[b>>2]=c;if(!c){f[6185]=f[6185]&~(1<>2]|0)!=(j|0)&1)<<2)>>2]=c;if(!c)break}f[c+24>>2]=g;a=j+16|0;b=f[a>>2]|0;if(b|0){f[c+16>>2]=b;f[b+24>>2]=c}a=f[a+4>>2]|0;if(a|0){f[c+20>>2]=a;f[a+24>>2]=c}}}while(0);f[i+4>>2]=e|1;f[h+e>>2]=e;if((i|0)==(f[6189]|0)){f[6186]=e;return}}else{f[a>>2]=d&-2;f[i+4>>2]=b|1;f[h+b>>2]=b;e=b}a=e>>>3;if(e>>>0<256){c=24776+(a<<1<<2)|0;b=f[6184]|0;a=1<>2]|0}f[b>>2]=i;f[a+12>>2]=i;f[i+8>>2]=a;f[i+12>>2]=c;return}a=e>>>8;if(a)if(e>>>0>16777215)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=e>>>(a+7|0)&1|a<<1}else a=0;d=25040+(a<<2)|0;f[i+28>>2]=a;f[i+20>>2]=0;f[i+16>>2]=0;b=f[6185]|0;c=1<>>1)|0);c=f[d>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(e|0)){a=73;break}d=c+16+(b>>>31<<2)|0;a=f[d>>2]|0;if(!a){a=72;break}else{b=b<<1;c=a}}if((a|0)==72){f[d>>2]=i;f[i+24>>2]=c;f[i+12>>2]=i;f[i+8>>2]=i;break}else if((a|0)==73){h=c+8|0;j=f[h>>2]|0;f[j+12>>2]=i;f[h>>2]=i;f[i+8>>2]=j;f[i+12>>2]=c;f[i+24>>2]=0;break}}else{f[6185]=b|c;f[d>>2]=i;f[i+24>>2]=d;f[i+12>>2]=i;f[i+8>>2]=i}while(0);j=(f[6192]|0)+-1|0;f[6192]=j;if(!j)a=25192;else return;while(1){a=f[a>>2]|0;if(!a)break;else a=a+8|0}f[6192]=-1;return}function uh(a,b){a=a|0;b=b|0;var c=0;if(a){c=X(b,a)|0;if((b|a)>>>0>65535)c=((c>>>0)/(a>>>0)|0|0)==(b|0)?c:-1}else c=0;a=sh(c)|0;if(!a)return a|0;if(!(f[a+-4>>2]&3))return a|0;ij(a|0,0,c|0)|0;return a|0}function vh(a,b){a=a|0;b=b|0;var c=0,d=0;if(!a){b=sh(b)|0;return b|0}if(b>>>0>4294967231){b=Eh()|0;f[b>>2]=12;b=0;return b|0}c=wh(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(c|0){b=c+8|0;return b|0}c=sh(b)|0;if(!c){b=0;return b|0}d=f[a+-4>>2]|0;d=(d&-8)-((d&3|0)==0?8:4)|0;hj(c|0,a|0,(d>>>0>>0?d:b)|0)|0;th(a);b=c;return b|0}function wh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=a+4|0;m=f[l>>2]|0;c=m&-8;i=a+c|0;if(!(m&3)){if(b>>>0<256){a=0;return a|0}if(c>>>0>=(b+4|0)>>>0?(c-b|0)>>>0<=f[6304]<<1>>>0:0)return a|0;a=0;return a|0}if(c>>>0>=b>>>0){c=c-b|0;if(c>>>0<=15)return a|0;k=a+b|0;f[l>>2]=m&1|b|2;f[k+4>>2]=c|3;m=i+4|0;f[m>>2]=f[m>>2]|1;xh(k,c);return a|0}if((f[6190]|0)==(i|0)){k=(f[6187]|0)+c|0;c=k-b|0;d=a+b|0;if(k>>>0<=b>>>0){a=0;return a|0}f[l>>2]=m&1|b|2;f[d+4>>2]=c|1;f[6190]=d;f[6187]=c;return a|0}if((f[6189]|0)==(i|0)){d=(f[6186]|0)+c|0;if(d>>>0>>0){a=0;return a|0}c=d-b|0;if(c>>>0>15){k=a+b|0;d=a+d|0;f[l>>2]=m&1|b|2;f[k+4>>2]=c|1;f[d>>2]=c;d=d+4|0;f[d>>2]=f[d>>2]&-2;d=k}else{f[l>>2]=m&1|d|2;d=a+d+4|0;f[d>>2]=f[d>>2]|1;d=0;c=0}f[6186]=c;f[6189]=d;return a|0}d=f[i+4>>2]|0;if(d&2|0){a=0;return a|0}j=(d&-8)+c|0;if(j>>>0>>0){a=0;return a|0}k=j-b|0;e=d>>>3;do if(d>>>0<256){d=f[i+8>>2]|0;c=f[i+12>>2]|0;if((c|0)==(d|0)){f[6184]=f[6184]&~(1<>2]=c;f[c+8>>2]=d;break}}else{h=f[i+24>>2]|0;c=f[i+12>>2]|0;do if((c|0)==(i|0)){e=i+16|0;d=e+4|0;c=f[d>>2]|0;if(!c){c=f[e>>2]|0;if(!c){e=0;break}else g=e}else g=d;while(1){e=c+20|0;d=f[e>>2]|0;if(d|0){c=d;g=e;continue}d=c+16|0;e=f[d>>2]|0;if(!e)break;else{c=e;g=d}}f[g>>2]=0;e=c}else{e=f[i+8>>2]|0;f[e+12>>2]=c;f[c+8>>2]=e;e=c}while(0);if(h|0){c=f[i+28>>2]|0;d=25040+(c<<2)|0;if((f[d>>2]|0)==(i|0)){f[d>>2]=e;if(!e){f[6185]=f[6185]&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=e;if(!e)break}f[e+24>>2]=h;c=i+16|0;d=f[c>>2]|0;if(d|0){f[e+16>>2]=d;f[d+24>>2]=e}c=f[c+4>>2]|0;if(c|0){f[e+20>>2]=c;f[c+24>>2]=e}}}while(0);if(k>>>0<16){f[l>>2]=j|m&1|2;m=a+j+4|0;f[m>>2]=f[m>>2]|1;return a|0}else{i=a+b|0;f[l>>2]=m&1|b|2;f[i+4>>2]=k|3;m=a+j+4|0;f[m>>2]=f[m>>2]|1;xh(i,k);return a|0}return 0}function xh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0;i=a+b|0;c=f[a+4>>2]|0;do if(!(c&1)){e=f[a>>2]|0;if(!(c&3))return;h=a+(0-e)|0;b=e+b|0;if((f[6189]|0)==(h|0)){a=i+4|0;c=f[a>>2]|0;if((c&3|0)!=3)break;f[6186]=b;f[a>>2]=c&-2;f[h+4>>2]=b|1;f[i>>2]=b;return}d=e>>>3;if(e>>>0<256){a=f[h+8>>2]|0;c=f[h+12>>2]|0;if((c|0)==(a|0)){f[6184]=f[6184]&~(1<>2]=c;f[c+8>>2]=a;break}}g=f[h+24>>2]|0;a=f[h+12>>2]|0;do if((a|0)==(h|0)){d=h+16|0;c=d+4|0;a=f[c>>2]|0;if(!a){a=f[d>>2]|0;if(!a){a=0;break}else c=d}while(1){d=a+20|0;e=f[d>>2]|0;if(e|0){a=e;c=d;continue}d=a+16|0;e=f[d>>2]|0;if(!e)break;else{a=e;c=d}}f[c>>2]=0}else{e=f[h+8>>2]|0;f[e+12>>2]=a;f[a+8>>2]=e}while(0);if(g){c=f[h+28>>2]|0;d=25040+(c<<2)|0;if((f[d>>2]|0)==(h|0)){f[d>>2]=a;if(!a){f[6185]=f[6185]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a)break}f[a+24>>2]=g;c=h+16|0;d=f[c>>2]|0;if(d|0){f[a+16>>2]=d;f[d+24>>2]=a}c=f[c+4>>2]|0;if(c){f[a+20>>2]=c;f[c+24>>2]=a}}}else h=a;while(0);a=i+4|0;d=f[a>>2]|0;if(!(d&2)){if((f[6190]|0)==(i|0)){i=(f[6187]|0)+b|0;f[6187]=i;f[6190]=h;f[h+4>>2]=i|1;if((h|0)!=(f[6189]|0))return;f[6189]=0;f[6186]=0;return}if((f[6189]|0)==(i|0)){i=(f[6186]|0)+b|0;f[6186]=i;f[6189]=h;f[h+4>>2]=i|1;f[h+i>>2]=i;return}e=(d&-8)+b|0;c=d>>>3;do if(d>>>0<256){a=f[i+8>>2]|0;b=f[i+12>>2]|0;if((b|0)==(a|0)){f[6184]=f[6184]&~(1<>2]=b;f[b+8>>2]=a;break}}else{g=f[i+24>>2]|0;b=f[i+12>>2]|0;do if((b|0)==(i|0)){c=i+16|0;a=c+4|0;b=f[a>>2]|0;if(!b){b=f[c>>2]|0;if(!b){c=0;break}else a=c}while(1){c=b+20|0;d=f[c>>2]|0;if(d|0){b=d;a=c;continue}c=b+16|0;d=f[c>>2]|0;if(!d)break;else{b=d;a=c}}f[a>>2]=0;c=b}else{c=f[i+8>>2]|0;f[c+12>>2]=b;f[b+8>>2]=c;c=b}while(0);if(g|0){b=f[i+28>>2]|0;a=25040+(b<<2)|0;if((f[a>>2]|0)==(i|0)){f[a>>2]=c;if(!c){f[6185]=f[6185]&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=c;if(!c)break}f[c+24>>2]=g;b=i+16|0;a=f[b>>2]|0;if(a|0){f[c+16>>2]=a;f[a+24>>2]=c}b=f[b+4>>2]|0;if(b|0){f[c+20>>2]=b;f[b+24>>2]=c}}}while(0);f[h+4>>2]=e|1;f[h+e>>2]=e;if((h|0)==(f[6189]|0)){f[6186]=e;return}}else{f[a>>2]=d&-2;f[h+4>>2]=b|1;f[h+b>>2]=b;e=b}b=e>>>3;if(e>>>0<256){c=24776+(b<<1<<2)|0;a=f[6184]|0;b=1<>2]|0}f[a>>2]=h;f[b+12>>2]=h;f[h+8>>2]=b;f[h+12>>2]=c;return}b=e>>>8;if(b)if(e>>>0>16777215)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(d|g|b)+(i<>>15)|0;b=e>>>(b+7|0)&1|b<<1}else b=0;d=25040+(b<<2)|0;f[h+28>>2]=b;f[h+20>>2]=0;f[h+16>>2]=0;a=f[6185]|0;c=1<>2]=h;f[h+24>>2]=d;f[h+12>>2]=h;f[h+8>>2]=h;return}a=e<<((b|0)==31?0:25-(b>>>1)|0);c=f[d>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(e|0)){b=69;break}d=c+16+(a>>>31<<2)|0;b=f[d>>2]|0;if(!b){b=68;break}else{a=a<<1;c=b}}if((b|0)==68){f[d>>2]=h;f[h+24>>2]=c;f[h+12>>2]=h;f[h+8>>2]=h;return}else if((b|0)==69){g=c+8|0;i=f[g>>2]|0;f[i+12>>2]=h;f[g>>2]=h;f[h+8>>2]=i;f[h+12>>2]=c;f[h+24>>2]=0;return}}function yh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0;a=a>>>0>16?a:16;if(a+-1&a){c=16;while(1)if(c>>>0>>0)c=c<<1;else{a=c;break}}if((-64-a|0)>>>0<=b>>>0){h=Eh()|0;f[h>>2]=12;h=0;return h|0}g=b>>>0<11?16:b+11&-8;c=sh(g+12+a|0)|0;if(!c){h=0;return h|0}e=c+-8|0;do if(a+-1&c){d=(c+a+-1&0-a)+-8|0;b=e;d=(d-b|0)>>>0>15?d:d+a|0;b=d-b|0;a=c+-4|0;i=f[a>>2]|0;c=(i&-8)-b|0;if(!(i&3)){f[d>>2]=(f[e>>2]|0)+b;f[d+4>>2]=c;a=d;b=d;break}else{i=d+4|0;f[i>>2]=c|f[i>>2]&1|2;c=d+c+4|0;f[c>>2]=f[c>>2]|1;f[a>>2]=b|f[a>>2]&1|2;f[i>>2]=f[i>>2]|1;xh(e,b);a=d;b=d;break}}else{a=e;b=e}while(0);a=a+4|0;c=f[a>>2]|0;if(c&3|0?(h=c&-8,h>>>0>(g+16|0)>>>0):0){i=h-g|0;e=b+g|0;f[a>>2]=g|c&1|2;f[e+4>>2]=i|3;h=b+h+4|0;f[h>>2]=f[h>>2]|1;xh(e,i)}i=b+8|0;return i|0}function zh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;do if((b|0)!=8){d=b>>>2;if((b&3|0)!=0|(d|0)==0){a=22;return a|0}if(d+1073741823&d|0){a=22;return a|0}if((-64-b|0)>>>0>>0){a=12;return a|0}else{b=yh(b>>>0>16?b:16,c)|0;break}}else b=sh(c)|0;while(0);if(!b){a=12;return a|0}f[a>>2]=b;a=0;return a|0}function Ah(a){a=a|0;var b=0,c=0;b=u;u=u+16|0;c=b;a=Fh(f[a+60>>2]|0)|0;f[c>>2]=a;a=Dh(za(6,c|0)|0)|0;u=b;return a|0}function Bh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=u;u=u+48|0;k=m+16|0;g=m;e=m+32|0;i=a+28|0;d=f[i>>2]|0;f[e>>2]=d;j=a+20|0;d=(f[j>>2]|0)-d|0;f[e+4>>2]=d;f[e+8>>2]=b;f[e+12>>2]=c;d=d+c|0;h=a+60|0;f[g>>2]=f[h>>2];f[g+4>>2]=e;f[g+8>>2]=2;g=Dh(va(146,g|0)|0)|0;a:do if((d|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;d=d-g|0;o=f[e+4>>2]|0;n=g>>>0>o>>>0;e=n?e+8|0:e;b=b+(n<<31>>31)|0;o=g-(n?o:0)|0;f[e>>2]=(f[e>>2]|0)+o;n=e+4|0;f[n>>2]=(f[n>>2]|0)-o;f[k>>2]=f[h>>2];f[k+4>>2]=e;f[k+8>>2]=b;g=Dh(va(146,k|0)|0)|0;if((d|0)==(g|0)){l=3;break a}}f[a+16>>2]=0;f[i>>2]=0;f[j>>2]=0;f[a>>2]=f[a>>2]|32;if((b|0)==2)c=0;else c=c-(f[e+4>>2]|0)|0}else l=3;while(0);if((l|0)==3){o=f[a+44>>2]|0;f[a+16>>2]=o+(f[a+48>>2]|0);f[i>>2]=o;f[j>>2]=o}u=m;return c|0}function Ch(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;e=u;u=u+32|0;g=e;d=e+20|0;f[g>>2]=f[a+60>>2];f[g+4>>2]=0;f[g+8>>2]=b;f[g+12>>2]=d;f[g+16>>2]=c;if((Dh(ta(140,g|0)|0)|0)<0){f[d>>2]=-1;a=-1}else a=f[d>>2]|0;u=e;return a|0}function Dh(a){a=a|0;var b=0;if(a>>>0>4294963200){b=Eh()|0;f[b>>2]=0-a;a=-1}return a|0}function Eh(){return 25296}function Fh(a){a=a|0;return a|0}function Gh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;k=u;u=u+32|0;e=k;i=k+16|0;f[i>>2]=c;g=i+4|0;j=a+48|0;l=f[j>>2]|0;f[g>>2]=d-((l|0)!=0&1);h=a+44|0;f[i+8>>2]=f[h>>2];f[i+12>>2]=l;f[e>>2]=f[a+60>>2];f[e+4>>2]=i;f[e+8>>2]=2;e=Dh(ua(145,e|0)|0)|0;if((e|0)>=1){i=f[g>>2]|0;if(e>>>0>i>>>0){g=f[h>>2]|0;h=a+4|0;f[h>>2]=g;f[a+8>>2]=g+(e-i);if(!(f[j>>2]|0))e=d;else{f[h>>2]=g+1;b[c+(d+-1)>>0]=b[g>>0]|0;e=d}}}else f[a>>2]=f[a>>2]|e&48^16;u=k;return e|0}function Hh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0;g=u;u=u+32|0;e=g;f[a+36>>2]=61;if((f[a>>2]&64|0)==0?(f[e>>2]=f[a+60>>2],f[e+4>>2]=21523,f[e+8>>2]=g+16,ya(54,e|0)|0):0)b[a+75>>0]=-1;e=Bh(a,c,d)|0;u=g;return e|0}function Ih(){return 2792}function Jh(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a>>0]|0;e=b[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24)a=e;else{do{a=a+1|0;c=c+1|0;d=b[a>>0]|0;e=b[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));a=e}return (d&255)-(a&255)|0}function Kh(a){a=a|0;var c=0,d=0,e=0;e=a;a:do if(!(e&3))d=4;else{c=e;while(1){if(!(b[a>>0]|0)){a=c;break a}a=a+1|0;c=a;if(!(c&3)){d=4;break}}}while(0);if((d|0)==4){while(1){c=f[a>>2]|0;if(!((c&-2139062144^-2139062144)&c+-16843009))a=a+4|0;else break}if((c&255)<<24>>24)do a=a+1|0;while((b[a>>0]|0)!=0)}return a-e|0}function Lh(a,b){a=a|0;b=b|0;var c=0;c=Kh(a)|0;return ((Mh(a,1,c,b)|0)!=(c|0))<<31>>31|0}function Mh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;e=X(c,b)|0;c=(b|0)==0?0:c;if((f[d+76>>2]|0)>-1){g=(Qh(d)|0)==0;a=Th(a,e,d)|0;if(!g)Oh(d)}else a=Th(a,e,d)|0;if((a|0)!=(e|0))c=(a>>>0)/(b>>>0)|0;return c|0}function Nh(a){a=a|0;var b=0;if(f[a+68>>2]|0){b=f[a+116>>2]|0;a=a+112|0;if(b|0)f[b+112>>2]=f[a>>2];a=f[a>>2]|0;if(!a)a=(Ph()|0)+232|0;else a=a+116|0;f[a>>2]=b}return}function Oh(a){a=a|0;return}function Ph(){return Ih()|0}function Qh(a){a=a|0;return 0}function Rh(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0;l=u;u=u+16|0;j=l;k=c&255;b[j>>0]=k;e=a+16|0;g=f[e>>2]|0;if(!g)if(!(Sh(a)|0)){g=f[e>>2]|0;i=4}else d=-1;else i=4;do if((i|0)==4){i=a+20|0;e=f[i>>2]|0;if(e>>>0>>0?(d=c&255,(d|0)!=(b[a+75>>0]|0)):0){f[i>>2]=e+1;b[e>>0]=k;break}if((Ma[f[a+36>>2]&63](a,j,1)|0)==1)d=h[j>>0]|0;else d=-1}while(0);u=l;return d|0}function Sh(a){a=a|0;var c=0,d=0;c=a+74|0;d=b[c>>0]|0;b[c>>0]=d+255|d;c=f[a>>2]|0;if(!(c&8)){f[a+8>>2]=0;f[a+4>>2]=0;d=f[a+44>>2]|0;f[a+28>>2]=d;f[a+20>>2]=d;f[a+16>>2]=d+(f[a+48>>2]|0);a=0}else{f[a>>2]=c|32;a=-1}return a|0}function Th(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;e=d+16|0;g=f[e>>2]|0;if(!g)if(!(Sh(d)|0)){g=f[e>>2]|0;h=5}else e=0;else h=5;a:do if((h|0)==5){j=d+20|0;i=f[j>>2]|0;e=i;if((g-i|0)>>>0>>0){e=Ma[f[d+36>>2]&63](d,a,c)|0;break}b:do if((b[d+75>>0]|0)>-1){i=c;while(1){if(!i){h=0;g=a;break b}g=i+-1|0;if((b[a+g>>0]|0)==10)break;else i=g}e=Ma[f[d+36>>2]&63](d,a,i)|0;if(e>>>0>>0)break a;h=i;g=a+i|0;c=c-i|0;e=f[j>>2]|0}else{h=0;g=a}while(0);hj(e|0,g|0,c|0)|0;f[j>>2]=(f[j>>2]|0)+c;e=h+c|0}while(0);return e|0}function Uh(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Vh(f[b>>2]|0,f[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Vh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(f[a>>2]|0)+1794895138|0;h=Wh(f[a+8>>2]|0,o)|0;e=Wh(f[a+12>>2]|0,o)|0;g=Wh(f[a+16>>2]|0,o)|0;a:do if((h>>>0>>2>>>0?(n=c-(h<<2)|0,e>>>0>>0&g>>>0>>0):0)?((g|e)&3|0)==0:0){n=e>>>2;m=g>>>2;l=0;while(1){j=h>>>1;k=l+j|0;i=k<<1;g=i+n|0;e=Wh(f[a+(g<<2)>>2]|0,o)|0;g=Wh(f[a+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0>>0&e>>>0<(c-g|0)>>>0)){e=0;break a}if(b[a+(g+e)>>0]|0){e=0;break a}e=Jh(d,a+g|0)|0;if(!e)break;e=(e|0)<0;if((h|0)==1){e=0;break a}else{l=e?l:k;h=e?j:h-j|0}}e=i+m|0;g=Wh(f[a+(e<<2)>>2]|0,o)|0;e=Wh(f[a+(e+1<<2)>>2]|0,o)|0;if(e>>>0>>0&g>>>0<(c-e|0)>>>0)e=(b[a+(e+g)>>0]|0)==0?a+e|0:0;else e=0}else e=0;while(0);return e|0}function Wh(a,b){a=a|0;b=b|0;var c=0;c=gj(a|0)|0;return ((b|0)==0?a:c)|0}function Xh(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;i=u;u=u+48|0;h=i+32|0;g=i+16|0;d=i;if(Yh(22305,b[c>>0]|0,4)|0){e=Zh(c)|0;f[d>>2]=a;f[d+4>>2]=e|32768;f[d+8>>2]=438;d=Dh(xa(5,d|0)|0)|0;if((d|0)>=0){if(e&524288|0){f[g>>2]=d;f[g+4>>2]=2;f[g+8>>2]=1;wa(221,g|0)|0}a=_h(d,c)|0;if(!a){f[h>>2]=d;za(6,h|0)|0;a=0}}else a=0}else{a=Eh()|0;f[a>>2]=22;a=0}u=i;return a|0}function Yh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;h=c&255;e=(d|0)!=0;a:do if(e&(a&3|0)!=0){g=c&255;while(1){if((b[a>>0]|0)==g<<24>>24){i=6;break a}a=a+1|0;d=d+-1|0;e=(d|0)!=0;if(!(e&(a&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(e)i=6;else d=0;b:do if((i|0)==6){g=c&255;if((b[a>>0]|0)!=g<<24>>24){e=X(h,16843009)|0;c:do if(d>>>0>3)while(1){h=f[a>>2]^e;if((h&-2139062144^-2139062144)&h+-16843009|0)break;a=a+4|0;d=d+-4|0;if(d>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!d){d=0;break}while(1){if((b[a>>0]|0)==g<<24>>24)break b;a=a+1|0;d=d+-1|0;if(!d){d=0;break}}}}while(0);return (d|0?a:0)|0}function Zh(a){a=a|0;var c=0,d=0,e=0;d=($h(a,43)|0)==0;c=b[a>>0]|0;d=d?c<<24>>24!=114&1:2;e=($h(a,120)|0)==0;d=e?d:d|128;a=($h(a,101)|0)==0;a=a?d:d|524288;a=c<<24>>24==114?a:a|64;a=c<<24>>24==119?a|512:a;return (c<<24>>24==97?a|1024:a)|0}function _h(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=u;u=u+64|0;m=n+40|0;k=n+24|0;j=n+16|0;g=n;l=n+56|0;e=b[c>>0]|0;if(Yh(22305,e<<24>>24,4)|0){d=sh(1156)|0;if(!d)d=0;else{h=d;i=h+124|0;do{f[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!($h(c,43)|0))f[d>>2]=e<<24>>24==114?8:4;if($h(c,101)|0){f[g>>2]=a;f[g+4>>2]=2;f[g+8>>2]=1;wa(221,g|0)|0;e=b[c>>0]|0}if(e<<24>>24==97){f[j>>2]=a;f[j+4>>2]=3;e=wa(221,j|0)|0;if(!(e&1024)){f[k>>2]=a;f[k+4>>2]=4;f[k+8>>2]=e|1024;wa(221,k|0)|0}c=f[d>>2]|128;f[d>>2]=c}else c=f[d>>2]|0;f[d+60>>2]=a;f[d+44>>2]=d+132;f[d+48>>2]=1024;e=d+75|0;b[e>>0]=-1;if((c&8|0)==0?(f[m>>2]=a,f[m+4>>2]=21523,f[m+8>>2]=l,(ya(54,m|0)|0)==0):0)b[e>>0]=10;f[d+32>>2]=62;f[d+36>>2]=61;f[d+40>>2]=2;f[d+12>>2]=1;if(!(f[6309]|0))f[d+76>>2]=-1;ai(d)|0}}else{d=Eh()|0;f[d>>2]=22;d=0}u=n;return d|0}function $h(a,c){a=a|0;c=c|0;a=di(a,c)|0;return ((b[a>>0]|0)==(c&255)<<24>>24?a:0)|0}function ai(a){a=a|0;var b=0,c=0;b=bi()|0;f[a+56>>2]=f[b>>2];c=f[b>>2]|0;if(c|0)f[c+52>>2]=a;f[b>>2]=a;ci();return a|0}function bi(){ra(25300);return 25308}function ci(){Aa(25300);return}function di(a,c){a=a|0;c=c|0;var d=0,e=0,g=0;e=c&255;a:do if(!e)a=a+(Kh(a)|0)|0;else{if(a&3){d=c&255;do{g=b[a>>0]|0;if(g<<24>>24==0?1:g<<24>>24==d<<24>>24)break a;a=a+1|0}while((a&3|0)!=0)}e=X(e,16843009)|0;d=f[a>>2]|0;b:do if(!((d&-2139062144^-2139062144)&d+-16843009))do{g=d^e;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;a=a+4|0;d=f[a>>2]|0}while(!((d&-2139062144^-2139062144)&d+-16843009|0));while(0);d=c&255;while(1){g=b[a>>0]|0;if(g<<24>>24==0?1:g<<24>>24==d<<24>>24)break;else a=a+1|0}}while(0);return a|0}function ei(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;if((f[a+76>>2]|0)>-1)e=Qh(a)|0;else e=0;Nh(a);g=(f[a>>2]&1|0)!=0;if(!g){d=bi()|0;c=f[a+52>>2]|0;b=a+56|0;if(c|0)f[c+56>>2]=f[b>>2];b=f[b>>2]|0;if(b|0)f[b+52>>2]=c;if((f[d>>2]|0)==(a|0))f[d>>2]=b;ci()}b=fi(a)|0;b=Ka[f[a+12>>2]&15](a)|0|b;c=f[a+92>>2]|0;if(c|0)th(c);if(g){if(e|0)Oh(a)}else th(a);return b|0}\r\nfunction fi(a){a=a|0;var b=0,c=0;do if(a){if((f[a+76>>2]|0)<=-1){b=gi(a)|0;break}c=(Qh(a)|0)==0;b=gi(a)|0;if(!c)Oh(a)}else{if(!(f[697]|0))b=0;else b=fi(f[697]|0)|0;a=bi()|0;a=f[a>>2]|0;if(a)do{if((f[a+76>>2]|0)>-1)c=Qh(a)|0;else c=0;if((f[a+20>>2]|0)>>>0>(f[a+28>>2]|0)>>>0)b=gi(a)|0|b;if(c|0)Oh(a);a=f[a+56>>2]|0}while((a|0)!=0);ci()}while(0);return b|0}function gi(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;b=a+20|0;h=a+28|0;if((f[b>>2]|0)>>>0>(f[h>>2]|0)>>>0?(Ma[f[a+36>>2]&63](a,0,0)|0,(f[b>>2]|0)==0):0)a=-1;else{c=a+4|0;d=f[c>>2]|0;e=a+8|0;g=f[e>>2]|0;if(d>>>0>>0)Ma[f[a+40>>2]&63](a,d-g|0,1)|0;f[a+16>>2]=0;f[h>>2]=0;f[b>>2]=0;f[e>>2]=0;f[c>>2]=0;a=0}return a|0}function hi(a,b){a=+a;b=b|0;var c=0,d=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;d=(b|0)<-2044;c=b+2044|0;a=d?a*2.2250738585072014e-308:a;b=d?((c|0)>-1022?c:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;c=(b|0)>2046;d=b+-2046|0;a=c?a*8988465674311579538646525.0e283:a;b=c?((d|0)<1023?d:1023):b+-1023|0}c=fj(b+1023|0,0,52)|0;d=I;f[s>>2]=c;f[s+4>>2]=d;return +(a*+p[s>>3])}function ii(a){a=a|0;var c=0,d=0;c=a+74|0;d=b[c>>0]|0;b[c>>0]=d+255|d;c=a+20|0;d=a+28|0;if((f[c>>2]|0)>>>0>(f[d>>2]|0)>>>0)Ma[f[a+36>>2]&63](a,0,0)|0;f[a+16>>2]=0;f[d>>2]=0;f[c>>2]=0;c=f[a>>2]|0;if(!(c&4)){d=(f[a+44>>2]|0)+(f[a+48>>2]|0)|0;f[a+8>>2]=d;f[a+4>>2]=d;c=c<<27>>31}else{f[a>>2]=c|32;c=-1}return c|0}function ji(a,b,c){a=a|0;b=b|0;c=c|0;return Fi(a,b,c)|0}function ki(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=u;u=u+16|0;e=d;f[e>>2]=c;c=li(a,b,e)|0;u=d;return c|0}function li(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=u;u=u+224|0;m=r+120|0;n=r+80|0;p=r;q=r+136|0;e=n;g=e+40|0;do{f[e>>2]=0;e=e+4|0}while((e|0)<(g|0));f[m>>2]=f[d>>2];if((mi(0,c,m,p,n)|0)<0)d=-1;else{if((f[a+76>>2]|0)>-1)o=Qh(a)|0;else o=0;d=f[a>>2]|0;l=d&32;if((b[a+74>>0]|0)<1)f[a>>2]=d&-33;e=a+48|0;if(!(f[e>>2]|0)){g=a+44|0;h=f[g>>2]|0;f[g>>2]=q;i=a+28|0;f[i>>2]=q;j=a+20|0;f[j>>2]=q;f[e>>2]=80;k=a+16|0;f[k>>2]=q+80;d=mi(a,c,m,p,n)|0;if(h){Ma[f[a+36>>2]&63](a,0,0)|0;d=(f[j>>2]|0)==0?-1:d;f[g>>2]=h;f[e>>2]=0;f[k>>2]=0;f[i>>2]=0;f[j>>2]=0}}else d=mi(a,c,m,p,n)|0;e=f[a>>2]|0;f[a>>2]=e|l;if(o|0)Oh(a);d=(e&32|0)==0?d:-1}u=r;return d|0}function mi(a,c,e,g,h){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+64|0;C=G+16|0;D=G;A=G+24|0;E=G+8|0;F=G+20|0;f[C>>2]=c;x=(a|0)!=0;y=A+40|0;z=y;A=A+39|0;B=E+4|0;j=0;i=0;n=0;a:while(1){do if((i|0)>-1)if((j|0)>(2147483647-i|0)){i=Eh()|0;f[i>>2]=75;i=-1;break}else{i=j+i|0;break}while(0);j=b[c>>0]|0;if(!(j<<24>>24)){w=86;break}else k=c;b:while(1){switch(j<<24>>24){case 37:{j=k;w=9;break b}case 0:{j=k;break b}default:{}}v=k+1|0;f[C>>2]=v;j=b[v>>0]|0;k=v}c:do if((w|0)==9)while(1){w=0;if((b[k+1>>0]|0)!=37)break c;j=j+1|0;k=k+2|0;f[C>>2]=k;if((b[k>>0]|0)==37)w=9;else break}while(0);j=j-c|0;if(x)ni(a,c,j);if(j|0){c=k;continue}l=k+1|0;j=(b[l>>0]|0)+-48|0;if(j>>>0<10){v=(b[k+2>>0]|0)==36;s=v?j:-1;n=v?1:n;l=v?k+3|0:l}else s=-1;f[C>>2]=l;j=b[l>>0]|0;v=(j<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|k;l=l+1|0;f[C>>2]=l;j=b[l>>0]|0;v=(j<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){m=l+1|0;j=(b[m>>0]|0)+-48|0;if(j>>>0<10?(b[l+2>>0]|0)==36:0){f[h+(j<<2)>>2]=10;j=f[g+((b[m>>0]|0)+-48<<3)>>2]|0;n=1;l=l+3|0}else{if(n|0){i=-1;break}if(x){n=(f[e>>2]|0)+(4-1)&~(4-1);j=f[n>>2]|0;f[e>>2]=n+4;n=0;l=m}else{j=0;n=0;l=m}}f[C>>2]=l;t=(j|0)<0;j=t?0-j|0:j;t=t?k|8192:k}else{j=oi(C)|0;if((j|0)<0){i=-1;break}t=k;l=f[C>>2]|0}do if((b[l>>0]|0)==46){if((b[l+1>>0]|0)!=42){f[C>>2]=l+1;k=oi(C)|0;l=f[C>>2]|0;break}m=l+2|0;k=(b[m>>0]|0)+-48|0;if(k>>>0<10?(b[l+3>>0]|0)==36:0){f[h+(k<<2)>>2]=10;k=f[g+((b[m>>0]|0)+-48<<3)>>2]|0;l=l+4|0;f[C>>2]=l;break}if(n|0){i=-1;break a}if(x){v=(f[e>>2]|0)+(4-1)&~(4-1);k=f[v>>2]|0;f[e>>2]=v+4}else k=0;f[C>>2]=m;l=m}else k=-1;while(0);r=0;while(1){if(((b[l>>0]|0)+-65|0)>>>0>57){i=-1;break a}v=l+1|0;f[C>>2]=v;m=b[(b[l>>0]|0)+-65+(22309+(r*58|0))>>0]|0;o=m&255;if((o+-1|0)>>>0<8){r=o;l=v}else break}if(!(m<<24>>24)){i=-1;break}q=(s|0)>-1;do if(m<<24>>24==19)if(q){i=-1;break a}else w=48;else{if(q){f[h+(s<<2)>>2]=o;q=g+(s<<3)|0;s=f[q+4>>2]|0;w=D;f[w>>2]=f[q>>2];f[w+4>>2]=s;w=48;break}if(!x){i=0;break a}pi(D,o,e)}while(0);if((w|0)==48?(w=0,!x):0){j=0;c=v;continue}l=b[l>>0]|0;l=(r|0)!=0&(l&15|0)==3?l&-33:l;s=t&-65537;t=(t&8192|0)==0?t:s;d:do switch(l|0){case 110:switch((r&255)<<24>>24){case 0:{f[f[D>>2]>>2]=i;j=0;c=v;continue a}case 1:{f[f[D>>2]>>2]=i;j=0;c=v;continue a}case 2:{j=f[D>>2]|0;f[j>>2]=i;f[j+4>>2]=((i|0)<0)<<31>>31;j=0;c=v;continue a}case 3:{d[f[D>>2]>>1]=i;j=0;c=v;continue a}case 4:{b[f[D>>2]>>0]=i;j=0;c=v;continue a}case 6:{f[f[D>>2]>>2]=i;j=0;c=v;continue a}case 7:{j=f[D>>2]|0;f[j>>2]=i;f[j+4>>2]=((i|0)<0)<<31>>31;j=0;c=v;continue a}default:{j=0;c=v;continue a}}case 112:{l=120;k=k>>>0>8?k:8;c=t|8;w=60;break}case 88:case 120:{c=t;w=60;break}case 111:{l=D;c=f[l>>2]|0;l=f[l+4>>2]|0;q=ri(c,l,y)|0;r=z-q|0;m=0;o=22773;k=(t&8|0)==0|(k|0)>(r|0)?k:r+1|0;r=t;w=66;break}case 105:case 100:{l=D;c=f[l>>2]|0;l=f[l+4>>2]|0;if((l|0)<0){c=_i(0,0,c|0,l|0)|0;l=I;m=D;f[m>>2]=c;f[m+4>>2]=l;m=1;o=22773;w=65;break d}else{m=(t&2049|0)!=0&1;o=(t&2048|0)==0?((t&1|0)==0?22773:22775):22774;w=65;break d}}case 117:{l=D;m=0;o=22773;c=f[l>>2]|0;l=f[l+4>>2]|0;w=65;break}case 99:{b[A>>0]=f[D>>2];c=A;m=0;o=22773;q=y;l=1;k=s;break}case 109:{l=Eh()|0;l=ti(f[l>>2]|0)|0;w=70;break}case 115:{l=f[D>>2]|0;l=l|0?l:22783;w=70;break}case 67:{f[E>>2]=f[D>>2];f[B>>2]=0;f[D>>2]=E;q=-1;l=E;w=74;break}case 83:{c=f[D>>2]|0;if(!k){ui(a,32,j,0,t);c=0;w=83}else{q=k;l=c;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{j=wi(a,+p[D>>3],j,k,t,l)|0;c=v;continue a}default:{m=0;o=22773;q=y;l=k;k=t}}while(0);e:do if((w|0)==60){t=D;s=f[t>>2]|0;t=f[t+4>>2]|0;q=qi(s,t,y,l&32)|0;o=(c&8|0)==0|(s|0)==0&(t|0)==0;m=o?0:2;o=o?22773:22773+(l>>4)|0;r=c;c=s;l=t;w=66}else if((w|0)==65){q=si(c,l,y)|0;r=t;w=66}else if((w|0)==70){w=0;t=Yh(l,0,k)|0;r=(t|0)==0;c=l;m=0;o=22773;q=r?l+k|0:t;l=r?k:t-l|0;k=s}else if((w|0)==74){w=0;o=l;c=0;k=0;while(1){m=f[o>>2]|0;if(!m)break;k=vi(F,m)|0;if((k|0)<0|k>>>0>(q-c|0)>>>0)break;c=k+c|0;if(q>>>0>c>>>0)o=o+4|0;else break}if((k|0)<0){i=-1;break a}ui(a,32,j,c,t);if(!c){c=0;w=83}else{m=0;while(1){k=f[l>>2]|0;if(!k){w=83;break e}k=vi(F,k)|0;m=k+m|0;if((m|0)>(c|0)){w=83;break e}ni(a,F,k);if(m>>>0>=c>>>0){w=83;break}else l=l+4|0}}}while(0);if((w|0)==66){w=0;l=(c|0)!=0|(l|0)!=0;t=(k|0)!=0|l;l=z-q+((l^1)&1)|0;c=t?q:y;q=y;l=t?((k|0)>(l|0)?k:l):k;k=(k|0)>-1?r&-65537:r}else if((w|0)==83){w=0;ui(a,32,j,c,t^8192);j=(j|0)>(c|0)?j:c;c=v;continue}s=q-c|0;r=(l|0)<(s|0)?s:l;t=r+m|0;j=(j|0)<(t|0)?t:j;ui(a,32,j,t,k);ni(a,o,m);ui(a,48,j,t,k^65536);ui(a,48,r,s,0);ni(a,c,s);ui(a,32,j,t,k^8192);c=v}f:do if((w|0)==86)if(!a)if(n){i=1;while(1){c=f[h+(i<<2)>>2]|0;if(!c)break;pi(g+(i<<3)|0,c,e);c=i+1|0;if((i|0)<9)i=c;else{i=c;break}}if((i|0)<10)while(1){if(f[h+(i<<2)>>2]|0){i=-1;break f}if((i|0)<9)i=i+1|0;else{i=1;break}}else i=1}else i=0;while(0);u=G;return i|0}function ni(a,b,c){a=a|0;b=b|0;c=c|0;if(!(f[a>>2]&32))Th(b,c,a)|0;return}function oi(a){a=a|0;var c=0,d=0,e=0;d=f[a>>2]|0;e=(b[d>>0]|0)+-48|0;if(e>>>0<10){c=0;do{c=e+(c*10|0)|0;d=d+1|0;f[a>>2]=d;e=(b[d>>0]|0)+-48|0}while(e>>>0<10)}else c=0;return c|0}function pi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{d=(f[c>>2]|0)+(4-1)&~(4-1);b=f[d>>2]|0;f[c>>2]=d+4;f[a>>2]=b;break a}case 10:{d=(f[c>>2]|0)+(4-1)&~(4-1);b=f[d>>2]|0;f[c>>2]=d+4;d=a;f[d>>2]=b;f[d+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{d=(f[c>>2]|0)+(4-1)&~(4-1);b=f[d>>2]|0;f[c>>2]=d+4;d=a;f[d>>2]=b;f[d+4>>2]=0;break a}case 12:{d=(f[c>>2]|0)+(8-1)&~(8-1);b=d;e=f[b>>2]|0;b=f[b+4>>2]|0;f[c>>2]=d+8;d=a;f[d>>2]=e;f[d+4>>2]=b;break a}case 13:{e=(f[c>>2]|0)+(4-1)&~(4-1);d=f[e>>2]|0;f[c>>2]=e+4;d=(d&65535)<<16>>16;e=a;f[e>>2]=d;f[e+4>>2]=((d|0)<0)<<31>>31;break a}case 14:{e=(f[c>>2]|0)+(4-1)&~(4-1);d=f[e>>2]|0;f[c>>2]=e+4;e=a;f[e>>2]=d&65535;f[e+4>>2]=0;break a}case 15:{e=(f[c>>2]|0)+(4-1)&~(4-1);d=f[e>>2]|0;f[c>>2]=e+4;d=(d&255)<<24>>24;e=a;f[e>>2]=d;f[e+4>>2]=((d|0)<0)<<31>>31;break a}case 16:{e=(f[c>>2]|0)+(4-1)&~(4-1);d=f[e>>2]|0;f[c>>2]=e+4;e=a;f[e>>2]=d&255;f[e+4>>2]=0;break a}case 17:{e=(f[c>>2]|0)+(8-1)&~(8-1);g=+p[e>>3];f[c>>2]=e+8;p[a>>3]=g;break a}case 18:{e=(f[c>>2]|0)+(8-1)&~(8-1);g=+p[e>>3];f[c>>2]=e+8;p[a>>3]=g;break a}default:break a}while(0);while(0);return}function qi(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;if(!((a|0)==0&(c|0)==0))do{d=d+-1|0;b[d>>0]=h[22825+(a&15)>>0]|0|e;a=ej(a|0,c|0,4)|0;c=I}while(!((a|0)==0&(c|0)==0));return d|0}function ri(a,c,d){a=a|0;c=c|0;d=d|0;if(!((a|0)==0&(c|0)==0))do{d=d+-1|0;b[d>>0]=a&7|48;a=ej(a|0,c|0,3)|0;c=I}while(!((a|0)==0&(c|0)==0));return d|0}function si(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&a>>>0>4294967295){while(1){e=cj(a|0,c|0,10,0)|0;d=d+-1|0;b[d>>0]=e&255|48;e=a;a=bj(a|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=I}c=a}else c=a;if(c)while(1){d=d+-1|0;b[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function ti(a){a=a|0;var b=0;b=(Ci()|0)+188|0;return Di(a,f[b>>2]|0)|0}function ui(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=u;u=u+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;ij(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{ni(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}ni(a,f,e)}u=g;return}function vi(a,b){a=a|0;b=b|0;if(!a)a=0;else a=Ai(a,b,0)|0;return a|0}function wi(a,c,d,e,g,i){a=a|0;c=+c;d=d|0;e=e|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+560|0;l=G+8|0;t=G;F=G+524|0;E=F;m=G+512|0;f[t>>2]=0;D=m+12|0;xi(c)|0;if((I|0)<0){c=-c;B=1;A=22790}else{B=(g&2049|0)!=0&1;A=(g&2048|0)==0?((g&1|0)==0?22791:22796):22793}xi(c)|0;do if(0==0&(I&2146435072|0)==2146435072){F=(i&32|0)!=0;j=B+3|0;ui(a,32,d,j,g&-65537);ni(a,A,B);ni(a,c!=c|0.0!=0.0?(F?22817:22821):F?22809:22813,3);ui(a,32,d,j,g^8192)}else{q=+yi(c,t)*2.0;j=q!=0.0;if(j)f[t>>2]=(f[t>>2]|0)+-1;w=i|32;if((w|0)==97){o=i&32;r=(o|0)==0?A:A+9|0;p=B|2;j=12-e|0;do if(!(e>>>0>11|(j|0)==0)){c=8.0;do{j=j+-1|0;c=c*16.0}while((j|0)!=0);if((b[r>>0]|0)==45){c=-(c+(-q-c));break}else{c=q+c-c;break}}else c=q;while(0);k=f[t>>2]|0;j=(k|0)<0?0-k|0:k;j=si(j,((j|0)<0)<<31>>31,D)|0;if((j|0)==(D|0)){j=m+11|0;b[j>>0]=48}b[j+-1>>0]=(k>>31&2)+43;n=j+-2|0;b[n>>0]=i+15;l=(e|0)<1;m=(g&8|0)==0;j=F;do{C=~~c;k=j+1|0;b[j>>0]=o|h[22825+C>>0];c=(c-+(C|0))*16.0;if((k-E|0)==1?!(m&(l&c==0.0)):0){b[k>>0]=46;j=j+2|0}else j=k}while(c!=0.0);if((e|0)!=0?(-2-E+j|0)<(e|0):0){k=j-E|0;j=e+2|0}else{j=j-E|0;k=j}D=D-n|0;E=D+p+j|0;ui(a,32,d,E,g);ni(a,r,p);ui(a,48,d,E,g^65536);ni(a,F,k);ui(a,48,j-k|0,0,0);ni(a,n,D);ui(a,32,d,E,g^8192);j=E;break}k=(e|0)<0?6:e;if(j){j=(f[t>>2]|0)+-28|0;f[t>>2]=j;c=q*268435456.0}else{c=q;j=f[t>>2]|0}C=(j|0)<0?l:l+288|0;l=C;do{y=~~c>>>0;f[l>>2]=y;l=l+4|0;c=(c-+(y>>>0))*1.0e9}while(c!=0.0);if((j|0)>0){m=C;o=l;while(1){n=(j|0)<29?j:29;j=o+-4|0;if(j>>>0>=m>>>0){l=0;do{x=fj(f[j>>2]|0,0,n|0)|0;x=Zi(x|0,I|0,l|0,0)|0;y=I;v=cj(x|0,y|0,1e9,0)|0;f[j>>2]=v;l=bj(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=m>>>0);if(l){m=m+-4|0;f[m>>2]=l}}l=o;while(1){if(l>>>0<=m>>>0)break;j=l+-4|0;if(!(f[j>>2]|0))l=j;else break}j=(f[t>>2]|0)-n|0;f[t>>2]=j;if((j|0)>0)o=l;else break}}else m=C;if((j|0)<0){e=((k+25|0)/9|0)+1|0;s=(w|0)==102;do{r=0-j|0;r=(r|0)<9?r:9;if(m>>>0>>0){n=(1<>>r;p=0;j=m;do{y=f[j>>2]|0;f[j>>2]=(y>>>r)+p;p=X(y&n,o)|0;j=j+4|0}while(j>>>0>>0);j=(f[m>>2]|0)==0?m+4|0:m;if(!p){m=j;j=l}else{f[l>>2]=p;m=j;j=l+4|0}}else{m=(f[m>>2]|0)==0?m+4|0:m;j=l}l=s?C:m;l=(j-l>>2|0)>(e|0)?l+(e<<2)|0:j;j=(f[t>>2]|0)+r|0;f[t>>2]=j}while((j|0)<0);j=m;e=l}else{j=m;e=l}y=C;if(j>>>0>>0){l=(y-j>>2)*9|0;n=f[j>>2]|0;if(n>>>0>=10){m=10;do{m=m*10|0;l=l+1|0}while(n>>>0>=m>>>0)}}else l=0;s=(w|0)==103;v=(k|0)!=0;m=k-((w|0)!=102?l:0)+((v&s)<<31>>31)|0;if((m|0)<(((e-y>>2)*9|0)+-9|0)){m=m+9216|0;r=C+4+(((m|0)/9|0)+-1024<<2)|0;m=(m|0)%9|0;if((m|0)<8){n=10;while(1){n=n*10|0;if((m|0)<7)m=m+1|0;else break}}else n=10;o=f[r>>2]|0;p=(o>>>0)%(n>>>0)|0;m=(r+4|0)==(e|0);if(!(m&(p|0)==0)){q=(((o>>>0)/(n>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(n|0)/2|0;c=p>>>0>>0?.5:m&(p|0)==(x|0)?1.0:1.5;if(B){x=(b[A>>0]|0)==45;c=x?-c:c;q=x?-q:q}m=o-p|0;f[r>>2]=m;if(q+c!=q){x=m+n|0;f[r>>2]=x;if(x>>>0>999999999){l=r;while(1){m=l+-4|0;f[l>>2]=0;if(m>>>0>>0){j=j+-4|0;f[j>>2]=0}x=(f[m>>2]|0)+1|0;f[m>>2]=x;if(x>>>0>999999999)l=m;else break}}else m=r;l=(y-j>>2)*9|0;o=f[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;l=l+1|0}while(o>>>0>=n>>>0)}}else m=r}else m=r;m=m+4|0;m=e>>>0>m>>>0?m:e;x=j}else{m=e;x=j}w=m;while(1){if(w>>>0<=x>>>0){t=0;break}j=w+-4|0;if(!(f[j>>2]|0))w=j;else{t=1;break}}e=0-l|0;do if(s){j=k+((v^1)&1)|0;if((j|0)>(l|0)&(l|0)>-5){n=i+-1|0;k=j+-1-l|0}else{n=i+-2|0;k=j+-1|0}j=g&8;if(!j){if(t?(z=f[w+-4>>2]|0,(z|0)!=0):0)if(!((z>>>0)%10|0)){m=0;j=10;do{j=j*10|0;m=m+1|0}while(!((z>>>0)%(j>>>0)|0|0))}else m=0;else m=9;j=((w-y>>2)*9|0)+-9|0;if((n|32|0)==102){r=j-m|0;r=(r|0)>0?r:0;k=(k|0)<(r|0)?k:r;r=0;break}else{r=j+l-m|0;r=(r|0)>0?r:0;k=(k|0)<(r|0)?k:r;r=0;break}}else r=j}else{n=i;r=g&8}while(0);s=k|r;o=(s|0)!=0&1;p=(n|32|0)==102;if(p){v=0;j=(l|0)>0?l:0}else{j=(l|0)<0?e:l;j=si(j,((j|0)<0)<<31>>31,D)|0;m=D;if((m-j|0)<2)do{j=j+-1|0;b[j>>0]=48}while((m-j|0)<2);b[j+-1>>0]=(l>>31&2)+43;j=j+-2|0;b[j>>0]=n;v=j;j=m-j|0}j=B+1+k+o+j|0;ui(a,32,d,j,g);ni(a,A,B);ui(a,48,d,j,g^65536);if(p){n=x>>>0>C>>>0?C:x;r=F+9|0;o=r;p=F+8|0;m=n;do{l=si(f[m>>2]|0,0,r)|0;if((m|0)==(n|0)){if((l|0)==(r|0)){b[p>>0]=48;l=p}}else if(l>>>0>F>>>0){ij(F|0,48,l-E|0)|0;do l=l+-1|0;while(l>>>0>F>>>0)}ni(a,l,o-l|0);m=m+4|0}while(m>>>0<=C>>>0);if(s|0)ni(a,22841,1);if(m>>>0>>0&(k|0)>0)while(1){l=si(f[m>>2]|0,0,r)|0;if(l>>>0>F>>>0){ij(F|0,48,l-E|0)|0;do l=l+-1|0;while(l>>>0>F>>>0)}ni(a,l,(k|0)<9?k:9);m=m+4|0;l=k+-9|0;if(!(m>>>0>>0&(k|0)>9)){k=l;break}else k=l}ui(a,48,k+9|0,9,0)}else{s=t?w:x+4|0;if((k|0)>-1){t=F+9|0;r=(r|0)==0;e=t;o=0-E|0;p=F+8|0;n=x;do{l=si(f[n>>2]|0,0,t)|0;if((l|0)==(t|0)){b[p>>0]=48;l=p}do if((n|0)==(x|0)){m=l+1|0;ni(a,l,1);if(r&(k|0)<1){l=m;break}ni(a,22841,1);l=m}else{if(l>>>0<=F>>>0)break;ij(F|0,48,l+o|0)|0;do l=l+-1|0;while(l>>>0>F>>>0)}while(0);E=e-l|0;ni(a,l,(k|0)>(E|0)?E:k);k=k-E|0;n=n+4|0}while(n>>>0>>0&(k|0)>-1)}ui(a,48,k+18|0,18,0);ni(a,v,D-v|0)}ui(a,32,d,j,g^8192)}while(0);u=G;return ((j|0)<(d|0)?d:j)|0}function xi(a){a=+a;var b=0;p[s>>3]=a;b=f[s>>2]|0;I=f[s+4>>2]|0;return b|0}function yi(a,b){a=+a;b=b|0;return +(+zi(a,b))}function zi(a,b){a=+a;b=b|0;var c=0,d=0,e=0;p[s>>3]=a;c=f[s>>2]|0;d=f[s+4>>2]|0;e=ej(c|0,d|0,52)|0;switch(e&2047){case 0:{if(a!=0.0){a=+zi(a*18446744073709551616.0,b);c=(f[b>>2]|0)+-64|0}else c=0;f[b>>2]=c;break}case 2047:break;default:{f[b>>2]=(e&2047)+-1022;f[s>>2]=c;f[s+4>>2]=d&-2146435073|1071644672;a=+p[s>>3]}}return +a}function Ai(a,c,d){a=a|0;c=c|0;d=d|0;do if(a){if(c>>>0<128){b[a>>0]=c;a=1;break}d=(Bi()|0)+188|0;if(!(f[f[d>>2]>>2]|0))if((c&-128|0)==57216){b[a>>0]=c;a=1;break}else{a=Eh()|0;f[a>>2]=84;a=-1;break}if(c>>>0<2048){b[a>>0]=c>>>6|192;b[a+1>>0]=c&63|128;a=2;break}if(c>>>0<55296|(c&-8192|0)==57344){b[a>>0]=c>>>12|224;b[a+1>>0]=c>>>6&63|128;b[a+2>>0]=c&63|128;a=3;break}if((c+-65536|0)>>>0<1048576){b[a>>0]=c>>>18|240;b[a+1>>0]=c>>>12&63|128;b[a+2>>0]=c>>>6&63|128;b[a+3>>0]=c&63|128;a=4;break}else{a=Eh()|0;f[a>>2]=84;a=-1;break}}else a=1;while(0);return a|0}function Bi(){return Ih()|0}function Ci(){return Ih()|0}function Di(a,c){a=a|0;c=c|0;var d=0,e=0;e=0;while(1){if((h[22843+e>>0]|0)==(a|0)){a=2;break}d=e+1|0;if((d|0)==87){d=22931;e=87;a=5;break}else e=d}if((a|0)==2)if(!e)d=22931;else{d=22931;a=5}if((a|0)==5)while(1){do{a=d;d=d+1|0}while((b[a>>0]|0)!=0);e=e+-1|0;if(!e)break;else a=5}return Ei(d,f[c+20>>2]|0)|0}function Ei(a,b){a=a|0;b=b|0;return Uh(a,b)|0}function Fi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((f[a+76>>2]|0)>-1){d=(Qh(a)|0)==0;b=Gi(a,b,c)|0;if(!d)Oh(a)}else b=Gi(a,b,c)|0;return b|0}function Gi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if((c|0)==1)b=b-(f[a+8>>2]|0)+(f[a+4>>2]|0)|0;d=a+20|0;e=a+28|0;if((f[d>>2]|0)>>>0>(f[e>>2]|0)>>>0?(Ma[f[a+36>>2]&63](a,0,0)|0,(f[d>>2]|0)==0):0)b=-1;else{f[a+16>>2]=0;f[e>>2]=0;f[d>>2]=0;if((Ma[f[a+40>>2]&63](a,b,c)|0)<0)b=-1;else{f[a+8>>2]=0;f[a+4>>2]=0;f[a>>2]=f[a>>2]&-17;b=0}}return b|0}function Hi(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=u;u=u+128|0;g=m+124|0;l=m;h=l;i=3036;j=h+124|0;do{f[h>>2]=f[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((c+-1|0)>>>0>2147483646)if(!c){a=g;c=1;k=4}else{c=Eh()|0;f[c>>2]=75;c=-1}else k=4;if((k|0)==4){k=-2-a|0;k=c>>>0>k>>>0?k:c;f[l+48>>2]=k;g=l+20|0;f[g>>2]=a;f[l+44>>2]=a;c=a+k|0;a=l+16|0;f[a>>2]=c;f[l+28>>2]=c;c=li(l,d,e)|0;if(k){l=f[g>>2]|0;b[l+(((l|0)==(f[a>>2]|0))<<31>>31)>>0]=0}}u=m;return c|0}function Ii(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=a+20|0;e=f[d>>2]|0;a=(f[a+16>>2]|0)-e|0;a=a>>>0>c>>>0?c:a;hj(e|0,b|0,a|0)|0;f[d>>2]=(f[d>>2]|0)+a;return c|0}function Ji(a,b){a=a|0;b=b|0;Ki(a,b)|0;return a|0}function Ki(a,c){a=a|0;c=c|0;var d=0,e=0;d=c;a:do if(!((d^a)&3)){if(d&3)do{d=b[c>>0]|0;b[a>>0]=d;if(!(d<<24>>24))break a;c=c+1|0;a=a+1|0}while((c&3|0)!=0);d=f[c>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009)){e=a;while(1){c=c+4|0;a=e+4|0;f[e>>2]=d;d=f[c>>2]|0;if((d&-2139062144^-2139062144)&d+-16843009|0)break;else e=a}}e=8}else e=8;while(0);if((e|0)==8){e=b[c>>0]|0;b[a>>0]=e;if(e<<24>>24)do{c=c+1|0;a=a+1|0;e=b[c>>0]|0;b[a>>0]=e}while(e<<24>>24!=0)}return a|0}function Li(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=u;u=u+16|0;e=d;f[e>>2]=c;c=Mi(a,b,e)|0;u=d;return c|0}function Mi(a,b,c){a=a|0;b=b|0;c=c|0;return Hi(a,2147483647,b,c)|0}function Ni(a,b){a=+a;b=b|0;return +(+hi(a,b))}function Oi(a){a=+a;return ~~+kj(+a)|0}function Pi(a,b){a=a|0;b=b|0;var c=0,d=0;c=u;u=u+16|0;d=c;f[d>>2]=b;b=li(f[665]|0,a,d)|0;u=c;return b|0}function Qi(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=X(d,c)|0;d=(c|0)==0?0:d;if((f[e+76>>2]|0)>-1)j=Qh(e)|0;else j=0;g=e+74|0;h=b[g>>0]|0;b[g>>0]=h+255|h;g=e+4|0;h=f[g>>2]|0;m=(f[e+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){hj(a|0,h|0,i|0)|0;f[g>>2]=h+i;g=k-i|0;a=a+i|0}else g=k;a:do if(!g)l=13;else{i=e+32|0;while(1){if(ii(e)|0)break;h=Ma[f[i>>2]&63](e,a,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else a=a+h|0}if(j|0)Oh(e);d=((k-g|0)>>>0)/(c>>>0)|0}while(0);if((l|0)==13)if(j)Oh(e);return d|0}function Ri(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;if((f[c+76>>2]|0)>=0?(Qh(c)|0)!=0:0){e=a&255;d=a&255;if((d|0)!=(b[c+75>>0]|0)?(i=c+20|0,j=f[i>>2]|0,j>>>0<(f[c+16>>2]|0)>>>0):0){f[i>>2]=j+1;b[j>>0]=e}else d=Rh(c,a)|0;Oh(c)}else k=3;do if((k|0)==3){e=a&255;d=a&255;if((d|0)!=(b[c+75>>0]|0)?(g=c+20|0,h=f[g>>2]|0,h>>>0<(f[c+16>>2]|0)>>>0):0){f[g>>2]=h+1;b[h>>0]=e;break}d=Rh(c,a)|0}while(0);return d|0}function Si(a){a=a|0;var c=0,d=0,e=0,g=0;e=f[665]|0;if((f[e+76>>2]|0)>-1)g=Qh(e)|0;else g=0;do if((Lh(a,e)|0)<0)a=-1;else{if((b[e+75>>0]|0)!=10?(c=e+20|0,d=f[c>>2]|0,d>>>0<(f[e+16>>2]|0)>>>0):0){f[c>>2]=d+1;b[d>>0]=10;a=0;break}a=(Rh(e,10)|0)>>31}while(0);if(g|0)Oh(e);return a|0}function Ti(a){a=a|0;var b=0;if(!(f[a>>2]&128))b=1;else b=(f[a+20>>2]|0)>>>0>(f[a+28>>2]|0)>>>0?2:1;b=Ma[f[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(f[a+8>>2]|0)+(f[a+4>>2]|0)+(f[a+20>>2]|0)-(f[a+28>>2]|0)|0;return b|0}function Ui(a){a=a|0;var b=0,c=0;if((f[a+76>>2]|0)>-1){c=(Qh(a)|0)==0;b=Ti(a)|0;if(!c)Oh(a)}else b=Ti(a)|0;return b|0}function Vi(a){a=a|0;return Ui(a)|0}function Wi(){}function Xi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=X(e,f)|0;d=a>>>16;a=(c>>>16)+(X(e,d)|0)|0;e=b>>>16;b=X(e,f)|0;return (I=(a>>>16)+(X(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Yi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=Xi(e,f)|0;a=I;return (I=(X(b,f)|0)+(X(d,e)|0)+a|a&0,c|0|0)|0}function Zi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (I=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function _i(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (I=d,a-c>>>0|0)|0}function $i(a){a=a|0;var c=0;c=b[w+(a&255)>>0]|0;if((c|0)<8)return c|0;c=b[w+(a>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=b[w+(a>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (b[w+(a>>>24)>>0]|0)+24|0}function aj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=c;n=d;i=n;if(!k){g=(e|0)!=0;if(!i){if(g){f[e>>2]=(l>>>0)%(h>>>0);f[e+4>>2]=0}n=0;e=(l>>>0)/(h>>>0)>>>0;return (I=n,e)|0}else{if(!g){n=0;e=0;return (I=n,e)|0}f[e>>2]=a|0;f[e+4>>2]=b&0;n=0;e=0;return (I=n,e)|0}}g=(i|0)==0;do if(h){if(!g){g=(_(i|0)|0)-(_(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;f[e+4>>2]=j|b&0;n=0;e=0;return (I=n,e)|0}g=h-1|0;if(g&h|0){i=(_(h|0)|0)+33-(_(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(e|0){f[e>>2]=g&l;f[e+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (I=o,p)|0}else{p=$i(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (I=o,p)|0}}else{if(g){if(e|0){f[e>>2]=(k>>>0)%(h>>>0);f[e+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (I=o,p)|0}if(!l){if(e|0){f[e>>2]=0;f[e+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (I=o,p)|0}g=i-1|0;if(!(g&i)){if(e|0){f[e>>2]=a|0;f[e+4>>2]=g&k|b&0}o=0;p=k>>>(($i(i|0)|0)>>>0);return (I=o,p)|0}g=(_(i|0)|0)-(_(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;f[e+4>>2]=j|b&0;o=0;p=0;return (I=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=c|0|0;l=n|d&0;k=Zi(m|0,l|0,-1,-1)|0;c=I;j=i;i=0;do{d=j;j=g>>>31|j<<1;g=i|g<<1;d=a<<1|d>>>31|0;n=a>>>31|b<<1|0;_i(k|0,c|0,d|0,n|0)|0;p=I;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=_i(d|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=I;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(e|0){f[e>>2]=a;f[e+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (I=o,p)|0}function bj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return aj(a,b,c,d,0)|0}function cj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;g=u;u=u+16|0;e=g|0;aj(a,b,c,d,e)|0;u=g;return (I=f[e+4>>2]|0,f[e>>2]|0)|0}function dj(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){I=b>>c;return a>>>c|(b&(1<>c-32|0}function ej(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){I=b>>>c;return a>>>c|(b&(1<>>c-32|0}function fj(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){I=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function hj(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0;if((d|0)>=8192)return Ba(a|0,c|0,d|0)|0;h=a|0;g=a+d|0;if((a&3)==(c&3)){while(a&3){if(!d)return h|0;b[a>>0]=b[c>>0]|0;a=a+1|0;c=c+1|0;d=d-1|0}d=g&-4|0;e=d-64|0;while((a|0)<=(e|0)){f[a>>2]=f[c>>2];f[a+4>>2]=f[c+4>>2];f[a+8>>2]=f[c+8>>2];f[a+12>>2]=f[c+12>>2];f[a+16>>2]=f[c+16>>2];f[a+20>>2]=f[c+20>>2];f[a+24>>2]=f[c+24>>2];f[a+28>>2]=f[c+28>>2];f[a+32>>2]=f[c+32>>2];f[a+36>>2]=f[c+36>>2];f[a+40>>2]=f[c+40>>2];f[a+44>>2]=f[c+44>>2];f[a+48>>2]=f[c+48>>2];f[a+52>>2]=f[c+52>>2];f[a+56>>2]=f[c+56>>2];f[a+60>>2]=f[c+60>>2];a=a+64|0;c=c+64|0}while((a|0)<(d|0)){f[a>>2]=f[c>>2];a=a+4|0;c=c+4|0}}else{d=g-4|0;while((a|0)<(d|0)){b[a>>0]=b[c>>0]|0;b[a+1>>0]=b[c+1>>0]|0;b[a+2>>0]=b[c+2>>0]|0;b[a+3>>0]=b[c+3>>0]|0;a=a+4|0;c=c+4|0}}while((a|0)<(g|0)){b[a>>0]=b[c>>0]|0;a=a+1|0;c=c+1|0}return h|0}function ij(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;h=a+d|0;c=c&255;if((d|0)>=67){while(a&3){b[a>>0]=c;a=a+1|0}e=h&-4|0;g=e-64|0;i=c|c<<8|c<<16|c<<24;while((a|0)<=(g|0)){f[a>>2]=i;f[a+4>>2]=i;f[a+8>>2]=i;f[a+12>>2]=i;f[a+16>>2]=i;f[a+20>>2]=i;f[a+24>>2]=i;f[a+28>>2]=i;f[a+32>>2]=i;f[a+36>>2]=i;f[a+40>>2]=i;f[a+44>>2]=i;f[a+48>>2]=i;f[a+52>>2]=i;f[a+56>>2]=i;f[a+60>>2]=i;a=a+64|0}while((a|0)<(e|0)){f[a>>2]=i;a=a+4|0}}while((a|0)<(h|0)){b[a>>0]=c;a=a+1|0}return h-d|0}function jj(a){a=+a;return a>=0.0?+J(a+.5):+W(a-.5)}function kj(a){a=+a;return a-+J(a)!=.5?+jj(a):+jj(a/2.0)*2.0}function lj(a){a=a|0;var b=0,c=0;c=a+15&-16|0;b=f[r>>2]|0;a=b+c|0;if((c|0)>0&(a|0)<(b|0)|(a|0)<0){da()|0;sa(12);return -1}f[r>>2]=a;if((a|0)>(ca()|0)?(ba()|0)==0:0){f[r>>2]=b;sa(12);return -1}return b|0}function mj(a,b){a=a|0;b=b|0;return +Ja[a&3](b|0)}function nj(a,b){a=a|0;b=b|0;return Ka[a&15](b|0)|0}function oj(a,b,c){a=a|0;b=b|0;c=c|0;return La[a&7](b|0,c|0)|0}function pj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ma[a&63](b|0,c|0,d|0)|0}function qj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Na[a&63](b|0,c|0,d|0,e|0)|0}function rj(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Oa[a&3](b|0,c|0,d|0,e|0,f|0)|0}function sj(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Pa[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function tj(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return Qa[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function uj(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return Ra[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)|0}function vj(a,b){a=a|0;b=b|0;Sa[a&7](b|0)}function wj(a,b,c){a=a|0;b=b|0;c=c|0;Ta[a&7](b|0,c|0)}function xj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ua[a&15](b|0,c|0,d|0)}function yj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Va[a&3](b|0,c|0,d|0,e|0)}function zj(a){a=a|0;$(0);return 0.0}function Aj(a){a=a|0;$(1);return 0}function Bj(a,b){a=a|0;b=b|0;$(2);return 0}function Cj(a,b,c){a=a|0;b=b|0;c=c|0;$(3);return 0}function Dj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;$(4);return 0}function Ej(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;$(5);return 0}function Fj(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;$(6);return 0}function Gj(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;$(7);return 0}function Hj(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;$(8);return 0}function Ij(a){a=a|0;$(9)}function Jj(a,b){a=a|0;b=b|0;$(10)}function Kj(a,b,c){a=a|0;b=b|0;c=c|0;$(11)}function Lj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;$(12)}\r\n\r\n// EMSCRIPTEN_END_FUNCS\r\nvar Ja=[zj,xe,ye,zj];var Ka=[Aj,Ah,Od,Pd,qf,pf,ei,Gg,Cg,Aj,Aj,Aj,Aj,Aj,Aj,Aj];var La=[Bj,bf,df,ef,cf,Bj,Bj,Bj];var Ma=[Cj,Hh,Ch,Ii,ub,vb,wb,xb,Wd,_d,Ie,Ue,Zc,Vd,Je,rf,Dc,Ec,Fc,Gc,zc,Ac,Bc,Cc,$c,ad,bd,cd,Rd,Ud,$d,ae,be,ce,de,fe,ge,he,ie,je,ke,le,me,ne,oe,pe,qe,re,se,te,ue,ve,we,Ke,Ve,Xe,Ye,Ze,_e,$e,af,Bh,Gh,Cj];var Na=[Dj,dd,ed,fd,gd,hd,id,jd,kd,ld,md,nd,od,pd,qd,rd,sd,td,ud,vd,Re,Se,Te,Le,Me,Ne,Oe,Pe,Qe,qb,rb,sb,tb,ee,Tc,We,He,Qd,_c,Ce,ff,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj];var Oa=[Ej,Td,mf,Ej];var Pa=[Fj,Be,hf,Hd,jf,Fj,Fj,Fj];var Qa=[Gj,Id,lf,Gj];var Ra=[Hj,Gd,gf,Hj];var Sa=[Ij,Qc,kf,Rf,Sf,Ij,Ij,Ij];var Ta=[Jj,eb,fb,gb,Ob,Oc,Ge,Jj];var Ua=[Kj,Vc,Wc,Xc,Yc,Ad,Bd,Cd,Dd,wd,xd,yd,zd,Kd,of,Kj];var Va=[Lj,yg,Fg,Lj];return{___muldi3:Yi,___udivdi3:bj,___uremdi3:cj,_bitshift64Ashr:dj,_bitshift64Lshr:ej,_bitshift64Shl:fj,_emscripten_replace_memory:Ia,_free:th,_i64Add:Zi,_i64Subtract:_i,_jp2_decode:bb,_jp2_encode:cb,_jp2_version:db,_llvm_bswap_i32:gj,_malloc:sh,_memcpy:hj,_memset:ij,_opj_create_compress:Vb,_opj_create_decompress:Wb,_opj_decode:Xb,_opj_decode_tile_data:Yb,_opj_destroy_codec:Zb,_opj_destroy_cstr_index:_b,_opj_destroy_cstr_info:$b,_opj_dump_codec:ac,_opj_encode:bc,_opj_end_compress:cc,_opj_end_decompress:dc,_opj_get_cstr_index:ec,_opj_get_cstr_info:fc,_opj_get_decoded_tile:gc,_opj_image_create:Pb,_opj_image_destroy:Qb,_opj_image_tile_create:Rb,_opj_read_header:hc,_opj_read_tile_header:ic,_opj_set_MCT:jc,_opj_set_decode_area:kc,_opj_set_decoded_resolution_factor:lc,_opj_set_default_decoder_parameters:mc,_opj_set_default_encoder_parameters:nc,_opj_set_error_handler:oc,_opj_set_info_handler:pc,_opj_set_warning_handler:qc,_opj_setup_decoder:rc,_opj_setup_encoder:sc,_opj_start_compress:tc,_opj_stream_create:hb,_opj_stream_create_buffer_stream:uc,_opj_stream_create_default_file_stream:vc,_opj_stream_create_file_stream:wc,_opj_stream_default_create:ib,_opj_stream_destroy:jb,_opj_stream_set_read_function:kb,_opj_stream_set_seek_function:lb,_opj_stream_set_skip_function:mb,_opj_stream_set_user_data:nb,_opj_stream_set_user_data_length:ob,_opj_stream_set_write_function:pb,_opj_version:xc,_opj_write_tile:yc,_rintf:kj,_sbrk:lj,dynCall_di:mj,dynCall_ii:nj,dynCall_iii:oj,dynCall_iiii:pj,dynCall_iiiii:qj,dynCall_iiiiii:rj,dynCall_iiiiiii:sj,dynCall_iiiiiiii:tj,dynCall_iiiiiiiiiiii:uj,dynCall_vi:vj,dynCall_vii:wj,dynCall_viii:xj,dynCall_viiii:yj,establishStackSpace:Za,getTempRet0:ab,runPostSets:Wi,setTempRet0:$a,setThrew:_a,stackAlloc:Wa,stackRestore:Ya,stackSave:Xa}})\r\n\r\n\r\n// EMSCRIPTEN_END_ASM\r\n(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var ___muldi3=Module[\"___muldi3\"]=asm[\"___muldi3\"];var ___udivdi3=Module[\"___udivdi3\"]=asm[\"___udivdi3\"];var ___uremdi3=Module[\"___uremdi3\"]=asm[\"___uremdi3\"];var _bitshift64Ashr=Module[\"_bitshift64Ashr\"]=asm[\"_bitshift64Ashr\"];var _bitshift64Lshr=Module[\"_bitshift64Lshr\"]=asm[\"_bitshift64Lshr\"];var _bitshift64Shl=Module[\"_bitshift64Shl\"]=asm[\"_bitshift64Shl\"];var _emscripten_replace_memory=Module[\"_emscripten_replace_memory\"]=asm[\"_emscripten_replace_memory\"];var _free=Module[\"_free\"]=asm[\"_free\"];var _i64Add=Module[\"_i64Add\"]=asm[\"_i64Add\"];var _i64Subtract=Module[\"_i64Subtract\"]=asm[\"_i64Subtract\"];var _jp2_decode=Module[\"_jp2_decode\"]=asm[\"_jp2_decode\"];var _jp2_encode=Module[\"_jp2_encode\"]=asm[\"_jp2_encode\"];var _jp2_version=Module[\"_jp2_version\"]=asm[\"_jp2_version\"];var _llvm_bswap_i32=Module[\"_llvm_bswap_i32\"]=asm[\"_llvm_bswap_i32\"];var _malloc=Module[\"_malloc\"]=asm[\"_malloc\"];var _memcpy=Module[\"_memcpy\"]=asm[\"_memcpy\"];var _memset=Module[\"_memset\"]=asm[\"_memset\"];var _opj_create_compress=Module[\"_opj_create_compress\"]=asm[\"_opj_create_compress\"];var _opj_create_decompress=Module[\"_opj_create_decompress\"]=asm[\"_opj_create_decompress\"];var _opj_decode=Module[\"_opj_decode\"]=asm[\"_opj_decode\"];var _opj_decode_tile_data=Module[\"_opj_decode_tile_data\"]=asm[\"_opj_decode_tile_data\"];var _opj_destroy_codec=Module[\"_opj_destroy_codec\"]=asm[\"_opj_destroy_codec\"];var _opj_destroy_cstr_index=Module[\"_opj_destroy_cstr_index\"]=asm[\"_opj_destroy_cstr_index\"];var _opj_destroy_cstr_info=Module[\"_opj_destroy_cstr_info\"]=asm[\"_opj_destroy_cstr_info\"];var _opj_dump_codec=Module[\"_opj_dump_codec\"]=asm[\"_opj_dump_codec\"];var _opj_encode=Module[\"_opj_encode\"]=asm[\"_opj_encode\"];var _opj_end_compress=Module[\"_opj_end_compress\"]=asm[\"_opj_end_compress\"];var _opj_end_decompress=Module[\"_opj_end_decompress\"]=asm[\"_opj_end_decompress\"];var _opj_get_cstr_index=Module[\"_opj_get_cstr_index\"]=asm[\"_opj_get_cstr_index\"];var _opj_get_cstr_info=Module[\"_opj_get_cstr_info\"]=asm[\"_opj_get_cstr_info\"];var _opj_get_decoded_tile=Module[\"_opj_get_decoded_tile\"]=asm[\"_opj_get_decoded_tile\"];var _opj_image_create=Module[\"_opj_image_create\"]=asm[\"_opj_image_create\"];var _opj_image_destroy=Module[\"_opj_image_destroy\"]=asm[\"_opj_image_destroy\"];var _opj_image_tile_create=Module[\"_opj_image_tile_create\"]=asm[\"_opj_image_tile_create\"];var _opj_read_header=Module[\"_opj_read_header\"]=asm[\"_opj_read_header\"];var _opj_read_tile_header=Module[\"_opj_read_tile_header\"]=asm[\"_opj_read_tile_header\"];var _opj_set_MCT=Module[\"_opj_set_MCT\"]=asm[\"_opj_set_MCT\"];var _opj_set_decode_area=Module[\"_opj_set_decode_area\"]=asm[\"_opj_set_decode_area\"];var _opj_set_decoded_resolution_factor=Module[\"_opj_set_decoded_resolution_factor\"]=asm[\"_opj_set_decoded_resolution_factor\"];var _opj_set_default_decoder_parameters=Module[\"_opj_set_default_decoder_parameters\"]=asm[\"_opj_set_default_decoder_parameters\"];var _opj_set_default_encoder_parameters=Module[\"_opj_set_default_encoder_parameters\"]=asm[\"_opj_set_default_encoder_parameters\"];var _opj_set_error_handler=Module[\"_opj_set_error_handler\"]=asm[\"_opj_set_error_handler\"];var _opj_set_info_handler=Module[\"_opj_set_info_handler\"]=asm[\"_opj_set_info_handler\"];var _opj_set_warning_handler=Module[\"_opj_set_warning_handler\"]=asm[\"_opj_set_warning_handler\"];var _opj_setup_decoder=Module[\"_opj_setup_decoder\"]=asm[\"_opj_setup_decoder\"];var _opj_setup_encoder=Module[\"_opj_setup_encoder\"]=asm[\"_opj_setup_encoder\"];var _opj_start_compress=Module[\"_opj_start_compress\"]=asm[\"_opj_start_compress\"];var _opj_stream_create=Module[\"_opj_stream_create\"]=asm[\"_opj_stream_create\"];var _opj_stream_create_buffer_stream=Module[\"_opj_stream_create_buffer_stream\"]=asm[\"_opj_stream_create_buffer_stream\"];var _opj_stream_create_default_file_stream=Module[\"_opj_stream_create_default_file_stream\"]=asm[\"_opj_stream_create_default_file_stream\"];var _opj_stream_create_file_stream=Module[\"_opj_stream_create_file_stream\"]=asm[\"_opj_stream_create_file_stream\"];var _opj_stream_default_create=Module[\"_opj_stream_default_create\"]=asm[\"_opj_stream_default_create\"];var _opj_stream_destroy=Module[\"_opj_stream_destroy\"]=asm[\"_opj_stream_destroy\"];var _opj_stream_set_read_function=Module[\"_opj_stream_set_read_function\"]=asm[\"_opj_stream_set_read_function\"];var _opj_stream_set_seek_function=Module[\"_opj_stream_set_seek_function\"]=asm[\"_opj_stream_set_seek_function\"];var _opj_stream_set_skip_function=Module[\"_opj_stream_set_skip_function\"]=asm[\"_opj_stream_set_skip_function\"];var _opj_stream_set_user_data=Module[\"_opj_stream_set_user_data\"]=asm[\"_opj_stream_set_user_data\"];var _opj_stream_set_user_data_length=Module[\"_opj_stream_set_user_data_length\"]=asm[\"_opj_stream_set_user_data_length\"];var _opj_stream_set_write_function=Module[\"_opj_stream_set_write_function\"]=asm[\"_opj_stream_set_write_function\"];var _opj_version=Module[\"_opj_version\"]=asm[\"_opj_version\"];var _opj_write_tile=Module[\"_opj_write_tile\"]=asm[\"_opj_write_tile\"];var _rintf=Module[\"_rintf\"]=asm[\"_rintf\"];var _sbrk=Module[\"_sbrk\"]=asm[\"_sbrk\"];var establishStackSpace=Module[\"establishStackSpace\"]=asm[\"establishStackSpace\"];var getTempRet0=Module[\"getTempRet0\"]=asm[\"getTempRet0\"];var runPostSets=Module[\"runPostSets\"]=asm[\"runPostSets\"];var setTempRet0=Module[\"setTempRet0\"]=asm[\"setTempRet0\"];var setThrew=Module[\"setThrew\"]=asm[\"setThrew\"];var stackAlloc=Module[\"stackAlloc\"]=asm[\"stackAlloc\"];var stackRestore=Module[\"stackRestore\"]=asm[\"stackRestore\"];var stackSave=Module[\"stackSave\"]=asm[\"stackSave\"];var dynCall_di=Module[\"dynCall_di\"]=asm[\"dynCall_di\"];var dynCall_ii=Module[\"dynCall_ii\"]=asm[\"dynCall_ii\"];var dynCall_iii=Module[\"dynCall_iii\"]=asm[\"dynCall_iii\"];var dynCall_iiii=Module[\"dynCall_iiii\"]=asm[\"dynCall_iiii\"];var dynCall_iiiii=Module[\"dynCall_iiiii\"]=asm[\"dynCall_iiiii\"];var dynCall_iiiiii=Module[\"dynCall_iiiiii\"]=asm[\"dynCall_iiiiii\"];var dynCall_iiiiiii=Module[\"dynCall_iiiiiii\"]=asm[\"dynCall_iiiiiii\"];var dynCall_iiiiiiii=Module[\"dynCall_iiiiiiii\"]=asm[\"dynCall_iiiiiiii\"];var dynCall_iiiiiiiiiiii=Module[\"dynCall_iiiiiiiiiiii\"]=asm[\"dynCall_iiiiiiiiiiii\"];var dynCall_vi=Module[\"dynCall_vi\"]=asm[\"dynCall_vi\"];var dynCall_vii=Module[\"dynCall_vii\"]=asm[\"dynCall_vii\"];var dynCall_viii=Module[\"dynCall_viii\"]=asm[\"dynCall_viii\"];var dynCall_viiii=Module[\"dynCall_viiii\"]=asm[\"dynCall_viiii\"];Module[\"asm\"]=asm;Module[\"ccall\"]=ccall;Module[\"getValue\"]=getValue;Module[\"writeArrayToMemory\"]=writeArrayToMemory;if(memoryInitializer){if(!isDataURI(memoryInitializer)){if(typeof Module[\"locateFile\"]===\"function\"){memoryInitializer=Module[\"locateFile\"](memoryInitializer)}else if(Module[\"memoryInitializerPrefixURL\"]){memoryInitializer=Module[\"memoryInitializerPrefixURL\"]+memoryInitializer}}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module[\"readBinary\"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency(\"memory initializer\");var applyMemoryInitializer=(function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module[\"memoryInitializerRequest\"])delete Module[\"memoryInitializerRequest\"].response;removeRunDependency(\"memory initializer\")});function doBrowserLoad(){Module[\"readAsync\"](memoryInitializer,applyMemoryInitializer,(function(){throw\"could not load memory initializer \"+memoryInitializer}))}var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module[\"memoryInitializerRequest\"]){function useRequest(){var request=Module[\"memoryInitializerRequest\"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module[\"memoryInitializerRequestURL\"]);if(data){response=data.buffer}else{console.warn(\"a problem seems to have happened with Module.memoryInitializerRequest, status: \"+request.status+\", retrying \"+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module[\"memoryInitializerRequest\"].response){setTimeout(useRequest,0)}else{Module[\"memoryInitializerRequest\"].addEventListener(\"load\",useRequest)}}else{doBrowserLoad()}}}Module[\"then\"]=(function(func){if(Module[\"calledRun\"]){func(Module)}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=(function(){if(old)old();func(Module)})}return Module});function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module[\"calledRun\"])run();if(!Module[\"calledRun\"])dependenciesFulfilled=runCaller};function run(args){args=args||Module[\"arguments\"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module[\"calledRun\"])return;function doRun(){if(Module[\"calledRun\"])return;Module[\"calledRun\"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout((function(){setTimeout((function(){Module[\"setStatus\"](\"\")}),1);doRun()}),1)}else{doRun()}}Module[\"run\"]=run;function exit(status,implicit){if(implicit&&Module[\"noExitRuntime\"]&&status===0){return}if(Module[\"noExitRuntime\"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module[\"onExit\"])Module[\"onExit\"](status)}if(ENVIRONMENT_IS_NODE){process[\"exit\"](status)}Module[\"quit\"](status,new ExitStatus(status))}Module[\"exit\"]=exit;function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=\"\"}ABORT=true;EXITSTATUS=1;throw\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\"}Module[\"abort\"]=abort;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}Module[\"noExitRuntime\"]=true;run()\r\n\r\n\r\n\r\n\r\n\r\n\r\n return OpenJPEG;\r\n};\r\nif (typeof exports === 'object' && typeof module === 'object')\r\n module.exports = OpenJPEG;\r\nelse if (typeof define === 'function' && define['amd'])\r\n define([], function() { return OpenJPEG; });\r\nelse if (typeof exports === 'object')\r\n exports[\"OpenJPEG\"] = OpenJPEG;\r\n","'use strict';\n\nvar objectAssign = require('object-assign');\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n// NB: The URL to the CommonJS spec is kept just for tradition.\n// node-assert has evolved a lot since then, both in API and behavior.\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\n// Expose a strict only variant of assert\nfunction strict(value, message) {\n if (!value) fail(value, true, message, '==', strict);\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n for (var i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","'use strict';\n\n// VARIABLES //\n\nvar FLOAT32_VIEW = new Float32Array( 1 );\nvar UINT32_VIEW = new Uint32Array( FLOAT32_VIEW.buffer );\n\n// 1 11111111 00000000000000000000000 => 4286578688 => 0xff800000 (see IEEE 754-2008)\nvar NINF = 0xff800000;\n\n// Set the ArrayBuffer bit sequence:\nUINT32_VIEW[ 0 ] = NINF;\n\n\n// EXPORTS //\n\nmodule.exports = FLOAT32_VIEW[ 0 ];\n","'use strict';\n\n// VARIABLES //\n\nvar FLOAT32_VIEW = new Float32Array( 1 );\nvar UINT32_VIEW = new Uint32Array( FLOAT32_VIEW.buffer );\n\n// 0 11111111 00000000000000000000000 => 2139095040 => 0x7f800000 (see IEEE 754-2008)\nvar PINF = 0x7f800000;\n\n// Set the ArrayBuffer bit sequence:\nUINT32_VIEW[ 0 ] = PINF;\n\n\n// EXPORTS //\n\nmodule.exports = FLOAT32_VIEW[ 0 ];\n","/*! dicom-parser - 1.8.2 - 2018-12-05 | (c) 2017 Chris Hafey | https://github.com/cornerstonejs/dicomParser */\n!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"dicom-parser\",[],t):\"object\"==typeof exports?exports[\"dicom-parser\"]=t():e.dicomParser=t()}(this,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,\"__esModule\",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=79)}([function(e,t){var r;r=function(){return this}();try{r=r||Function(\"return this\")()||(0,eval)(\"this\")}catch(e){\"object\"==typeof window&&(r=window)}e.exports=r},function(e,t,r){\"use strict\";(function(e){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nvar n=r(73),i=r(72),a=r(38);function o(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(o()=o())throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+o().toString(16)+\" bytes\");return 0|e}function p(e,t){if(l.isBuffer(e))return e.length;if(\"undefined\"!=typeof ArrayBuffer&&\"function\"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;\"string\"!=typeof e&&(e=\"\"+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":case void 0:return Z(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r>>>1;case\"base64\":return j(e).length;default:if(n)return Z(e).length;t=(\"\"+t).toLowerCase(),n=!0}}function g(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function m(e,t,r,n,i){if(0===e.length)return-1;if(\"string\"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if(\"string\"==typeof t&&(t=l.from(t,n)),l.isBuffer(t))return 0===t.length?-1:_(e,t,r,n,i);if(\"number\"==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&\"function\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):_(e,[t],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function _(e,t,r,n,i){var a,o=1,s=e.length,l=t.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(e.length<2||t.length<2)return-1;o=2,s/=2,l/=2,r/=2}function f(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(i){var u=-1;for(a=r;as&&(r=s-l),a=r;a>=0;a--){for(var h=!0,d=0;di&&(n=i):n=i;var a=t.length;if(a%2!=0)throw new TypeError(\"Invalid hex string\");n>a/2&&(n=a/2);for(var o=0;o>8,i=r%256,a.push(i),a.push(n);return a}(t,e.length-r),e,r,n)}function S(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function k(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:f>223?3:f>191?2:1;if(i+h<=r)switch(h){case 1:f<128&&(u=f);break;case 2:128==(192&(a=e[i+1]))&&(l=(31&f)<<6|63&a)>127&&(u=l);break;case 3:a=e[i+1],o=e[i+2],128==(192&a)&&128==(192&o)&&(l=(15&f)<<12|(63&a)<<6|63&o)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:a=e[i+1],o=e[i+2],s=e[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&(l=(15&f)<<18|(63&a)<<12|(63&o)<<6|63&s)>65535&&l<1114112&&(u=l)}null===u?(u=65533,h=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),i+=h}return function(e){var t=e.length;if(t<=A)return String.fromCharCode.apply(String,e);var r=\"\",n=0;for(;nthis.length)return\"\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\"\";if((r>>>=0)<=(t>>>=0))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return D(this,t,r);case\"utf8\":case\"utf-8\":return k(this,t,r);case\"ascii\":return P(this,t,r);case\"latin1\":case\"binary\":return T(this,t,r);case\"base64\":return S(this,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return O(this,t,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}.apply(this,arguments)},l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){var e=\"\",r=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString(\"hex\",0,r).match(/.{2}/g).join(\" \"),this.length>r&&(e+=\" ... \")),\"\"},l.prototype.compare=function(e,t,r,n,i){if(!l.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError(\"out of range index\");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,i>>>=0,this===e)return 0;for(var a=i-n,o=r-t,s=Math.min(a,o),f=this.slice(n,i),u=e.slice(t,r),h=0;hi)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");for(var a=!1;;)switch(n){case\"hex\":return y(this,e,t,r);case\"utf8\":case\"utf-8\":return b(this,e,t,r);case\"ascii\":return v(this,e,t,r);case\"latin1\":case\"binary\":return w(this,e,t,r);case\"base64\":return E(this,e,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return x(this,e,t,r);default:if(a)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),a=!0}},l.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};var A=4096;function P(e,t,r){var n=\"\";r=Math.min(e.length,r);for(var i=t;in)&&(r=n);for(var i=\"\",a=t;ar)throw new RangeError(\"Trying to access beyond buffer length\")}function R(e,t,r,n,i,a){if(!l.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError(\"Index out of range\")}function L(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,a=Math.min(e.length-r,2);i>>8*(n?i:1-i)}function F(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,a=Math.min(e.length-r,4);i>>8*(n?i:3-i)&255}function B(e,t,r,n,i,a){if(r+n>e.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function U(e,t,r,n,a){return a||B(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function M(e,t,r,n,a){return a||B(e,0,r,8),i.write(e,t,r,n,52,8),r+8}l.prototype.slice=function(e,t){var r,n=this.length;if(e=~~e,t=void 0===t?n:~~t,e<0?(e+=n)<0&&(e=0):e>n&&(e=n),t<0?(t+=n)<0&&(t=0):t>n&&(t=n),t0&&(i*=256);)n+=this[e+--t]*i;return n},l.prototype.readUInt8=function(e,t){return t||I(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,t){return t||I(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,t){return t||I(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,t){return t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,t){return t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||I(e,t,this.length);for(var n=this[e],i=1,a=0;++a=(i*=128)&&(n-=Math.pow(2,8*t)),n},l.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||I(e,t,this.length);for(var n=t,i=1,a=this[e+--n];n>0&&(i*=256);)a+=this[e+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*t)),a},l.prototype.readInt8=function(e,t){return t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||I(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt16BE=function(e,t){t||I(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt32LE=function(e,t){return t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||I(e,4,this.length),i.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||I(e,4,this.length),i.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||I(e,8,this.length),i.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||I(e,8,this.length),i.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t|=0,r|=0,n)||R(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[t]=255&e;++a=0&&(a*=256);)this[t+i]=e/a&255;return t+r},l.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},l.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):F(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);R(this,e,t,r,i-1,-i)}var a=0,o=1,s=0;for(this[t]=255&e;++a>0)-s&255;return t+r},l.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);R(this,e,t,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[t+a]=255&e;--a>=0&&(o*=256);)e<0&&0===s&&0!==this[t+a+1]&&(s=1),this[t+a]=(e/o>>0)-s&255;return t+r},l.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):F(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,r){return U(this,e,t,!0,r)},l.prototype.writeFloatBE=function(e,t,r){return U(this,e,t,!1,r)},l.prototype.writeDoubleLE=function(e,t,r){return M(this,e,t,!0,r)},l.prototype.writeDoubleBE=function(e,t,r){return M(this,e,t,!1,r)},l.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError(\"sourceStart out of bounds\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),e.length-t=0;--i)e[i+t]=this[i+r];else if(a<1e3||!l.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),\"number\"==typeof e)for(a=t;a55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;a.push(r)}else if(r<2048){if((t-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\"Invalid code point\");if((t-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function j(e){return n.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\\s+|\\s+$/g,\"\")}(e).replace(N,\"\")).length<2)return\"\";for(;e.length%4!=0;)e+=\"=\";return e}(e))}function C(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}}).call(this,r(0))},function(e,t,r){\"use strict\";var n=r(10),i=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};e.exports=h;var a=r(6);a.inherits=r(5);var o=r(35),s=r(18);a.inherits(h,o);for(var l=i(s.prototype),f=0;f1)for(var r=1;r0){var r=(0,i.readFixedString)(this.byteArray,t.dataOffset,t.length).match(/\\\\/g);return null===r?1:r.length+1}}},{key:\"string\",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){var n=(0,i.readFixedString)(this.byteArray,r.dataOffset,r.length);return t>=0?n.split(\"\\\\\")[t].trim():n.trim()}}},{key:\"text\",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){var n=(0,i.readFixedString)(this.byteArray,r.dataOffset,r.length);return t>=0?n.split(\"\\\\\")[t].replace(/ +$/,\"\"):n.replace(/ +$/,\"\")}}},{key:\"floatString\",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){t=void 0!==t?t:0;var n=this.string(e,t);if(void 0!==n)return parseFloat(n)}}},{key:\"intString\",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){t=void 0!==t?t:0;var n=this.string(e,t);if(void 0!==n)return parseInt(n)}}},{key:\"attributeTag\",value:function(e){var t=this.elements[e];if(t&&4===t.length){var r=a(t,this.byteArrayParser).readUint16,n=this.byteArray,i=t.dataOffset;return\"x\"+(\"00000000\"+(256*r(n,i)*256+r(n,i+2)).toString(16)).substr(-8)}}}]),e}();t.default=o},function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)i(r,n)&&(e[n]=r[n])}}return e},t.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var a={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var a=0;a=n.length)throw\"dicomParser.ByteStream: parameter 'position' cannot be greater than or equal to 'byteArray' length\";this.byteArrayParser=r,this.byteArray=n,this.position=i||0,this.warnings=[]}return i(t,[{key:\"seek\",value:function(e){if(this.position+e<0)throw\"dicomParser.ByteStream.prototype.seek: cannot seek to position < 0\";this.position+=e}},{key:\"readByteStream\",value:function(e){if(this.position+e>this.byteArray.length)throw\"dicomParser.ByteStream.prototype.readByteStream: readByteStream - buffer overread\";var r=(0,o.default)(this.byteArray,this.position,e);return this.position+=e,new t(this.byteArrayParser,r)}},{key:\"readUint16\",value:function(){var e=this.byteArrayParser.readUint16(this.byteArray,this.position);return this.position+=2,e}},{key:\"readUint32\",value:function(){var e=this.byteArrayParser.readUint32(this.byteArray,this.position);return this.position+=4,e}},{key:\"readFixedString\",value:function(e){var t=(0,s.readFixedString)(this.byteArray,this.position,e);return this.position+=e,t}}]),t}();t.default=l}).call(this,r(1).Buffer)},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){if(void 0===e)throw\"dicomParser.readSequenceItem: missing required parameter 'byteStream'\";var t={tag:(0,a.default)(e),length:e.readUint32(),dataOffset:e.position};if(\"xfffee000\"!==t.tag)throw\"dicomParser.readSequenceItem: item tag (FFFE,E000) not found at offset \"+e.position;return t};var n,i=r(4),a=(n=i)&&n.__esModule?n:{default:n}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.readFixedString=function(e,t,r){if(r<0)throw\"dicomParser.readFixedString - length cannot be less than 0\";if(t+r>e.length)throw\"dicomParser.readFixedString: attempt to read past end of buffer\";for(var n,i=\"\",a=0;a3&&void 0!==arguments[3]?arguments[3]:{};if(r=void 0===r?t.byteArray.length:r,void 0===t)throw\"dicomParser.parseDicomDataSetExplicit: missing required parameter 'byteStream'\";if(rt.byteArray.length)throw\"dicomParser.parseDicomDataSetExplicit: invalid value for parameter 'maxP osition'\";var a=e.elements;for(;t.positionr)throw\"dicomParser:parseDicomDataSetExplicit: buffer overrun\"},t.parseDicomDataSetImplicit=function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(r=void 0===r?e.byteArray.length:r,void 0===t)throw\"dicomParser.parseDicomDataSetImplicit: missing required parameter 'byteStream'\";if(rt.byteArray.length)throw\"dicomParser.parseDicomDataSetImplicit: invalid value for parameter 'maxPosition'\";var a=e.elements;for(;t.position= 0\";if(r>=t.fragments.length)throw\"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragmentIndex' must be < number of fragments\";if(s<1)throw\"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'numFragments' must be > 0\";if(r+s>t.fragments.length)throw\"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragment' + 'numFragments' < number of fragments\";var u=new i.default(e.byteArrayParser,e.byteArray,t.dataOffset),h=(0,a.default)(u);if(\"xfffee000\"!==h.tag)throw\"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000\";u.seek(h.length);var d=u.position;if(1===s)return(0,o.default)(u.byteArray,d+f[r].offset+8,f[r].length);for(var c=l(f,r,s),p=(0,n.default)(u.byteArray,c),g=0,m=r;m-1?n:a.nextTick;y.WritableState=_;var f=r(6);f.inherits=r(5);var u={deprecate:r(61)},h=r(34),d=r(9).Buffer,c=i.Uint8Array||function(){};var p,g=r(33);function m(){}function _(e,t){s=s||r(2),e=e||{};var n=t instanceof s;this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var i=e.highWaterMark,f=e.writableHighWaterMark,u=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(f||0===f)?f:u,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var h=!1===e.decodeStrings;this.decodeStrings=!h,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var r=e._writableState,n=r.sync,i=r.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function(e,t,r,n,i){--t.pendingcb,r?(a.nextTick(i,n),a.nextTick(S,e,t),e._writableState.errorEmitted=!0,e.emit(\"error\",n)):(i(n),e._writableState.errorEmitted=!0,e.emit(\"error\",n),S(e,t))}(e,r,n,t,i);else{var o=E(r);o||r.corked||r.bufferProcessing||!r.bufferedRequest||w(e,r),n?l(v,e,r,o,i):v(e,r,o,i)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function y(e){if(s=s||r(2),!(p.call(y,this)||this instanceof s))return new y(e);this._writableState=new _(e,this),this.writable=!0,e&&(\"function\"==typeof e.write&&(this._write=e.write),\"function\"==typeof e.writev&&(this._writev=e.writev),\"function\"==typeof e.destroy&&(this._destroy=e.destroy),\"function\"==typeof e.final&&(this._final=e.final)),h.call(this)}function b(e,t,r,n,i,a,o){t.writelen=n,t.writecb=o,t.writing=!0,t.sync=!0,r?e._writev(i,t.onwrite):e._write(i,a,t.onwrite),t.sync=!1}function v(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit(\"drain\"))}(e,t),t.pendingcb--,n(),S(e,t)}function w(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,i=new Array(n),a=t.corkedRequestsFree;a.entry=r;for(var s=0,l=!0;r;)i[s]=r,r.isBuf||(l=!1),r=r.next,s+=1;i.allBuffers=l,b(e,t,!0,t.length,i,\"\",a.finish),t.pendingcb++,t.lastBufferedRequest=null,a.next?(t.corkedRequestsFree=a.next,a.next=null):t.corkedRequestsFree=new o(t),t.bufferedRequestCount=0}else{for(;r;){var f=r.chunk,u=r.encoding,h=r.callback;if(b(e,t,!1,t.objectMode?1:f.length,f,u,h),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function E(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function x(e,t){e._final(function(r){t.pendingcb--,r&&e.emit(\"error\",r),t.prefinished=!0,e.emit(\"prefinish\"),S(e,t)})}function S(e,t){var r=E(t);return r&&(!function(e,t){t.prefinished||t.finalCalled||(\"function\"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,a.nextTick(x,e,t)):(t.prefinished=!0,e.emit(\"prefinish\")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit(\"finish\"))),r}f.inherits(y,h),_.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(_.prototype,\"buffer\",{get:u.deprecate(function(){return this.getBuffer()},\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(e){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(y,Symbol.hasInstance,{value:function(e){return!!p.call(this,e)||this===y&&(e&&e._writableState instanceof _)}})):p=function(e){return e instanceof this},y.prototype.pipe=function(){this.emit(\"error\",new Error(\"Cannot pipe, not readable\"))},y.prototype.write=function(e,t,r){var n,i=this._writableState,o=!1,s=!i.objectMode&&(n=e,d.isBuffer(n)||n instanceof c);return s&&!d.isBuffer(e)&&(e=function(e){return d.from(e)}(e)),\"function\"==typeof t&&(r=t,t=null),s?t=\"buffer\":t||(t=i.defaultEncoding),\"function\"!=typeof r&&(r=m),i.ended?function(e,t){var r=new Error(\"write after end\");e.emit(\"error\",r),a.nextTick(t,r)}(this,r):(s||function(e,t,r,n){var i=!0,o=!1;return null===r?o=new TypeError(\"May not write null values to stream\"):\"string\"==typeof r||void 0===r||t.objectMode||(o=new TypeError(\"Invalid non-string/buffer chunk\")),o&&(e.emit(\"error\",o),a.nextTick(n,o),i=!1),i}(this,i,e,r))&&(i.pendingcb++,o=function(e,t,r,n,i,a){if(!r){var o=function(e,t,r){e.objectMode||!1===e.decodeStrings||\"string\"!=typeof t||(t=d.from(t,r));return t}(t,n,i);n!==o&&(r=!0,i=\"buffer\",n=o)}var s=t.objectMode?1:n.length;t.length+=s;var l=t.length-1))throw new TypeError(\"Unknown encoding: \"+e);return this._writableState.defaultEncoding=e,this},y.prototype._write=function(e,t,r){r(new Error(\"_write() is not implemented\"))},y.prototype._writev=null,y.prototype.end=function(e,t,r){var n=this._writableState;\"function\"==typeof e?(r=e,e=null,t=null):\"function\"==typeof t&&(r=t,t=null),null!==e&&void 0!==e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||function(e,t,r){t.ending=!0,S(e,t),r&&(t.finished?a.nextTick(r):e.once(\"finish\",r));t.ended=!0,e.writable=!1}(this,n,r)},Object.defineProperty(y.prototype,\"destroyed\",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),y.prototype.destroy=g.destroy,y.prototype._undestroy=g.undestroy,y.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,r(3),r(63).setImmediate,r(0))},function(e,t,r){(t=e.exports=r(35)).Stream=t,t.Readable=t,t.Writable=r(18),t.Duplex=r(2),t.Transform=r(31),t.PassThrough=r(60)},function(e,t){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function n(e){return\"function\"==typeof e}function i(e){return\"object\"==typeof e&&null!==e}function a(e){return void 0===e}e.exports=r,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if(\"number\"!=typeof e||e<0||isNaN(e))throw TypeError(\"n must be a positive number\");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,r,o,s,l,f;if(this._events||(this._events={}),\"error\"===e&&(!this._events.error||i(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var u=new Error('Uncaught, unspecified \"error\" event. ('+t+\")\");throw u.context=t,u}if(a(r=this._events[e]))return!1;if(n(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),r.apply(this,s)}else if(i(r))for(s=Array.prototype.slice.call(arguments,1),o=(f=r.slice()).length,l=0;l0&&this._events[e].length>o&&(this._events[e].warned=!0,console.error(\"(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.\",this._events[e].length),\"function\"==typeof console.trace&&console.trace()),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){if(!n(t))throw TypeError(\"listener must be a function\");var r=!1;function i(){this.removeListener(e,i),r||(r=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},r.prototype.removeListener=function(e,t){var r,a,o,s;if(!n(t))throw TypeError(\"listener must be a function\");if(!this._events||!this._events[e])return this;if(o=(r=this._events[e]).length,a=-1,r===t||n(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit(\"removeListener\",e,t);else if(i(r)){for(s=o;s-- >0;)if(r[s]===t||r[s].listener&&r[s].listener===t){a=s;break}if(a<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(a,1),this._events.removeListener&&this.emit(\"removeListener\",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)\"removeListener\"!==t&&this.removeAllListeners(t);return this.removeAllListeners(\"removeListener\"),this._events={},this}if(n(r=this._events[e]))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){return this._events&&this._events[e]?n(this._events[e])?[this._events[e]]:this._events[e].slice():[]},r.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(n(t))return 1;if(t)return t.length}return 0},r.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={readUint16:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readUint16: position cannot be less than 0\";if(t+2>e.length)throw\"littleEndianByteArrayParser.readUint16: attempt to read past end of buffer\";return e[t]+256*e[t+1]},readInt16:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readInt16: position cannot be less than 0\";if(t+2>e.length)throw\"littleEndianByteArrayParser.readInt16: attempt to read past end of buffer\";var r=e[t]+(e[t+1]<<8);return 32768&r&&(r=r-65535-1),r},readUint32:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readUint32: position cannot be less than 0\";if(t+4>e.length)throw\"littleEndianByteArrayParser.readUint32: attempt to read past end of buffer\";return e[t]+256*e[t+1]+256*e[t+2]*256+256*e[t+3]*256*256},readInt32:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readInt32: position cannot be less than 0\";if(t+4>e.length)throw\"littleEndianByteArrayParser.readInt32: attempt to read past end of buffer\";return e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24)},readFloat:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readFloat: position cannot be less than 0\";if(t+4>e.length)throw\"littleEndianByteArrayParser.readFloat: attempt to read past end of buffer\";var r=new Uint8Array(4);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readDouble: position cannot be less than 0\";if(t+8>e.length)throw\"littleEndianByteArrayParser.readDouble: attempt to read past end of buffer\";var r=new Uint8Array(8);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],r[4]=e[t+4],r[5]=e[t+5],r[6]=e[t+6],r[7]=e[t+7],new Float64Array(r.buffer)[0]}}},function(e,t,r){\"use strict\";(function(e){Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(t,r){if(void 0!==e&&t instanceof e)return e.alloc(r);if(t instanceof Uint8Array)return new Uint8Array(r);throw\"dicomParser.alloc: unknown type for byteArray\"}}).call(this,r(1).Buffer)},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,r){if(void 0===e)throw\"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'\";var o={tag:(0,a.default)(e),length:e.readUint32(),dataOffset:e.position};4294967295===o.length&&(o.hadUndefinedLength=!0);if(o.tag===t)return o;if(s(o,e,r))return(0,i.default)(e,o),o;if(o.hadUndefinedLength)return(0,n.default)(e,o),o;return e.seek(o.length),o};var n=o(r(24)),i=o(r(39)),a=o(r(4));function o(e){return e&&e.__esModule?e:{default:e}}var s=function(e,t,r){if(void 0!==r)return\"SQ\"===r(e.tag);if(t.position+4<=t.byteArray.length){var n=(0,a.default)(t);return t.seek(-4),\"xfffee000\"===n||\"xfffee0dd\"===n}return t.warnings.push(\"eof encountered before finding sequence item tag or sequence delimiter tag in peeking to determine VR\"),!1}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){if(void 0===e)throw\"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'\";var r=e.byteArray.length-8;for(;e.position<=r;){var n=e.readUint16();if(65534===n){var i=e.readUint16();if(57357===i){var a=e.readUint32();return 0!==a&&e.warnings(\"encountered non zero length following item delimiter at position \"+(e.position-4)+\" while reading element of undefined length with tag \"+t.tag),void(t.length=e.position-t.dataOffset)}}}t.length=e.byteArray.length-t.dataOffset,e.seek(e.byteArray.length-e.position)}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n={AE:!0,AS:!0,AT:!1,CS:!0,DA:!0,DS:!0,DT:!0,FL:!1,FD:!1,IS:!0,LO:!0,LT:!0,OB:!1,OD:!1,OF:!1,OW:!1,PN:!0,SH:!0,SL:!1,SQ:!1,SS:!1,ST:!0,TM:!0,UI:!0,UL:!1,UN:void 0,UR:!0,US:!1,UT:!0};t.isStringVr=function(e){return n[e]},t.isPrivateTag=function(e){return parseInt(e[4],10)%2==1},t.parsePN=function(e){if(void 0!==e){var t=e.split(\"^\");return{familyName:t[0],givenName:t[1],middleName:t[2],prefix:t[3],suffix:t[4]}}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,r,n,i){if(n=n||t.basicOffsetTable,i=i||t.fragments,void 0===e)throw\"dicomParser.readEncapsulatedImageFrame: missing required parameter 'dataSet'\";if(void 0===t)throw\"dicomParser.readEncapsulatedImageFrame: missing required parameter 'pixelDataElement'\";if(void 0===r)throw\"dicomParser.readEncapsulatedImageFrame: missing required parameter 'frameIndex'\";if(void 0===n)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' does not have basicOffsetTable\";if(\"x7fe00010\"!==t.tag)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to non pixel data tag (expected tag = x7fe00010)\";if(!0!==t.encapsulatedPixelData)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data\";if(!0!==t.hadUndefinedLength)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have undefined length\";if(void 0===t.fragments)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have fragments\";if(0===n.length)throw\"dicomParser.readEncapsulatedImageFrame: basicOffsetTable has zero entries\";if(r<0)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be >= 0\";if(r>=n.length)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be < basicOffsetTable.length\";var l=n[r],f=o(i,l);if(void 0===f)throw\"dicomParser.readEncapsulatedImageFrame: unable to find fragment that matches basic offset table entry\";var u=s(r,n,i,f);return(0,a.default)(e,t,f,u,i)};var n,i=r(17),a=(n=i)&&n.__esModule?n:{default:n};var o=function(e,t){for(var r=0;r>>1:e>>>1;t[r]=e}return t}();e.exports=function(e,t,r,i){var a=n,o=i+r;e^=-1;for(var s=i;s>>8^a[255&(e^t[s])];return-1^e}},function(e,t,r){\"use strict\";e.exports=function(e,t,r,n){for(var i=65535&e|0,a=e>>>16&65535|0,o=0;0!==r;){r-=o=r>2e3?2e3:r;do{a=a+(i=i+t[n++]|0)|0}while(--o);i%=65521,a%=65521}return i|a<<16|0}},function(e,t,r){(function(e,n){var i=/%[sdj%]/g;t.format=function(e){if(!_(e)){for(var t=[],r=0;r=a)return e;switch(e){case\"%s\":return String(n[r++]);case\"%d\":return Number(n[r++]);case\"%j\":try{return JSON.stringify(n[r++])}catch(e){return\"[Circular]\"}default:return e}}),l=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),p(r)?n.showHidden=r:r&&t._extend(n,r),y(n.showHidden)&&(n.showHidden=!1),y(n.depth)&&(n.depth=2),y(n.colors)&&(n.colors=!1),y(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),u(n,e,n.depth)}function l(e,t){var r=s.styles[t];return r?\"\u001b[\"+s.colors[r][0]+\"m\"+e+\"\u001b[\"+s.colors[r][1]+\"m\":e}function f(e,t){return e}function u(e,r,n){if(e.customInspect&&r&&x(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,e);return _(i)||(i=u(e,i,n)),i}var a=function(e,t){if(y(t))return e.stylize(\"undefined\",\"undefined\");if(_(t)){var r=\"'\"+JSON.stringify(t).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return e.stylize(r,\"string\")}if(m(t))return e.stylize(\"\"+t,\"number\");if(p(t))return e.stylize(\"\"+t,\"boolean\");if(g(t))return e.stylize(\"null\",\"null\")}(e,r);if(a)return a;var o=Object.keys(r),s=function(e){var t={};return e.forEach(function(e,r){t[e]=!0}),t}(o);if(e.showHidden&&(o=Object.getOwnPropertyNames(r)),E(r)&&(o.indexOf(\"message\")>=0||o.indexOf(\"description\")>=0))return h(r);if(0===o.length){if(x(r)){var l=r.name?\": \"+r.name:\"\";return e.stylize(\"[Function\"+l+\"]\",\"special\")}if(b(r))return e.stylize(RegExp.prototype.toString.call(r),\"regexp\");if(w(r))return e.stylize(Date.prototype.toString.call(r),\"date\");if(E(r))return h(r)}var f,v=\"\",S=!1,k=[\"{\",\"}\"];(c(r)&&(S=!0,k=[\"[\",\"]\"]),x(r))&&(v=\" [Function\"+(r.name?\": \"+r.name:\"\")+\"]\");return b(r)&&(v=\" \"+RegExp.prototype.toString.call(r)),w(r)&&(v=\" \"+Date.prototype.toUTCString.call(r)),E(r)&&(v=\" \"+h(r)),0!==o.length||S&&0!=r.length?n<0?b(r)?e.stylize(RegExp.prototype.toString.call(r),\"regexp\"):e.stylize(\"[Object]\",\"special\"):(e.seen.push(r),f=S?function(e,t,r,n,i){for(var a=[],o=0,s=t.length;o=0&&0,e+t.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1},0)>60)return r[0]+(\"\"===t?\"\":t+\"\\n \")+\" \"+e.join(\",\\n \")+\" \"+r[1];return r[0]+t+\" \"+e.join(\", \")+\" \"+r[1]}(f,v,k)):k[0]+v+k[1]}function h(e){return\"[\"+Error.prototype.toString.call(e)+\"]\"}function d(e,t,r,n,i,a){var o,s,l;if((l=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?s=l.set?e.stylize(\"[Getter/Setter]\",\"special\"):e.stylize(\"[Getter]\",\"special\"):l.set&&(s=e.stylize(\"[Setter]\",\"special\")),P(n,i)||(o=\"[\"+i+\"]\"),s||(e.seen.indexOf(l.value)<0?(s=g(r)?u(e,l.value,null):u(e,l.value,r-1)).indexOf(\"\\n\")>-1&&(s=a?s.split(\"\\n\").map(function(e){return\" \"+e}).join(\"\\n\").substr(2):\"\\n\"+s.split(\"\\n\").map(function(e){return\" \"+e}).join(\"\\n\")):s=e.stylize(\"[Circular]\",\"special\")),y(o)){if(a&&i.match(/^\\d+$/))return s;(o=JSON.stringify(\"\"+i)).match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(o=o.substr(1,o.length-2),o=e.stylize(o,\"name\")):(o=o.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),o=e.stylize(o,\"string\"))}return o+\": \"+s}function c(e){return Array.isArray(e)}function p(e){return\"boolean\"==typeof e}function g(e){return null===e}function m(e){return\"number\"==typeof e}function _(e){return\"string\"==typeof e}function y(e){return void 0===e}function b(e){return v(e)&&\"[object RegExp]\"===S(e)}function v(e){return\"object\"==typeof e&&null!==e}function w(e){return v(e)&&\"[object Date]\"===S(e)}function E(e){return v(e)&&(\"[object Error]\"===S(e)||e instanceof Error)}function x(e){return\"function\"==typeof e}function S(e){return Object.prototype.toString.call(e)}function k(e){return e<10?\"0\"+e.toString(10):e.toString(10)}t.debuglog=function(e){if(y(a)&&(a=n.env.NODE_DEBUG||\"\"),e=e.toUpperCase(),!o[e])if(new RegExp(\"\\\\b\"+e+\"\\\\b\",\"i\").test(a)){var r=n.pid;o[e]=function(){var n=t.format.apply(t,arguments);console.error(\"%s %d: %s\",e,r,n)}}else o[e]=function(){};return o[e]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:\"cyan\",number:\"yellow\",boolean:\"yellow\",undefined:\"grey\",null:\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},t.isArray=c,t.isBoolean=p,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=m,t.isString=_,t.isSymbol=function(e){return\"symbol\"==typeof e},t.isUndefined=y,t.isRegExp=b,t.isObject=v,t.isDate=w,t.isError=E,t.isFunction=x,t.isPrimitive=function(e){return null===e||\"boolean\"==typeof e||\"number\"==typeof e||\"string\"==typeof e||\"symbol\"==typeof e||void 0===e},t.isBuffer=r(54);var A=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){var e,r;console.log(\"%s - %s\",(e=new Date,r=[k(e.getHours()),k(e.getMinutes()),k(e.getSeconds())].join(\":\"),[e.getDate(),A[e.getMonth()],r].join(\" \")),t.format.apply(t,arguments))},t.inherits=r(53),t._extend=function(e,t){if(!t||!v(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e}}).call(this,r(0),r(3))},function(e,t,r){\"use strict\";(function(t){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction n(e,t){if(e===t)return 0;for(var r=e.length,n=t.length,i=0,a=Math.min(r,n);i=0;f--)if(u[f]!==h[f])return!1;for(f=u.length-1;f>=0;f--)if(l=u[f],!y(e[l],t[l],r,n))return!1;return!0}(e,t,r,o))}return r?e===t:e==t}function b(e){return\"[object Arguments]\"==Object.prototype.toString.call(e)}function v(e,t){if(!e||!t)return!1;if(\"[object RegExp]\"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function w(e,t,r,n){var i;if(\"function\"!=typeof t)throw new TypeError('\"block\" argument must be a function');\"string\"==typeof r&&(n=r,r=null),i=function(e){var t;try{e()}catch(e){t=e}return t}(t),n=(r&&r.name?\" (\"+r.name+\").\":\".\")+(n?\" \"+n:\".\"),e&&!i&&m(i,r,\"Missing expected exception\"+n);var o=\"string\"==typeof n,s=!e&&a.isError(i),l=!e&&i&&!r;if((s&&o&&v(i,r)||l)&&m(i,r,\"Got unwanted exception\"+n),e&&i&&r&&!v(i,r)||!e&&i)throw i}h.AssertionError=function(e){var t;this.name=\"AssertionError\",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=p(g((t=this).actual),128)+\" \"+t.operator+\" \"+p(g(t.expected),128),this.generatedMessage=!0);var r=e.stackStartFunction||m;if(Error.captureStackTrace)Error.captureStackTrace(this,r);else{var n=new Error;if(n.stack){var i=n.stack,a=c(r),o=i.indexOf(\"\\n\"+a);if(o>=0){var s=i.indexOf(\"\\n\",o+1);i=i.substring(s+1)}this.stack=i}}},a.inherits(h.AssertionError,Error),h.fail=m,h.ok=_,h.equal=function(e,t,r){e!=t&&m(e,t,r,\"==\",h.equal)},h.notEqual=function(e,t,r){e==t&&m(e,t,r,\"!=\",h.notEqual)},h.deepEqual=function(e,t,r){y(e,t,!1)||m(e,t,r,\"deepEqual\",h.deepEqual)},h.deepStrictEqual=function(e,t,r){y(e,t,!0)||m(e,t,r,\"deepStrictEqual\",h.deepStrictEqual)},h.notDeepEqual=function(e,t,r){y(e,t,!1)&&m(e,t,r,\"notDeepEqual\",h.notDeepEqual)},h.notDeepStrictEqual=function e(t,r,n){y(t,r,!0)&&m(t,r,n,\"notDeepStrictEqual\",e)},h.strictEqual=function(e,t,r){e!==t&&m(e,t,r,\"===\",h.strictEqual)},h.notStrictEqual=function(e,t,r){e===t&&m(e,t,r,\"!==\",h.notStrictEqual)},h.throws=function(e,t,r){w(!0,e,t,r)},h.doesNotThrow=function(e,t,r){w(!1,e,t,r)},h.ifError=function(e){if(e)throw e};var E=Object.keys||function(e){var t=[];for(var r in e)o.call(e,r)&&t.push(r);return t}}).call(this,r(0))},function(e,t,r){\"use strict\";e.exports=a;var n=r(2),i=r(6);function a(e){if(!(this instanceof a))return new a(e);n.call(this,e),this._transformState={afterTransform:function(e,t){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(!n)return this.emit(\"error\",new Error(\"write callback called multiple times\"));r.writechunk=null,r.writecb=null,null!=t&&this.push(t),n(e);var i=this._readableState;i.reading=!1,(i.needReadable||i.length>5==6?2:e>>4==14?3:e>>3==30?4:-1}function s(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,\"�\".repeat(r);if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,\"�\".repeat(r+1);if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,\"�\".repeat(r+2)}}(this,e,t);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function l(e,t){if((e.length-t)%2==0){var r=e.toString(\"utf16le\",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString(\"utf16le\",t,e.length-1)}function f(e){var t=e&&e.length?this.write(e):\"\";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString(\"utf16le\",0,r)}return t}function u(e,t){var r=(e.length-t)%3;return 0===r?e.toString(\"base64\",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString(\"base64\",t,e.length-r))}function h(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+this.lastChar.toString(\"base64\",0,3-this.lastNeed):t}function d(e){return e.toString(this.encoding)}function c(e){return e&&e.length?this.write(e):\"\"}t.StringDecoder=a,a.prototype.write=function(e){if(0===e.length)return\"\";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return\"\";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return i>0&&(e.lastNeed=i-1),i;if(--n=0)return i>0&&(e.lastNeed=i-2),i;if(--n=0)return i>0&&(2===i?i=0:e.lastNeed=i-3),i;return 0}(this,e,t);if(!this.lastNeed)return e.toString(\"utf8\",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString(\"utf8\",t,n)},a.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,r){\"use strict\";var n=r(10);function i(e,t){e.emit(\"error\",t)}e.exports={destroy:function(e,t){var r=this,a=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return a||o?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||n.nextTick(i,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(e){!t&&e?(n.nextTick(i,r,e),r._writableState&&(r._writableState.errorEmitted=!0)):t&&t(e)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,r){e.exports=r(20).EventEmitter},function(e,t,r){\"use strict\";(function(t,n){var i=r(10);e.exports=b;var a,o=r(38);b.ReadableState=y;r(20).EventEmitter;var s=function(e,t){return e.listeners(t).length},l=r(34),f=r(9).Buffer,u=t.Uint8Array||function(){};var h=r(6);h.inherits=r(5);var d=r(66),c=void 0;c=d&&d.debuglog?d.debuglog(\"stream\"):function(){};var p,g=r(65),m=r(33);h.inherits(b,l);var _=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function y(e,t){a=a||r(2),e=e||{};var n=t instanceof a;this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var i=e.highWaterMark,o=e.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(o||0===o)?o:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new g,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=r(32).StringDecoder),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function b(e){if(a=a||r(2),!(this instanceof b))return new b(e);this._readableState=new y(e,this),this.readable=!0,e&&(\"function\"==typeof e.read&&(this._read=e.read),\"function\"==typeof e.destroy&&(this._destroy=e.destroy)),l.call(this)}function v(e,t,r,n,i){var a,o=e._readableState;null===t?(o.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,S(e)}(e,o)):(i||(a=function(e,t){var r;n=t,f.isBuffer(n)||n instanceof u||\"string\"==typeof t||void 0===t||e.objectMode||(r=new TypeError(\"Invalid non-string/buffer chunk\"));var n;return r}(o,t)),a?e.emit(\"error\",a):o.objectMode||t&&t.length>0?(\"string\"==typeof t||o.objectMode||Object.getPrototypeOf(t)===f.prototype||(t=function(e){return f.from(e)}(t)),n?o.endEmitted?e.emit(\"error\",new Error(\"stream.unshift() after end event\")):w(e,o,t,!0):o.ended?e.emit(\"error\",new Error(\"stream.push() after EOF\")):(o.reading=!1,o.decoder&&!r?(t=o.decoder.write(t),o.objectMode||0!==t.length?w(e,o,t,!1):A(e,o)):w(e,o,t,!1))):n||(o.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=E?e=E:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function S(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(c(\"emitReadable\",t.flowing),t.emittedReadable=!0,t.sync?i.nextTick(k,e):k(e))}function k(e){c(\"emit readable\"),e.emit(\"readable\"),O(e)}function A(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(P,e,t))}function P(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(\"\"):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;ea.length?a.length:e;if(o===a.length?i+=a:i+=a.slice(0,e),0===(e-=o)){o===a.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=a.slice(o));break}++n}return t.length-=n,i}(e,t):function(e,t){var r=f.allocUnsafe(e),n=t.head,i=1;n.data.copy(r),e-=n.data.length;for(;n=n.next;){var a=n.data,o=e>a.length?a.length:e;if(a.copy(r,r.length-e,0,o),0===(e-=o)){o===a.length?(++i,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=a.slice(o));break}++i}return t.length-=i,r}(e,t);return n}(e,t.buffer,t.decoder),r);var r}function R(e){var t=e._readableState;if(t.length>0)throw new Error('\"endReadable()\" called on non-empty stream');t.endEmitted||(t.ended=!0,i.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit(\"end\"))}function F(e,t){for(var r=0,n=e.length;r=t.highWaterMark||t.ended))return c(\"read: emitReadable\",t.length,t.ended),0===t.length&&t.ended?R(this):S(this),null;if(0===(e=x(e,t))&&t.ended)return 0===t.length&&R(this),null;var n,i=t.needReadable;return c(\"need readable\",i),(0===t.length||t.length-e0?I(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&R(this)),null!==n&&this.emit(\"data\",n),n},b.prototype._read=function(e){this.emit(\"error\",new Error(\"_read() is not implemented\"))},b.prototype.pipe=function(e,t){var r=this,a=this._readableState;switch(a.pipesCount){case 0:a.pipes=e;break;case 1:a.pipes=[a.pipes,e];break;default:a.pipes.push(e)}a.pipesCount+=1,c(\"pipe count=%d opts=%j\",a.pipesCount,t);var l=(!t||!1!==t.end)&&e!==n.stdout&&e!==n.stderr?u:b;function f(t,n){c(\"onunpipe\"),t===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,c(\"cleanup\"),e.removeListener(\"close\",_),e.removeListener(\"finish\",y),e.removeListener(\"drain\",h),e.removeListener(\"error\",m),e.removeListener(\"unpipe\",f),r.removeListener(\"end\",u),r.removeListener(\"end\",b),r.removeListener(\"data\",g),d=!0,!a.awaitDrain||e._writableState&&!e._writableState.needDrain||h())}function u(){c(\"onend\"),e.end()}a.endEmitted?i.nextTick(l):r.once(\"end\",l),e.on(\"unpipe\",f);var h=function(e){return function(){var t=e._readableState;c(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,\"data\")&&(t.flowing=!0,O(e))}}(r);e.on(\"drain\",h);var d=!1;var p=!1;function g(t){c(\"ondata\"),p=!1,!1!==e.write(t)||p||((1===a.pipesCount&&a.pipes===e||a.pipesCount>1&&-1!==F(a.pipes,e))&&!d&&(c(\"false write response, pause\",r._readableState.awaitDrain),r._readableState.awaitDrain++,p=!0),r.pause())}function m(t){c(\"onerror\",t),b(),e.removeListener(\"error\",m),0===s(e,\"error\")&&e.emit(\"error\",t)}function _(){e.removeListener(\"finish\",y),b()}function y(){c(\"onfinish\"),e.removeListener(\"close\",_),b()}function b(){c(\"unpipe\"),r.unpipe(e)}return r.on(\"data\",g),function(e,t,r){if(\"function\"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?o(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,\"error\",m),e.once(\"close\",_),e.once(\"finish\",y),e.emit(\"pipe\",r),a.flowing||(c(\"pipe resume\"),r.resume()),e},b.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(\"unpipe\",this,r),this);if(!e){var n=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var a=0;a\"x0002ffff\"){r.position=n;break}s.parser=a.default,t[s.tag]=s}var l=new i.default(r.byteArrayParser,r.byteArray,t);return l.warnings=r.warnings,l.position=r.position,l}()};var n=s(r(12)),i=s(r(7)),a=s(r(21)),o=s(r(15));function s(e){return e&&e.__esModule?e:{default:e}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={readUint16:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readUint16: position cannot be less than 0\";if(t+2>e.length)throw\"bigEndianByteArrayParser.readUint16: attempt to read past end of buffer\";return(e[t]<<8)+e[t+1]},readInt16:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readInt16: position cannot be less than 0\";if(t+2>e.length)throw\"bigEndianByteArrayParser.readInt16: attempt to read past end of buffer\";var r=(e[t]<<8)+e[t+1];return 32768&r&&(r=r-65535-1),r},readUint32:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readUint32: position cannot be less than 0\";if(t+4>e.length)throw\"bigEndianByteArrayParser.readUint32: attempt to read past end of buffer\";return 256*(256*(256*e[t]+e[t+1])+e[t+2])+e[t+3]},readInt32:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readInt32: position cannot be less than 0\";if(t+4>e.length)throw\"bigEndianByteArrayParser.readInt32: attempt to read past end of buffer\";return(e[t]<<24)+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3]},readFloat:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readFloat: position cannot be less than 0\";if(t+4>e.length)throw\"bigEndianByteArrayParser.readFloat: attempt to read past end of buffer\";var r=new Uint8Array(4);return r[3]=e[t],r[2]=e[t+1],r[1]=e[t+2],r[0]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readDouble: position cannot be less than 0\";if(t+8>e.length)throw\"bigEndianByteArrayParser.readDouble: attempt to read past end of buffer\";var r=new Uint8Array(8);return r[7]=e[t],r[6]=e[t+1],r[5]=e[t+2],r[4]=e[t+3],r[3]=e[t+4],r[2]=e[t+5],r[1]=e[t+6],r[0]=e[t+7],new Float64Array(r.buffer)[0]}}},function(e,t){var r={}.toString;e.exports=Array.isArray||function(e){return\"[object Array]\"==r.call(e)}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,r){if(void 0===e)throw\"dicomParser.readSequenceItemsImplicit: missing required parameter 'byteStream'\";if(void 0===t)throw\"dicomParser.readSequenceItemsImplicit: missing required parameter 'element'\";t.items=[],4294967295===t.length?function(e,t,r){for(;e.position+4<=e.byteArray.length;){var n=(0,o.default)(e);if(e.seek(-4),\"xfffee0dd\"===n)return t.length=e.position-t.dataOffset,e.seek(8),t;var i=f(e,r);t.items.push(i)}e.warnings.push(\"eof encountered before finding sequence delimiter in sequence of undefined length\"),t.length=e.byteArray.length-t.dataOffset}(e,t,r):function(e,t,r){var n=t.dataOffset+t.length;for(;e.positione.byteArray.length-e.position&&(f=e.byteArray.length-e.position),t.fragments.push({offset:e.position-s-8,position:e.position,length:f}),e.seek(f),void(t.length=e.position-t.dataOffset);t.fragments.push({offset:e.position-s-8,position:e.position,length:f}),e.seek(f)}r&&r.push(\"pixel data element \"+t.tag+\" missing sequence delimiter tag xfffee0dd\")};var n,i=r(4),a=(n=i)&&n.__esModule?n:{default:n}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){if(void 0===e||void 0===t)throw\"dicomParser.explicitElementToString: missing required parameters\";if(void 0===t.vr)throw\"dicomParser.explicitElementToString: cannot convert implicit element to string\";var r,i=t.vr,a=t.tag;function o(t,r){for(var n=\"\",i=0;i= 0\";if(0!==t.basicOffsetTable.length)return(0,n.default)(e,t,r);return(0,i.default)(e,t,0,t.fragments.length)};var n=a(r(26)),i=a(r(17));function a(e){return e&&e.__esModule?e:{default:e}}var o=!1},function(e,t,r){\"use strict\";e.exports={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,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,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,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},function(e,t,r){\"use strict\";var n=r(8),i=[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],a=[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],o=[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],s=[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];e.exports=function(e,t,r,l,f,u,h,d){var c,p,g,m,_,y,b,v,w,E=d.bits,x=0,S=0,k=0,A=0,P=0,T=0,D=0,O=0,I=0,R=0,L=null,F=0,B=new n.Buf16(16),U=new n.Buf16(16),M=null,N=0;for(x=0;x<=15;x++)B[x]=0;for(S=0;S=1&&0===B[A];A--);if(P>A&&(P=A),0===A)return f[u++]=20971520,f[u++]=20971520,d.bits=1,0;for(k=1;k0&&(0===e||1!==A))return-1;for(U[1]=0,x=1;x<15;x++)U[x+1]=U[x]+B[x];for(S=0;S852||2===e&&I>592)return 1;for(;;){b=x-D,h[S]y?(v=M[N+h[S]],w=L[F+h[S]]):(v=96,w=0),c=1<>D)+(p-=c)]=b<<24|v<<16|w|0}while(0!==p);for(c=1<>=1;if(0!==c?(R&=c-1,R+=c):R=0,S++,0==--B[x]){if(x===A)break;x=t[r+h[S]]}if(x>P&&(R&m)!==g){for(0===D&&(D=P),_+=k,O=1<<(T=x-D);T+D852||2===e&&I>592)return 1;f[g=R&m]=P<<24|T<<16|_-u|0}}return 0!==R&&(f[_+R]=x-D<<24|64<<16|0),d.bits=P,0}},function(e,t,r){\"use strict\";e.exports=function(e,t){var r,n,i,a,o,s,l,f,u,h,d,c,p,g,m,_,y,b,v,w,E,x,S,k,A;r=e.state,n=e.next_in,k=e.input,i=n+(e.avail_in-5),a=e.next_out,A=e.output,o=a-(t-e.avail_out),s=a+(e.avail_out-257),l=r.dmax,f=r.wsize,u=r.whave,h=r.wnext,d=r.window,c=r.hold,p=r.bits,g=r.lencode,m=r.distcode,_=(1<>>=v=b>>>24,p-=v,0===(v=b>>>16&255))A[a++]=65535&b;else{if(!(16&v)){if(0==(64&v)){b=g[(65535&b)+(c&(1<>>=v,p-=v),p<15&&(c+=k[n++]<>>=v=b>>>24,p-=v,!(16&(v=b>>>16&255))){if(0==(64&v)){b=m[(65535&b)+(c&(1<l){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(c>>>=v,p-=v,E>(v=a-o)){if((v=E-v)>u&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(x=0,S=d,0===h){if(x+=f-v,v2;)A[a++]=S[x++],A[a++]=S[x++],A[a++]=S[x++],w-=3;w&&(A[a++]=S[x++],w>1&&(A[a++]=S[x++]))}else{x=a-E;do{A[a++]=A[x++],A[a++]=A[x++],A[a++]=A[x++],w-=3}while(w>2);w&&(A[a++]=A[x++],w>1&&(A[a++]=A[x++]))}break}}break}}while(n>3,c&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=a,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function ie(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=E,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(ee),t.distcode=t.distdyn=new n.Buf32(te),t.sane=1,t.back=-1,p):_}function ae(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,ie(e)):_}function oe(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?_:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,ae(e))):_}function se(e,t){var r,i;return e?(i=new function(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0},e.state=i,i.window=null,(r=oe(e,t))!==p&&(e.state=null),r):_}var le,fe,ue=!0;function he(e){if(ue){var t;for(le=new n.Buf32(512),fe=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(s(f,e.lens,0,288,le,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;s(u,e.lens,0,32,fe,0,e.work,{bits:5}),ue=!1}e.lencode=le,e.lenbits=9,e.distcode=fe,e.distbits=5}function de(e,t,r,i){var a,o=e.state;return null===o.window&&(o.wsize=1<=o.wsize?(n.arraySet(o.window,t,r-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((a=o.wsize-o.wnext)>i&&(a=i),n.arraySet(o.window,t,r-i,a,o.wnext),(i-=a)?(n.arraySet(o.window,t,r-i,i,0),o.wnext=i,o.whave=o.wsize):(o.wnext+=a,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,r.check=a(r.check,Pe,2,0),se=0,le=0,r.mode=x;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&se)<<8)+(se>>8))%31){e.msg=\"incorrect header check\",r.mode=X;break}if((15&se)!==w){e.msg=\"unknown compression method\",r.mode=X;break}if(le-=4,Ee=8+(15&(se>>>=4)),0===r.wbits)r.wbits=Ee;else if(Ee>r.wbits){e.msg=\"invalid window size\",r.mode=X;break}r.dmax=1<>8&1),512&r.flags&&(Pe[0]=255&se,Pe[1]=se>>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0,r.mode=S;case S:for(;le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>8&255,Pe[2]=se>>>16&255,Pe[3]=se>>>24&255,r.check=a(r.check,Pe,4,0)),se=0,le=0,r.mode=k;case k:for(;le<16;){if(0===ae)break e;ae--,se+=ee[re++]<>8),512&r.flags&&(Pe[0]=255&se,Pe[1]=se>>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0,r.mode=A;case A:if(1024&r.flags){for(;le<16;){if(0===ae)break e;ae--,se+=ee[re++]<>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0}else r.head&&(r.head.extra=null);r.mode=P;case P:if(1024&r.flags&&((ce=r.length)>ae&&(ce=ae),ce&&(r.head&&(Ee=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,ee,re,ce,Ee)),512&r.flags&&(r.check=a(r.check,ee,ce,re)),ae-=ce,re+=ce,r.length-=ce),r.length))break e;r.length=0,r.mode=T;case T:if(2048&r.flags){if(0===ae)break e;ce=0;do{Ee=ee[re+ce++],r.head&&Ee&&r.length<65536&&(r.head.name+=String.fromCharCode(Ee))}while(Ee&&ce>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=L;break;case I:for(;le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>=7&le,le-=7&le,r.mode=V;break}for(;le<3;){if(0===ae)break e;ae--,se+=ee[re++]<>>=1)){case 0:r.mode=B;break;case 1:if(he(r),r.mode=j,t===c){se>>>=2,le-=2;break e}break;case 2:r.mode=N;break;case 3:e.msg=\"invalid block type\",r.mode=X}se>>>=2,le-=2;break;case B:for(se>>>=7&le,le-=7≤le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=X;break}if(r.length=65535&se,se=0,le=0,r.mode=U,t===c)break e;case U:r.mode=M;case M:if(ce=r.length){if(ce>ae&&(ce=ae),ce>oe&&(ce=oe),0===ce)break e;n.arraySet(te,ee,re,ce,ie),ae-=ce,re+=ce,oe-=ce,ie+=ce,r.length-=ce;break}r.mode=L;break;case N:for(;le<14;){if(0===ae)break e;ae--,se+=ee[re++]<>>=5,le-=5,r.ndist=1+(31&se),se>>>=5,le-=5,r.ncode=4+(15&se),se>>>=4,le-=4,r.nlen>286||r.ndist>30){e.msg=\"too many length or distance symbols\",r.mode=X;break}r.have=0,r.mode=z;case z:for(;r.have>>=3,le-=3}for(;r.have<19;)r.lens[Te[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,Se={bits:r.lenbits},xe=s(l,r.lens,0,19,r.lencode,0,r.work,Se),r.lenbits=Se.bits,xe){e.msg=\"invalid code lengths set\",r.mode=X;break}r.have=0,r.mode=Z;case Z:for(;r.have>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=me,le-=me,r.lens[r.have++]=ye;else{if(16===ye){for(ke=me+2;le>>=me,le-=me,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=X;break}Ee=r.lens[r.have-1],ce=3+(3&se),se>>>=2,le-=2}else if(17===ye){for(ke=me+3;le>>=me)),se>>>=3,le-=3}else{for(ke=me+7;le>>=me)),se>>>=7,le-=7}if(r.have+ce>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=X;break}for(;ce--;)r.lens[r.have++]=Ee}}if(r.mode===X)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=X;break}if(r.lenbits=9,Se={bits:r.lenbits},xe=s(f,r.lens,0,r.nlen,r.lencode,0,r.work,Se),r.lenbits=Se.bits,xe){e.msg=\"invalid literal/lengths set\",r.mode=X;break}if(r.distbits=6,r.distcode=r.distdyn,Se={bits:r.distbits},xe=s(u,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,Se),r.distbits=Se.bits,xe){e.msg=\"invalid distances set\",r.mode=X;break}if(r.mode=j,t===c)break e;case j:r.mode=C;case C:if(ae>=6&&oe>=258){e.next_out=ie,e.avail_out=oe,e.next_in=re,e.avail_in=ae,r.hold=se,r.bits=le,o(e,ue),ie=e.next_out,te=e.output,oe=e.avail_out,re=e.next_in,ee=e.input,ae=e.avail_in,se=r.hold,le=r.bits,r.mode===L&&(r.back=-1);break}for(r.back=0;_e=(Ae=r.lencode[se&(1<>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>be)])>>>16&255,ye=65535&Ae,!(be+(me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=be,le-=be,r.back+=be}if(se>>>=me,le-=me,r.back+=me,r.length=ye,0===_e){r.mode=G;break}if(32&_e){r.back=-1,r.mode=L;break}if(64&_e){e.msg=\"invalid literal/length code\",r.mode=X;break}r.extra=15&_e,r.mode=q;case q:if(r.extra){for(ke=r.extra;le>>=r.extra,le-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=Y;case Y:for(;_e=(Ae=r.distcode[se&(1<>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>be)])>>>16&255,ye=65535&Ae,!(be+(me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=be,le-=be,r.back+=be}if(se>>>=me,le-=me,r.back+=me,64&_e){e.msg=\"invalid distance code\",r.mode=X;break}r.offset=ye,r.extra=15&_e,r.mode=W;case W:if(r.extra){for(ke=r.extra;le>>=r.extra,le-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=X;break}r.mode=H;case H:if(0===oe)break e;if(ce=ue-oe,r.offset>ce){if((ce=r.offset-ce)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=X;break}ce>r.wnext?(ce-=r.wnext,pe=r.wsize-ce):pe=r.wnext-ce,ce>r.length&&(ce=r.length),ge=r.window}else ge=te,pe=ie-r.offset,ce=r.length;ce>oe&&(ce=oe),oe-=ce,r.length-=ce;do{te[ie++]=ge[pe++]}while(--ce);0===r.length&&(r.mode=C);break;case G:if(0===oe)break e;te[ie++]=r.length,oe--,r.mode=C;break;case V:if(r.wrap){for(;le<32;){if(0===ae)break e;ae--,se|=ee[re++]<=0;)e[t]=0}var f=0,u=1,h=2,d=29,c=256,p=c+1+d,g=30,m=19,_=2*p+1,y=15,b=16,v=7,w=256,E=16,x=17,S=18,k=[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],A=[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],P=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],T=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],D=new Array(2*(p+2));l(D);var O=new Array(2*g);l(O);var I=new Array(512);l(I);var R=new Array(256);l(R);var L=new Array(d);l(L);var F,B,U,M=new Array(g);function N(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function z(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function Z(e){return e<256?I[e]:I[256+(e>>>7)]}function j(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function C(e,t,r){e.bi_valid>b-r?(e.bi_buf|=t<>b-e.bi_valid,e.bi_valid+=r-b):(e.bi_buf|=t<>>=1,r<<=1}while(--t>0);return r>>>1}function W(e,t,r){var n,i,a=new Array(y+1),o=0;for(n=1;n<=y;n++)a[n]=o=o+r[n-1]<<1;for(i=0;i<=t;i++){var s=e[2*i+1];0!==s&&(e[2*i]=Y(a[s]++,s))}}function H(e){var t;for(t=0;t8?j(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function V(e,t,r,n){var i=2*t,a=2*r;return e[i]>1;r>=1;r--)J(e,a,r);i=l;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],J(e,a,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,a[2*i]=a[2*r]+a[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,a[2*r+1]=a[2*n+1]=i,e.heap[1]=i++,J(e,a,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,a,o,s,l=t.dyn_tree,f=t.max_code,u=t.stat_desc.static_tree,h=t.stat_desc.has_stree,d=t.stat_desc.extra_bits,c=t.stat_desc.extra_base,p=t.stat_desc.max_length,g=0;for(a=0;a<=y;a++)e.bl_count[a]=0;for(l[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)(a=l[2*l[2*(n=e.heap[r])+1]+1]+1)>p&&(a=p,g++),l[2*n+1]=a,n>f||(e.bl_count[a]++,o=0,n>=c&&(o=d[n-c]),s=l[2*n],e.opt_len+=s*(a+o),h&&(e.static_len+=s*(u[2*n+1]+o)));if(0!==g){do{for(a=p-1;0===e.bl_count[a];)a--;e.bl_count[a]--,e.bl_count[a+1]+=2,e.bl_count[p]--,g-=2}while(g>0);for(a=p;0!==a;a--)for(n=e.bl_count[a];0!==n;)(i=e.heap[--r])>f||(l[2*i+1]!==a&&(e.opt_len+=(a-l[2*i+1])*l[2*i],l[2*i+1]=a),n--)}}(e,t),W(a,f,e.bl_count)}function $(e,t,r){var n,i,a=-1,o=t[1],s=0,l=7,f=4;for(0===o&&(l=138,f=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=o,o=t[2*(n+1)+1],++s>=7;n0?(e.strm.data_type===s&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return a;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return o;for(t=32;t=3&&0===e.bl_tree[2*T[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),l=e.opt_len+3+7>>>3,(f=e.static_len+3+7>>>3)<=l&&(l=f)):l=f=r+5,r+4<=l&&-1!==t?te(e,t,r,n):e.strategy===i||f===l?(C(e,(u<<1)+(n?1:0),3),K(e,D,O)):(C(e,(h<<1)+(n?1:0),3),function(e,t,r,n){var i;for(C(e,t-257,5),C(e,r-1,5),C(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(R[r]+c+1)]++,e.dyn_dtree[2*Z(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){C(e,u<<1,3),q(e,w,D),function(e){16===e.bi_valid?(j(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},function(e,t,r){\"use strict\";var n,i=r(8),a=r(50),o=r(28),s=r(27),l=r(49),f=0,u=1,h=3,d=4,c=5,p=0,g=1,m=-2,_=-3,y=-5,b=-1,v=1,w=2,E=3,x=4,S=0,k=2,A=8,P=9,T=15,D=8,O=286,I=30,R=19,L=2*O+1,F=15,B=3,U=258,M=U+B+1,N=32,z=42,Z=69,j=73,C=91,q=103,Y=113,W=666,H=1,G=2,V=3,J=4,K=3;function X(e,t){return e.msg=l[t],t}function $(e){return(e<<1)-(e>4?9:0)}function Q(e){for(var t=e.length;--t>=0;)e[t]=0}function ee(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(i.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function te(e,t){a._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,ee(e.strm)}function re(e,t){e.pending_buf[e.pending++]=t}function ne(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function ie(e,t){var r,n,i=e.max_chain_length,a=e.strstart,o=e.prev_length,s=e.nice_match,l=e.strstart>e.w_size-M?e.strstart-(e.w_size-M):0,f=e.window,u=e.w_mask,h=e.prev,d=e.strstart+U,c=f[a+o-1],p=f[a+o];e.prev_length>=e.good_match&&(i>>=2),s>e.lookahead&&(s=e.lookahead);do{if(f[(r=t)+o]===p&&f[r+o-1]===c&&f[r]===f[a]&&f[++r]===f[a+1]){a+=2,r++;do{}while(f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&ao){if(e.match_start=t,o=n,n>=s)break;c=f[a+o-1],p=f[a+o]}}}while((t=h[t&u])>l&&0!=--i);return o<=e.lookahead?o:e.lookahead}function ae(e){var t,r,n,a,l,f,u,h,d,c,p=e.w_size;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-M)){i.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,t=r=e.hash_size;do{n=e.head[--t],e.head[t]=n>=p?n-p:0}while(--r);t=r=p;do{n=e.prev[--t],e.prev[t]=n>=p?n-p:0}while(--r);a+=p}if(0===e.strm.avail_in)break;if(f=e.strm,u=e.window,h=e.strstart+e.lookahead,d=a,c=void 0,(c=f.avail_in)>d&&(c=d),r=0===c?0:(f.avail_in-=c,i.arraySet(u,f.input,f.next_in,c,h),1===f.state.wrap?f.adler=o(f.adler,u,c,h):2===f.state.wrap&&(f.adler=s(f.adler,u,c,h)),f.next_in+=c,f.total_in+=c,c),e.lookahead+=r,e.lookahead+e.insert>=B)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=B&&(e.ins_h=(e.ins_h<=B)if(n=a._tr_tally(e,e.strstart-e.match_start,e.match_length-B),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=B){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=B&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=B-1)),e.prev_length>=B&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-B,n=a._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-B),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<15&&(s=2,n-=16),a<1||a>P||r!==A||n<8||n>15||t<0||t>9||o<0||o>x)return X(e,m);8===n&&(n=9);var l=new function(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=A,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*L),this.dyn_dtree=new i.Buf16(2*(2*I+1)),this.bl_tree=new i.Buf16(2*(2*R+1)),Q(this.dyn_ltree),Q(this.dyn_dtree),Q(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(F+1),this.heap=new i.Buf16(2*O+1),Q(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*O+1),Q(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0};return e.state=l,l.strm=e,l.wrap=s,l.gzhead=null,l.w_bits=n,l.w_size=1<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(ae(e),0===e.lookahead&&t===f)return H;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,te(e,!1),0===e.strm.avail_out))return H;if(e.strstart-e.block_start>=e.w_size-M&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):(e.strstart>e.block_start&&(te(e,!1),e.strm.avail_out),H)}),new le(4,4,8,4,oe),new le(4,5,16,8,oe),new le(4,6,32,32,oe),new le(4,4,16,16,se),new le(8,16,32,32,se),new le(8,16,128,128,se),new le(8,32,128,256,se),new le(32,128,258,1024,se),new le(32,258,258,4096,se)],t.deflateInit=function(e,t){return he(e,t,A,T,D,S)},t.deflateInit2=he,t.deflateReset=ue,t.deflateResetKeep=fe,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?m:(e.state.gzhead=t,p):m},t.deflate=function(e,t){var r,i,o,l;if(!e||!e.state||t>c||t<0)return e?X(e,m):m;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||i.status===W&&t!==d)return X(e,0===e.avail_out?y:m);if(i.strm=e,r=i.last_flush,i.last_flush=t,i.status===z)if(2===i.wrap)e.adler=0,re(i,31),re(i,139),re(i,8),i.gzhead?(re(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),re(i,255&i.gzhead.time),re(i,i.gzhead.time>>8&255),re(i,i.gzhead.time>>16&255),re(i,i.gzhead.time>>24&255),re(i,9===i.level?2:i.strategy>=w||i.level<2?4:0),re(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(re(i,255&i.gzhead.extra.length),re(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=s(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=Z):(re(i,0),re(i,0),re(i,0),re(i,0),re(i,0),re(i,9===i.level?2:i.strategy>=w||i.level<2?4:0),re(i,K),i.status=Y);else{var _=A+(i.w_bits-8<<4)<<8;_|=(i.strategy>=w||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(_|=N),_+=31-_%31,i.status=Y,ne(i,_),0!==i.strstart&&(ne(i,e.adler>>>16),ne(i,65535&e.adler)),e.adler=1}if(i.status===Z)if(i.gzhead.extra){for(o=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending!==i.pending_buf_size));)re(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=j)}else i.status=j;if(i.status===j)if(i.gzhead.name){o=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexo&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),0===l&&(i.gzindex=0,i.status=C)}else i.status=C;if(i.status===C)if(i.gzhead.comment){o=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexo&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),0===l&&(i.status=q)}else i.status=q;if(i.status===q&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&ee(e),i.pending+2<=i.pending_buf_size&&(re(i,255&e.adler),re(i,e.adler>>8&255),e.adler=0,i.status=Y)):i.status=Y),0!==i.pending){if(ee(e),0===e.avail_out)return i.last_flush=-1,p}else if(0===e.avail_in&&$(t)<=$(r)&&t!==d)return X(e,y);if(i.status===W&&0!==e.avail_in)return X(e,y);if(0!==e.avail_in||0!==i.lookahead||t!==f&&i.status!==W){var b=i.strategy===w?function(e,t){for(var r;;){if(0===e.lookahead&&(ae(e),0===e.lookahead)){if(t===f)return H;break}if(e.match_length=0,r=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?H:G}(i,t):i.strategy===E?function(e,t){for(var r,n,i,o,s=e.window;;){if(e.lookahead<=U){if(ae(e),e.lookahead<=U&&t===f)return H;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=B&&e.strstart>0&&(n=s[i=e.strstart-1])===s[++i]&&n===s[++i]&&n===s[++i]){o=e.strstart+U;do{}while(n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=B?(r=a._tr_tally(e,1,e.match_length-B),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?H:G}(i,t):n[i.level].func(i,t);if(b!==V&&b!==J||(i.status=W),b===H||b===V)return 0===e.avail_out&&(i.last_flush=-1),p;if(b===G&&(t===u?a._tr_align(i):t!==c&&(a._tr_stored_block(i,0,0,!1),t===h&&(Q(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ee(e),0===e.avail_out))return i.last_flush=-1,p}return t!==d?p:i.wrap<=0?g:(2===i.wrap?(re(i,255&e.adler),re(i,e.adler>>8&255),re(i,e.adler>>16&255),re(i,e.adler>>24&255),re(i,255&e.total_in),re(i,e.total_in>>8&255),re(i,e.total_in>>16&255),re(i,e.total_in>>24&255)):(ne(i,e.adler>>>16),ne(i,65535&e.adler)),ee(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?p:g)},t.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==z&&t!==Z&&t!==j&&t!==C&&t!==q&&t!==Y&&t!==W?X(e,m):(e.state=null,t===Y?X(e,_):p):m},t.deflateSetDictionary=function(e,t){var r,n,a,s,l,f,u,h,d=t.length;if(!e||!e.state)return m;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==z||r.lookahead)return m;for(1===s&&(e.adler=o(e.adler,t,d,0)),r.wrap=0,d>=r.w_size&&(0===s&&(Q(r.head),r.strstart=0,r.block_start=0,r.insert=0),h=new i.Buf8(r.w_size),i.arraySet(h,t,d-r.w_size,r.w_size,0),t=h,d=r.w_size),l=e.avail_in,f=e.next_in,u=e.input,e.avail_in=d,e.next_in=0,e.input=t,ae(r);r.lookahead>=B;){n=r.strstart,a=r.lookahead-(B-1);do{r.ins_h=(r.ins_h<t.UNZIP)throw new TypeError(\"Bad argument\");this.dictionary=null,this.err=0,this.flush=0,this.init_done=!1,this.level=0,this.memLevel=0,this.mode=e,this.strategy=0,this.windowBits=0,this.write_in_progress=!1,this.pending_close=!1,this.gzip_id_bytes_read=0}u.prototype.close=function(){this.write_in_progress?this.pending_close=!0:(this.pending_close=!1,i(this.init_done,\"close before init\"),i(this.mode<=t.UNZIP),this.mode===t.DEFLATE||this.mode===t.GZIP||this.mode===t.DEFLATERAW?o.deflateEnd(this.strm):this.mode!==t.INFLATE&&this.mode!==t.GUNZIP&&this.mode!==t.INFLATERAW&&this.mode!==t.UNZIP||s.inflateEnd(this.strm),this.mode=t.NONE,this.dictionary=null)},u.prototype.write=function(e,t,r,n,i,a,o){return this._write(!0,e,t,r,n,i,a,o)},u.prototype.writeSync=function(e,t,r,n,i,a,o){return this._write(!1,e,t,r,n,i,a,o)},u.prototype._write=function(r,a,o,s,l,f,u,h){if(i.equal(arguments.length,8),i(this.init_done,\"write before init\"),i(this.mode!==t.NONE,\"already finalized\"),i.equal(!1,this.write_in_progress,\"write already in progress\"),i.equal(!1,this.pending_close,\"close is pending\"),this.write_in_progress=!0,i.equal(!1,void 0===a,\"must provide flush value\"),this.write_in_progress=!0,a!==t.Z_NO_FLUSH&&a!==t.Z_PARTIAL_FLUSH&&a!==t.Z_SYNC_FLUSH&&a!==t.Z_FULL_FLUSH&&a!==t.Z_FINISH&&a!==t.Z_BLOCK)throw new Error(\"Invalid flush value\");if(null==o&&(o=e.alloc(0),l=0,s=0),this.strm.avail_in=l,this.strm.input=o,this.strm.next_in=s,this.strm.avail_out=h,this.strm.output=f,this.strm.next_out=u,this.flush=a,!r)return this._process(),this._checkError()?this._afterSync():void 0;var d=this;return n.nextTick(function(){d._process(),d._after()}),this},u.prototype._afterSync=function(){var e=this.strm.avail_out,t=this.strm.avail_in;return this.write_in_progress=!1,[t,e]},u.prototype._process=function(){var e=null;switch(this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=o.deflate(this.strm,this.flush);break;case t.UNZIP:switch(this.strm.avail_in>0&&(e=this.strm.next_in),this.gzip_id_bytes_read){case 0:if(null===e)break;if(31!==this.strm.input[e]){this.mode=t.INFLATE;break}if(this.gzip_id_bytes_read=1,e++,1===this.strm.avail_in)break;case 1:if(null===e)break;139===this.strm.input[e]?(this.gzip_id_bytes_read=2,this.mode=t.GUNZIP):this.mode=t.INFLATE;break;default:throw new Error(\"invalid number of gzip magic number bytes read\")}case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:for(this.err=s.inflate(this.strm,this.flush),this.err===t.Z_NEED_DICT&&this.dictionary&&(this.err=s.inflateSetDictionary(this.strm,this.dictionary),this.err===t.Z_OK?this.err=s.inflate(this.strm,this.flush):this.err===t.Z_DATA_ERROR&&(this.err=t.Z_NEED_DICT));this.strm.avail_in>0&&this.mode===t.GUNZIP&&this.err===t.Z_STREAM_END&&0!==this.strm.next_in[0];)this.reset(),this.err=s.inflate(this.strm,this.flush);break;default:throw new Error(\"Unknown mode \"+this.mode)}},u.prototype._checkError=function(){switch(this.err){case t.Z_OK:case t.Z_BUF_ERROR:if(0!==this.strm.avail_out&&this.flush===t.Z_FINISH)return this._error(\"unexpected end of file\"),!1;break;case t.Z_STREAM_END:break;case t.Z_NEED_DICT:return null==this.dictionary?this._error(\"Missing dictionary\"):this._error(\"Bad dictionary\"),!1;default:return this._error(\"Zlib error\"),!1}return!0},u.prototype._after=function(){if(this._checkError()){var e=this.strm.avail_out,t=this.strm.avail_in;this.write_in_progress=!1,this.callback(t,e),this.pending_close&&this.close()}},u.prototype._error=function(e){this.strm.msg&&(e=this.strm.msg),this.onerror(e,this.err),this.write_in_progress=!1,this.pending_close&&this.close()},u.prototype.init=function(e,r,n,a,o){i(4===arguments.length||5===arguments.length,\"init(windowBits, level, memLevel, strategy, [dictionary])\"),i(e>=8&&e<=15,\"invalid windowBits\"),i(r>=-1&&r<=9,\"invalid compression level\"),i(n>=1&&n<=9,\"invalid memlevel\"),i(a===t.Z_FILTERED||a===t.Z_HUFFMAN_ONLY||a===t.Z_RLE||a===t.Z_FIXED||a===t.Z_DEFAULT_STRATEGY,\"invalid strategy\"),this._init(r,e,n,a,o),this._setDictionary()},u.prototype.params=function(){throw new Error(\"deflateParams Not supported\")},u.prototype.reset=function(){this._reset(),this._setDictionary()},u.prototype._init=function(e,r,n,i,l){switch(this.level=e,this.windowBits=r,this.memLevel=n,this.strategy=i,this.flush=t.Z_NO_FLUSH,this.err=t.Z_OK,this.mode!==t.GZIP&&this.mode!==t.GUNZIP||(this.windowBits+=16),this.mode===t.UNZIP&&(this.windowBits+=32),this.mode!==t.DEFLATERAW&&this.mode!==t.INFLATERAW||(this.windowBits=-1*this.windowBits),this.strm=new a,this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=o.deflateInit2(this.strm,this.level,t.Z_DEFLATED,this.windowBits,this.memLevel,this.strategy);break;case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:case t.UNZIP:this.err=s.inflateInit2(this.strm,this.windowBits);break;default:throw new Error(\"Unknown mode \"+this.mode)}this.err!==t.Z_OK&&this._error(\"Init error\"),this.dictionary=l,this.write_in_progress=!1,this.init_done=!0},u.prototype._setDictionary=function(){if(null!=this.dictionary){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:this.err=o.deflateSetDictionary(this.strm,this.dictionary)}this.err!==t.Z_OK&&this._error(\"Failed to set dictionary\")}},u.prototype._reset=function(){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:case t.GZIP:this.err=o.deflateReset(this.strm);break;case t.INFLATE:case t.INFLATERAW:case t.GUNZIP:this.err=s.inflateReset(this.strm)}this.err!==t.Z_OK&&this._error(\"Failed to reset stream\")},t.Zlib=u}).call(this,r(1).Buffer,r(3))},function(e,t,r){e.exports=r(19).PassThrough},function(e,t,r){e.exports=r(19).Transform},function(e,t,r){e.exports=r(2)},function(e,t,r){e.exports=r(18)},function(e,t,r){\"use strict\";e.exports=a;var n=r(31),i=r(6);function a(e){if(!(this instanceof a))return new a(e);n.call(this,e)}i.inherits=r(5),i.inherits(a,n),a.prototype._transform=function(e,t,r){r(null,e)}},function(e,t,r){(function(t){function r(e){try{if(!t.localStorage)return!1}catch(e){return!1}var r=t.localStorage[e];return null!=r&&\"true\"===String(r).toLowerCase()}e.exports=function(e,t){if(r(\"noDeprecation\"))return e;var n=!1;return function(){if(!n){if(r(\"throwDeprecation\"))throw new Error(t);r(\"traceDeprecation\")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}}}).call(this,r(0))},function(e,t,r){(function(e,t){!function(e,r){\"use strict\";if(!e.setImmediate){var n,i,a,o,s,l=1,f={},u=!1,h=e.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(e);d=d&&d.setTimeout?d:e,\"[object process]\"==={}.toString.call(e.process)?n=function(e){t.nextTick(function(){p(e)})}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,r=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage(\"\",\"*\"),e.onmessage=r,t}}()?e.MessageChannel?((a=new MessageChannel).port1.onmessage=function(e){p(e.data)},n=function(e){a.port2.postMessage(e)}):h&&\"onreadystatechange\"in h.createElement(\"script\")?(i=h.documentElement,n=function(e){var t=h.createElement(\"script\");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):n=function(e){setTimeout(p,0,e)}:(o=\"setImmediate$\"+Math.random()+\"$\",s=function(t){t.source===e&&\"string\"==typeof t.data&&0===t.data.indexOf(o)&&p(+t.data.slice(o.length))},e.addEventListener?e.addEventListener(\"message\",s,!1):e.attachEvent(\"onmessage\",s),n=function(t){e.postMessage(o+t,\"*\")}),d.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},r(62),t.setImmediate=\"undefined\"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate=\"undefined\"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,r(0))},function(e,t){},function(e,t,r){\"use strict\";var n=r(9).Buffer,i=r(64);e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return\"\";for(var t=this.head,r=\"\"+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return n.alloc(0);if(1===this.length)return this.head.data;for(var t,r,i,a=n.allocUnsafe(e>>>0),o=this.head,s=0;o;)t=o.data,r=a,i=s,t.copy(r,i),s+=o.data.length,o=o.next;return a},e}(),i&&i.inspect&&i.inspect.custom&&(e.exports.prototype[i.inspect.custom]=function(){var e=i.inspect({length:this.length});return this.constructor.name+\" \"+e})},function(e,t){},function(e,t,r){e.exports=i;var n=r(20).EventEmitter;function i(){n.call(this)}r(5)(i,n),i.Readable=r(19),i.Writable=r(59),i.Duplex=r(58),i.Transform=r(57),i.PassThrough=r(56),i.Stream=i,i.prototype.pipe=function(e,t){var r=this;function i(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function a(){r.readable&&r.resume&&r.resume()}r.on(\"data\",i),e.on(\"drain\",a),e._isStdio||t&&!1===t.end||(r.on(\"end\",s),r.on(\"close\",l));var o=!1;function s(){o||(o=!0,e.end())}function l(){o||(o=!0,\"function\"==typeof e.destroy&&e.destroy())}function f(e){if(u(),0===n.listenerCount(this,\"error\"))throw e}function u(){r.removeListener(\"data\",i),e.removeListener(\"drain\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",l),r.removeListener(\"error\",f),e.removeListener(\"error\",f),r.removeListener(\"end\",u),r.removeListener(\"close\",u),e.removeListener(\"close\",u)}return r.on(\"error\",f),e.on(\"error\",f),r.on(\"end\",u),r.on(\"close\",u),e.on(\"close\",u),e.emit(\"pipe\",r),e}},function(e,t,r){\"use strict\";(function(e){var n=r(1).Buffer,i=r(67).Transform,a=r(55),o=r(29),s=r(30).ok,l=r(1).kMaxLength,f=\"Cannot create final Buffer. It would be larger than 0x\"+l.toString(16)+\" bytes\";a.Z_MIN_WINDOWBITS=8,a.Z_MAX_WINDOWBITS=15,a.Z_DEFAULT_WINDOWBITS=15,a.Z_MIN_CHUNK=64,a.Z_MAX_CHUNK=1/0,a.Z_DEFAULT_CHUNK=16384,a.Z_MIN_MEMLEVEL=1,a.Z_MAX_MEMLEVEL=9,a.Z_DEFAULT_MEMLEVEL=8,a.Z_MIN_LEVEL=-1,a.Z_MAX_LEVEL=9,a.Z_DEFAULT_LEVEL=a.Z_DEFAULT_COMPRESSION;for(var u=Object.keys(a),h=0;h=l?o=new RangeError(f):t=n.concat(i,a),i=[],e.close(),r(o,t)}e.on(\"error\",function(t){e.removeListener(\"end\",s),e.removeListener(\"readable\",o),r(t)}),e.on(\"end\",s),e.end(t),o()}function y(e,t){if(\"string\"==typeof t&&(t=n.from(t)),!n.isBuffer(t))throw new TypeError(\"Not a string or buffer\");var r=e._finishFlushFlag;return e._processChunk(t,r)}function b(e){if(!(this instanceof b))return new b(e);P.call(this,e,a.DEFLATE)}function v(e){if(!(this instanceof v))return new v(e);P.call(this,e,a.INFLATE)}function w(e){if(!(this instanceof w))return new w(e);P.call(this,e,a.GZIP)}function E(e){if(!(this instanceof E))return new E(e);P.call(this,e,a.GUNZIP)}function x(e){if(!(this instanceof x))return new x(e);P.call(this,e,a.DEFLATERAW)}function S(e){if(!(this instanceof S))return new S(e);P.call(this,e,a.INFLATERAW)}function k(e){if(!(this instanceof k))return new k(e);P.call(this,e,a.UNZIP)}function A(e){return e===a.Z_NO_FLUSH||e===a.Z_PARTIAL_FLUSH||e===a.Z_SYNC_FLUSH||e===a.Z_FULL_FLUSH||e===a.Z_FINISH||e===a.Z_BLOCK}function P(e,r){var o=this;if(this._opts=e=e||{},this._chunkSize=e.chunkSize||t.Z_DEFAULT_CHUNK,i.call(this,e),e.flush&&!A(e.flush))throw new Error(\"Invalid flush flag: \"+e.flush);if(e.finishFlush&&!A(e.finishFlush))throw new Error(\"Invalid flush flag: \"+e.finishFlush);if(this._flushFlag=e.flush||a.Z_NO_FLUSH,this._finishFlushFlag=void 0!==e.finishFlush?e.finishFlush:a.Z_FINISH,e.chunkSize&&(e.chunkSizet.Z_MAX_CHUNK))throw new Error(\"Invalid chunk size: \"+e.chunkSize);if(e.windowBits&&(e.windowBitst.Z_MAX_WINDOWBITS))throw new Error(\"Invalid windowBits: \"+e.windowBits);if(e.level&&(e.levelt.Z_MAX_LEVEL))throw new Error(\"Invalid compression level: \"+e.level);if(e.memLevel&&(e.memLevelt.Z_MAX_MEMLEVEL))throw new Error(\"Invalid memLevel: \"+e.memLevel);if(e.strategy&&e.strategy!=t.Z_FILTERED&&e.strategy!=t.Z_HUFFMAN_ONLY&&e.strategy!=t.Z_RLE&&e.strategy!=t.Z_FIXED&&e.strategy!=t.Z_DEFAULT_STRATEGY)throw new Error(\"Invalid strategy: \"+e.strategy);if(e.dictionary&&!n.isBuffer(e.dictionary))throw new Error(\"Invalid dictionary: it should be a Buffer instance\");this._handle=new a.Zlib(r);var s=this;this._hadError=!1,this._handle.onerror=function(e,r){T(s),s._hadError=!0;var n=new Error(e);n.errno=r,n.code=t.codes[r],s.emit(\"error\",n)};var l=t.Z_DEFAULT_COMPRESSION;\"number\"==typeof e.level&&(l=e.level);var f=t.Z_DEFAULT_STRATEGY;\"number\"==typeof e.strategy&&(f=e.strategy),this._handle.init(e.windowBits||t.Z_DEFAULT_WINDOWBITS,l,e.memLevel||t.Z_DEFAULT_MEMLEVEL,f,e.dictionary),this._buffer=n.allocUnsafe(this._chunkSize),this._offset=0,this._level=l,this._strategy=f,this.once(\"end\",this.close),Object.defineProperty(this,\"_closed\",{get:function(){return!o._handle},configurable:!0,enumerable:!0})}function T(t,r){r&&e.nextTick(r),t._handle&&(t._handle.close(),t._handle=null)}function D(e){e.emit(\"close\")}Object.defineProperty(t,\"codes\",{enumerable:!0,value:Object.freeze(c),writable:!1}),t.Deflate=b,t.Inflate=v,t.Gzip=w,t.Gunzip=E,t.DeflateRaw=x,t.InflateRaw=S,t.Unzip=k,t.createDeflate=function(e){return new b(e)},t.createInflate=function(e){return new v(e)},t.createDeflateRaw=function(e){return new x(e)},t.createInflateRaw=function(e){return new S(e)},t.createGzip=function(e){return new w(e)},t.createGunzip=function(e){return new E(e)},t.createUnzip=function(e){return new k(e)},t.deflate=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new b(t),e,r)},t.deflateSync=function(e,t){return y(new b(t),e)},t.gzip=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new w(t),e,r)},t.gzipSync=function(e,t){return y(new w(t),e)},t.deflateRaw=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new x(t),e,r)},t.deflateRawSync=function(e,t){return y(new x(t),e)},t.unzip=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new k(t),e,r)},t.unzipSync=function(e,t){return y(new k(t),e)},t.inflate=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new v(t),e,r)},t.inflateSync=function(e,t){return y(new v(t),e)},t.gunzip=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new E(t),e,r)},t.gunzipSync=function(e,t){return y(new E(t),e)},t.inflateRaw=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new S(t),e,r)},t.inflateRawSync=function(e,t){return y(new S(t),e)},o.inherits(P,i),P.prototype.params=function(r,n,i){if(rt.Z_MAX_LEVEL)throw new RangeError(\"Invalid compression level: \"+r);if(n!=t.Z_FILTERED&&n!=t.Z_HUFFMAN_ONLY&&n!=t.Z_RLE&&n!=t.Z_FIXED&&n!=t.Z_DEFAULT_STRATEGY)throw new TypeError(\"Invalid strategy: \"+n);if(this._level!==r||this._strategy!==n){var o=this;this.flush(a.Z_SYNC_FLUSH,function(){s(o._handle,\"zlib binding closed\"),o._handle.params(r,n),o._hadError||(o._level=r,o._strategy=n,i&&i())})}else e.nextTick(i)},P.prototype.reset=function(){return s(this._handle,\"zlib binding closed\"),this._handle.reset()},P.prototype._flush=function(e){this._transform(n.alloc(0),\"\",e)},P.prototype.flush=function(t,r){var i=this,o=this._writableState;(\"function\"==typeof t||void 0===t&&!r)&&(r=t,t=a.Z_FULL_FLUSH),o.ended?r&&e.nextTick(r):o.ending?r&&this.once(\"end\",r):o.needDrain?r&&this.once(\"drain\",function(){return i.flush(t,r)}):(this._flushFlag=t,this.write(n.alloc(0),\"\",r))},P.prototype.close=function(t){T(this,t),e.nextTick(D,this)},P.prototype._transform=function(e,t,r){var i,o=this._writableState,s=(o.ending||o.ended)&&(!e||o.length===e.length);return null===e||n.isBuffer(e)?this._handle?(s?i=this._finishFlushFlag:(i=this._flushFlag,e.length>=o.length&&(this._flushFlag=this._opts.flush||a.Z_NO_FLUSH)),void this._processChunk(e,i,r)):r(new Error(\"zlib binding closed\")):r(new Error(\"invalid input\"))},P.prototype._processChunk=function(e,t,r){var i=e&&e.length,a=this._chunkSize-this._offset,o=0,u=this,h=\"function\"==typeof r;if(!h){var d,c=[],p=0;this.on(\"error\",function(e){d=e}),s(this._handle,\"zlib binding closed\");do{var g=this._handle.writeSync(t,e,o,i,this._buffer,this._offset,a)}while(!this._hadError&&y(g[0],g[1]));if(this._hadError)throw d;if(p>=l)throw T(this),new RangeError(f);var m=n.concat(c,p);return T(this),m}s(this._handle,\"zlib binding closed\");var _=this._handle.write(t,e,o,i,this._buffer,this._offset,a);function y(l,f){if(this&&(this.buffer=null,this.callback=null),!u._hadError){var d=a-f;if(s(d>=0,\"have should not go down\"),d>0){var g=u._buffer.slice(u._offset,u._offset+d);u._offset+=d,h?u.push(g):(c.push(g),p+=g.length)}if((0===f||u._offset>=u._chunkSize)&&(a=u._chunkSize,u._offset=0,u._buffer=n.allocUnsafe(u._chunkSize)),0===f){if(o+=i-l,i=l,!h)return!0;var m=u._handle.write(t,e,o,i,u._buffer,u._offset,u._chunkSize);return m.callback=y,void(m.buffer=e)}if(!h)return!1;r()}}_.buffer=e,_.callback=y},o.inherits(b,P),o.inherits(v,P),o.inherits(w,P),o.inherits(E,P),o.inherits(x,P),o.inherits(S,P),o.inherits(k,P)}).call(this,r(3))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,\"loaded\",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,\"id\",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,r){\"use strict\";(function(e){Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(t,d){if(void 0===t)throw\"dicomParser.parseDicom: missing required parameter 'byteArray'\";function c(l){var c=function(e){if(void 0===e.elements.x00020010)throw\"dicomParser.parseDicom: missing required meta header attribute 0002,0010\";var r=e.elements.x00020010;return u.readFixedString(t,r.dataOffset,r.length)}(l),p=function(e){if(\"1.2.840.10008.1.2\"===e)return!1;return!0}(c),g=function(o,l){if(\"1.2.840.10008.1.2.1.99\"===o){if(d&&d.inflater){var u=d.inflater(t,l);return new a.default(s.default,u,0)}if(void 0!==e&&this.module!==e){var h=r(68),c=(0,f.default)(t,l,t.length-l),p=h.inflateRawSync(c),g=(0,n.default)(t,p.length+l);return t.copy(g,0,0,l),p.copy(g,l),new a.default(s.default,g,0)}if(\"undefined\"!=typeof pako){var m=t.slice(l),_=pako.inflateRaw(m),y=(0,n.default)(t,_.length+l);return y.set(t.slice(0,l),0),y.set(_,l),new a.default(s.default,y,0)}throw\"dicomParser.parseDicom: no inflater available to handle deflate transfer syntax\"}if(\"1.2.840.10008.1.2.2\"===o)return new a.default(i.default,t,l);return new a.default(s.default,t,l)}(c,l.position),m=new o.default(g.byteArrayParser,g.byteArray,{});m.warnings=g.warnings;try{p?h.parseDicomDataSetExplicit(m,g,g.byteArray.length,d):h.parseDicomDataSetImplicit(m,g,g.byteArray.length,d)}catch(e){var _={exception:e,dataSet:m};throw _}return m}return p=(0,l.default)(t,d),g=c(p),function(e,t){for(var r in e.elements)e.elements.hasOwnProperty(r)&&(t.elements[r]=e.elements[r]);return void 0!==e.warnings&&(t.warnings=e.warnings.concat(t.warnings)),t}(p,g);var p,g};var n=c(r(22)),i=c(r(37)),a=c(r(12)),o=c(r(7)),s=c(r(21)),l=c(r(36)),f=c(r(11)),u=d(r(14)),h=d(r(16));function d(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function c(e){return e&&e.__esModule?e:{default:e}}}).call(this,r(69)(e))},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=\"1.8.2\"},function(e,t){t.read=function(e,t,r,n,i){var a,o,s=8*i-n-1,l=(1<>1,u=-7,h=r?i-1:0,d=r?-1:1,c=e[t+h];for(h+=d,a=c&(1<<-u)-1,c>>=-u,u+=s;u>0;a=256*a+e[t+h],h+=d,u-=8);for(o=a&(1<<-u)-1,a>>=-u,u+=n;u>0;o=256*o+e[t+h],h+=d,u-=8);if(0===a)a=1-f;else{if(a===l)return o?NaN:1/0*(c?-1:1);o+=Math.pow(2,n),a-=f}return(c?-1:1)*o*Math.pow(2,a-n)},t.write=function(e,t,r,n,i,a){var o,s,l,f=8*a-i-1,u=(1<>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,c=n?0:a-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,o=u):(o=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-o))<1&&(o--,l*=2),(t+=o+h>=1?d/l:d*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(t*l-1)*Math.pow(2,i),o+=h):(s=t*Math.pow(2,h-1)*Math.pow(2,i),o=0));i>=8;e[r+c]=255&s,c+=p,s/=256,i-=8);for(o=o<0;e[r+c]=255&o,c+=p,o/=256,f-=8);e[r+c-p]|=128*g}},function(e,t,r){\"use strict\";t.byteLength=function(e){return 3*e.length/4-f(e)},t.toByteArray=function(e){var t,r,n,o,s,l=e.length;o=f(e),s=new a(3*l/4-o),r=o>0?l-4:l;var u=0;for(t=0;t>16&255,s[u++]=n>>8&255,s[u++]=255&n;2===o?(n=i[e.charCodeAt(t)]<<2|i[e.charCodeAt(t+1)]>>4,s[u++]=255&n):1===o&&(n=i[e.charCodeAt(t)]<<10|i[e.charCodeAt(t+1)]<<4|i[e.charCodeAt(t+2)]>>2,s[u++]=n>>8&255,s[u++]=255&n);return s},t.fromByteArray=function(e){for(var t,r=e.length,i=r%3,a=\"\",o=[],s=0,l=r-i;sl?l:s+16383));1===i?(t=e[r-1],a+=n[t>>2],a+=n[t<<4&63],a+=\"==\"):2===i&&(t=(e[r-2]<<8)+e[r-1],a+=n[t>>10],a+=n[t>>4&63],a+=n[t<<2&63],a+=\"=\");return o.push(a),o.join(\"\")};for(var n=[],i=[],a=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",s=0,l=o.length;s0)throw new Error(\"Invalid string. Length must be a multiple of 4\");return\"=\"===e[t-2]?2:\"=\"===e[t-1]?1:0}function u(e,t,r){for(var i,a,o=[],s=t;s>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return o.join(\"\")}i[\"-\".charCodeAt(0)]=62,i[\"_\".charCodeAt(0)]=63},function(e,t,r){\"use strict\";function n(e,t){return 255===e.byteArray[t]&&217===e.byteArray[t+1]}function i(e,t,r){var i=t.fragments[r];return!(!n(e,i.position+i.length-2)&&!n(e,i.position+i.length-3))}function a(e,t,r){for(var n=r;n0&&t<=12&&e>0&&e<=function(e,t){switch(e){case 2:return t%4==0&&t%100||t%400==0?29:28;case 9:case 4:case 6:case 11:return 30;default:return 31}}(t,r)}(i,n,r))throw\"invalid DA '\"+e+\"'\";return{year:r,month:n,day:i}}if(t)throw\"invalid DA '\"+e+\"'\";return}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){if(e.length>=2){var r=parseInt(e.substring(0,2),10),n=e.length>=4?parseInt(e.substring(2,4),10):void 0,i=e.length>=6?parseInt(e.substring(4,6),10):void 0,a=e.length>=8?parseInt(e.substring(7,13),10):void 0;if(t&&(isNaN(r)||void 0!==n&&isNaN(n)||void 0!==i&&isNaN(i)||void 0!==a&&isNaN(a)||r<0||r>23||n&&(n<0||n>59)||i&&(i<0||i>59)||a&&(a<0||a>999999)))throw\"invalid TM '\"+e+\"'\";return{hours:r,minutes:n,seconds:i,fractionalSeconds:a}}if(t)throw\"invalid TM '\"+e+\"'\";return}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.createJPEGBasicOffsetTable=t.explicitDataSetToJS=t.explicitElementToString=t.parseDA=t.parseTM=t.parsePN=t.isPrivateTag=t.isStringVr=void 0;var n=r(25),i=f(r(77)),a=f(r(76)),o=f(r(43)),s=f(r(75)),l=f(r(74));function f(e){return e&&e.__esModule?e:{default:e}}t.isStringVr=n.isStringVr,t.isPrivateTag=n.isPrivateTag,t.parsePN=n.parsePN,t.parseTM=i.default,t.parseDA=a.default,t.explicitElementToString=o.default,t.explicitDataSetToJS=s.default,t.createJPEGBasicOffsetTable=l.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.readTag=t.readSequenceItem=t.readSequenceItemsImplicit=t.readSequenceItemsExplicit=t.readPart10Header=t.readEncapsulatedPixelDataFromFragments=t.readEncapsulatedPixelData=t.readEncapsulatedImageFrame=t.readDicomElementImplicit=t.readDicomElementExplicit=t.parseDicom=t.littleEndianByteArrayParser=t.findItemDelimitationItemAndSetElementLength=t.findEndOfEncapsulatedElement=t.findAndSetUNElementLength=t.DataSet=t.sharedCopy=t.ByteStream=t.bigEndianByteArrayParser=t.version=t.alloc=t.readFixedString=t.parseDicomDataSetImplicit=t.parseDicomDataSetExplicit=t.createJPEGBasicOffsetTable=t.explicitDataSetToJS=t.explicitElementToString=t.parseDA=t.parseTM=t.parsePN=t.isPrivateTag=t.isStringVr=void 0;var n=r(78),i=r(16),a=r(14),o=P(r(22)),s=P(r(71)),l=P(r(37)),f=P(r(12)),u=P(r(11)),h=P(r(7)),d=P(r(41)),c=P(r(42)),p=P(r(24)),g=P(r(21)),m=P(r(70)),_=P(r(15)),y=P(r(23)),b=P(r(26)),v=P(r(44)),w=P(r(17)),E=P(r(36)),x=P(r(40)),S=P(r(39)),k=P(r(13)),A=P(r(4));function P(e){return e&&e.__esModule?e:{default:e}}var T={isStringVr:n.isStringVr,isPrivateTag:n.isPrivateTag,parsePN:n.parsePN,parseTM:n.parseTM,parseDA:n.parseDA,explicitElementToString:n.explicitElementToString,explicitDataSetToJS:n.explicitDataSetToJS,createJPEGBasicOffsetTable:n.createJPEGBasicOffsetTable,parseDicomDataSetExplicit:i.parseDicomDataSetExplicit,parseDicomDataSetImplicit:i.parseDicomDataSetImplicit,readFixedString:a.readFixedString,alloc:o.default,version:s.default,bigEndianByteArrayParser:l.default,ByteStream:f.default,sharedCopy:u.default,DataSet:h.default,findAndSetUNElementLength:d.default,findEndOfEncapsulatedElement:c.default,findItemDelimitationItemAndSetElementLength:p.default,littleEndianByteArrayParser:g.default,parseDicom:m.default,readDicomElementExplicit:_.default,readDicomElementImplicit:y.default,readEncapsulatedImageFrame:b.default,readEncapsulatedPixelData:v.default,readEncapsulatedPixelDataFromFragments:w.default,readPart10Header:E.default,readSequenceItemsExplicit:x.default,readSequenceItemsImplicit:S.default,readSequenceItem:k.default,readTag:A.default};t.isStringVr=n.isStringVr,t.isPrivateTag=n.isPrivateTag,t.parsePN=n.parsePN,t.parseTM=n.parseTM,t.parseDA=n.parseDA,t.explicitElementToString=n.explicitElementToString,t.explicitDataSetToJS=n.explicitDataSetToJS,t.createJPEGBasicOffsetTable=n.createJPEGBasicOffsetTable,t.parseDicomDataSetExplicit=i.parseDicomDataSetExplicit,t.parseDicomDataSetImplicit=i.parseDicomDataSetImplicit,t.readFixedString=a.readFixedString,t.alloc=o.default,t.version=s.default,t.bigEndianByteArrayParser=l.default,t.ByteStream=f.default,t.sharedCopy=u.default,t.DataSet=h.default,t.findAndSetUNElementLength=d.default,t.findEndOfEncapsulatedElement=c.default,t.findItemDelimitationItemAndSetElementLength=p.default,t.littleEndianByteArrayParser=g.default,t.parseDicom=m.default,t.readDicomElementExplicit=_.default,t.readDicomElementImplicit=y.default,t.readEncapsulatedImageFrame=b.default,t.readEncapsulatedPixelData=v.default,t.readEncapsulatedPixelDataFromFragments=w.default,t.readPart10Header=E.default,t.readSequenceItemsExplicit=x.default,t.readSequenceItemsImplicit=S.default,t.readSequenceItem=k.default,t.readTag=A.default,t.default=T}])});\n//# sourceMappingURL=dicomParser.min.js.map","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\n\n\n/*** Constructor ***/\njpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || function () {\n this.hSamp = 0; // Horizontal sampling factor\n this.quantTableSel = 0; // Quantization table destination selector\n this.vSamp = 0; // Vertical\n};\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.ComponentSpec;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\n\n\n/*** Constructor ***/\njpeg.lossless.DataStream = jpeg.lossless.DataStream || function (data, offset, length) {\n this.buffer = new DataView(data, offset, length);\n this.index = 0;\n};\n\n\n\njpeg.lossless.DataStream.prototype.get16 = function () {\n var value = this.buffer.getUint16(this.index, false);\n this.index += 2;\n return value;\n};\n\n\n\njpeg.lossless.DataStream.prototype.get8 = function () {\n var value = this.buffer.getUint8(this.index);\n this.index += 1;\n return value;\n};\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.DataStream;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\njpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\njpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || ((typeof require !== 'undefined') ? require('./huffman-table.js') : null);\njpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || ((typeof require !== 'undefined') ? require('./quantization-table.js') : null);\njpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || ((typeof require !== 'undefined') ? require('./scan-header.js') : null);\njpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || ((typeof require !== 'undefined') ? require('./frame-header.js') : null);\njpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n/*** Constructor ***/\njpeg.lossless.Decoder = jpeg.lossless.Decoder || function (buffer, numBytes) {\n this.buffer = buffer;\n this.frame = new jpeg.lossless.FrameHeader();\n this.huffTable = new jpeg.lossless.HuffmanTable();\n this.quantTable = new jpeg.lossless.QuantizationTable();\n this.scan = new jpeg.lossless.ScanHeader();\n this.DU = jpeg.lossless.Utils.createArray(10, 4, 64); // at most 10 data units in a MCU, at most 4 data units in one component\n this.HuffTab = jpeg.lossless.Utils.createArray(4, 2, 50 * 256);\n this.IDCT_Source = [];\n this.nBlock = []; // number of blocks in the i-th Comp in a scan\n this.acTab = jpeg.lossless.Utils.createArray(10, 1); // ac HuffTab for the i-th Comp in a scan\n this.dcTab = jpeg.lossless.Utils.createArray(10, 1); // dc HuffTab for the i-th Comp in a scan\n this.qTab = jpeg.lossless.Utils.createArray(10, 1); // quantization table for the i-th Comp in a scan\n this.marker = 0;\n this.markerIndex = 0;\n this.numComp = 0;\n this.restartInterval = 0;\n this.selection = 0;\n this.xDim = 0;\n this.yDim = 0;\n this.xLoc = 0;\n this.yLoc = 0;\n this.numBytes = 0;\n this.outputData = null;\n this.restarting = false;\n this.mask = 0;\n\n if (typeof numBytes !== \"undefined\") {\n this.numBytes = numBytes;\n }\n};\n\n\n/*** Static Pseudo-constants ***/\n\njpeg.lossless.Decoder.IDCT_P = [0, 5, 40, 16, 45, 2, 7, 42, 21, 56, 8, 61, 18, 47, 1, 4, 41, 23, 58, 13, 32, 24, 37, 10, 63, 17, 44, 3, 6, 43, 20,\n 57, 15, 34, 29, 48, 53, 26, 39, 9, 60, 19, 46, 22, 59, 12, 33, 31, 50, 55, 25, 36, 11, 62, 14, 35, 28, 49, 52, 27, 38, 30, 51, 54];\njpeg.lossless.Decoder.TABLE = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53,\n 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63];\njpeg.lossless.Decoder.MAX_HUFFMAN_SUBTREE = 50;\njpeg.lossless.Decoder.MSB = 0x80000000;\njpeg.lossless.Decoder.RESTART_MARKER_BEGIN = 0xFFD0;\njpeg.lossless.Decoder.RESTART_MARKER_END = 0xFFD7;\n\n/*** Prototype Methods ***/\n\njpeg.lossless.Decoder.prototype.decompress = function (buffer, offset, length) {\n return this.decode(buffer, offset, length).buffer;\n};\n\n\n\njpeg.lossless.Decoder.prototype.decode = function (buffer, offset, length, numBytes) {\n /*jslint bitwise: true */\n\n var current, scanNum = 0, pred = [], i, compN, temp = [], index = [], mcuNum;\n\n if (typeof buffer !== \"undefined\") {\n this.buffer = buffer;\n }\n\n if (typeof numBytes !== \"undefined\") {\n this.numBytes = numBytes;\n }\n\n this.stream = new jpeg.lossless.DataStream(this.buffer, offset, length);\n this.buffer = null;\n\n this.xLoc = 0;\n this.yLoc = 0;\n current = this.stream.get16();\n\n if (current !== 0xFFD8) { // SOI\n throw new Error(\"Not a JPEG file\");\n }\n\n current = this.stream.get16();\n\n while ((((current >> 4) !== 0x0FFC) || (current === 0xFFC4))) { // SOF 0~15\n switch (current) {\n case 0xFFC4: // DHT\n this.huffTable.read(this.stream, this.HuffTab);\n break;\n case 0xFFCC: // DAC\n throw new Error(\"Program doesn't support arithmetic coding. (format throw new IOException)\");\n case 0xFFDB:\n this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE);\n break;\n case 0xFFDD:\n this.restartInterval = this.readNumber();\n break;\n case 0xFFE0:\n case 0xFFE1:\n case 0xFFE2:\n case 0xFFE3:\n case 0xFFE4:\n case 0xFFE5:\n case 0xFFE6:\n case 0xFFE7:\n case 0xFFE8:\n case 0xFFE9:\n case 0xFFEA:\n case 0xFFEB:\n case 0xFFEC:\n case 0xFFED:\n case 0xFFEE:\n case 0xFFEF:\n this.readApp();\n break;\n case 0xFFFE:\n this.readComment();\n break;\n default:\n if ((current >> 8) !== 0xFF) {\n throw new Error(\"ERROR: format throw new IOException! (decode)\");\n }\n }\n\n current = this.stream.get16();\n }\n\n if ((current < 0xFFC0) || (current > 0xFFC7)) {\n throw new Error(\"ERROR: could not handle arithmetic code!\");\n }\n\n this.frame.read(this.stream);\n current = this.stream.get16();\n\n do {\n while (current !== 0x0FFDA) { // SOS\n switch (current) {\n case 0xFFC4: // DHT\n this.huffTable.read(this.stream, this.HuffTab);\n break;\n case 0xFFCC: // DAC\n throw new Error(\"Program doesn't support arithmetic coding. (format throw new IOException)\");\n case 0xFFDB:\n this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE);\n break;\n case 0xFFDD:\n this.restartInterval = this.readNumber();\n break;\n case 0xFFE0:\n case 0xFFE1:\n case 0xFFE2:\n case 0xFFE3:\n case 0xFFE4:\n case 0xFFE5:\n case 0xFFE6:\n case 0xFFE7:\n case 0xFFE8:\n case 0xFFE9:\n case 0xFFEA:\n case 0xFFEB:\n case 0xFFEC:\n case 0xFFED:\n case 0xFFEE:\n case 0xFFEF:\n this.readApp();\n break;\n case 0xFFFE:\n this.readComment();\n break;\n default:\n if ((current >> 8) !== 0xFF) {\n throw new Error(\"ERROR: format throw new IOException! (Parser.decode)\");\n }\n }\n\n current = this.stream.get16();\n }\n\n this.precision = this.frame.precision;\n this.components = this.frame.components;\n\n if (!this.numBytes) {\n this.numBytes = parseInt(Math.ceil(this.precision / 8));\n }\n\n if (this.numBytes == 1) {\n this.mask = 0xFF;\n } else {\n this.mask = 0xFFFF;\n }\n\n this.scan.read(this.stream);\n this.numComp = this.scan.numComp;\n this.selection = this.scan.selection;\n\n if (this.numBytes === 1) {\n if (this.numComp === 3) {\n this.getter = this.getValueRGB;\n this.setter = this.setValueRGB;\n this.output = this.outputRGB;\n } else {\n this.getter = this.getValue8;\n this.setter = this.setValue8;\n this.output = this.outputSingle;\n }\n } else {\n this.getter = this.getValue16;\n this.setter = this.setValue16;\n this.output = this.outputSingle;\n }\n\n switch (this.selection) {\n case 2:\n this.selector = this.select2;\n break;\n case 3:\n this.selector = this.select3;\n break;\n case 4:\n this.selector = this.select4;\n break;\n case 5:\n this.selector = this.select5;\n break;\n case 6:\n this.selector = this.select6;\n break;\n case 7:\n this.selector = this.select7;\n break;\n default:\n this.selector = this.select1;\n break;\n }\n\n this.scanComps = this.scan.components;\n this.quantTables = this.quantTable.quantTables;\n\n for (i = 0; i < this.numComp; i+=1) {\n compN = this.scanComps[i].scanCompSel;\n this.qTab[i] = this.quantTables[this.components[compN].quantTableSel];\n this.nBlock[i] = this.components[compN].vSamp * this.components[compN].hSamp;\n this.dcTab[i] = this.HuffTab[this.scanComps[i].dcTabSel][0];\n this.acTab[i] = this.HuffTab[this.scanComps[i].acTabSel][1];\n }\n\n this.xDim = this.frame.dimX;\n this.yDim = this.frame.dimY;\n this.outputData = new DataView(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp));\n\n scanNum+=1;\n\n while (true) { // Decode one scan\n temp[0] = 0;\n index[0] = 0;\n\n for (i = 0; i < 10; i+=1) {\n pred[i] = (1 << (this.precision - 1));\n }\n\n if (this.restartInterval === 0) {\n current = this.decodeUnit(pred, temp, index);\n\n while ((current === 0) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim))) {\n this.output(pred);\n current = this.decodeUnit(pred, temp, index);\n }\n\n break; //current=MARKER\n }\n\n for (mcuNum = 0; mcuNum < this.restartInterval; mcuNum+=1) {\n this.restarting = (mcuNum == 0);\n current = this.decodeUnit(pred, temp, index);\n this.output(pred);\n\n if (current !== 0) {\n break;\n }\n }\n\n if (current === 0) {\n if (this.markerIndex !== 0) {\n current = (0xFF00 | this.marker);\n this.markerIndex = 0;\n } else {\n current = this.stream.get16();\n }\n }\n\n if (!((current >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) &&\n (current <= jpeg.lossless.Decoder.RESTART_MARKER_END))) {\n break; //current=MARKER\n }\n }\n\n if ((current === 0xFFDC) && (scanNum === 1)) { //DNL\n this.readNumber();\n current = this.stream.get16();\n }\n } while ((current !== 0xFFD9) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) && (scanNum === 0));\n\n return this.outputData;\n};\n\n\n\njpeg.lossless.Decoder.prototype.decodeUnit = function (prev, temp, index) {\n if (this.numComp == 1) {\n return this.decodeSingle(prev, temp, index);\n } else if (this.numComp == 3) {\n return this.decodeRGB(prev, temp, index);\n } else {\n return -1;\n }\n};\n\n\n\njpeg.lossless.Decoder.prototype.select1 = function (compOffset) {\n return this.getPreviousX(compOffset);\n};\n\n\n\njpeg.lossless.Decoder.prototype.select2 = function (compOffset) {\n return this.getPreviousY(compOffset);\n};\n\n\n\njpeg.lossless.Decoder.prototype.select3 = function (compOffset) {\n return this.getPreviousXY(compOffset);\n};\n\n\n\njpeg.lossless.Decoder.prototype.select4 = function (compOffset) {\n return (this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) - this.getPreviousXY(compOffset);\n};\n\n\n\njpeg.lossless.Decoder.prototype.select5 = function (compOffset) {\n return this.getPreviousX(compOffset) + ((this.getPreviousY(compOffset) - this.getPreviousXY(compOffset)) >> 1);\n};\n\n\n\njpeg.lossless.Decoder.prototype.select6 = function (compOffset) {\n return this.getPreviousY(compOffset) + ((this.getPreviousX(compOffset) - this.getPreviousXY(compOffset)) >> 1);\n};\n\n\n\njpeg.lossless.Decoder.prototype.select7 = function (compOffset) {\n return ((this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) / 2);\n};\n\n\n\njpeg.lossless.Decoder.prototype.decodeRGB = function (prev, temp, index) {\n /*jslint bitwise: true */\n\n var value, actab, dctab, qtab, ctrC, i, k, j;\n\n prev[0] = this.selector(0);\n prev[1] = this.selector(1);\n prev[2] = this.selector(2);\n\n for (ctrC = 0; ctrC < this.numComp; ctrC+=1) {\n qtab = this.qTab[ctrC];\n actab = this.acTab[ctrC];\n dctab = this.dcTab[ctrC];\n for (i = 0; i < this.nBlock[ctrC]; i+=1) {\n for (k = 0; k < this.IDCT_Source.length; k+=1) {\n this.IDCT_Source[k] = 0;\n }\n\n value = this.getHuffmanValue(dctab, temp, index);\n\n if (value >= 0xFF00) {\n return value;\n }\n\n prev[ctrC] = this.IDCT_Source[0] = prev[ctrC] + this.getn(index, value, temp, index);\n this.IDCT_Source[0] *= qtab[0];\n\n for (j = 1; j < 64; j+=1) {\n value = this.getHuffmanValue(actab, temp, index);\n\n if (value >= 0xFF00) {\n return value;\n }\n\n j += (value >> 4);\n\n if ((value & 0x0F) === 0) {\n if ((value >> 4) === 0) {\n break;\n }\n } else {\n this.IDCT_Source[jpeg.lossless.Decoder.IDCT_P[j]] = this.getn(index, value & 0x0F, temp, index) * qtab[j];\n }\n }\n }\n }\n\n return 0;\n};\n\n\n\njpeg.lossless.Decoder.prototype.decodeSingle = function (prev, temp, index) {\n /*jslint bitwise: true */\n\n var value, i, n, nRestart;\n\n if (this.restarting) {\n this.restarting = false;\n prev[0] = (1 << (this.frame.precision - 1));\n } else {\n prev[0] = this.selector();\n }\n\n for (i = 0; i < this.nBlock[0]; i+=1) {\n value = this.getHuffmanValue(this.dcTab[0], temp, index);\n if (value >= 0xFF00) {\n return value;\n }\n\n n = this.getn(prev, value, temp, index);\n nRestart = (n >> 8);\n\n if ((nRestart >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && (nRestart <= jpeg.lossless.Decoder.RESTART_MARKER_END)) {\n return nRestart;\n }\n\n prev[0] += n;\n }\n\n return 0;\n};\n\n\n\n//\tHuffman table for fast search: (HuffTab) 8-bit Look up table 2-layer search architecture, 1st-layer represent 256 node (8 bits) if codeword-length > 8\n//\tbits, then the entry of 1st-layer = (# of 2nd-layer table) | MSB and it is stored in the 2nd-layer Size of tables in each layer are 256.\n//\tHuffTab[*][*][0-256] is always the only 1st-layer table.\n//\n//\tAn entry can be: (1) (# of 2nd-layer table) | MSB , for code length > 8 in 1st-layer (2) (Code length) << 8 | HuffVal\n//\n//\tHuffmanValue(table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...)\n//\t ):\n//\t return: Huffman Value of table\n//\t 0xFF?? if it receives a MARKER\n//\t Parameter: table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...)\n//\t temp temp storage for remainded bits\n//\t index index to bit of temp\n//\t in FILE pointer\n//\t Effect:\n//\t temp store new remainded bits\n//\t index change to new index\n//\t in change to new position\n//\t NOTE:\n//\t Initial by temp=0; index=0;\n//\t NOTE: (explain temp and index)\n//\t temp: is always in the form at calling time or returning time\n//\t | byte 4 | byte 3 | byte 2 | byte 1 |\n//\t | 0 | 0 | 00000000 | 00000??? | if not a MARKER\n//\t ^index=3 (from 0 to 15)\n//\t 321\n//\t NOTE (marker and marker_index):\n//\t If get a MARKER from 'in', marker=the low-byte of the MARKER\n//\t and marker_index=9\n//\t If marker_index=9 then index is always > 8, or HuffmanValue()\n//\t will not be called\njpeg.lossless.Decoder.prototype.getHuffmanValue = function (table, temp, index) {\n /*jslint bitwise: true */\n\n var code, input, mask;\n mask = 0xFFFF;\n\n if (index[0] < 8) {\n temp[0] <<= 8;\n input = this.stream.get8();\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n temp[0] |= input;\n } else {\n index[0] -= 8;\n }\n\n code = table[temp[0] >> index[0]];\n\n if ((code & jpeg.lossless.Decoder.MSB) !== 0) {\n if (this.markerIndex !== 0) {\n this.markerIndex = 0;\n return 0xFF00 | this.marker;\n }\n\n temp[0] &= (mask >> (16 - index[0]));\n temp[0] <<= 8;\n input = this.stream.get8();\n\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n\n temp[0] |= input;\n code = table[((code & 0xFF) * 256) + (temp[0] >> index[0])];\n index[0] += 8;\n }\n\n index[0] += 8 - (code >> 8);\n\n if (index[0] < 0) {\n throw new Error(\"index=\" + index[0] + \" temp=\" + temp[0] + \" code=\" + code + \" in HuffmanValue()\");\n }\n\n if (index[0] < this.markerIndex) {\n this.markerIndex = 0;\n return 0xFF00 | this.marker;\n }\n\n temp[0] &= (mask >> (16 - index[0]));\n return code & 0xFF;\n};\n\n\n\njpeg.lossless.Decoder.prototype.getn = function (PRED, n, temp, index) {\n /*jslint bitwise: true */\n\n var result, one, n_one, mask, input;\n one = 1;\n n_one = -1;\n mask = 0xFFFF;\n\n if (n === 0) {\n return 0;\n }\n\n if (n === 16) {\n if (PRED[0] >= 0) {\n return -32768;\n } else {\n return 32768;\n }\n }\n\n index[0] -= n;\n\n if (index[0] >= 0) {\n if ((index[0] < this.markerIndex) && !this.isLastPixel()) { // this was corrupting the last pixel in some cases\n this.markerIndex = 0;\n return (0xFF00 | this.marker) << 8;\n }\n\n result = temp[0] >> index[0];\n temp[0] &= (mask >> (16 - index[0]));\n } else {\n temp[0] <<= 8;\n input = this.stream.get8();\n\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n\n temp[0] |= input;\n index[0] += 8;\n\n if (index[0] < 0) {\n if (this.markerIndex !== 0) {\n this.markerIndex = 0;\n return (0xFF00 | this.marker) << 8;\n }\n\n temp[0] <<= 8;\n input = this.stream.get8();\n\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n\n temp[0] |= input;\n index[0] += 8;\n }\n\n if (index[0] < 0) {\n throw new Error(\"index=\" + index[0] + \" in getn()\");\n }\n\n if (index[0] < this.markerIndex) {\n this.markerIndex = 0;\n return (0xFF00 | this.marker) << 8;\n }\n\n result = temp[0] >> index[0];\n temp[0] &= (mask >> (16 - index[0]));\n }\n\n if (result < (one << (n - 1))) {\n result += (n_one << n) + 1;\n }\n\n return result;\n};\n\n\n\njpeg.lossless.Decoder.prototype.getPreviousX = function (compOffset) {\n /*jslint bitwise: true */\n\n if (this.xLoc > 0) {\n return this.getter((((this.yLoc * this.xDim) + this.xLoc) - 1), compOffset);\n } else if (this.yLoc > 0) {\n return this.getPreviousY(compOffset);\n } else {\n return (1 << (this.frame.precision - 1));\n }\n};\n\n\n\njpeg.lossless.Decoder.prototype.getPreviousXY = function (compOffset) {\n /*jslint bitwise: true */\n\n if ((this.xLoc > 0) && (this.yLoc > 0)) {\n return this.getter(((((this.yLoc - 1) * this.xDim) + this.xLoc) - 1), compOffset);\n } else {\n return this.getPreviousY(compOffset);\n }\n};\n\n\n\njpeg.lossless.Decoder.prototype.getPreviousY = function (compOffset) {\n /*jslint bitwise: true */\n\n if (this.yLoc > 0) {\n return this.getter((((this.yLoc - 1) * this.xDim) + this.xLoc), compOffset);\n } else {\n return this.getPreviousX(compOffset);\n }\n};\n\n\n\njpeg.lossless.Decoder.prototype.isLastPixel = function () {\n return (this.xLoc === (this.xDim - 1)) && (this.yLoc === (this.yDim - 1));\n};\n\n\n\njpeg.lossless.Decoder.prototype.outputSingle = function (PRED) {\n if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) {\n this.setter((((this.yLoc * this.xDim) + this.xLoc)), this.mask & PRED[0]);\n\n this.xLoc+=1;\n\n if (this.xLoc >= this.xDim) {\n this.yLoc+=1;\n this.xLoc = 0;\n }\n }\n};\n\n\n\njpeg.lossless.Decoder.prototype.outputRGB = function (PRED) {\n var offset = ((this.yLoc * this.xDim) + this.xLoc);\n\n if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) {\n this.setter(offset, PRED[0], 0);\n this.setter(offset, PRED[1], 1);\n this.setter(offset, PRED[2], 2);\n\n this.xLoc+=1;\n\n if (this.xLoc >= this.xDim) {\n this.yLoc+=1;\n this.xLoc = 0;\n }\n }\n};\n\n\n\njpeg.lossless.Decoder.prototype.setValue16 = function (index, val) {\n this.outputData.setInt16(index * 2, val, true);\n};\n\n\n\njpeg.lossless.Decoder.prototype.getValue16 = function (index) {\n return this.outputData.getInt16(index * 2, true);\n};\n\n\n\njpeg.lossless.Decoder.prototype.setValue8 = function (index, val) {\n this.outputData.setInt8(index, val);\n};\n\n\n\njpeg.lossless.Decoder.prototype.getValue8 = function (index) {\n return this.outputData.getInt8(index);\n};\n\n\n\njpeg.lossless.Decoder.prototype.setValueRGB = function (index, val, compOffset) {\n this.outputData.setUint8(index * 3 + compOffset, val);\n};\n\n\n\njpeg.lossless.Decoder.prototype.getValueRGB = function (index, compOffset) {\n return this.outputData.getUint8(index * 3 + compOffset);\n};\n\n\n\njpeg.lossless.Decoder.prototype.readApp = function() {\n var count = 0, length = this.stream.get16();\n count += 2;\n\n while (count < length) {\n this.stream.get8();\n count+=1;\n }\n\n return length;\n};\n\n\n\njpeg.lossless.Decoder.prototype.readComment = function () {\n var sb = \"\", count = 0, length;\n\n length = this.stream.get16();\n count += 2;\n\n while (count < length) {\n sb += this.stream.get8();\n count+=1;\n }\n\n return sb;\n};\n\n\n\njpeg.lossless.Decoder.prototype.readNumber = function() {\n var Ld = this.stream.get16();\n\n if (Ld !== 4) {\n throw new Error(\"ERROR: Define number format throw new IOException [Ld!=4]\");\n }\n\n return this.stream.get16();\n};\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.Decoder;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\njpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || ((typeof require !== 'undefined') ? require('./component-spec.js') : null);\njpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\n\n\n/*** Constructor ***/\njpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || function () {\n this.components = []; // Components\n this.dimX = 0; // Number of samples per line\n this.dimY = 0; // Number of lines\n this.numComp = 0; // Number of component in the frame\n this.precision = 0; // Sample Precision (from the original image)\n};\n\n\n\n/*** Prototype Methods ***/\n\njpeg.lossless.FrameHeader.prototype.read = function (data) {\n /*jslint bitwise: true */\n\n var count = 0, length, i, c, temp;\n\n length = data.get16();\n count += 2;\n\n this.precision = data.get8();\n count+=1;\n\n this.dimY = data.get16();\n count += 2;\n\n this.dimX = data.get16();\n count += 2;\n\n this.numComp = data.get8();\n count+=1;\n for (i = 1; i <= this.numComp; i+=1) {\n if (count > length) {\n throw new Error(\"ERROR: frame format error\");\n }\n\n c = data.get8();\n count+=1;\n\n if (count >= length) {\n throw new Error(\"ERROR: frame format error [c>=Lf]\");\n }\n\n temp = data.get8();\n count+=1;\n\n if (!this.components[c]) {\n this.components[c] = new jpeg.lossless.ComponentSpec();\n }\n\n this.components[c].hSamp = temp >> 4;\n this.components[c].vSamp = temp & 0x0F;\n this.components[c].quantTableSel = data.get8();\n count+=1;\n }\n\n if (count !== length) {\n throw new Error(\"ERROR: frame format error [Lf!=count]\");\n }\n\n return 1;\n};\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.FrameHeader;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\njpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\njpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n/*** Constructor ***/\njpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || function () {\n this.l = jpeg.lossless.Utils.createArray(4, 2, 16);\n this.th = [];\n this.v = jpeg.lossless.Utils.createArray(4, 2, 16, 200);\n this.tc = jpeg.lossless.Utils.createArray(4, 2);\n\n this.tc[0][0] = 0;\n this.tc[1][0] = 0;\n this.tc[2][0] = 0;\n this.tc[3][0] = 0;\n this.tc[0][1] = 0;\n this.tc[1][1] = 0;\n this.tc[2][1] = 0;\n this.tc[3][1] = 0;\n this.th[0] = 0;\n this.th[1] = 0;\n this.th[2] = 0;\n this.th[3] = 0;\n};\n\n\n\n/*** Static Pseudo-constants ***/\n\njpeg.lossless.HuffmanTable.MSB = 0x80000000;\n\n\n/*** Prototype Methods ***/\n\njpeg.lossless.HuffmanTable.prototype.read = function(data, HuffTab) {\n /*jslint bitwise: true */\n\n var count = 0, length, temp, t, c, i, j;\n\n length = data.get16();\n count += 2;\n\n while (count < length) {\n temp = data.get8();\n count+=1;\n t = temp & 0x0F;\n if (t > 3) {\n throw new Error(\"ERROR: Huffman table ID > 3\");\n }\n\n c = temp >> 4;\n if (c > 2) {\n throw new Error(\"ERROR: Huffman table [Table class > 2 ]\");\n }\n\n this.th[t] = 1;\n this.tc[t][c] = 1;\n\n for (i = 0; i < 16; i+=1) {\n this.l[t][c][i] = data.get8();\n count+=1;\n }\n\n for (i = 0; i < 16; i+=1) {\n for (j = 0; j < this.l[t][c][i]; j+=1) {\n if (count > length) {\n throw new Error(\"ERROR: Huffman table format error [count>Lh]\");\n }\n\n this.v[t][c][i][j] = data.get8();\n count+=1;\n }\n }\n }\n\n if (count !== length) {\n throw new Error(\"ERROR: Huffman table format error [count!=Lf]\");\n }\n\n for (i = 0; i < 4; i+=1) {\n for (j = 0; j < 2; j+=1) {\n if (this.tc[i][j] !== 0) {\n this.buildHuffTable(HuffTab[i][j], this.l[i][j], this.v[i][j]);\n }\n }\n }\n\n return 1;\n};\n\n\n\n//\tBuild_HuffTab()\n//\tParameter: t table ID\n//\t c table class ( 0 for DC, 1 for AC )\n//\t L[i] # of codewords which length is i\n//\t V[i][j] Huffman Value (length=i)\n//\tEffect:\n//\t build up HuffTab[t][c] using L and V.\njpeg.lossless.HuffmanTable.prototype.buildHuffTable = function(tab, L, V) {\n /*jslint bitwise: true */\n\n var currentTable, temp, k, i, j, n;\n temp = 256;\n k = 0;\n\n for (i = 0; i < 8; i+=1) { // i+1 is Code length\n for (j = 0; j < L[i]; j+=1) {\n for (n = 0; n < (temp >> (i + 1)); n+=1) {\n tab[k] = V[i][j] | ((i + 1) << 8);\n k+=1;\n }\n }\n }\n\n for (i = 1; k < 256; i+=1, k+=1) {\n tab[k] = i | jpeg.lossless.HuffmanTable.MSB;\n }\n\n currentTable = 1;\n k = 0;\n\n for (i = 8; i < 16; i+=1) { // i+1 is Code length\n for (j = 0; j < L[i]; j+=1) {\n for (n = 0; n < (temp >> (i - 7)); n+=1) {\n tab[(currentTable * 256) + k] = V[i][j] | ((i + 1) << 8);\n k+=1;\n }\n\n if (k >= 256) {\n if (k > 256) {\n throw new Error(\"ERROR: Huffman table error(1)!\");\n }\n\n k = 0;\n currentTable+=1;\n }\n }\n }\n};\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.HuffmanTable;\n}\n","/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\njpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || ((typeof require !== 'undefined') ? require('./component-spec.js') : null);\njpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\njpeg.lossless.Decoder = jpeg.lossless.Decoder || ((typeof require !== 'undefined') ? require('./decoder.js') : null);\njpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || ((typeof require !== 'undefined') ? require('./frame-header.js') : null);\njpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || ((typeof require !== 'undefined') ? require('./huffman-table.js') : null);\njpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || ((typeof require !== 'undefined') ? require('./quantization-table.js') : null);\njpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || ((typeof require !== 'undefined') ? require('./scan-component.js') : null);\njpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || ((typeof require !== 'undefined') ? require('./scan-header.js') : null);\njpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n/*** Exports ***/\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\njpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\njpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n/*** Constructor ***/\njpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || function () {\n this.precision = []; // Quantization precision 8 or 16\n this.tq = []; // 1: this table is presented\n this.quantTables = jpeg.lossless.Utils.createArray(4, 64); // Tables\n\n this.tq[0] = 0;\n this.tq[1] = 0;\n this.tq[2] = 0;\n this.tq[3] = 0;\n};\n\n\n\n/*** Static Methods ***/\n\njpeg.lossless.QuantizationTable.enhanceQuantizationTable = function(qtab, table) {\n /*jslint bitwise: true */\n\n var i;\n\n for (i = 0; i < 8; i+=1) {\n qtab[table[(0 * 8) + i]] *= 90;\n qtab[table[(4 * 8) + i]] *= 90;\n qtab[table[(2 * 8) + i]] *= 118;\n qtab[table[(6 * 8) + i]] *= 49;\n qtab[table[(5 * 8) + i]] *= 71;\n qtab[table[(1 * 8) + i]] *= 126;\n qtab[table[(7 * 8) + i]] *= 25;\n qtab[table[(3 * 8) + i]] *= 106;\n }\n\n for (i = 0; i < 8; i+=1) {\n qtab[table[0 + (8 * i)]] *= 90;\n qtab[table[4 + (8 * i)]] *= 90;\n qtab[table[2 + (8 * i)]] *= 118;\n qtab[table[6 + (8 * i)]] *= 49;\n qtab[table[5 + (8 * i)]] *= 71;\n qtab[table[1 + (8 * i)]] *= 126;\n qtab[table[7 + (8 * i)]] *= 25;\n qtab[table[3 + (8 * i)]] *= 106;\n }\n\n for (i = 0; i < 64; i+=1) {\n qtab[i] >>= 6;\n }\n};\n\n\n/*** Prototype Methods ***/\n\njpeg.lossless.QuantizationTable.prototype.read = function (data, table) {\n /*jslint bitwise: true */\n\n var count = 0, length, temp, t, i;\n\n length = data.get16();\n count += 2;\n\n while (count < length) {\n temp = data.get8();\n count+=1;\n t = temp & 0x0F;\n\n if (t > 3) {\n throw new Error(\"ERROR: Quantization table ID > 3\");\n }\n\n this.precision[t] = temp >> 4;\n\n if (this.precision[t] === 0) {\n this.precision[t] = 8;\n } else if (this.precision[t] === 1) {\n this.precision[t] = 16;\n } else {\n throw new Error(\"ERROR: Quantization table precision error\");\n }\n\n this.tq[t] = 1;\n\n if (this.precision[t] === 8) {\n for (i = 0; i < 64; i+=1) {\n if (count > length) {\n throw new Error(\"ERROR: Quantization table format error\");\n }\n\n this.quantTables[t][i] = data.get8();\n count+=1;\n }\n\n jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table);\n } else {\n for (i = 0; i < 64; i+=1) {\n if (count > length) {\n throw new Error(\"ERROR: Quantization table format error\");\n }\n\n this.quantTables[t][i] = data.get16();\n count += 2;\n }\n\n jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table);\n }\n }\n\n if (count !== length) {\n throw new Error(\"ERROR: Quantization table error [count!=Lq]\");\n }\n\n return 1;\n};\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.QuantizationTable;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\n\n\n/*** Constructor ***/\njpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || function () {\n this.acTabSel = 0; // AC table selector\n this.dcTabSel = 0; // DC table selector\n this.scanCompSel = 0; // Scan component selector\n};\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.ScanComponent;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\njpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\njpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || ((typeof require !== 'undefined') ? require('./scan-component.js') : null);\n\n\n/*** Constructor ***/\njpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || function () {\n this.ah = 0;\n this.al = 0;\n this.numComp = 0; // Number of components in the scan\n this.selection = 0; // Start of spectral or predictor selection\n this.spectralEnd = 0; // End of spectral selection\n this.components = [];\n};\n\n\n/*** Prototype Methods ***/\n\njpeg.lossless.ScanHeader.prototype.read = function(data) {\n /*jslint bitwise: true */\n\n var count = 0, length, i, temp;\n\n length = data.get16();\n count += 2;\n\n this.numComp = data.get8();\n count+=1;\n\n for (i = 0; i < this.numComp; i+=1) {\n this.components[i] = new jpeg.lossless.ScanComponent();\n\n if (count > length) {\n throw new Error(\"ERROR: scan header format error\");\n }\n\n this.components[i].scanCompSel = data.get8();\n count+=1;\n\n temp = data.get8();\n count+=1;\n\n this.components[i].dcTabSel = (temp >> 4);\n this.components[i].acTabSel = (temp & 0x0F);\n }\n\n this.selection = data.get8();\n count+=1;\n\n this.spectralEnd = data.get8();\n count+=1;\n\n temp = data.get8();\n this.ah = (temp >> 4);\n this.al = (temp & 0x0F);\n count+=1;\n\n if (count !== length) {\n throw new Error(\"ERROR: scan header format error [count!=Ns]\");\n }\n\n return 1;\n};\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.ScanHeader;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\n\n\n/*** Constructor ***/\njpeg.lossless.Utils = jpeg.lossless.Utils || {};\n\n\n/*** Static methods ***/\n\n// http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript\njpeg.lossless.Utils.createArray = function (length) {\n var arr = new Array(length || 0),\n i = length;\n\n if (arguments.length > 1) {\n var args = Array.prototype.slice.call(arguments, 1);\n while(i--) arr[length-1 - i] = jpeg.lossless.Utils.createArray.apply(this, args);\n }\n\n return arr;\n};\n\n\n// http://stackoverflow.com/questions/18638900/javascript-crc32\njpeg.lossless.Utils.makeCRCTable = function(){\n var c;\n var crcTable = [];\n for(var n =0; n < 256; n++){\n c = n;\n for(var k =0; k < 8; k++){\n c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n crcTable[n] = c;\n }\n return crcTable;\n};\n\njpeg.lossless.Utils.crc32 = function(dataView) {\n var crcTable = jpeg.lossless.Utils.crcTable || (jpeg.lossless.Utils.crcTable = jpeg.lossless.Utils.makeCRCTable());\n var crc = 0 ^ (-1);\n\n for (var i = 0; i < dataView.byteLength; i++ ) {\n crc = (crc >>> 8) ^ crcTable[(crc ^ dataView.getUint8(i)) & 0xFF];\n }\n\n return (crc ^ (-1)) >>> 0;\n};\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.Utils;\n}\n","'use strict';\n\n/**\n* FUNCTION: abs( x )\n*\tComputes the absolute value of `x`.\n*\n* @param {Number} x - input value\n* @returns {Number} absolute value\n*/\nfunction abs( x ) {\n\tif ( x < 0 ) {\n\t\treturn -x;\n\t}\n\tif ( x === 0 ) {\n\t\treturn 0; // handle negative zero\n\t}\n\treturn x;\n} // end FUNCTION abs()\n\n\n// EXPORTS //\n\nmodule.exports = abs;\n","'use strict';\n\n// EXPORTS //\n\nmodule.exports = Math.ceil;\n","'use strict';\n\n// MODULES //\n\nvar floor = require( 'math-floor' );\n\n\n// DIV2 //\n\n/**\n* FUNCTION: div2( x )\n*\tConverts a nonnegative integer to a literal bit representation using the divide-by-2 algorithm.\n*\n* @param {Number} x - nonnegative integer\n* @returns {String} bit representation\n*/\nfunction div2( x ) {\n\tvar str = '';\n\tvar y;\n\n\t// We repeatedly divide by 2 and check for a remainder. If a remainder exists, the number is odd and we add a '1' bit...\n\twhile ( x > 0 ) {\n\t\ty = x / 2;\n\t\tx = floor( y );\n\t\tif ( y === x ) {\n\t\t\tstr = '0' + str;\n\t\t} else {\n\t\t\tstr = '1' + str;\n\t\t}\n\t}\n\treturn str;\n} // end FUNCTION div2()\n\n\n// EXPORTS //\n\nmodule.exports = div2;\n","'use strict';\n\n// MODULES //\n\nvar pinf = require( 'const-pinf-float32' );\nvar ninf = require( 'const-ninf-float32' );\nvar abs = require( 'math-abs' );\nvar floor = require( 'math-floor' );\nvar rpad = require( 'utils-right-pad-string' );\nvar lpad = require( 'utils-left-pad-string' );\nvar repeat = require( 'utils-repeat-string' );\nvar div2 = require( './div2.js' );\nvar mult2 = require( './mult2.js' );\n\n\n// CONSTANTS //\n\nvar BIAS = 127; // exponent bias => (2**8)/2 - 1\n\n\n// BINARY STRING //\n\n/**\n* FUNCTION: binaryString( x )\n*\tReturns a string giving the literal bit representation of a single-precision floating-point number.\n*\n* @param {Number} x - input value\n* @returns {String} bit representation\n*/\nfunction binaryString( x ) {\n\tvar nbits;\n\tvar sign;\n\tvar str;\n\tvar exp;\n\tvar n;\n\tvar f;\n\tvar i;\n\n\t// Check for a negative value or negative zero...\n\tif ( x < 0 || 1/x === ninf ) {\n\t\tsign = '1';\n\t} else {\n\t\tsign = '0';\n\t}\n\t// Special case: +-infinity\n\tif ( x === pinf || x === ninf ) {\n\t\t// Based on IEEE 754-2008...\n\t\texp = repeat( '1', 8 ); // all 1s\n\t\tstr = repeat( '0', 23 ); // all 0s\n\t\treturn sign + exp + str;\n\t}\n\t// Special case: NaN\n\tif ( x !== x ) {\n\t\t// Based on IEEE 754-2008...\n\t\texp = repeat( '1', 8 ); // all 1s\n\t\tstr = '1' + repeat( '0', 22 ); // can't be all 0s\n\t\treturn sign + exp + str;\n\t}\n\t// Special case: +-0\n\tif ( x === 0 ) {\n\t\t// Based on IEEE 754-2008...\n\t\texp = repeat( '0', 8 ); // all 0s\n\t\tstr = repeat( '0', 23 ); // all 0s\n\t\treturn sign + exp + str;\n\t}\n\tx = abs( x );\n\n\t// Isolate the integer part (digits before the decimal):\n\tn = floor( x );\n\n\t// Isolate the fractional part (digits after the decimal):\n\tf = x - n;\n\n\t// Convert the integer and fractional parts to bit strings:\n\tn = div2( n );\n\tf = mult2( f );\n\n\t// Determine the exponent needed to normalize the integer+fractional parts...\n\tif ( n ) {\n\t\t// Move the decimal `d` digits to the left:\n\t\texp = n.length - 1;\n\t} else {\n\t\t// Find the first '1' bit...\n\t\tfor ( i = 0; i < f.length; i++ ) {\n\t\t\tif ( f[ i ] === '1' ) {\n\t\t\t\tnbits = i + 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// Move the decimal `d` digits to the right:\n\t\texp = -nbits;\n\t}\n\t// Normalize the combined integer+fractional string...\n\tstr = n + f;\n\tif ( exp < 0 ) {\n\t\t// Handle subnormals...\n\t\tif ( exp <= -BIAS ) {\n\t\t\t// Cap the number of bits removed:\n\t\t\tnbits = BIAS - 1;\n\t\t}\n\t\t// Remove all leading zeros and the first '1' for normal values, and, for subnormals, remove at most BIAS-1 leading bits:\n\t\tstr = str.substring( nbits );\n\t} else {\n\t\t// Remove the leading '1' (implicit/hidden bit):\n\t\tstr = str.substring( 1 );\n\t}\n\t// Convert the exponent to a bit string:\n\texp = div2( exp + BIAS );\n\texp = lpad( exp, 8, '0' );\n\n\t// Fill in any trailing zeros and ensure we have only 23 fraction bits:\n\tstr = rpad( str, 23, '0' ).substring( 0, 23 );\n\n\t// Return a bit representation:\n\treturn sign + exp + str;\n} // end FUNCTION binaryString()\n\n\n// EXPORTS //\n\nmodule.exports = binaryString;\n","'use strict';\n\n// VARIABLES //\n\nvar MAX_ITER = 149; // 127+22 (subnormals)\nvar MAX_BITS = 24; // only 23 bits for fraction\n\n\n// MULT2 //\n\n/**\n* FUNCTION: mult2( x )\n*\tConverts a fraction to a literal bit representation using the multiply-by-2 algorithm.\n*\n* @param {Number} x - number less than 1\n* @returns {String} bit representation\n*/\nfunction mult2( x ) {\n\tvar str;\n\tvar y;\n\tvar i;\n\tvar j;\n\n\tstr = '';\n\tif ( x === 0 ) {\n\t\treturn str;\n\t}\n\tj = MAX_ITER;\n\n\t// Each time we multiply by 2 and find a ones digit, add a '1'; otherwise, add a '0'..\n\tfor ( i = 0; i < MAX_ITER; i++ ) {\n\t\ty = x * 2;\n\t\tif ( y >= 1 ) {\n\t\t\tx = y - 1;\n\t\t\tstr += '1';\n\t\t\tif ( j === MAX_ITER ) {\n\t\t\t\tj = i; // first '1'\n\t\t\t}\n\t\t} else {\n\t\t\tx = y;\n\t\t\tstr += '0';\n\t\t}\n\t\t// Stop when we have no more decimals to process or in the event we found a fraction which cannot be represented in a finite number of bits...\n\t\tif ( y === 1 || i-j > MAX_BITS ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn str;\n} // end FUNCTION mult2()\n\n\n// EXPORTS //\n\nmodule.exports = mult2;\n","'use strict';\n\n// EXPORTS //\n\nmodule.exports = Math.floor;\n","\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\n\n/**\n * nifti\n * @type {*|{}}\n */\nvar nifti = nifti || {};\nnifti.NIFTI1 = nifti.NIFTI1 || ((typeof require !== 'undefined') ? require('./nifti1.js') : null);\nnifti.NIFTI2 = nifti.NIFTI2 || ((typeof require !== 'undefined') ? require('./nifti2.js') : null);\nnifti.Utils = nifti.Utils || ((typeof require !== 'undefined') ? require('./utilities.js') : null);\n\nvar pako = pako || ((typeof require !== 'undefined') ? require('pako') : null);\n\n\n\n/*** Static Methods ***/\n\n/**\n * Returns true if this data represents a NIFTI-1 header.\n * @param {ArrayBuffer} data\n * @returns {boolean}\n */\nnifti.isNIFTI1 = function (data) {\n var buf, mag1, mag2, mag3;\n\n buf = new DataView(data);\n mag1 = buf.getUint8(nifti.NIFTI1.MAGIC_NUMBER_LOCATION);\n mag2 = buf.getUint8(nifti.NIFTI1.MAGIC_NUMBER_LOCATION + 1);\n mag3 = buf.getUint8(nifti.NIFTI1.MAGIC_NUMBER_LOCATION + 2);\n\n return !!((mag1 === nifti.NIFTI1.MAGIC_NUMBER[0]) && (mag2 === nifti.NIFTI1.MAGIC_NUMBER[1]) &&\n (mag3 === nifti.NIFTI1.MAGIC_NUMBER[2]));\n};\n\n\n/**\n * Returns true if this data represents a NIFTI-2 header.\n * @param {ArrayBuffer} data\n * @returns {boolean}\n */\nnifti.isNIFTI2 = function (data) {\n var buf, mag1, mag2, mag3;\n\n buf = new DataView(data);\n mag1 = buf.getUint8(nifti.NIFTI2.MAGIC_NUMBER_LOCATION);\n mag2 = buf.getUint8(nifti.NIFTI2.MAGIC_NUMBER_LOCATION + 1);\n mag3 = buf.getUint8(nifti.NIFTI2.MAGIC_NUMBER_LOCATION + 2);\n\n return !!((mag1 === nifti.NIFTI2.MAGIC_NUMBER[0]) && (mag2 === nifti.NIFTI2.MAGIC_NUMBER[1]) &&\n (mag3 === nifti.NIFTI2.MAGIC_NUMBER[2]));\n};\n\n\n\n/**\n * Returns true if this data represents a NIFTI header.\n * @param {ArrayBuffer} data\n * @returns {boolean}\n */\nnifti.isNIFTI = function (data) {\n return (nifti.isNIFTI1(data) || nifti.isNIFTI2(data));\n};\n\n\n\n/**\n * Returns true if this data is GZIP compressed.\n * @param {ArrayBuffer} data\n * @returns {boolean}\n */\nnifti.isCompressed = function (data) {\n var buf, magicCookie1, magicCookie2;\n\n if (data) {\n buf = new DataView(data);\n\n magicCookie1 = buf.getUint8(0);\n magicCookie2 = buf.getUint8(1);\n\n if (magicCookie1 === nifti.Utils.GUNZIP_MAGIC_COOKIE1) {\n return true;\n }\n\n if (magicCookie2 === nifti.Utils.GUNZIP_MAGIC_COOKIE2) {\n return true;\n }\n }\n\n return false;\n};\n\n\n\n/**\n * Returns decompressed data.\n * @param {ArrayBuffer} data\n * @returns {ArrayBuffer}\n */\nnifti.decompress = function (data) {\n return pako.inflate(data).buffer;\n};\n\n\n\n/**\n * Reads and returns the header object.\n * @param {ArrayBuffer} data\n * @returns {nifti.NIFTI1|nifti.NIFTI2|null}\n */\nnifti.readHeader = function (data) {\n var header = null;\n\n if (nifti.isCompressed(data)) {\n data = nifti.decompress(data);\n }\n\n if (nifti.isNIFTI1(data)) {\n header = new nifti.NIFTI1();\n } else if (nifti.isNIFTI2(data)) {\n header = new nifti.NIFTI2();\n }\n\n if (header) {\n header.readHeader(data);\n } else {\n console.error(\"That file does not appear to be NIFTI!\");\n }\n\n return header;\n};\n\n\n\n/**\n * Returns true if this header contains an extension.\n * @param {nifti.NIFTI1|nifti.NIFTI2} header\n * @returns {boolean}\n */\nnifti.hasExtension = function (header) {\n return (header.extensionFlag[0] != 0);\n};\n\n\n\n/**\n * Returns the image data.\n * @param {nifti.NIFTI1|nifti.NIFTI2} header\n * @param {ArrayBuffer} data\n * @returns {ArrayBuffer}\n */\nnifti.readImage = function (header, data) {\n var imageOffset = header.vox_offset,\n timeDim = 1,\n statDim = 1;\n\n if (header.dims[4]) {\n timeDim = header.dims[4];\n }\n\n if (header.dims[5]) {\n statDim = header.dims[5];\n }\n\n var imageSize = header.dims[1] * header.dims[2] * header.dims[3] * timeDim * statDim * (header.numBitsPerVoxel / 8);\n return data.slice(imageOffset, imageOffset + imageSize);\n};\n\n\n\n/**\n * Returns the extension data (including extension header).\n * @param {nifti.NIFTI1|nifti.NIFTI2} header\n * @param {ArrayBuffer} data\n * @returns {ArrayBuffer}\n */\nnifti.readExtension = function (header, data) {\n var loc = header.getExtensionLocation(),\n size = header.extensionSize;\n\n return data.slice(loc, loc + size);\n};\n\n\n\n/**\n * Returns the extension data.\n * @param {nifti.NIFTI1|nifti.NIFTI2} header\n * @param {ArrayBuffer} data\n * @returns {ArrayBuffer}\n */\nnifti.readExtensionData = function (header, data) {\n var loc = header.getExtensionLocation(),\n size = header.extensionSize;\n\n return data.slice(loc + 8, loc + size - 8);\n};\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = nifti;\n}\n","\n/*jslint browser: true, node: true */\n/*global */\n\n\"use strict\";\n\n/*** Imports ***/\n\nvar nifti = nifti || {};\nnifti.Utils = nifti.Utils || ((typeof require !== 'undefined') ? require('./utilities.js') : null);\n\n\n\n/*** Constructor ***/\n\n/**\n * The NIFTI1 constructor.\n * @constructor\n * @property {boolean} littleEndian\n * @property {number} dim_info\n * @property {number[]} dims - image dimensions\n * @property {number} intent_p1\n * @property {number} intent_p2\n * @property {number} intent_p3\n * @property {number} intent_code\n * @property {number} datatypeCode\n * @property {number} numBitsPerVoxel\n * @property {number} slice_start\n * @property {number} slice_end\n * @property {number} slice_code\n * @property {number[]} pixDims - voxel dimensions\n * @property {number} vox_offset\n * @property {number} scl_slope\n * @property {number} scl_inter\n * @property {number} xyzt_units\n * @property {number} cal_max\n * @property {number} cal_min\n * @property {number} slice_duration\n * @property {number} toffset\n * @property {string} description\n * @property {string} aux_file\n * @property {string} intent_name\n * @property {number} qform_code\n * @property {number} sform_code\n * @property {number} quatern_b\n * @property {number} quatern_c\n * @property {number} quatern_d\n * @property {number} quatern_x\n * @property {number} quatern_y\n * @property {number} quatern_z\n * @property {Array.>} affine\n * @property {string} magic\n * @property {boolean} isHDR - if hdr/img format\n * @property {number[]} extensionFlag\n * @property {number} extensionSize\n * @property {number} extensionCode\n * @type {Function}\n */\nnifti.NIFTI1 = nifti.NIFTI1 || function () {\n this.littleEndian = false;\n this.dim_info = 0;\n this.dims = [];\n this.intent_p1 = 0;\n this.intent_p2 = 0;\n this.intent_p3 = 0;\n this.intent_code = 0;\n this.datatypeCode = 0;\n this.numBitsPerVoxel = 0;\n this.slice_start = 0;\n this.slice_end = 0;\n this.slice_code = 0;\n this.pixDims = [];\n this.vox_offset = 0;\n this.scl_slope = 1;\n this.scl_inter = 0;\n this.xyzt_units = 0;\n this.cal_max = 0;\n this.cal_min = 0;\n this.slice_duration = 0;\n this.toffset = 0;\n this.description = \"\";\n this.aux_file = \"\";\n this.intent_name = \"\";\n this.qform_code = 0;\n this.sform_code = 0;\n this.quatern_b = 0;\n this.quatern_c = 0;\n this.quatern_d = 0;\n this.qoffset_x = 0;\n this.qoffset_y = 0;\n this.qoffset_z = 0;\n this.affine = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]];\n this.magic = 0;\n this.isHDR = false;\n this.extensionFlag = [0, 0, 0, 0];\n this.extensionSize = 0;\n this.extensionCode = 0;\n};\n\n\n\n/*** Static Pseudo-constants ***/\n\n// datatype codes\nnifti.NIFTI1.TYPE_NONE = 0;\nnifti.NIFTI1.TYPE_BINARY = 1;\nnifti.NIFTI1.TYPE_UINT8 = 2;\nnifti.NIFTI1.TYPE_INT16 = 4;\nnifti.NIFTI1.TYPE_INT32 = 8;\nnifti.NIFTI1.TYPE_FLOAT32 = 16;\nnifti.NIFTI1.TYPE_COMPLEX64 = 32;\nnifti.NIFTI1.TYPE_FLOAT64 = 64;\nnifti.NIFTI1.TYPE_RGB24 = 128;\nnifti.NIFTI1.TYPE_INT8 = 256;\nnifti.NIFTI1.TYPE_UINT16 = 512;\nnifti.NIFTI1.TYPE_UINT32 = 768;\nnifti.NIFTI1.TYPE_INT64 = 1024;\nnifti.NIFTI1.TYPE_UINT64 = 1280;\nnifti.NIFTI1.TYPE_FLOAT128 = 1536;\nnifti.NIFTI1.TYPE_COMPLEX128 = 1792;\nnifti.NIFTI1.TYPE_COMPLEX256 = 2048;\n\n// transform codes\nnifti.NIFTI1.XFORM_UNKNOWN = 0;\nnifti.NIFTI1.XFORM_SCANNER_ANAT = 1;\nnifti.NIFTI1.XFORM_ALIGNED_ANAT = 2;\nnifti.NIFTI1.XFORM_TALAIRACH = 3;\nnifti.NIFTI1.XFORM_MNI_152 = 4;\n\n// unit codes\nnifti.NIFTI1.SPATIAL_UNITS_MASK = 0x07;\nnifti.NIFTI1.TEMPORAL_UNITS_MASK = 0x38;\nnifti.NIFTI1.UNITS_UNKNOWN = 0;\nnifti.NIFTI1.UNITS_METER = 1;\nnifti.NIFTI1.UNITS_MM = 2;\nnifti.NIFTI1.UNITS_MICRON = 3;\nnifti.NIFTI1.UNITS_SEC = 8;\nnifti.NIFTI1.UNITS_MSEC = 16;\nnifti.NIFTI1.UNITS_USEC = 24;\nnifti.NIFTI1.UNITS_HZ = 32;\nnifti.NIFTI1.UNITS_PPM = 40;\nnifti.NIFTI1.UNITS_RADS = 48;\n\n// nifti1 codes\nnifti.NIFTI1.MAGIC_COOKIE = 348;\nnifti.NIFTI1.MAGIC_NUMBER_LOCATION = 344;\nnifti.NIFTI1.MAGIC_NUMBER = [0x6E, 0x2B, 0x31]; // n+1 (.nii)\nnifti.NIFTI1.MAGIC_NUMBER2 = [0x6E, 0x69, 0x31]; // ni1 (.hdr/.img)\nnifti.NIFTI1.EXTENSION_HEADER_SIZE = 8;\n\n\n/*** Prototype Methods ***/\n\n/**\n * Reads the header data.\n * @param {ArrayBuffer} data\n */\nnifti.NIFTI1.prototype.readHeader = function (data) {\n var rawData = new DataView(data),\n magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian),\n ctr,\n ctrOut,\n ctrIn,\n index;\n\n if (magicCookieVal !== nifti.NIFTI1.MAGIC_COOKIE) { // try as little endian\n this.littleEndian = true;\n magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian);\n }\n\n if (magicCookieVal !== nifti.NIFTI1.MAGIC_COOKIE) {\n throw new Error(\"This does not appear to be a NIFTI file!\");\n }\n\n this.dim_info = nifti.Utils.getByteAt(rawData, 39);\n\n for (ctr = 0; ctr < 8; ctr += 1) {\n index = 40 + (ctr * 2);\n this.dims[ctr] = nifti.Utils.getShortAt(rawData, index, this.littleEndian);\n }\n\n this.intent_p1 = nifti.Utils.getFloatAt(rawData, 56, this.littleEndian);\n this.intent_p2 = nifti.Utils.getFloatAt(rawData, 60, this.littleEndian);\n this.intent_p3 = nifti.Utils.getFloatAt(rawData, 64, this.littleEndian);\n this.intent_code = nifti.Utils.getShortAt(rawData, 68, this.littleEndian);\n\n this.datatypeCode = nifti.Utils.getShortAt(rawData, 70, this.littleEndian);\n this.numBitsPerVoxel = nifti.Utils.getShortAt(rawData, 72, this.littleEndian);\n\n this.slice_start = nifti.Utils.getShortAt(rawData, 74, this.littleEndian);\n\n for (ctr = 0; ctr < 8; ctr += 1) {\n index = 76 + (ctr * 4);\n this.pixDims[ctr] = nifti.Utils.getFloatAt(rawData, index, this.littleEndian);\n }\n\n this.vox_offset = nifti.Utils.getFloatAt(rawData, 108, this.littleEndian);\n\n this.scl_slope = nifti.Utils.getFloatAt(rawData, 112, this.littleEndian);\n this.scl_inter = nifti.Utils.getFloatAt(rawData, 116, this.littleEndian);\n\n this.slice_end = nifti.Utils.getShortAt(rawData, 120, this.littleEndian);\n this.slice_code = nifti.Utils.getByteAt(rawData, 122);\n\n this.xyzt_units = nifti.Utils.getByteAt(rawData, 123);\n\n this.cal_max = nifti.Utils.getFloatAt(rawData, 124, this.littleEndian);\n this.cal_min = nifti.Utils.getFloatAt(rawData, 128, this.littleEndian);\n\n this.slice_duration = nifti.Utils.getFloatAt(rawData, 132, this.littleEndian);\n this.toffset = nifti.Utils.getFloatAt(rawData, 136, this.littleEndian);\n\n this.description = nifti.Utils.getStringAt(rawData, 148, 228);\n this.aux_file = nifti.Utils.getStringAt(rawData, 228, 252);\n\n this.qform_code = nifti.Utils.getShortAt(rawData, 252, this.littleEndian);\n this.sform_code = nifti.Utils.getShortAt(rawData, 254, this.littleEndian);\n\n this.quatern_b = nifti.Utils.getFloatAt(rawData, 256, this.littleEndian);\n this.quatern_c = nifti.Utils.getFloatAt(rawData, 260, this.littleEndian);\n this.quatern_d = nifti.Utils.getFloatAt(rawData, 264, this.littleEndian);\n this.qoffset_x = nifti.Utils.getFloatAt(rawData, 268, this.littleEndian);\n this.qoffset_y = nifti.Utils.getFloatAt(rawData, 272, this.littleEndian);\n this.qoffset_z = nifti.Utils.getFloatAt(rawData, 276, this.littleEndian);\n\n for (ctrOut = 0; ctrOut < 3; ctrOut += 1) {\n for (ctrIn = 0; ctrIn < 4; ctrIn += 1) {\n index = 280 + (((ctrOut * 4) + ctrIn) * 4);\n this.affine[ctrOut][ctrIn] = nifti.Utils.getFloatAt(rawData, index, this.littleEndian);\n }\n }\n\n this.affine[3][0] = 0;\n this.affine[3][1] = 0;\n this.affine[3][2] = 0;\n this.affine[3][3] = 1;\n\n this.intent_name = nifti.Utils.getStringAt(rawData, 328, 344);\n this.magic = nifti.Utils.getStringAt(rawData, 344, 348);\n\n this.isHDR = (this.magic === nifti.NIFTI1.MAGIC_NUMBER2);\n\n if (rawData.byteLength > nifti.NIFTI1.MAGIC_COOKIE) {\n this.extensionFlag[0] = nifti.Utils.getByteAt(rawData, 348);\n this.extensionFlag[1] = nifti.Utils.getByteAt(rawData, 348 + 1);\n this.extensionFlag[2] = nifti.Utils.getByteAt(rawData, 348 + 2);\n this.extensionFlag[3] = nifti.Utils.getByteAt(rawData, 348 + 3);\n\n if (this.extensionFlag[0]) {\n this.extensionSize = this.getExtensionSize(rawData);\n this.extensionCode = this.getExtensionCode(rawData);\n }\n }\n};\n\n\n/**\n * Returns a formatted string of header fields.\n * @returns {string}\n */\nnifti.NIFTI1.prototype.toFormattedString = function () {\n var fmt = nifti.Utils.formatNumber,\n string = \"\";\n\n string += (\"Dim Info = \" + this.dim_info + \"\\n\");\n\n string += (\"Image Dimensions (1-8): \" +\n this.dims[0] + \", \" +\n this.dims[1] + \", \" +\n this.dims[2] + \", \" +\n this.dims[3] + \", \" +\n this.dims[4] + \", \" +\n this.dims[5] + \", \" +\n this.dims[6] + \", \" +\n this.dims[7] + \"\\n\");\n\n string += (\"Intent Parameters (1-3): \" +\n this.intent_p1 + \", \" +\n this.intent_p2 + \", \" +\n this.intent_p3) + \"\\n\";\n\n string += (\"Intent Code = \" + this.intent_code + \"\\n\");\n string += (\"Datatype = \" + this.datatypeCode + \" (\" + this.getDatatypeCodeString(this.datatypeCode) + \")\\n\");\n string += (\"Bits Per Voxel = \" + this.numBitsPerVoxel + \"\\n\");\n string += (\"Slice Start = \" + this.slice_start + \"\\n\");\n string += (\"Voxel Dimensions (1-8): \" +\n fmt(this.pixDims[0]) + \", \" +\n fmt(this.pixDims[1]) + \", \" +\n fmt(this.pixDims[2]) + \", \" +\n fmt(this.pixDims[3]) + \", \" +\n fmt(this.pixDims[4]) + \", \" +\n fmt(this.pixDims[5]) + \", \" +\n fmt(this.pixDims[6]) + \", \" +\n fmt(this.pixDims[7]) + \"\\n\");\n\n string += (\"Image Offset = \" + this.vox_offset + \"\\n\");\n string += (\"Data Scale: Slope = \" + fmt(this.scl_slope) + \" Intercept = \" + fmt(this.scl_inter) + \"\\n\");\n string += (\"Slice End = \" + this.slice_end + \"\\n\");\n string += (\"Slice Code = \" + this.slice_code + \"\\n\");\n string += (\"Units Code = \" + this.xyzt_units + \" (\" + this.getUnitsCodeString(nifti.NIFTI1.SPATIAL_UNITS_MASK & this.xyzt_units) + \", \" + this.getUnitsCodeString(nifti.NIFTI1.TEMPORAL_UNITS_MASK & this.xyzt_units) + \")\\n\");\n string += (\"Display Range: Max = \" + fmt(this.cal_max) + \" Min = \" + fmt(this.cal_min) + \"\\n\");\n string += (\"Slice Duration = \" + this.slice_duration + \"\\n\");\n string += (\"Time Axis Shift = \" + this.toffset + \"\\n\");\n string += (\"Description: \\\"\" + this.description + \"\\\"\\n\");\n string += (\"Auxiliary File: \\\"\" + this.aux_file + \"\\\"\\n\");\n string += (\"Q-Form Code = \" + this.qform_code + \" (\" + this.getTransformCodeString(this.qform_code) + \")\\n\");\n string += (\"S-Form Code = \" + this.sform_code + \" (\" + this.getTransformCodeString(this.sform_code) + \")\\n\");\n string += (\"Quaternion Parameters: \" +\n \"b = \" + fmt(this.quatern_b) + \" \" +\n \"c = \" + fmt(this.quatern_c) + \" \" +\n \"d = \" + fmt(this.quatern_d) + \"\\n\");\n\n string += (\"Quaternion Offsets: \" +\n \"x = \" + this.qoffset_x + \" \" +\n \"y = \" + this.qoffset_y + \" \" +\n \"z = \" + this.qoffset_z + \"\\n\");\n\n string += (\"S-Form Parameters X: \" +\n fmt(this.affine[0][0]) + \", \" +\n fmt(this.affine[0][1]) + \", \" +\n fmt(this.affine[0][2]) + \", \" +\n fmt(this.affine[0][3]) + \"\\n\");\n\n string += (\"S-Form Parameters Y: \" +\n fmt(this.affine[1][0]) + \", \" +\n fmt(this.affine[1][1]) + \", \" +\n fmt(this.affine[1][2]) + \", \" +\n fmt(this.affine[1][3]) + \"\\n\");\n\n string += (\"S-Form Parameters Z: \" +\n fmt(this.affine[2][0]) + \", \" +\n fmt(this.affine[2][1]) + \", \" +\n fmt(this.affine[2][2]) + \", \" +\n fmt(this.affine[2][3]) + \"\\n\");\n\n string += (\"Intent Name: \\\"\" + this.intent_name + \"\\\"\\n\");\n\n if (this.extensionFlag[0]) {\n string += (\"Extension: Size = \" + this.extensionSize + \" Code = \" + this.extensionCode + \"\\n\");\n\n }\n\n return string;\n};\n\n\n/**\n * Returns a human-readable string of datatype.\n * @param {number} code\n * @returns {string}\n */\nnifti.NIFTI1.prototype.getDatatypeCodeString = function (code) {\n if (code === nifti.NIFTI1.TYPE_UINT8) {\n return \"1-Byte Unsigned Integer\";\n } else if (code === nifti.NIFTI1.TYPE_INT16) {\n return \"2-Byte Signed Integer\";\n } else if (code === nifti.NIFTI1.TYPE_INT32) {\n return \"4-Byte Signed Integer\";\n } else if (code === nifti.NIFTI1.TYPE_FLOAT32) {\n return \"4-Byte Float\";\n } else if (code === nifti.NIFTI1.TYPE_FLOAT64) {\n return \"8-Byte Float\";\n } else if (code === nifti.NIFTI1.TYPE_RGB24) {\n return \"RGB\";\n } else if (code === nifti.NIFTI1.TYPE_INT8) {\n return \"1-Byte Signed Integer\";\n } else if (code === nifti.NIFTI1.TYPE_UINT16) {\n return \"2-Byte Unsigned Integer\";\n } else if (code === nifti.NIFTI1.TYPE_UINT32) {\n return \"4-Byte Unsigned Integer\";\n } else if (code === nifti.NIFTI1.TYPE_INT64) {\n return \"8-Byte Signed Integer\";\n } else if (code === nifti.NIFTI1.TYPE_UINT64) {\n return \"8-Byte Unsigned Integer\";\n } else {\n return \"Unknown\";\n }\n};\n\n\n/**\n * Returns a human-readable string of transform type.\n * @param {number} code\n * @returns {string}\n */\nnifti.NIFTI1.prototype.getTransformCodeString = function (code) {\n if (code === nifti.NIFTI1.XFORM_SCANNER_ANAT) {\n return \"Scanner\";\n } else if (code === nifti.NIFTI1.XFORM_ALIGNED_ANAT) {\n return \"Aligned\";\n } else if (code === nifti.NIFTI1.XFORM_TALAIRACH) {\n return \"Talairach\";\n } else if (code === nifti.NIFTI1.XFORM_MNI_152) {\n return \"MNI\";\n } else {\n return \"Unknown\";\n }\n};\n\n\n/**\n * Returns a human-readable string of spatial and temporal units.\n * @param {number} code\n * @returns {string}\n */\nnifti.NIFTI1.prototype.getUnitsCodeString = function (code) {\n if (code === nifti.NIFTI1.UNITS_METER) {\n return \"Meters\";\n } else if (code === nifti.NIFTI1.UNITS_MM) {\n return \"Millimeters\";\n } else if (code === nifti.NIFTI1.UNITS_MICRON) {\n return \"Microns\";\n } else if (code === nifti.NIFTI1.UNITS_SEC) {\n return \"Seconds\";\n } else if (code === nifti.NIFTI1.UNITS_MSEC) {\n return \"Milliseconds\";\n } else if (code === nifti.NIFTI1.UNITS_USEC) {\n return \"Microseconds\";\n } else if (code === nifti.NIFTI1.UNITS_HZ) {\n return \"Hz\";\n } else if (code === nifti.NIFTI1.UNITS_PPM) {\n return \"PPM\";\n } else if (code === nifti.NIFTI1.UNITS_RADS) {\n return \"Rads\";\n } else {\n return \"Unknown\";\n }\n};\n\n\n/**\n * Returns the qform matrix.\n * @returns {Array.>}\n */\nnifti.NIFTI1.prototype.getQformMat = function () {\n return this.convertNiftiQFormToNiftiSForm(this.quatern_b, this.quatern_c, this.quatern_d, this.qoffset_x,\n this.qoffset_y, this.qoffset_z, this.pixDims[1], this.pixDims[2], this.pixDims[3], this.pixDims[0]);\n};\n\n\n\n/**\n * Converts qform to an affine. (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c)\n * @param {number} qb\n * @param {number} qc\n * @param {number} qd\n * @param {number} qx\n * @param {number} qy\n * @param {number} qz\n * @param {number} dx\n * @param {number} dy\n * @param {number} dz\n * @param {number} qfac\n * @returns {Array.>}\n */\nnifti.NIFTI1.prototype.convertNiftiQFormToNiftiSForm = function (qb, qc, qd, qx, qy, qz, dx, dy, dz,\n qfac) {\n var R = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]],\n a,\n b = qb,\n c = qc,\n d = qd,\n xd,\n yd,\n zd;\n\n // last row is always [ 0 0 0 1 ]\n R[3][0] = R[3][1] = R[3][2] = 0.0;\n R[3][3] = 1.0;\n\n // compute a parameter from b,c,d\n a = 1.0 - (b * b + c * c + d * d);\n if (a < 0.0000001) { /* special case */\n\n a = 1.0 / Math.sqrt(b * b + c * c + d * d);\n b *= a;\n c *= a;\n d *= a; /* normalize (b,c,d) vector */\n a = 0.0; /* a = 0 ==> 180 degree rotation */\n } else {\n\n a = Math.sqrt(a); /* angle = 2*arccos(a) */\n }\n\n // load rotation matrix, including scaling factors for voxel sizes\n xd = (dx > 0.0) ? dx : 1.0; /* make sure are positive */\n yd = (dy > 0.0) ? dy : 1.0;\n zd = (dz > 0.0) ? dz : 1.0;\n\n if (qfac < 0.0) {\n zd = -zd; /* left handedness? */\n }\n\n R[0][0] = (a * a + b * b - c * c - d * d) * xd;\n R[0][1] = 2.0 * (b * c - a * d) * yd;\n R[0][2] = 2.0 * (b * d + a * c) * zd;\n R[1][0] = 2.0 * (b * c + a * d) * xd;\n R[1][1] = (a * a + c * c - b * b - d * d) * yd;\n R[1][2] = 2.0 * (c * d - a * b) * zd;\n R[2][0] = 2.0 * (b * d - a * c) * xd;\n R[2][1] = 2.0 * (c * d + a * b) * yd;\n R[2][2] = (a * a + d * d - c * c - b * b) * zd;\n\n // load offsets\n R[0][3] = qx;\n R[1][3] = qy;\n R[2][3] = qz;\n\n return R;\n};\n\n\n\n/**\n * Converts sform to an orientation string (e.g., XYZ+--). (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c)\n * @param {Array.>} R\n * @returns {string}\n */\nnifti.NIFTI1.prototype.convertNiftiSFormToNEMA = function (R) {\n var xi, xj, xk, yi, yj, yk, zi, zj, zk, val, detQ, detP, i, j, k, p, q, r, ibest, jbest, kbest, pbest, qbest, rbest,\n M, vbest, Q, P, iChar, jChar, kChar, iSense, jSense, kSense;\n k = 0;\n\n Q = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];\n P = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];\n\n //if( icod == NULL || jcod == NULL || kcod == NULL ) return ; /* bad */\n\n //*icod = *jcod = *kcod = 0 ; /* this.errorMessage returns, if sh*t happens */\n\n /* load column vectors for each (i,j,k) direction from matrix */\n\n /*-- i axis --*/ /*-- j axis --*/ /*-- k axis --*/\n\n xi = R[0][0];\n xj = R[0][1];\n xk = R[0][2];\n\n yi = R[1][0];\n yj = R[1][1];\n yk = R[1][2];\n\n zi = R[2][0];\n zj = R[2][1];\n zk = R[2][2];\n\n /* normalize column vectors to get unit vectors along each ijk-axis */\n\n /* normalize i axis */\n val = Math.sqrt(xi * xi + yi * yi + zi * zi);\n if (val === 0.0) { /* stupid input */\n return null;\n }\n\n xi /= val;\n yi /= val;\n zi /= val;\n\n /* normalize j axis */\n val = Math.sqrt(xj * xj + yj * yj + zj * zj);\n if (val === 0.0) { /* stupid input */\n return null;\n }\n\n xj /= val;\n yj /= val;\n zj /= val;\n\n /* orthogonalize j axis to i axis, if needed */\n val = xi * xj + yi * yj + zi * zj; /* dot product between i and j */\n if (Math.abs(val) > 1.E-4) {\n xj -= val * xi;\n yj -= val * yi;\n zj -= val * zi;\n val = Math.sqrt(xj * xj + yj * yj + zj * zj); /* must renormalize */\n if (val === 0.0) { /* j was parallel to i? */\n return null;\n }\n xj /= val;\n yj /= val;\n zj /= val;\n }\n\n /* normalize k axis; if it is zero, make it the cross product i x j */\n val = Math.sqrt(xk * xk + yk * yk + zk * zk);\n if (val === 0.0) {\n xk = yi * zj - zi * yj;\n yk = zi * xj - zj * xi;\n zk = xi * yj - yi * xj;\n } else {\n xk /= val;\n yk /= val;\n zk /= val;\n }\n\n /* orthogonalize k to i */\n val = xi * xk + yi * yk + zi * zk; /* dot product between i and k */\n if (Math.abs(val) > 1.E-4) {\n xk -= val * xi;\n yk -= val * yi;\n zk -= val * zi;\n val = Math.sqrt(xk * xk + yk * yk + zk * zk);\n if (val === 0.0) { /* bad */\n return null;\n }\n xk /= val;\n yk /= val;\n zk /= val;\n }\n\n /* orthogonalize k to j */\n val = xj * xk + yj * yk + zj * zk; /* dot product between j and k */\n if (Math.abs(val) > 1.e-4) {\n xk -= val * xj;\n yk -= val * yj;\n zk -= val * zj;\n val = Math.sqrt(xk * xk + yk * yk + zk * zk);\n if (val === 0.0) { /* bad */\n return null;\n }\n xk /= val;\n yk /= val;\n zk /= val;\n }\n\n Q[0][0] = xi;\n Q[0][1] = xj;\n Q[0][2] = xk;\n Q[1][0] = yi;\n Q[1][1] = yj;\n Q[1][2] = yk;\n Q[2][0] = zi;\n Q[2][1] = zj;\n Q[2][2] = zk;\n\n /* at this point, Q is the rotation matrix from the (i,j,k) to (x,y,z) axes */\n\n detQ = this.nifti_mat33_determ(Q);\n if (detQ === 0.0) { /* shouldn't happen unless user is a DUFIS */\n return null;\n }\n\n /* Build and test all possible +1/-1 coordinate permutation matrices P;\n then find the P such that the rotation matrix M=PQ is closest to the\n identity, in the sense of M having the smallest total rotation angle. */\n\n /* Despite the formidable looking 6 nested loops, there are\n only 3*3*3*2*2*2 = 216 passes, which will run very quickly. */\n\n vbest = -666.0;\n ibest = pbest = qbest = rbest = 1;\n jbest = 2;\n kbest = 3;\n\n for (i = 1; i <= 3; i += 1) { /* i = column number to use for row #1 */\n for (j = 1; j <= 3; j += 1) { /* j = column number to use for row #2 */\n if (i !== j) {\n for (k = 1; k <= 3; k += 1) { /* k = column number to use for row #3 */\n if (!(i === k || j === k)) {\n P[0][0] = P[0][1] = P[0][2] = P[1][0] = P[1][1] = P[1][2] = P[2][0] = P[2][1] = P[2][2] = 0.0;\n for (p = -1; p <= 1; p += 2) { /* p,q,r are -1 or +1 */\n for (q = -1; q <= 1; q += 2) { /* and go into rows #1,2,3 */\n for (r = -1; r <= 1; r += 2) {\n P[0][i - 1] = p;\n P[1][j - 1] = q;\n P[2][k - 1] = r;\n detP = this.nifti_mat33_determ(P); /* sign of permutation */\n if ((detP * detQ) > 0.0) {\n M = this.nifti_mat33_mul(P, Q);\n\n /* angle of M rotation = 2.0*acos(0.5*sqrt(1.0+trace(M))) */\n /* we want largest trace(M) == smallest angle == M nearest to I */\n\n val = M[0][0] + M[1][1] + M[2][2]; /* trace */\n if (val > vbest) {\n vbest = val;\n ibest = i;\n jbest = j;\n kbest = k;\n pbest = p;\n qbest = q;\n rbest = r;\n }\n } /* doesn't match sign of Q */\n }\n }\n }\n }\n }\n }\n }\n }\n\n /* At this point ibest is 1 or 2 or 3; pbest is -1 or +1; etc.\n\n The matrix P that corresponds is the best permutation approximation\n to Q-inverse; that is, P (approximately) takes (x,y,z) coordinates\n to the (i,j,k) axes.\n\n For example, the first row of P (which contains pbest in column ibest)\n determines the way the i axis points relative to the anatomical\n (x,y,z) axes. If ibest is 2, then the i axis is along the y axis,\n which is direction P2A (if pbest > 0) or A2P (if pbest < 0).\n\n So, using ibest and pbest, we can assign the output code for\n the i axis. Mutatis mutandis for the j and k axes, of course. */\n\n iChar = jChar = kChar = iSense = jSense = kSense = 0;\n\n switch (ibest * pbest) {\n case 1: /*i = NIFTI_L2R*/\n iChar = 'X';\n iSense = '+';\n break;\n case -1: /*i = NIFTI_R2L*/\n iChar = 'X';\n iSense = '-';\n break;\n case 2: /*i = NIFTI_P2A*/\n iChar = 'Y';\n iSense = '+';\n break;\n case -2: /*i = NIFTI_A2P*/\n iChar = 'Y';\n iSense = '-';\n break;\n case 3: /*i = NIFTI_I2S*/\n iChar = 'Z';\n iSense = '+';\n break;\n case -3: /*i = NIFTI_S2I*/\n iChar = 'Z';\n iSense = '-';\n break;\n }\n\n switch (jbest * qbest) {\n case 1: /*j = NIFTI_L2R*/\n jChar = 'X';\n jSense = '+';\n break;\n case -1: /*j = NIFTI_R2L*/\n jChar = 'X';\n jSense = '-';\n break;\n case 2: /*j = NIFTI_P2A*/\n jChar = 'Y';\n jSense = '+';\n break;\n case -2: /*j = NIFTI_A2P*/\n jChar = 'Y';\n jSense = '-';\n break;\n case 3: /*j = NIFTI_I2S*/\n jChar = 'Z';\n jSense = '+';\n break;\n case -3: /*j = NIFTI_S2I*/\n jChar = 'Z';\n jSense = '-';\n break;\n }\n\n switch (kbest * rbest) {\n case 1: /*k = NIFTI_L2R*/\n kChar = 'X';\n kSense = '+';\n break;\n case -1: /*k = NIFTI_R2L*/\n kChar = 'X';\n kSense = '-';\n break;\n case 2: /*k = NIFTI_P2A*/\n kChar = 'Y';\n kSense = '+';\n break;\n case -2: /*k = NIFTI_A2P*/\n kChar = 'Y';\n kSense = '-';\n break;\n case 3: /*k = NIFTI_I2S*/\n kChar = 'Z';\n kSense = '+';\n break;\n case -3: /*k = NIFTI_S2I*/\n kChar = 'Z';\n kSense = '-';\n break;\n }\n\n return (iChar + jChar + kChar + iSense + jSense + kSense);\n};\n\n\n\nnifti.NIFTI1.prototype.nifti_mat33_mul = function (A, B) {\n var C = [[0, 0, 0], [0, 0, 0], [0, 0, 0]],\n i,\n j;\n\n for (i = 0; i < 3; i += 1) {\n for (j = 0; j < 3; j += 1) {\n C[i][j] = A[i][0] * B[0][j] + A[i][1] * B[1][j] + A[i][2] * B[2][j];\n }\n }\n\n return C;\n};\n\n\n\nnifti.NIFTI1.prototype.nifti_mat33_determ = function (R) {\n var r11, r12, r13, r21, r22, r23, r31, r32, r33;\n /* INPUT MATRIX: */\n r11 = R[0][0];\n r12 = R[0][1];\n r13 = R[0][2];\n r21 = R[1][0];\n r22 = R[1][1];\n r23 = R[1][2];\n r31 = R[2][0];\n r32 = R[2][1];\n r33 = R[2][2];\n\n return (r11 * r22 * r33 - r11 * r32 * r23 - r21 * r12 * r33 + r21 * r32 * r13 + r31 * r12 * r23 - r31 * r22 * r13);\n};\n\n\n/**\n * Returns the byte index of the extension.\n * @returns {number}\n */\nnifti.NIFTI1.prototype.getExtensionLocation = function() {\n return nifti.NIFTI1.MAGIC_COOKIE + 4;\n};\n\n\n/**\n * Returns the extension size.\n * @param {DataView} data\n * @returns {number}\n */\nnifti.NIFTI1.prototype.getExtensionSize = function(data) {\n return nifti.Utils.getIntAt(data, this.getExtensionLocation(), this.littleEndian);\n};\n\n\n\n/**\n * Returns the extension code.\n * @param {DataView} data\n * @returns {number}\n */\nnifti.NIFTI1.prototype.getExtensionCode = function(data) {\n return nifti.Utils.getIntAt(data, this.getExtensionLocation() + 4, this.littleEndian);\n};\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = nifti.NIFTI1;\n}\n","\n/*jslint browser: true, node: true */\n/*global */\n\n\"use strict\";\n\n/*** Imports ***/\n\nvar nifti = nifti || {};\nnifti.Utils = nifti.Utils || ((typeof require !== 'undefined') ? require('./utilities.js') : null);\nnifti.NIFTI1 = nifti.NIFTI1 || ((typeof require !== 'undefined') ? require('./nifti1.js') : null);\n\n\n/*** Constructor ***/\n\n/**\n * The NIFTI2 constructor.\n * @constructor\n * @property {boolean} littleEndian\n * @property {number} dim_info\n * @property {number[]} dims - image dimensions\n * @property {number} intent_p1\n * @property {number} intent_p2\n * @property {number} intent_p3\n * @property {number} intent_code\n * @property {number} datatypeCode\n * @property {number} numBitsPerVoxel\n * @property {number} slice_start\n * @property {number} slice_end\n * @property {number} slice_code\n * @property {number[]} pixDims - voxel dimensions\n * @property {number} vox_offset\n * @property {number} scl_slope\n * @property {number} scl_inter\n * @property {number} xyzt_units\n * @property {number} cal_max\n * @property {number} cal_min\n * @property {number} slice_duration\n * @property {number} toffset\n * @property {string} description\n * @property {string} aux_file\n * @property {string} intent_name\n * @property {number} qform_code\n * @property {number} sform_code\n * @property {number} quatern_b\n * @property {number} quatern_c\n * @property {number} quatern_d\n * @property {number} quatern_x\n * @property {number} quatern_y\n * @property {number} quatern_z\n * @property {Array.>} affine\n * @property {string} magic\n * @property {number[]} extensionFlag\n * @type {Function}\n */\nnifti.NIFTI2 = nifti.NIFTI2 || function () {\n this.littleEndian = false;\n this.dim_info = 0;\n this.dims = [];\n this.intent_p1 = 0;\n this.intent_p2 = 0;\n this.intent_p3 = 0;\n this.intent_code = 0;\n this.datatypeCode = 0;\n this.numBitsPerVoxel = 0;\n this.slice_start = 0;\n this.slice_end = 0;\n this.slice_code = 0;\n this.pixDims = [];\n this.vox_offset = 0;\n this.scl_slope = 1;\n this.scl_inter = 0;\n this.xyzt_units = 0;\n this.cal_max = 0;\n this.cal_min = 0;\n this.slice_duration = 0;\n this.toffset = 0;\n this.description = \"\";\n this.aux_file = \"\";\n this.intent_name = \"\";\n this.qform_code = 0;\n this.sform_code = 0;\n this.quatern_b = 0;\n this.quatern_c = 0;\n this.quatern_d = 0;\n this.qoffset_x = 0;\n this.qoffset_y = 0;\n this.qoffset_z = 0;\n this.affine = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]];\n this.magic = 0;\n this.extensionFlag = [0, 0, 0, 0];\n};\n\n\n\n/*** Static Pseudo-constants ***/\n\nnifti.NIFTI2.MAGIC_COOKIE = 540;\nnifti.NIFTI2.MAGIC_NUMBER_LOCATION = 4;\nnifti.NIFTI2.MAGIC_NUMBER = [0x6E, 0x2B, 0x32, 0, 0x0D, 0x0A, 0x1A, 0x0A]; // n+2\\0\n\n\n\n/*** Prototype Methods ***/\n\n/**\n * Reads the header data.\n * @param {ArrayBuffer} data\n */\nnifti.NIFTI2.prototype.readHeader = function (data) {\n var rawData = new DataView(data),\n magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian),\n ctr,\n ctrOut,\n ctrIn,\n index,\n array;\n\n if (magicCookieVal !== nifti.NIFTI2.MAGIC_COOKIE) { // try as little endian\n this.littleEndian = true;\n magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian);\n }\n\n if (magicCookieVal !== nifti.NIFTI2.MAGIC_COOKIE) {\n throw new Error(\"This does not appear to be a NIFTI file!\");\n }\n\n this.datatypeCode = nifti.Utils.getShortAt(rawData, 12, this.littleEndian);\n this.numBitsPerVoxel = nifti.Utils.getShortAt(rawData, 14, this.littleEndian);\n\n for (ctr = 0; ctr < 8; ctr += 1) {\n index = 16 + (ctr * 8);\n this.dims[ctr] = nifti.Utils.getLongAt(rawData, index, this.littleEndian);\n }\n\n this.intent_p1 = nifti.Utils.getDoubleAt(rawData, 80, this.littleEndian);\n this.intent_p2 = nifti.Utils.getDoubleAt(rawData, 88, this.littleEndian);\n this.intent_p3 = nifti.Utils.getDoubleAt(rawData, 96, this.littleEndian);\n\n for (ctr = 0; ctr < 8; ctr += 1) {\n index = 104 + (ctr * 8);\n this.pixDims[ctr] = nifti.Utils.getDoubleAt(rawData, index, this.littleEndian);\n }\n\n this.vox_offset = nifti.Utils.getLongAt(rawData, 168, this.littleEndian);\n\n this.scl_slope = nifti.Utils.getDoubleAt(rawData, 176, this.littleEndian);\n this.scl_inter = nifti.Utils.getDoubleAt(rawData, 184, this.littleEndian);\n\n this.cal_max = nifti.Utils.getDoubleAt(rawData, 192, this.littleEndian);\n this.cal_min = nifti.Utils.getDoubleAt(rawData, 200, this.littleEndian);\n\n this.slice_duration = nifti.Utils.getDoubleAt(rawData, 208, this.littleEndian);\n\n this.toffset = nifti.Utils.getDoubleAt(rawData, 216, this.littleEndian);\n\n this.slice_start = nifti.Utils.getLongAt(rawData, 224, this.littleEndian);\n this.slice_end = nifti.Utils.getLongAt(rawData, 232, this.littleEndian);\n\n this.description = nifti.Utils.getStringAt(rawData, 240, 240 + 80);\n this.aux_file = nifti.Utils.getStringAt(rawData, 320, 320 + 24);\n\n this.qform_code = nifti.Utils.getIntAt(rawData, 344, this.littleEndian);\n this.sform_code = nifti.Utils.getIntAt(rawData, 348, this.littleEndian);\n\n this.quatern_b = nifti.Utils.getDoubleAt(rawData, 352, this.littleEndian);\n this.quatern_c = nifti.Utils.getDoubleAt(rawData, 360, this.littleEndian);\n this.quatern_d = nifti.Utils.getDoubleAt(rawData, 368, this.littleEndian);\n this.qoffset_x = nifti.Utils.getDoubleAt(rawData, 376, this.littleEndian);\n this.qoffset_y = nifti.Utils.getDoubleAt(rawData, 384, this.littleEndian);\n this.qoffset_z = nifti.Utils.getDoubleAt(rawData, 392, this.littleEndian);\n\n for (ctrOut = 0; ctrOut < 3; ctrOut += 1) {\n for (ctrIn = 0; ctrIn < 4; ctrIn += 1) {\n index = 400 + (((ctrOut * 4) + ctrIn) * 8);\n this.affine[ctrOut][ctrIn] = nifti.Utils.getDoubleAt(rawData, index, this.littleEndian);\n }\n }\n\n this.affine[3][0] = 0;\n this.affine[3][1] = 0;\n this.affine[3][2] = 0;\n this.affine[3][3] = 1;\n\n this.slice_code = nifti.Utils.getIntAt(rawData, 496, this.littleEndian);\n this.xyzt_units = nifti.Utils.getIntAt(rawData, 500, this.littleEndian);\n this.intent_code = nifti.Utils.getIntAt(rawData, 504, this.littleEndian);\n this.intent_name = nifti.Utils.getStringAt(rawData, 508, 508 + 16);\n\n this.dim_info = nifti.Utils.getByteAt(rawData, 524);\n\n if (rawData.byteLength > nifti.NIFTI2.MAGIC_COOKIE) {\n this.extensionFlag[0] = nifti.Utils.getByteAt(rawData, 540);\n this.extensionFlag[1] = nifti.Utils.getByteAt(rawData, 540 + 1);\n this.extensionFlag[2] = nifti.Utils.getByteAt(rawData, 540 + 2);\n this.extensionFlag[3] = nifti.Utils.getByteAt(rawData, 540 + 3);\n\n if (this.extensionFlag[0]) {\n this.extensionSize = this.getExtensionSize(rawData);\n this.extensionCode = this.getExtensionCode(rawData);\n }\n }\n};\n\n\n\n/**\n * Returns a formatted string of header fields.\n * @returns {string}\n */\nnifti.NIFTI2.prototype.toFormattedString = function () {\n var fmt = nifti.Utils.formatNumber,\n string = \"\";\n\n string += (\"Datatype = \" + + this.datatypeCode + \" (\" + this.getDatatypeCodeString(this.datatypeCode) + \")\\n\");\n string += (\"Bits Per Voxel = \" + \" = \" + this.numBitsPerVoxel + \"\\n\");\n string += (\"Image Dimensions\" + \" (1-8): \" +\n this.dims[0] + \", \" +\n this.dims[1] + \", \" +\n this.dims[2] + \", \" +\n this.dims[3] + \", \" +\n this.dims[4] + \", \" +\n this.dims[5] + \", \" +\n this.dims[6] + \", \" +\n this.dims[7] + \"\\n\");\n\n string += (\"Intent Parameters (1-3): \" +\n this.intent_p1 + \", \" +\n this.intent_p2 + \", \" +\n this.intent_p3) + \"\\n\";\n\n string += (\"Voxel Dimensions (1-8): \" +\n fmt(this.pixDims[0]) + \", \" +\n fmt(this.pixDims[1]) + \", \" +\n fmt(this.pixDims[2]) + \", \" +\n fmt(this.pixDims[3]) + \", \" +\n fmt(this.pixDims[4]) + \", \" +\n fmt(this.pixDims[5]) + \", \" +\n fmt(this.pixDims[6]) + \", \" +\n fmt(this.pixDims[7]) + \"\\n\");\n\n string += (\"Image Offset = \" + this.vox_offset + \"\\n\");\n string += (\"Data Scale: Slope = \" + fmt(this.scl_slope) + \" Intercept = \" + fmt(this.scl_inter) + \"\\n\");\n string += (\"Display Range: Max = \" + fmt(this.cal_max) + \" Min = \" + fmt(this.cal_min) + \"\\n\");\n string += (\"Slice Duration = \" + this.slice_duration + \"\\n\");\n string += (\"Time Axis Shift = \" + this.toffset + \"\\n\");\n string += (\"Slice Start = \" + this.slice_start + \"\\n\");\n string += (\"Slice End = \" + this.slice_end + \"\\n\");\n string += (\"Description: \\\"\" + this.description + \"\\\"\\n\");\n string += (\"Auxiliary File: \\\"\" + this.aux_file + \"\\\"\\n\");\n string += (\"Q-Form Code = \" + this.qform_code + \" (\" + this.getTransformCodeString(this.qform_code) + \")\\n\");\n string += (\"S-Form Code = \" + this.sform_code + \" (\" + this.getTransformCodeString(this.sform_code) + \")\\n\");\n string += (\"Quaternion Parameters: \" +\n \"b = \" + fmt(this.quatern_b) + \" \" +\n \"c = \" + fmt(this.quatern_c) + \" \" +\n \"d = \" + fmt(this.quatern_d) + \"\\n\");\n\n string += (\"Quaternion Offsets: \" +\n \"x = \" + this.qoffset_x + \" \" +\n \"y = \" + this.qoffset_y + \" \" +\n \"z = \" + this.qoffset_z + \"\\n\");\n\n string += (\"S-Form Parameters X: \" +\n fmt(this.affine[0][0]) + \", \" +\n fmt(this.affine[0][1]) + \", \" +\n fmt(this.affine[0][2]) + \", \" +\n fmt(this.affine[0][3]) + \"\\n\");\n\n string += (\"S-Form Parameters Y: \" +\n fmt(this.affine[1][0]) + \", \" +\n fmt(this.affine[1][1]) + \", \" +\n fmt(this.affine[1][2]) + \", \" +\n fmt(this.affine[1][3]) + \"\\n\");\n\n string += (\"S-Form Parameters Z: \" +\n fmt(this.affine[2][0]) + \", \" +\n fmt(this.affine[2][1]) + \", \" +\n fmt(this.affine[2][2]) + \", \" +\n fmt(this.affine[2][3]) + \"\\n\");\n\n string += (\"Slice Code = \" + this.slice_code + \"\\n\");\n string += (\"Units Code = \" + this.xyzt_units + \" (\" + this.getUnitsCodeString(nifti.NIFTI1.SPATIAL_UNITS_MASK & this.xyzt_units) + \", \" + this.getUnitsCodeString(nifti.NIFTI1.TEMPORAL_UNITS_MASK & this.xyzt_units) + \")\\n\");\n string += (\"Intent Code = \" + this.intent_code + \"\\n\");\n string += (\"Intent Name: \\\"\" + this.intent_name + \"\\\"\\n\");\n\n string += (\"Dim Info = \" + this.dim_info + \"\\n\");\n\n return string;\n};\n\n\n\n/**\n * Returns the byte index of the extension.\n * @returns {number}\n */\nnifti.NIFTI2.prototype.getExtensionLocation = function() {\n return nifti.NIFTI2.MAGIC_COOKIE + 4;\n};\n\n\n\n/**\n * Returns the extension size.\n * @param {DataView} data\n * @returns {number}\n */\nnifti.NIFTI2.prototype.getExtensionSize = nifti.NIFTI1.prototype.getExtensionSize;\n\n\n\n/**\n * Returns the extension code.\n * @param {DataView} data\n * @returns {number}\n */\nnifti.NIFTI2.prototype.getExtensionCode = nifti.NIFTI1.prototype.getExtensionCode;\n\n\n\n/**\n * Returns a human-readable string of datatype.\n * @param {number} code\n * @returns {string}\n */\nnifti.NIFTI2.prototype.getDatatypeCodeString = nifti.NIFTI1.prototype.getDatatypeCodeString;\n\n\n\n/**\n * Returns a human-readable string of transform type.\n * @param {number} code\n * @returns {string}\n */\nnifti.NIFTI2.prototype.getTransformCodeString = nifti.NIFTI1.prototype.getTransformCodeString;\n\n\n\n/**\n * Returns a human-readable string of spatial and temporal units.\n * @param {number} code\n * @returns {string}\n */\nnifti.NIFTI2.prototype.getUnitsCodeString = nifti.NIFTI1.prototype.getUnitsCodeString;\n\n\n\n/**\n * Returns the qform matrix.\n * @returns {Array.>}\n */\nnifti.NIFTI2.prototype.getQformMat = nifti.NIFTI1.prototype.getQformMat;\n\n\n\n/**\n * Converts qform to an affine. (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c)\n * @param {number} qb\n * @param {number} qc\n * @param {number} qd\n * @param {number} qx\n * @param {number} qy\n * @param {number} qz\n * @param {number} dx\n * @param {number} dy\n * @param {number} dz\n * @param {number} qfac\n * @returns {Array.>}\n */\nnifti.NIFTI2.prototype.convertNiftiQFormToNiftiSForm = nifti.NIFTI1.prototype.convertNiftiQFormToNiftiSForm;\n\n\n\n/**\n * Converts sform to an orientation string (e.g., XYZ+--). (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c)\n * @param {Array.>} R\n * @returns {string}\n */\nnifti.NIFTI2.prototype.convertNiftiSFormToNEMA = nifti.NIFTI1.prototype.convertNiftiSFormToNEMA;\n\n\n\nnifti.NIFTI2.prototype.nifti_mat33_mul = nifti.NIFTI1.prototype.nifti_mat33_mul;\n\n\n\nnifti.NIFTI2.prototype.nifti_mat33_determ = nifti.NIFTI1.prototype.nifti_mat33_determ;\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = nifti.NIFTI2;\n}\n","\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\n\nvar nifti = nifti || {};\nnifti.Utils = nifti.Utils || {};\n\n\n\n/*** Static Pseudo-constants ***/\n\nnifti.Utils.crcTable = null;\nnifti.Utils.GUNZIP_MAGIC_COOKIE1 = 31;\nnifti.Utils.GUNZIP_MAGIC_COOKIE2 = 139;\n\n\n\n/*** Static methods ***/\n\nnifti.Utils.getStringAt = function (data, start, end) {\n var str = \"\", ctr, ch;\n\n for (ctr = start; ctr < end; ctr += 1) {\n ch = data.getUint8(ctr);\n\n if (ch !== 0) {\n str += String.fromCharCode(ch);\n }\n }\n\n return str;\n};\n\n\n\nnifti.Utils.getByteAt = function (data, start) {\n return data.getInt8(start);\n};\n\n\n\nnifti.Utils.getShortAt = function (data, start, littleEndian) {\n return data.getInt16(start, littleEndian);\n};\n\n\n\nnifti.Utils.getIntAt = function (data, start, littleEndian) {\n return data.getInt32(start, littleEndian);\n};\n\n\n\nnifti.Utils.getFloatAt = function (data, start, littleEndian) {\n return data.getFloat32(start, littleEndian);\n};\n\n\n\nnifti.Utils.getDoubleAt = function (data, start, littleEndian) {\n return data.getFloat64(start, littleEndian);\n};\n\n\n\nnifti.Utils.getLongAt = function (data, start, littleEndian) {\n var ctr, array = [], value = 0;\n\n for (ctr = 0; ctr < 8; ctr += 1) {\n array[ctr] = nifti.Utils.getByteAt(data, start + ctr, littleEndian);\n }\n\n for (ctr = array.length - 1; ctr >= 0; ctr--) {\n value = (value * 256) + array[ctr];\n }\n\n return value;\n};\n\n\n\nnifti.Utils.toArrayBuffer = function (buffer) {\n var ab, view, i;\n\n ab = new ArrayBuffer(buffer.length);\n view = new Uint8Array(ab);\n for (i = 0; i < buffer.length; i += 1) {\n view[i] = buffer[i];\n }\n return ab;\n};\n\n\n\nnifti.Utils.isString = function (obj) {\n return (typeof obj === \"string\" || obj instanceof String);\n};\n\n\nnifti.Utils.formatNumber = function (num, shortFormat) {\n var val = 0;\n\n if (nifti.Utils.isString(num)) {\n val = Number(num);\n } else {\n val = num;\n }\n\n if (shortFormat) {\n val = val.toPrecision(5);\n } else {\n val = val.toPrecision(7);\n }\n\n return parseFloat(val);\n};\n\n\n\n// http://stackoverflow.com/questions/18638900/javascript-crc32\nnifti.Utils.makeCRCTable = function(){\n var c;\n var crcTable = [];\n for(var n =0; n < 256; n++){\n c = n;\n for(var k =0; k < 8; k++){\n c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n crcTable[n] = c;\n }\n return crcTable;\n};\n\n\n\nnifti.Utils.crc32 = function(dataView) {\n var crcTable = nifti.Utils.crcTable || (nifti.Utils.crcTable = nifti.Utils.makeCRCTable());\n var crc = 0 ^ (-1);\n\n for (var i = 0; i < dataView.byteLength; i++ ) {\n crc = (crc >>> 8) ^ crcTable[(crc ^ dataView.getUint8(i)) & 0xFF];\n }\n\n return (crc ^ (-1)) >>> 0;\n};\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = nifti.Utils;\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = $getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n ReflectApply(this.listener, this.target, args);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","\"use strict\";\nvar assert = require('assert');\n\nvar lineSeparatorRE = /[ \\f\\t\\v]*\\r?\\n/;\nvar NRRDMagicRE = /^NRRD\\d{4}$/;\nvar lineRE = /^([^:]*)(:[ =])(.*)$/;\nvar dataFileListRE = /^LIST(?: (\\d+))?$/;\n\n// The minimal object this accepts is formed like this:\n// {data: SomeTypedArray, sizes: [...]}\n// On the other hand, if data is not given it must have a form like this:\n// {buffer: SomeArrayBuffer, type: ..., endian: ..., sizes: [...]}\n// Of course, if 'type' is an 8-bit type, endian is not needed, and if 'type' equals 'block', 'blockSize' should be set instead of 'endian'. In this case, no interpretation of buffer is done (at all, it is written serialized directly to the buffer).\n// TODO: For now this only supports serializing \"inline\" files, or files for which you have already prepared the data.\nmodule.exports.serialize = function (nrrdOrg) {\n var i, buffer, arr, totalLen = 1, nrrd = {}, prop, nativeType, nativeSize, bufferData, arrData, line, lines = [], header;\n \n // Copy nrrdOrg to nrrd to allow modifications without altering the original\n for(prop in nrrdOrg) {\n nrrd[prop] = nrrdOrg[prop];\n }\n \n // For saving files we allow inferring certain information if it is not explicitly given.\n // Also we normalize some fields to make our own lives easier.\n if (nrrd.sizes===undefined) { // 'sizes' should ALWAYS be given\n throw new Error(\"Sizes missing from NRRD file!\");\n } else if (nrrd.dimension===undefined) {\n nrrd.dimension = nrrd.sizes.length;\n }\n if (nrrd.data instanceof Int8Array) {\n nativeType = \"int8\";\n } else if (nrrd.data instanceof Uint8Array) {\n nativeType = \"uint8\";\n } else if (nrrd.data instanceof Int16Array) {\n nativeType = \"int16\";\n } else if (nrrd.data instanceof Uint16Array) {\n nativeType = \"uint16\";\n } else if (nrrd.data instanceof Int32Array) {\n nativeType = \"int32\";\n } else if (nrrd.data instanceof Uint32Array) {\n nativeType = \"uint32\";\n //} else if (nrrd.data instanceof Int64Array) {\n // nativeType = \"int64\";\n //} else if (nrrd.data instanceof Uint64Array) {\n // nativeType = \"uint64\";\n } else if (nrrd.data instanceof Float32Array) {\n nativeType = \"float\";\n } else if (nrrd.data instanceof Float64Array) {\n nativeType = \"double\";\n }\n if (nrrd.type===undefined && nativeType!==undefined) {\n nrrd.type = nativeType;\n } else if (nrrd.type===undefined) {\n throw new Error(\"Type of data is not given and cannot be inferred!\");\n } else if ((typeof nrrd.type) == \"string\" || nrrd.type instanceof String) {\n nrrd.type = parseNRRDType(nrrd.type);\n }\n if (nrrd.encoding===undefined) {\n nrrd.encoding = \"raw\";\n } else if ((typeof nrrd.encoding) == \"string\" || nrrd.encoding instanceof String) {\n nrrd.encoding = parseNRRDEncoding(nrrd.encoding);\n }\n if (nrrd.data && nrrd.type != 'block' && nrrd.type != 'int8' && nrrd.type != 'uint8' && nrrd.encoding != 'ascii') {\n nrrd.endian = systemEndianness;\n } else if (nrrd.type == 'block' || nrrd.type == 'int8' || nrrd.type == 'uint8' || nrrd.encoding == 'ascii') {\n nrrd.endian = undefined;\n } else if ((typeof nrrd.endian) == \"string\" || nrrd.endian instanceof String) {\n nrrd.endian = parseNRRDEndian(nrrd.endian);\n }\n \n // Try to infer spatial dimension\n var spaceDimension = undefined;\n if (nrrd.spaceDimension!==undefined) {\n spaceDimension = nrrd.spaceDimension;\n } else if (nrrd.space!==undefined) {\n switch(nrrd.space) {\n case \"right-anterior-superior\":\n case \"RAS\":\n spaceDimension = 3;\n break;\n case \"left-anterior-superior\":\n case \"LAS\":\n spaceDimension = 3;\n break;\n case \"left-posterior-superior\":\n case \"LPS\":\n spaceDimension = 3;\n break;\n \t case \"right-anterior-superior-time\":\n \t case \"RAST\":\n \t spaceDimension = 4;\n \t break;\n case \"left-anterior-superior-time\":\n case \"LAST\":\n spaceDimension = 4;\n break;\n case \"left-posterior-superior-time\":\n case \"LPST\":\n spaceDimension = 4;\n break;\n case \"scanner-xyz\":\n spaceDimension = 3;\n break;\n case \"scanner-xyz-time\":\n spaceDimension = 4;\n break;\n case \"3D-right-handed\":\n spaceDimension = 3;\n break;\n case \"3D-left-handed\":\n spaceDimension = 3;\n break;\n case \"3D-right-handed-time\":\n spaceDimension = 4;\n break;\n case \"3D-left-handed-time\":\n spaceDimension = 4;\n break;\n default:\n console.warn(\"Unrecognized space: \" + nrrd.space);\n }\n }\n \n // Now check that we have a valid nrrd structure.\n checkNRRD(nrrd);\n\n // Determine number of elements and check that we have enough data (if possible)\n for(i=0; i0) integers!\");\n totalLen *= nrrd.sizes[i];\n }\n if (nrrd.data) {\n if (nrrd.data.length < totalLen) {\n throw new Error(\"Missing data to serialize!\");\n }\n } else if (nrrd.buffer) {\n if (nrrd.encoding == \"raw\") {\n if (nrrd.type==\"block\" && nrrd.blockSize!==undefined) {\n nativeSize = nrrd.blockSize;\n } else {\n nativeSize = getNRRDTypeSize(nrrd.type);\n }\n if (nrrd.buffer.byteLength < totalLen*nativeSize) {\n throw new Error(\"Missing data to serialize!\");\n }\n }\n } else if (nrrd.dataFile) {\n // Okay, if you have your data ready, we'll just write a header.\n } else {\n throw new Error(\"Will not serialize an empty NRRD file!\");\n }\n \n // Make sure we have the correct buffer in bufferData.\n if (nrrd.data) {\n switch(nrrd.encoding) {\n case 'raw':\n if (nrrd.type == nativeType && nrrd.endian == systemEndianness) {\n bufferData = nrrd.data.buffer.slice(nrrd.data.byteOffset, nrrd.data.byteOffset+nrrd.data.byteLength);\n } else if (nrrd.endian == systemEndianness) {\n bufferData = castTypedArray(nrrd.data, nrrd.type);\n bufferData = bufferData.buffer.slice(bufferData.byteOffset, bufferData.byteOffset+bufferData.byteLength);\n } else {\n bufferData = serializeToBuffer(nrrd.data, nrrd.type, nrrd.endian);\n }\n break;\n case 'ascii':\n if (nrrd.type == nativeType) {\n bufferData = serializeToTextBuffer(nrrd.data);\n } else {\n bufferData = serializeToTextBuffer(castTypedArray(nrrd.data, nrrd.type));\n }\n break;\n default:\n throw new Error(\"Unsupported NRRD encoding: \" + nrrd.encoding);\n }\n } else if (nrrd.buffer) {\n bufferData = nrrd.buffer;\n }\n \n // Start header\n lines.push(\"NRRD0005\"); // TODO: Adjust version based on features that are actually used and/or the version specified by the user (if any).\n lines.push(\"# Generated by nrrd-js\");\n \n // Put in dimension and space dimension (the NRRD spec requires that these are present before any lists whose length depends on them)\n var firstProps = ['dimension', 'spaceDimension', 'space'];\n for(i=0; i=0) continue; // Skip the fields we already output.\n line = serializeField(prop, nrrd[prop], nrrd.dimension, spaceDimension);\n if (line!==undefined) lines.push(line);\n }\n \n // Put in keys (if any)\n if (nrrd.keys) for(prop in nrrd.keys) {\n if (prop.indexOf(\":=\")>=0) throw new Error(\"The combination ':=' is not allowed in an NRRD key!\");\n lines.push(prop + \":=\" + escapeValue(nrrd[prop]));\n }\n \n // Put in data file list (if any)\n if (nrrd.dataFile && nrrd.dataFile.length) {\n lines.push(\"data file: LIST\");\n Array.prototype.push.apply(lines, nrrd.dataFile);\n } else if (nrrd.dataFile && nrrd.dataFile.files && 'subdim' in nrrd.dataFile) {\n lines.push(\"data file: LIST \" + nrrd.dataFile.subdim);\n Array.prototype.push.apply(lines, nrrd.dataFile.files);\n }\n \n // Put in empty line and inline data (if we have inline data) and convert lines to buffer\n if (bufferData && !('dataFile' in nrrd)) {\n lines.push(\"\");\n lines.push(\"\"); // We actually need an extra blank line to make sure the previous is terminated.\n header = lines.join(\"\\n\");\n buffer = new ArrayBuffer(header.length + bufferData.byteLength);\n arr = new Uint8Array(buffer);\n for(i=0; i0 && l[0] != '#'; }); // Remove comment lines\n if (!NRRDMagicRE.test(lines[0])) {\n throw new Error(\"File is not an NRRD file!\");\n }\n ret.version = parseInt(lines[0].substring(4, 8), 10);\n if (ret.version>5) {\n console.warn(\"Reading an unsupported version of the NRRD format; things may go haywire.\");\n }\n\n // Parse lines\n for(i=1; i=0) return NaN;\n if (str.indexOf('-inf')>=0) return -Infinity;\n if (str.indexOf('inf')>=0) return Infinity;\n var val = parseFloat(str);\n if (Number.isNaN(val)) throw new Error(\"Malformed NRRD float: \" + str);\n return val;\n}\n\nfunction parseNRRDVector(str) {\n if (str == \"none\") return null;\n if (str.length<2 || str[0]!==\"(\" || str[str.length-1]!==\")\") throw new Error(\"Malformed NRRD vector: \" + str);\n return str.slice(1, -1).split(\",\").map(parseNRRDFloat);\n}\n\nfunction parseNRRDQuotedString(str) {\n if (length<2 || str[0]!='\"' || str[str.length-1]!='\"') {\n throw new Error(\"Invalid NRRD quoted string: \" + str);\n }\n return str.slice(1, -1).replace('\\\\\"', '\"');\n}\n\nfunction serializeNRRDQuotedString(str) {\n return '\"' + str.replace('\"', '\\\\\"') + '\"';\n}\n\nvar whitespaceListSeparator = /[ \\t]+/; // Note that this excludes other types of whitespace on purpose!\nfunction parseNRRDWhitespaceSeparatedList(str, parseElement) {\n return str.split(whitespaceListSeparator).map(parseElement);\n}\n\nfunction parseNRRDType(descriptor) {\n switch(descriptor.toLowerCase()) {\n case \"signed char\":\n case \"int8\":\n case \"int8_t\":\n return 'int8';\n case \"uchar\":\n case \"unsigned char\":\n case \"uint8\":\n case \"uint8_t\":\n return 'uint8';\n case \"short\":\n case \"short int\":\n case \"signed short\":\n case \"signed short int\":\n case \"int16\":\n case \"int16_t\":\n return 'int16';\n case \"ushort\":\n case \"unsigned short\":\n case \"unsigned short int\":\n case \"uint16\":\n case \"uint16_t\":\n return 'uint16';\n case \"int\":\n case \"signed int\":\n case \"int32\":\n case \"int32_t\":\n return 'int32';\n case \"uint\":\n case \"unsigned int\":\n case \"uint32\":\n case \"uint32_t\":\n return 'uint32';\n case \"longlong\":\n case \"long long\":\n case \"long long int\":\n case \"signed long long\":\n case \"signed long long int\":\n case \"int64\":\n case \"int64_t\":\n return 'int64';\n case \"ulonglong\":\n case \"unsigned long long\":\n case \"unsigned long long int\":\n case \"uint64\":\n case \"uint64_t\":\n return 'uint64';\n case \"float\":\n return 'float';\n case \"double\":\n return 'double';\n case \"block\":\n return 'block';\n default:\n console.warn(\"Unrecognized NRRD type: \" + descriptor);\n return descriptor;\n }\n}\n\nfunction parseNRRDEncoding(encoding) {\n switch(encoding.toLowerCase()) {\n case \"raw\":\n return \"raw\";\n case \"txt\":\n case \"text\":\n case \"ascii\":\n return \"ascii\";\n case \"hex\":\n return \"hex\";\n case \"gz\":\n case \"gzip\":\n return \"gzip\";\n case \"bz2\":\n case \"bzip2\":\n return \"bzip2\";\n default:\n console.warn(\"Unrecognized NRRD encoding: \" + encoding);\n return encoding;\n }\n}\n\nfunction parseNRRDSpace(space) {\n switch(space.toLowerCase()) {\n case \"right-anterior-superior\":\n case \"ras\":\n return \"right-anterior-superior\";\n case \"left-anterior-superior\":\n case \"las\":\n return \"left-anterior-superior\";\n case \"left-posterior-superior\":\n case \"lps\":\n return \"left-posterior-superior\";\n \t case \"right-anterior-superior-time\":\n \t case \"rast\":\n return \"right-anterior-superior-time\";\n case \"left-anterior-superior-time\":\n case \"last\":\n return \"left-anterior-superior-time\";\n case \"left-posterior-superior-time\":\n case \"lpst\":\n return \"left-posterior-superior-time\";\n case \"scanner-xyz\":\n return \"scanner-xyz\";\n case \"scanner-xyz-time\":\n return \"scanner-xyz-time\";\n case \"3d-right-handed\":\n return \"3D-right-handed\";\n case \"3d-left-handed\":\n return \"3D-left-handed\";\n case \"3d-right-handed-time\":\n return \"3D-right-handed-time\";\n case \"3d-left-handed-time\":\n return \"3D-left-handed-time\";\n default:\n console.warn(\"Unrecognized space: \" + space);\n return space;\n }\n}\n\nfunction parseNRRDEndian(endian) {\n switch(endian.toLowerCase()) {\n case 'little':\n return 'little';\n case 'big':\n return 'big';\n default:\n console.warn(\"Unrecognized NRRD endianness: \" + endian);\n return endian;\n }\n}\n\n// Note that this function will never encounter the LIST data file specification format, as this is handled elsewhere.\nvar dataFileFormatRE = / (-?\\d+) (-?\\d+) (-?\\d+)(?: (\\d+))?$/;\nfunction parseNRRDDataFile(dataFile) {\n var match = dataFileFormatRE.exec(dataFile);\n if (match) { // We have a format specification\n if (match.length == 5 && match[4]) { // subdim specification\n return {\n format: dataFile.substring(0, match.index),\n min: parseNRRDInteger(match[1]),\n max: parseNRRDInteger(match[2]),\n step: parseNRRDInteger(match[3]),\n subdim: parseNRRDInteger(match[4])\n };\n } else {\n return {\n format: dataFile.substring(0, match.index),\n min: parseNRRDInteger(match[1]),\n max: parseNRRDInteger(match[2]),\n step: parseNRRDInteger(match[3])\n };\n }\n } else { // Just a file\n return dataFile;\n }\n}\n\nfunction serializeNRRDDataFile(dataFile) {\n if ((typeof dataFile) == \"string\" || dataFile instanceof String) {\n return dataFile;\n } else if ('format' in dataFile && 'min' in dataFile && 'max' in dataFile && 'step' in dataFile) {\n if ('subdim' in dataFile) {\n return dataFile.format + \" \" + dataFile.min + \" \" + dataFile.max + \" \" + dataFile.step + \" \" + dataFile.subdim;\n } else {\n return dataFile.format + \" \" + dataFile.min + \" \" + dataFile.max + \" \" + dataFile.step;\n }\n } else {\n throw new Error(\"Unrecognized data file format!\");\n }\n}\n\nfunction parseNRRDCenter(center) {\n switch(center.toLowerCase()) {\n case \"cell\":\n return \"cell\";\n case \"node\":\n return \"node\";\n case \"???\":\n case \"none\":\n return null;\n default:\n console.warn(\"Unrecognized NRRD center: \" + center);\n return center;\n }\n}\n\nvar NRRDKinds = {\n \"domain\": \"domain\",\n \"space\": \"space\",\n \"time\": \"time\",\n \"list\": \"list\",\n \"point\": \"point\",\n \"vector\": \"vector\",\n \"covariant-vector\": \"covariant-vector\",\n \"normal\": \"normal\",\n \"stub\": \"stub\",\n \"scalar\": \"scalar\",\n \"complex\": \"complex\",\n \"2-vector\": \"2-vector\",\n \"3-color\": \"3-color\",\n \"rgb-color\": \"RGB-color\",\n \"hsv-color\": \"HSV-color\",\n \"xyz-color\": \"XYZ-color\",\n \"4-color\": \"4-color\",\n \"rgba-color\": \"RGBA-color\",\n \"3-vector\": \"3-vector\",\n \"3-gradient\": \"3-gradient\",\n \"3-normal\": \"3-normal\",\n \"4-vector\": \"4-vector\",\n \"quaternion\": \"quaternion\",\n \"2d-symmetric-matrix\": \"2D-symmetric-matrix\",\n \"2d-masked-symmetric-matrix\": \"2D-masked-symmetric-matrix\",\n \"2d-matrix\": \"2D-matrix\",\n \"2d-masked-matrix\": \"2D-masked-matrix\",\n \"3d-symmetric-matrix\": \"3D-symmetric-matrix\",\n \"3d-masked-symmetric-matrix\": \"3D-masked-symmetric-matrix\",\n \"3d-matrix\": \"3D-matrix\",\n \"3d-masked-matrix\": \"3D-masked-matrix\",\n \"???\": null,\n \"none\": null\n};\nfunction parseNRRDKind(kind) {\n var kindLC = kind.toLowerCase();\n if (kindLC in NRRDKinds) return NRRDKinds[kindLC];\n console.warn(\"Unrecognized NRRD kind: \" + kind);\n return kind;\n}\n\nfunction serializeNRRDOptional(a) {\n return a===null ? \"???\" : a;\n}\n\nvar systemEndianness = (function() {\n var buf = new ArrayBuffer(4),\n intArr = new Uint32Array(buf),\n byteArr = new Uint8Array(buf);\n intArr[0] = 0x01020304;\n if (byteArr[0]==1 && byteArr[1]==2 && byteArr[2]==3 && byteArr[3]==4) {\n return 'big';\n } else if (byteArr[0]==4 && byteArr[1]==3 && byteArr[2]==2 && byteArr[3]==1) {\n return 'little';\n }\n console.warn(\"Unrecognized system endianness!\");\n return undefined;\n})();\n\nfunction parseNRRDRawData(buffer, type, sizes, options) {\n var i, arr, view, totalLen = 1, endianFlag;\n for(i=0; i0) integers!\");\n totalLen *= sizes[i];\n }\n if (type == 'block') {\n // Don't do anything special, just return the slice containing all blocks.\n return buffer.slice(0,totalLen*options.blockSize);\n } else if (type == 'int8' || type == 'uint8' || options.endian == systemEndianness) {\n switch(type) {\n case \"int8\":\n checkSize(1);\n return new Int8Array(buffer.slice(0,totalLen));\n case \"uint8\":\n checkSize(1);\n return new Uint8Array(buffer.slice(0,totalLen));\n case \"int16\":\n checkSize(2);\n return new Int16Array(buffer.slice(0,totalLen*2));\n case \"uint16\":\n checkSize(2);\n return new Uint16Array(buffer.slice(0,totalLen*2));\n case \"int32\":\n checkSize(4);\n return new Int32Array(buffer.slice(0,totalLen*4));\n case \"uint32\":\n checkSize(4);\n return new Uint32Array(buffer.slice(0,totalLen*4));\n //case \"int64\":\n // checkSize(8);\n // return new Int64Array(buffer.slice(0,totalLen*8));\n //case \"uint64\":\n // checkSize(8);\n // return new Uint64Array(buffer.slice(0,totalLen*8));\n case \"float\":\n checkSize(4);\n return new Float32Array(buffer.slice(0,totalLen*4));\n case \"double\":\n checkSize(8);\n return new Float64Array(buffer.slice(0,totalLen*8));\n default:\n console.warn(\"Unsupported NRRD type: \" + type + \", returning raw buffer.\");\n return undefined;\n }\n } else {\n switch(options.endian) {\n case 'big':\n endianFlag = false;\n break;\n case 'little':\n endianFlag = true;\n break;\n default:\n console.warn(\"Unsupported endianness in NRRD file: \" + options.endian);\n return undefined;\n }\n view = new DataView(buffer);\n switch(type) {\n case \"int8\": // Note that here we do not need to check the size of the buffer, as the DataView.get methods should throw an exception if we read beyond the buffer.\n arr = new Int8Array(totalLen);\n for(i=0; i0) integers!\");\n totalLen *= sizes[i];\n }\n buf8 = new Uint8Array(buffer);\n str = String.fromCharCode.apply(null, buf8);\n strList = str.split(whitespaceDataValueListSeparatorRE);\n if (strList.lengthtotalLen) {\n if (strList[0] === '') strList = strList.slice(1); // Strictly speaking the spec doesn't (explicitly) allow whitespace in front of the first number, but let's be lenient.\n strList = strList.slice(0, totalLen);\n }\n switch(type) {\n case \"int8\":\n return new Int8Array(strList.map(parseNRRDInteger));\n case \"uint8\":\n return new Uint8Array(strList.map(parseNRRDInteger));\n case \"int16\":\n return new Int16Array(strList.map(parseNRRDInteger));\n case \"uint16\":\n return new Uint16Array(strList.map(parseNRRDInteger));\n case \"int32\":\n return new Int32Array(strList.map(parseNRRDInteger));\n case \"uint32\":\n return new Uint32Array(strList.map(parseNRRDInteger));\n //case \"int64\":\n // return new Int64Array(strList.map(parseNRRDInteger));\n //case \"uint64\":\n // return new Uint64Array(strList.map(parseNRRDInteger));\n case \"float\":\n return new Float32Array(strList.map(parseNRRDFloat));\n case \"double\":\n return new Float64Array(strList.map(parseNRRDFloat));\n default:\n console.warn(\"Unsupported NRRD type: \" + type + \".\");\n return undefined;\n }\n}\n\n// This ALWAYS returns an integer, or throws an exception.\nfunction getNRRDTypeSize(type) {\n switch(type) {\n case \"int8\":\n return 1;\n case \"uint8\":\n return 1;\n case \"int16\":\n return 2;\n case \"uint16\":\n return 2;\n case \"int32\":\n return 4;\n case \"uint32\":\n return 4;\n case \"int64\":\n return 8;\n case \"uint64\":\n return 8;\n case \"float\":\n return 4;\n case \"double\":\n return 8;\n default:\n throw new Error(\"Do not know the size of NRRD type: \" + type);\n }\n}\n\nfunction checkNRRD(ret) {\n // Always necessary fields\n if (ret.dimension===undefined) {\n throw new Error(\"Dimension missing from NRRD file!\");\n } else if (ret.type===undefined) {\n throw new Error(\"Type missing from NRRD file!\");\n } else if (ret.encoding===undefined) {\n throw new Error(\"Encoding missing from NRRD file!\");\n } else if (ret.sizes===undefined) {\n throw new Error(\"Sizes missing from NRRD file!\");\n }\n \n // Sometimes necessary fields\n if (ret.type != 'block' && ret.type != 'int8' && ret.type != 'uint8' &&\n ret.encoding != 'ascii' && ret.endian === undefined) {\n throw new Error(\"Endianness missing from NRRD file!\");\n } else if (ret.type == 'block' && ret.blockSize === undefined) {\n throw new Error(\"Missing block size in NRRD file!\");\n }\n \n // Check dimension and per-axis field lengths\n if (ret.dimension === 0) {\n throw new Error(\"Zero-dimensional NRRD file?\");\n } else if (ret.dimension != ret.sizes.length) {\n throw new Error(\"Length of 'sizes' is different from 'dimension' in an NRRD file!\");\n } else if (ret.spacings && ret.dimension != ret.spacings.length) {\n throw new Error(\"Length of 'spacings' is different from 'dimension' in an NRRD file!\");\n } else if (ret.thicknesses && ret.dimension != ret.thicknesses.length) {\n throw new Error(\"Length of 'thicknesses' is different from 'dimension' in an NRRD file!\");\n } else if (ret.axisMins && ret.dimension != ret.axisMins.length) {\n throw new Error(\"Length of 'axis mins' is different from 'dimension' in an NRRD file!\");\n } else if (ret.axisMaxs && ret.dimension != ret.axisMaxs.length) {\n throw new Error(\"Length of 'axis maxs' is different from 'dimension' in an NRRD file!\");\n } else if (ret.centers && ret.dimension != ret.centers.length) {\n throw new Error(\"Length of 'centers' is different from 'dimension' in an NRRD file!\");\n } else if (ret.labels && ret.dimension != ret.labels.length) {\n throw new Error(\"Length of 'labels' is different from 'dimension' in an NRRD file!\");\n } else if (ret.units && ret.dimension != ret.units.length) {\n throw new Error(\"Length of 'units' is different from 'dimension' in an NRRD file!\");\n } else if (ret.kinds && ret.dimension != ret.kinds.length) {\n throw new Error(\"Length of 'kinds' is different from 'dimension' in an NRRD file!\");\n }\n \n // TODO: Check space/orientation fields.\n \n // We should either have inline data or external data\n if ((ret.data === undefined || ret.data.length === 0) && (ret.buffer === undefined || ret.buffer.byteLength === 0) && ret.dataFile === undefined) {\n throw new Error(\"NRRD file has neither inline or external data!\");\n }\n}\n\nfunction castTypedArray(data, type) {\n switch(type) {\n case \"int8\":\n return new Int8Array(data);\n case \"uint8\":\n return new Uint8Array(data);\n case \"int16\":\n return new Int16Array(data);\n case \"uint16\":\n return new Uint16Array(data);\n case \"int32\":\n return new Int32Array(data);\n case \"uint32\":\n return new Uint32Array(data);\n //case \"int64\":\n // return new Int64Array(data);\n //case \"uint64\":\n // return new Uint64Array(data);\n case \"float\":\n return new Float32Array(data);\n case \"double\":\n return new Float64Array(data);\n default:\n throw new Error(\"Cannot cast to NRRD type: \" + type);\n }\n}\n\nfunction serializeToBuffer(data, type, endian) {\n var i, endianFlag, view, nativeSize = getNRRDTypeSize(type), buffer = new ArrayBuffer(data.length*nativeSize);\n switch(endian) {\n case 'big':\n endianFlag = false;\n break;\n case 'little':\n endianFlag = true;\n break;\n default:\n console.warn(\"Unsupported endianness in NRRD file: \" + endian);\n return undefined;\n }\n view = new DataView(buffer);\n switch(type) {\n case \"int8\": // Note that here we do not need to check the size of the buffer, as the DataView.get methods should throw an exception if we read beyond the buffer.\n for(i=0; i Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overriden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n if (!(this instanceof Deflate)) return new Deflate(options);\n\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n var dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n\n if (this.ended) { return false; }\n\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n status = zlib_deflate.deflate(strm, _mode); /* no bad return value */\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n if (this.options.to === 'string') {\n this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === Z_SYNC_FLUSH) {\n this.onEnd(Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): ouput data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n var deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n","'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils = require('./utils/common');\nvar strings = require('./utils/strings');\nvar c = require('./zlib/constants');\nvar msg = require('./zlib/messages');\nvar ZStream = require('./zlib/zstream');\nvar GZheader = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overriden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n if (!(this instanceof Inflate)) return new Inflate(options);\n\n this.options = utils.assign({\n chunkSize: 16384,\n windowBits: 0,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var dictionary = this.options.dictionary;\n var status, _mode;\n var next_out_utf8, tail, utf8str;\n var dict;\n\n // Flag to properly process Z_BUF_ERROR on testing inflate call\n // when we check that all output data was flushed.\n var allowBufError = false;\n\n if (this.ended) { return false; }\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // Only binary strings can be decompressed on practice\n strm.input = strings.binstring2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */\n\n if (status === c.Z_NEED_DICT && dictionary) {\n // Convert data if needed\n if (typeof dictionary === 'string') {\n dict = strings.string2buf(dictionary);\n } else if (toString.call(dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(dictionary);\n } else {\n dict = dictionary;\n }\n\n status = zlib_inflate.inflateSetDictionary(this.strm, dict);\n\n }\n\n if (status === c.Z_BUF_ERROR && allowBufError === true) {\n status = c.Z_OK;\n allowBufError = false;\n }\n\n if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n if (this.options.to === 'string') {\n\n next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n tail = strm.next_out - next_out_utf8;\n utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n this.onData(utf8str);\n\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n }\n\n // When no more input data, we should check that internal inflate buffers\n // are flushed. The only way to do it when avail_out = 0 - run one more\n // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n // Here we set flag to process this error properly.\n //\n // NOTE. Deflate does not return error in this case and does not needs such\n // logic.\n if (strm.avail_in === 0 && strm.avail_out === 0) {\n allowBufError = true;\n }\n\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n if (status === c.Z_STREAM_END) {\n _mode = c.Z_FINISH;\n }\n\n // Finalize on the last chunk.\n if (_mode === c.Z_FINISH) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === c.Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === c.Z_SYNC_FLUSH) {\n this.onEnd(c.Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): ouput data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === c.Z_OK) {\n if (this.options.to === 'string') {\n // Glue & convert here, until we teach pako to send\n // utf8 alligned strings to onData\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n * , output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err)\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n var inflator = new Inflate(options);\n\n inflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) { throw inflator.msg; }\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip = inflate;\n","'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (source.hasOwnProperty(p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n","// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safary\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new utils.Buf8(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n // use fallback for big arrays to avoid stack overflow\n if (len < 65537) {\n if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n }\n }\n\n var result = '';\n for (var i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n var buf = new utils.Buf8(str.length);\n for (var i = 0, len = buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n var i, out, c, c_len;\n var len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Fuckup - very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means vuffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It doesn't worth to make additional optimizationa as in original.\n// Small size is preferable.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","'use strict';\n\nvar utils = require('../utils/common');\nvar trees = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar msg = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n s.d_buf = s.lit_bufsize >> 1;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var s;\n var str, n;\n var wrap;\n var avail;\n var next;\n var input;\n var tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = new utils.Buf8(s.w_size);\n utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n","'use strict';\n\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n","'use strict';\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n var s_window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n","'use strict';\n\n\nvar utils = require('../utils/common');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar inflate_fast = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window, src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more conveniend processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' insdead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var state;\n var dictid;\n var ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n","'use strict';\n\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n var i = 0;\n /* process all codes and make table entries */\n for (;;) {\n i++;\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n","'use strict';\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED = 1;\n//var Z_HUFFMAN_ONLY = 2;\n//var Z_RLE = 3;\nvar Z_FIXED = 4;\n//var Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits = /* extra bits for each length code */\n [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];\n\nvar extra_dbits = /* extra bits for each distance code */\n [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];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n * 2;\n var _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n","'use strict';\n\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n var f = basename(path);\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // 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\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // 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.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","export var REVISION = '106';\nexport var MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 };\nexport var CullFaceNone = 0;\nexport var CullFaceBack = 1;\nexport var CullFaceFront = 2;\nexport var CullFaceFrontBack = 3;\nexport var FrontFaceDirectionCW = 0;\nexport var FrontFaceDirectionCCW = 1;\nexport var BasicShadowMap = 0;\nexport var PCFShadowMap = 1;\nexport var PCFSoftShadowMap = 2;\nexport var FrontSide = 0;\nexport var BackSide = 1;\nexport var DoubleSide = 2;\nexport var FlatShading = 1;\nexport var SmoothShading = 2;\nexport var NoColors = 0;\nexport var FaceColors = 1;\nexport var VertexColors = 2;\nexport var NoBlending = 0;\nexport var NormalBlending = 1;\nexport var AdditiveBlending = 2;\nexport var SubtractiveBlending = 3;\nexport var MultiplyBlending = 4;\nexport var CustomBlending = 5;\nexport var AddEquation = 100;\nexport var SubtractEquation = 101;\nexport var ReverseSubtractEquation = 102;\nexport var MinEquation = 103;\nexport var MaxEquation = 104;\nexport var ZeroFactor = 200;\nexport var OneFactor = 201;\nexport var SrcColorFactor = 202;\nexport var OneMinusSrcColorFactor = 203;\nexport var SrcAlphaFactor = 204;\nexport var OneMinusSrcAlphaFactor = 205;\nexport var DstAlphaFactor = 206;\nexport var OneMinusDstAlphaFactor = 207;\nexport var DstColorFactor = 208;\nexport var OneMinusDstColorFactor = 209;\nexport var SrcAlphaSaturateFactor = 210;\nexport var NeverDepth = 0;\nexport var AlwaysDepth = 1;\nexport var LessDepth = 2;\nexport var LessEqualDepth = 3;\nexport var EqualDepth = 4;\nexport var GreaterEqualDepth = 5;\nexport var GreaterDepth = 6;\nexport var NotEqualDepth = 7;\nexport var MultiplyOperation = 0;\nexport var MixOperation = 1;\nexport var AddOperation = 2;\nexport var NoToneMapping = 0;\nexport var LinearToneMapping = 1;\nexport var ReinhardToneMapping = 2;\nexport var Uncharted2ToneMapping = 3;\nexport var CineonToneMapping = 4;\nexport var ACESFilmicToneMapping = 5;\n\nexport var UVMapping = 300;\nexport var CubeReflectionMapping = 301;\nexport var CubeRefractionMapping = 302;\nexport var EquirectangularReflectionMapping = 303;\nexport var EquirectangularRefractionMapping = 304;\nexport var SphericalReflectionMapping = 305;\nexport var CubeUVReflectionMapping = 306;\nexport var CubeUVRefractionMapping = 307;\nexport var RepeatWrapping = 1000;\nexport var ClampToEdgeWrapping = 1001;\nexport var MirroredRepeatWrapping = 1002;\nexport var NearestFilter = 1003;\nexport var NearestMipMapNearestFilter = 1004;\nexport var NearestMipMapLinearFilter = 1005;\nexport var LinearFilter = 1006;\nexport var LinearMipMapNearestFilter = 1007;\nexport var LinearMipMapLinearFilter = 1008;\nexport var UnsignedByteType = 1009;\nexport var ByteType = 1010;\nexport var ShortType = 1011;\nexport var UnsignedShortType = 1012;\nexport var IntType = 1013;\nexport var UnsignedIntType = 1014;\nexport var FloatType = 1015;\nexport var HalfFloatType = 1016;\nexport var UnsignedShort4444Type = 1017;\nexport var UnsignedShort5551Type = 1018;\nexport var UnsignedShort565Type = 1019;\nexport var UnsignedInt248Type = 1020;\nexport var AlphaFormat = 1021;\nexport var RGBFormat = 1022;\nexport var RGBAFormat = 1023;\nexport var LuminanceFormat = 1024;\nexport var LuminanceAlphaFormat = 1025;\nexport var RGBEFormat = RGBAFormat;\nexport var DepthFormat = 1026;\nexport var DepthStencilFormat = 1027;\nexport var RedFormat = 1028;\nexport var RGB_S3TC_DXT1_Format = 33776;\nexport var RGBA_S3TC_DXT1_Format = 33777;\nexport var RGBA_S3TC_DXT3_Format = 33778;\nexport var RGBA_S3TC_DXT5_Format = 33779;\nexport var RGB_PVRTC_4BPPV1_Format = 35840;\nexport var RGB_PVRTC_2BPPV1_Format = 35841;\nexport var RGBA_PVRTC_4BPPV1_Format = 35842;\nexport var RGBA_PVRTC_2BPPV1_Format = 35843;\nexport var RGB_ETC1_Format = 36196;\nexport var RGBA_ASTC_4x4_Format = 37808;\nexport var RGBA_ASTC_5x4_Format = 37809;\nexport var RGBA_ASTC_5x5_Format = 37810;\nexport var RGBA_ASTC_6x5_Format = 37811;\nexport var RGBA_ASTC_6x6_Format = 37812;\nexport var RGBA_ASTC_8x5_Format = 37813;\nexport var RGBA_ASTC_8x6_Format = 37814;\nexport var RGBA_ASTC_8x8_Format = 37815;\nexport var RGBA_ASTC_10x5_Format = 37816;\nexport var RGBA_ASTC_10x6_Format = 37817;\nexport var RGBA_ASTC_10x8_Format = 37818;\nexport var RGBA_ASTC_10x10_Format = 37819;\nexport var RGBA_ASTC_12x10_Format = 37820;\nexport var RGBA_ASTC_12x12_Format = 37821;\nexport var LoopOnce = 2200;\nexport var LoopRepeat = 2201;\nexport var LoopPingPong = 2202;\nexport var InterpolateDiscrete = 2300;\nexport var InterpolateLinear = 2301;\nexport var InterpolateSmooth = 2302;\nexport var ZeroCurvatureEnding = 2400;\nexport var ZeroSlopeEnding = 2401;\nexport var WrapAroundEnding = 2402;\nexport var TrianglesDrawMode = 0;\nexport var TriangleStripDrawMode = 1;\nexport var TriangleFanDrawMode = 2;\nexport var LinearEncoding = 3000;\nexport var sRGBEncoding = 3001;\nexport var GammaEncoding = 3007;\nexport var RGBEEncoding = 3002;\nexport var LogLuvEncoding = 3003;\nexport var RGBM7Encoding = 3004;\nexport var RGBM16Encoding = 3005;\nexport var RGBDEncoding = 3006;\nexport var BasicDepthPacking = 3200;\nexport var RGBADepthPacking = 3201;\nexport var TangentSpaceNormalMap = 0;\nexport var ObjectSpaceNormalMap = 1;\n","import { Ray } from '../math/Ray.js';\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author bhouston / http://clara.io/\n * @author stephomi / http://stephaneginier.com/\n */\n\nfunction Raycaster( origin, direction, near, far ) {\n\n\tthis.ray = new Ray( origin, direction );\n\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\tthis.near = near || 0;\n\tthis.far = far || Infinity;\n\n\tthis.params = {\n\t\tMesh: {},\n\t\tLine: {},\n\t\tLOD: {},\n\t\tPoints: { threshold: 1 },\n\t\tSprite: {}\n\t};\n\n\tObject.defineProperties( this.params, {\n\t\tPointCloud: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\treturn this.Points;\n\n\t\t\t}\n\t\t}\n\t} );\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.visible === false ) return;\n\n\tobject.raycast( raycaster, intersects );\n\n\tif ( recursive === true ) {\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Raycaster.prototype, {\n\n\tlinePrecision: 1,\n\n\tset: function ( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t},\n\n\tsetFromCamera: function ( coords, camera ) {\n\n\t\tif ( ( camera && camera.isPerspectiveCamera ) ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis._camera = camera;\n\n\t\t} else if ( ( camera && camera.isOrthographicCamera ) ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis._camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type.' );\n\n\t\t}\n\n\t},\n\n\tintersectObject: function ( object, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t},\n\n\tintersectObjects: function ( objects, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\treturn intersects;\n\n\t\t}\n\n\t\tfor ( var i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n} );\n\n\nexport { Raycaster };\n","import { Vector3 } from './Vector3.js';\n\n/**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Box3( min, max ) {\n\n\tthis.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity );\n\tthis.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity );\n\n}\n\nObject.assign( Box3.prototype, {\n\n\tisBox3: true,\n\n\tset: function ( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromArray: function ( array ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tvar x = array[ i ];\n\t\t\tvar y = array[ i + 1 ];\n\t\t\tvar z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromBufferAttribute: function ( attribute ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tvar x = attribute.getX( i );\n\t\t\tvar y = attribute.getY( i );\n\t\t\tvar z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCenterAndSize: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetFromObject: function ( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tmakeEmpty: function () {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t},\n\n\tisEmpty: function () {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t},\n\n\tgetSize: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getSize() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t},\n\n\texpandByPoint: function ( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t},\n\n\texpandByVector: function ( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t},\n\n\texpandByScalar: function ( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t},\n\n\texpandByObject: function () {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tvar scope, i, l;\n\n\t\tvar v1 = new Vector3();\n\n\t\tfunction traverse( node ) {\n\n\t\t\tvar geometry = node.geometry;\n\n\t\t\tif ( geometry !== undefined ) {\n\n\t\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\t\tfor ( i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tv1.copy( vertices[ i ] );\n\t\t\t\t\t\tv1.applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\tvar attribute = geometry.attributes.position;\n\n\t\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\t\tfor ( i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tv1.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn function expandByObject( object ) {\n\n\t\t\tscope = this;\n\n\t\t\tobject.updateMatrixWorld( true );\n\n\t\t\tobject.traverse( traverse );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t},\n\n\tcontainsBox: function ( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t},\n\n\tgetParameter: function ( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getParameter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t},\n\n\tintersectsSphere: ( function () {\n\n\t\tvar closestPoint = new Vector3();\n\n\t\treturn function intersectsSphere( sphere ) {\n\n\t\t\t// Find the point on the AABB closest to the sphere center.\n\t\t\tthis.clampPoint( sphere.center, closestPoint );\n\n\t\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\t\treturn closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t\t};\n\n\t} )(),\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tvar min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t},\n\n\tintersectsTriangle: ( function () {\n\n\t\t// triangle centered vertices\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\t// triangle edge vectors\n\t\tvar f0 = new Vector3();\n\t\tvar f1 = new Vector3();\n\t\tvar f2 = new Vector3();\n\n\t\tvar testAxis = new Vector3();\n\n\t\tvar center = new Vector3();\n\t\tvar extents = new Vector3();\n\n\t\tvar triangleNormal = new Vector3();\n\n\t\tfunction satForAxes( axes ) {\n\n\t\t\tvar i, j;\n\n\t\t\tfor ( i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t\t\ttestAxis.fromArray( axes, i );\n\t\t\t\t// project the aabb onto the seperating axis\n\t\t\t\tvar r = extents.x * Math.abs( testAxis.x ) + extents.y * Math.abs( testAxis.y ) + extents.z * Math.abs( testAxis.z );\n\t\t\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\t\t\tvar p0 = v0.dot( testAxis );\n\t\t\t\tvar p1 = v1.dot( testAxis );\n\t\t\t\tvar p2 = v2.dot( testAxis );\n\t\t\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\t\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t\t\t// the axis is seperating and we can exit\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn function intersectsTriangle( triangle ) {\n\n\t\t\tif ( this.isEmpty() ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// compute box center and extents\n\t\t\tthis.getCenter( center );\n\t\t\textents.subVectors( this.max, center );\n\n\t\t\t// translate triangle to aabb origin\n\t\t\tv0.subVectors( triangle.a, center );\n\t\t\tv1.subVectors( triangle.b, center );\n\t\t\tv2.subVectors( triangle.c, center );\n\n\t\t\t// compute edge vectors for triangle\n\t\t\tf0.subVectors( v1, v0 );\n\t\t\tf1.subVectors( v2, v1 );\n\t\t\tf2.subVectors( v0, v2 );\n\n\t\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\t\tvar axes = [\n\t\t\t\t0, - f0.z, f0.y, 0, - f1.z, f1.y, 0, - f2.z, f2.y,\n\t\t\t\tf0.z, 0, - f0.x, f1.z, 0, - f1.x, f2.z, 0, - f2.x,\n\t\t\t\t- f0.y, f0.x, 0, - f1.y, f1.x, 0, - f2.y, f2.x, 0\n\t\t\t];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// test 3 face normals from the aabb\n\t\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// finally testing the face normal of the triangle\n\t\t\t// use already existing triangle edge vectors here\n\t\t\ttriangleNormal.crossVectors( f0, f1 );\n\t\t\taxes = [ triangleNormal.x, triangleNormal.y, triangleNormal.z ];\n\t\t\treturn satForAxes( axes );\n\n\t\t};\n\n\t} )(),\n\n\tclampPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t},\n\n\tdistanceToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceToPoint( point ) {\n\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t};\n\n\t}(),\n\n\tgetBoundingSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getBoundingSphere( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.error( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t\t//target = new Sphere(); // removed to avoid cyclic dependency\n\n\t\t\t}\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( v1 ).length() * 0.5;\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tintersect: function ( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t},\n\n\tunion: function ( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function () {\n\n\t\tvar points = [\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3()\n\t\t];\n\n\t\treturn function applyMatrix4( matrix ) {\n\n\t\t\t// transform of empty box is an empty box.\n\t\t\tif ( this.isEmpty() ) return this;\n\n\t\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t\tpoints[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t\tpoints[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t\tpoints[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t\tpoints[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t\tpoints[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t\tpoints[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t\tpoints[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t\tpoints[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n} );\n\n\nexport { Box3 };\n","/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar _Math = {\n\n\tDEG2RAD: Math.PI / 180,\n\tRAD2DEG: 180 / Math.PI,\n\n\tgenerateUUID: ( function () {\n\n\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\t\tvar lut = [];\n\n\t\tfor ( var i = 0; i < 256; i ++ ) {\n\n\t\t\tlut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n\t\t}\n\n\t\treturn function generateUUID() {\n\n\t\t\tvar d0 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d1 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d2 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d3 = Math.random() * 0xffffffff | 0;\n\t\t\tvar uuid = lut[ d0 & 0xff ] + lut[ d0 >> 8 & 0xff ] + lut[ d0 >> 16 & 0xff ] + lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d1 & 0xff ] + lut[ d1 >> 8 & 0xff ] + '-' + lut[ d1 >> 16 & 0x0f | 0x40 ] + lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d2 & 0x3f | 0x80 ] + lut[ d2 >> 8 & 0xff ] + '-' + lut[ d2 >> 16 & 0xff ] + lut[ d2 >> 24 & 0xff ] +\n\t\t\t\tlut[ d3 & 0xff ] + lut[ d3 >> 8 & 0xff ] + lut[ d3 >> 16 & 0xff ] + lut[ d3 >> 24 & 0xff ];\n\n\t\t\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\t\t\treturn uuid.toUpperCase();\n\n\t\t};\n\n\t} )(),\n\n\tclamp: function ( value, min, max ) {\n\n\t\treturn Math.max( min, Math.min( max, value ) );\n\n\t},\n\n\t// compute euclidian modulo of m % n\n\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\teuclideanModulo: function ( n, m ) {\n\n\t\treturn ( ( n % m ) + m ) % m;\n\n\t},\n\n\t// Linear mapping from range to range \n\n\tmapLinear: function ( x, a1, a2, b1, b2 ) {\n\n\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n\t},\n\n\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\n\tlerp: function ( x, y, t ) {\n\n\t\treturn ( 1 - t ) * x + t * y;\n\n\t},\n\n\t// http://en.wikipedia.org/wiki/Smoothstep\n\n\tsmoothstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * ( 3 - 2 * x );\n\n\t},\n\n\tsmootherstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n\t},\n\n\t// Random integer from interval\n\n\trandInt: function ( low, high ) {\n\n\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n\t},\n\n\t// Random float from interval\n\n\trandFloat: function ( low, high ) {\n\n\t\treturn low + Math.random() * ( high - low );\n\n\t},\n\n\t// Random float from <-range/2, range/2> interval\n\n\trandFloatSpread: function ( range ) {\n\n\t\treturn range * ( 0.5 - Math.random() );\n\n\t},\n\n\tdegToRad: function ( degrees ) {\n\n\t\treturn degrees * _Math.DEG2RAD;\n\n\t},\n\n\tradToDeg: function ( radians ) {\n\n\t\treturn radians * _Math.RAD2DEG;\n\n\t},\n\n\tisPowerOfTwo: function ( value ) {\n\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t},\n\n\tceilPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n\t},\n\n\tfloorPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n\t}\n\n};\n\n\nexport { _Math };\n","import { Vector3 } from './Vector3.js';\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author philogb / http://blog.thejit.org/\n * @author jordi_ros / http://plattsoft.com\n * @author D1plo1d / http://github.com/D1plo1d\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author timknip / http://www.floorplanner.com/\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Matrix4() {\n\n\tthis.elements = [\n\n\t\t1, 0, 0, 0,\n\t\t0, 1, 0, 0,\n\t\t0, 0, 1, 0,\n\t\t0, 0, 0, 1\n\n\t];\n\n\tif ( arguments.length > 0 ) {\n\n\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t}\n\n}\n\nObject.assign( Matrix4.prototype, {\n\n\tisMatrix4: true,\n\n\tset: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t},\n\n\tidentity: function () {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t},\n\n\tcopy: function ( m ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t},\n\n\tcopyPosition: function ( m ) {\n\n\t\tvar te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\textractBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t},\n\n\tmakeBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\textractRotation: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function extractRotation( m ) {\n\n\t\t\t// this method does not support reflection matrices\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\n\t\t\tvar scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length();\n\t\t\tvar scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length();\n\t\t\tvar scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length();\n\n\t\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\t\tte[ 3 ] = 0;\n\n\t\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\t\tte[ 7 ] = 0;\n\n\t\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\t\tte[ 11 ] = 0;\n\n\t\t\tte[ 12 ] = 0;\n\t\t\tte[ 13 ] = 0;\n\t\t\tte[ 14 ] = 0;\n\t\t\tte[ 15 ] = 1;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakeRotationFromEuler: function ( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\n\t\tvar x = euler.x, y = euler.y, z = euler.z;\n\t\tvar a = Math.cos( x ), b = Math.sin( x );\n\t\tvar c = Math.cos( y ), d = Math.sin( y );\n\t\tvar e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationFromQuaternion: function () {\n\n\t\tvar zero = new Vector3( 0, 0, 0 );\n\t\tvar one = new Vector3( 1, 1, 1 );\n\n\t\treturn function makeRotationFromQuaternion( q ) {\n\n\t\t\treturn this.compose( zero, q, one );\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar x = new Vector3();\n\t\tvar y = new Vector3();\n\t\tvar z = new Vector3();\n\n\t\treturn function lookAt( eye, target, up ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tz.subVectors( eye, target );\n\n\t\t\tif ( z.lengthSq() === 0 ) {\n\n\t\t\t\t// eye and target are in the same position\n\n\t\t\t\tz.z = 1;\n\n\t\t\t}\n\n\t\t\tz.normalize();\n\t\t\tx.crossVectors( up, z );\n\n\t\t\tif ( x.lengthSq() === 0 ) {\n\n\t\t\t\t// up and z are parallel\n\n\t\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t\tz.x += 0.0001;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz.z += 0.0001;\n\n\t\t\t\t}\n\n\t\t\t\tz.normalize();\n\t\t\t\tx.crossVectors( up, z );\n\n\t\t\t}\n\n\t\t\tx.normalize();\n\t\t\ty.crossVectors( z, x );\n\n\t\t\tte[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x;\n\t\t\tte[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y;\n\t\t\tte[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmultiply: function ( m, n ) {\n\n\t\tif ( n !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t}\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t},\n\n\tpremultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t},\n\n\tmultiplyMatrices: function ( a, b ) {\n\n\t\tvar ae = a.elements;\n\t\tvar be = b.elements;\n\t\tvar te = this.elements;\n\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tvar a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tvar b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tvar b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tvar b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tvar b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t},\n\n\tapplyToBufferAttribute: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\tv1.applyMatrix4( this );\n\n\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t}\n\n\t\t\treturn attribute;\n\n\t\t};\n\n\t}(),\n\n\tdeterminant: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tvar n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tvar n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tvar n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t},\n\n\ttranspose: function () {\n\n\t\tvar te = this.elements;\n\t\tvar tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t},\n\n\tsetPosition: function ( x, y, z ) {\n\n\t\tvar te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetInverse: function ( m, throwOnDegenerate ) {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tvar te = this.elements,\n\t\t\tme = m.elements,\n\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ],\n\t\t\tn12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ],\n\t\t\tn13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ],\n\t\t\tn14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tvar det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) {\n\n\t\t\tvar msg = \"THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\tthrow new Error( msg );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( msg );\n\n\t\t\t}\n\n\t\t\treturn this.identity();\n\n\t\t}\n\n\t\tvar detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( v ) {\n\n\t\tvar te = this.elements;\n\t\tvar x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t},\n\n\tgetMaxScaleOnAxis: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tvar scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tvar scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t},\n\n\tmakeTranslation: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationX: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationY: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationZ: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationAxis: function ( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tvar c = Math.cos( angle );\n\t\tvar s = Math.sin( angle );\n\t\tvar t = 1 - c;\n\t\tvar x = axis.x, y = axis.y, z = axis.z;\n\t\tvar tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\t return this;\n\n\t},\n\n\tmakeScale: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeShear: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, y, z, 0,\n\t\t\tx, 1, z, 0,\n\t\t\tx, y, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tcompose: function ( position, quaternion, scale ) {\n\n\t\tvar te = this.elements;\n\n\t\tvar x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tvar x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tvar xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tvar yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tvar wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tvar sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tdecompose: function () {\n\n\t\tvar vector = new Vector3();\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function decompose( position, quaternion, scale ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\t\tvar sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\t\tvar sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t\t// if determine is negative, we need to invert one scale\n\t\t\tvar det = this.determinant();\n\t\t\tif ( det < 0 ) sx = - sx;\n\n\t\t\tposition.x = te[ 12 ];\n\t\t\tposition.y = te[ 13 ];\n\t\t\tposition.z = te[ 14 ];\n\n\t\t\t// scale the rotation part\n\t\t\tmatrix.copy( this );\n\n\t\t\tvar invSX = 1 / sx;\n\t\t\tvar invSY = 1 / sy;\n\t\t\tvar invSZ = 1 / sz;\n\n\t\t\tmatrix.elements[ 0 ] *= invSX;\n\t\t\tmatrix.elements[ 1 ] *= invSX;\n\t\t\tmatrix.elements[ 2 ] *= invSX;\n\n\t\t\tmatrix.elements[ 4 ] *= invSY;\n\t\t\tmatrix.elements[ 5 ] *= invSY;\n\t\t\tmatrix.elements[ 6 ] *= invSY;\n\n\t\t\tmatrix.elements[ 8 ] *= invSZ;\n\t\t\tmatrix.elements[ 9 ] *= invSZ;\n\t\t\tmatrix.elements[ 10 ] *= invSZ;\n\n\t\t\tquaternion.setFromRotationMatrix( matrix );\n\n\t\t\tscale.x = sx;\n\t\t\tscale.y = sy;\n\t\t\tscale.z = sz;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakePerspective: function ( left, right, top, bottom, near, far ) {\n\n\t\tif ( far === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\t\tvar x = 2 * near / ( right - left );\n\t\tvar y = 2 * near / ( top - bottom );\n\n\t\tvar a = ( right + left ) / ( right - left );\n\t\tvar b = ( top + bottom ) / ( top - bottom );\n\t\tvar c = - ( far + near ) / ( far - near );\n\t\tvar d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t},\n\n\tmakeOrthographic: function ( left, right, top, bottom, near, far ) {\n\n\t\tvar te = this.elements;\n\t\tvar w = 1.0 / ( right - left );\n\t\tvar h = 1.0 / ( top - bottom );\n\t\tvar p = 1.0 / ( far - near );\n\n\t\tvar x = ( right + left ) * w;\n\t\tvar y = ( top + bottom ) * h;\n\t\tvar z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( matrix ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = matrix.elements;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tvar te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n} );\n\n\nexport { Matrix4 };\n","/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n */\n\nimport { _Math } from './Math.js';\n\nfunction Quaternion( x, y, z, w ) {\n\n\tthis._x = x || 0;\n\tthis._y = y || 0;\n\tthis._z = z || 0;\n\tthis._w = ( w !== undefined ) ? w : 1;\n\n}\n\nObject.assign( Quaternion, {\n\n\tslerp: function ( qa, qb, qm, t ) {\n\n\t\treturn qm.copy( qa ).slerp( qb, t );\n\n\t},\n\n\tslerpFlat: function ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tvar x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ],\n\n\t\t\tx1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tvar s = 1 - t,\n\n\t\t\t\tcos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tvar sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tvar tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tvar f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n} );\n\nObject.defineProperties( Quaternion.prototype, {\n\n\tx: {\n\n\t\tget: function () {\n\n\t\t\treturn this._x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis._onChangeCallback();\n\n\t\t}\n\n\t},\n\n\ty: {\n\n\t\tget: function () {\n\n\t\t\treturn this._y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis._onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tz: {\n\n\t\tget: function () {\n\n\t\t\treturn this._z;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis._onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tw: {\n\n\t\tget: function () {\n\n\t\t\treturn this._w;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._w = value;\n\t\t\tthis._onChangeCallback();\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Quaternion.prototype, {\n\n\tisQuaternion: true,\n\n\tset: function ( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t},\n\n\tcopy: function ( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromEuler: function ( euler, update ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar x = euler._x, y = euler._y, z = euler._z, order = euler.order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tvar cos = Math.cos;\n\t\tvar sin = Math.sin;\n\n\t\tvar c1 = cos( x / 2 );\n\t\tvar c2 = cos( y / 2 );\n\t\tvar c3 = cos( z / 2 );\n\n\t\tvar s1 = sin( x / 2 );\n\t\tvar s2 = sin( y / 2 );\n\t\tvar s3 = sin( z / 2 );\n\n\t\tif ( order === 'XYZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'YZX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'XZY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t}\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromAxisAngle: function ( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tvar halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromRotationMatrix: function ( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33,\n\t\t\ts;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\ts = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromUnitVectors: function ( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tvar EPS = 0.000001;\n\n\t\tvar r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < EPS ) {\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t},\n\n\tangleTo: function ( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( _Math.clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t},\n\n\trotateTowards: function ( q, step ) {\n\n\t\tvar angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tvar t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t},\n\n\tinverse: function () {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t},\n\n\tconjugate: function () {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t},\n\n\tnormalize: function () {\n\n\t\tvar l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( q, p ) {\n\n\t\tif ( p !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t}\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t},\n\n\tpremultiply: function ( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t},\n\n\tmultiplyQuaternions: function ( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tvar qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tvar qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tslerp: function ( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tvar x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tvar cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tvar s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize();\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tvar halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tvar ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t},\n\n\t_onChange: function ( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\t_onChangeCallback: function () {}\n\n} );\n\n\nexport { Quaternion };\n","import { Vector3 } from './Vector3.js';\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Ray( origin, direction ) {\n\n\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\tthis.direction = ( direction !== undefined ) ? direction : new Vector3();\n\n}\n\nObject.assign( Ray.prototype, {\n\n\tset: function ( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t},\n\n\tat: function ( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t},\n\n\tlookAt: function ( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t},\n\n\trecast: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function recast( t ) {\n\n\t\t\tthis.origin.copy( this.at( t, v1 ) );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclosestPointToPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tvar directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t},\n\n\tdistanceSqToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceSqToPoint( point ) {\n\n\t\t\tvar directionDistance = v1.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t\t// point behind the ray\n\n\t\t\tif ( directionDistance < 0 ) {\n\n\t\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t\t}\n\n\t\t\tv1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\t\treturn v1.distanceToSquared( point );\n\n\t\t};\n\n\t}(),\n\n\tdistanceSqToSegment: function () {\n\n\t\tvar segCenter = new Vector3();\n\t\tvar segDir = new Vector3();\n\t\tvar diff = new Vector3();\n\n\t\treturn function distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t\t// It returns the min distance between the ray and the segment\n\t\t\t// defined by v0 and v1\n\t\t\t// It can also set two optional targets :\n\t\t\t// - The closest point on the ray\n\t\t\t// - The closest point on the segment\n\n\t\t\tsegCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t\tsegDir.copy( v1 ).sub( v0 ).normalize();\n\t\t\tdiff.copy( this.origin ).sub( segCenter );\n\n\t\t\tvar segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\t\tvar a01 = - this.direction.dot( segDir );\n\t\t\tvar b0 = diff.dot( this.direction );\n\t\t\tvar b1 = - diff.dot( segDir );\n\t\t\tvar c = diff.lengthSq();\n\t\t\tvar det = Math.abs( 1 - a01 * a01 );\n\t\t\tvar s0, s1, sqrDist, extDet;\n\n\t\t\tif ( det > 0 ) {\n\n\t\t\t\t// The ray and segment are not parallel.\n\n\t\t\t\ts0 = a01 * b1 - b0;\n\t\t\t\ts1 = a01 * b0 - b1;\n\t\t\t\textDet = segExtent * det;\n\n\t\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\t\tvar invDet = 1 / det;\n\t\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 5\n\n\t\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t\t// region 4\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 3\n\n\t\t\t\t\t\ts0 = 0;\n\t\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 2\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Ray and segment are parallel.\n\n\t\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnRay ) {\n\n\t\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnSegment ) {\n\n\t\t\t\toptionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter );\n\n\t\t\t}\n\n\t\t\treturn sqrDist;\n\n\t\t};\n\n\t}(),\n\n\tintersectSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function intersectSphere( sphere, target ) {\n\n\t\t\tv1.subVectors( sphere.center, this.origin );\n\t\t\tvar tca = v1.dot( this.direction );\n\t\t\tvar d2 = v1.dot( v1 ) - tca * tca;\n\t\t\tvar radius2 = sphere.radius * sphere.radius;\n\n\t\t\tif ( d2 > radius2 ) return null;\n\n\t\t\tvar thc = Math.sqrt( radius2 - d2 );\n\n\t\t\t// t0 = first intersect point - entrance on front of sphere\n\t\t\tvar t0 = tca - thc;\n\n\t\t\t// t1 = second intersect point - exit point on back of sphere\n\t\t\tvar t1 = tca + thc;\n\n\t\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t\t// test to see if t0 is behind the ray:\n\t\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t\t// in order to always return an intersect point that is in front of the ray.\n\t\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\t\treturn this.at( t0, target );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t},\n\n\tdistanceToPlane: function ( plane ) {\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t},\n\n\tintersectPlane: function ( plane, target ) {\n\n\t\tvar t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t},\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tvar distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t},\n\n\tintersectBox: function ( box, target ) {\n\n\t\tvar tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tvar invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tvar origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t},\n\n\tintersectsBox: ( function () {\n\n\t\tvar v = new Vector3();\n\n\t\treturn function intersectsBox( box ) {\n\n\t\t\treturn this.intersectBox( box, v ) !== null;\n\n\t\t};\n\n\t} )(),\n\n\tintersectTriangle: function () {\n\n\t\t// Compute the offset origin, edges, and normal.\n\t\tvar diff = new Vector3();\n\t\tvar edge1 = new Vector3();\n\t\tvar edge2 = new Vector3();\n\t\tvar normal = new Vector3();\n\n\t\treturn function intersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t\tedge1.subVectors( b, a );\n\t\t\tedge2.subVectors( c, a );\n\t\t\tnormal.crossVectors( edge1, edge2 );\n\n\t\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\t\tvar DdN = this.direction.dot( normal );\n\t\t\tvar sign;\n\n\t\t\tif ( DdN > 0 ) {\n\n\t\t\t\tif ( backfaceCulling ) return null;\n\t\t\t\tsign = 1;\n\n\t\t\t} else if ( DdN < 0 ) {\n\n\t\t\t\tsign = - 1;\n\t\t\t\tDdN = - DdN;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tdiff.subVectors( this.origin, a );\n\t\t\tvar DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) );\n\n\t\t\t// b1 < 0, no intersection\n\t\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) );\n\n\t\t\t// b2 < 0, no intersection\n\t\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// b1+b2 > 1, no intersection\n\t\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Line intersects triangle, check if ray does.\n\t\t\tvar QdN = - sign * diff.dot( normal );\n\n\t\t\t// t < 0, no intersection\n\t\t\tif ( QdN < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Ray intersects triangle.\n\t\t\treturn this.at( QdN / DdN, target );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix4: function ( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n} );\n\n\nexport { Ray };\n","import { Vector3 } from './Vector3.js';\n\n/**\n * @author bhouston / http://clara.io\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Triangle( a, b, c ) {\n\n\tthis.a = ( a !== undefined ) ? a : new Vector3();\n\tthis.b = ( b !== undefined ) ? b : new Vector3();\n\tthis.c = ( c !== undefined ) ? c : new Vector3();\n\n}\n\nObject.assign( Triangle, {\n\n\tgetNormal: function () {\n\n\t\tvar v0 = new Vector3();\n\n\t\treturn function getNormal( a, b, c, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\ttarget.subVectors( c, b );\n\t\t\tv0.subVectors( a, b );\n\t\t\ttarget.cross( v0 );\n\n\t\t\tvar targetLengthSq = target.lengthSq();\n\t\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t\t}\n\n\t\t\treturn target.set( 0, 0, 0 );\n\n\t\t};\n\n\t}(),\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tgetBarycoord: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function getBarycoord( point, a, b, c, target ) {\n\n\t\t\tv0.subVectors( c, a );\n\t\t\tv1.subVectors( b, a );\n\t\t\tv2.subVectors( point, a );\n\n\t\t\tvar dot00 = v0.dot( v0 );\n\t\t\tvar dot01 = v0.dot( v1 );\n\t\t\tvar dot02 = v0.dot( v2 );\n\t\t\tvar dot11 = v1.dot( v1 );\n\t\t\tvar dot12 = v1.dot( v2 );\n\n\t\t\tvar denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\t// collinear or singular triangle\n\t\t\tif ( denom === 0 ) {\n\n\t\t\t\t// arbitrary location outside of triangle?\n\t\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t\t}\n\n\t\t\tvar invDenom = 1 / denom;\n\t\t\tvar u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\t\tvar v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t\t// barycentric coordinates must always sum to 1\n\t\t\treturn target.set( 1 - u - v, v, u );\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function containsPoint( point, a, b, c ) {\n\n\t\t\tTriangle.getBarycoord( point, a, b, c, v1 );\n\n\t\t\treturn ( v1.x >= 0 ) && ( v1.y >= 0 ) && ( ( v1.x + v1.y ) <= 1 );\n\n\t\t};\n\n\t}(),\n\n\tgetUV: function () {\n\n\t\tvar barycoord = new Vector3();\n\n\t\treturn function getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\t\tthis.getBarycoord( point, p1, p2, p3, barycoord );\n\n\t\t\ttarget.set( 0, 0 );\n\t\t\ttarget.addScaledVector( uv1, barycoord.x );\n\t\t\ttarget.addScaledVector( uv2, barycoord.y );\n\t\t\ttarget.addScaledVector( uv3, barycoord.z );\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tisFrontFacing: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\n\t\treturn function isFrontFacing( a, b, c, direction ) {\n\n\t\t\tv0.subVectors( c, b );\n\t\t\tv1.subVectors( a, b );\n\n\t\t\t// strictly front facing\n\t\t\treturn ( v0.cross( v1 ).dot( direction ) < 0 ) ? true : false;\n\n\t\t};\n\n\t}()\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tset: function ( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPointsAndIndices: function ( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t},\n\n\tgetArea: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getArea() {\n\n\t\t\tv0.subVectors( this.c, this.b );\n\t\t\tv1.subVectors( this.a, this.b );\n\n\t\t\treturn v0.cross( v1 ).length() * 0.5;\n\n\t\t};\n\n\t}(),\n\n\tgetMidpoint: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getMidpoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t},\n\n\tgetNormal: function ( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t},\n\n\tgetPlane: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getPlane() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t},\n\n\tgetBarycoord: function ( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t},\n\n\tgetUV: function ( point, uv1, uv2, uv3, target ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t},\n\n\tisFrontFacing: function ( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t},\n\n\tclosestPointToPoint: function () {\n\n\t\tvar vab = new Vector3();\n\t\tvar vac = new Vector3();\n\t\tvar vbc = new Vector3();\n\t\tvar vap = new Vector3();\n\t\tvar vbp = new Vector3();\n\t\tvar vcp = new Vector3();\n\n\t\treturn function closestPointToPoint( p, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tvar a = this.a, b = this.b, c = this.c;\n\t\t\tvar v, w;\n\n\t\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t\tvab.subVectors( b, a );\n\t\t\tvac.subVectors( c, a );\n\t\t\tvap.subVectors( p, a );\n\t\t\tvar d1 = vab.dot( vap );\n\t\t\tvar d2 = vac.dot( vap );\n\t\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\t\treturn target.copy( a );\n\n\t\t\t}\n\n\t\t\tvbp.subVectors( p, b );\n\t\t\tvar d3 = vab.dot( vbp );\n\t\t\tvar d4 = vac.dot( vbp );\n\t\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\t\treturn target.copy( b );\n\n\t\t\t}\n\n\t\t\tvar vc = d1 * d4 - d3 * d2;\n\t\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\t\treturn target.copy( a ).addScaledVector( vab, v );\n\n\t\t\t}\n\n\t\t\tvcp.subVectors( p, c );\n\t\t\tvar d5 = vab.dot( vcp );\n\t\t\tvar d6 = vac.dot( vcp );\n\t\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\t\treturn target.copy( c );\n\n\t\t\t}\n\n\t\t\tvar vb = d5 * d2 - d1 * d6;\n\t\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\t\treturn target.copy( a ).addScaledVector( vac, w );\n\n\t\t\t}\n\n\t\t\tvar va = d3 * d6 - d5 * d4;\n\t\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t\tvbc.subVectors( c, b );\n\t\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\t\treturn target.copy( b ).addScaledVector( vbc, w ); // edge region of BC\n\n\t\t\t}\n\n\t\t\t// face region\n\t\t\tvar denom = 1 / ( va + vb + vc );\n\t\t\t// u = va * denom\n\t\t\tv = vb * denom;\n\t\t\tw = vc * denom;\n\t\t\treturn target.copy( a ).addScaledVector( vab, v ).addScaledVector( vac, w );\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n} );\n\n\nexport { Triangle };\n","/**\n * @author mrdoob / http://mrdoob.com/\n * @author philogb / http://blog.thejit.org/\n * @author egraether / http://egraether.com/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n */\n\nfunction Vector2( x, y ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\n}\n\nObject.defineProperties( Vector2.prototype, {\n\n\t\"width\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.x = value;\n\n\t\t}\n\n\t},\n\n\t\"height\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.y = value;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tisVector2: true,\n\n\tset: function ( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function ( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t},\n\n\tcross: function ( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tangle: function () {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tvar angle = Math.atan2( this.y, this.x );\n\n\t\tif ( angle < 0 ) angle += 2 * Math.PI;\n\n\t\treturn angle;\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t},\n\n\trotateAround: function ( center, angle ) {\n\n\t\tvar c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tvar x = this.x - center.x;\n\t\tvar y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n\nexport { Vector2 };\n","import { _Math } from './Math.js';\nimport { Quaternion } from './Quaternion.js';\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author kile / http://kile.stravaganza.org/\n * @author philogb / http://blog.thejit.org/\n * @author mikael emtinger / http://gomo.se/\n * @author egraether / http://egraether.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Vector3( x, y, z ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\tthis.z = z || 0;\n\n}\n\nObject.assign( Vector3.prototype, {\n\n\tisVector3: true,\n\n\tset: function ( x, y, z ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t}\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyVectors: function ( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyEuler: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyEuler( euler ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromEuler( euler ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyAxisAngle: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyAxisAngle( axis, angle ) {\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tvar w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tvar ix = qw * x + qy * z - qz * y;\n\t\tvar iy = qw * y + qz * x - qx * z;\n\t\tvar iz = qw * z + qx * y - qy * x;\n\t\tvar iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t},\n\n\tproject: function ( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t},\n\n\tunproject: function ( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t},\n\n\ttransformDirection: function ( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function ( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t},\n\n\t// TODO lengthSquared?\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tcross: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\treturn this.crossVectors( v, w );\n\n\t\t}\n\n\t\treturn this.crossVectors( this, v );\n\n\t},\n\n\tcrossVectors: function ( a, b ) {\n\n\t\tvar ax = a.x, ay = a.y, az = a.z;\n\t\tvar bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t},\n\n\tprojectOnVector: function ( vector ) {\n\n\t\tvar scalar = vector.dot( this ) / vector.lengthSq();\n\n\t\treturn this.copy( vector ).multiplyScalar( scalar );\n\n\t},\n\n\tprojectOnPlane: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function projectOnPlane( planeNormal ) {\n\n\t\t\tv1.copy( this ).projectOnVector( planeNormal );\n\n\t\t\treturn this.sub( v1 );\n\n\t\t};\n\n\t}(),\n\n\treflect: function () {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function reflect( normal ) {\n\n\t\t\treturn this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t\t};\n\n\t}(),\n\n\tangleTo: function ( v ) {\n\n\t\tvar theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) );\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( _Math.clamp( theta, - 1, 1 ) );\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t},\n\n\tsetFromSpherical: function ( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t},\n\n\tsetFromSphericalCoords: function ( radius, phi, theta ) {\n\n\t\tvar sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCylindrical: function ( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t},\n\n\tsetFromCylindricalCoords: function ( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixPosition: function ( m ) {\n\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixScale: function ( m ) {\n\n\t\tvar sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tvar sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tvar sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixColumn: function ( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n\nexport { Vector3 };\n","'use strict';\n\n// MODULES //\n\nvar isString = require( 'validate.io-string-primitive' );\nvar isNonNegativeInteger = require( 'validate.io-nonnegative-integer' );\nvar ceil = require( 'math-ceil' );\nvar repeat = require( 'utils-repeat-string' );\n\n\n// CONSTANTS //\n\nvar MAX_SAFE_INTEGER = 9007199254740991; // 2**53 - 1\n\n\n// LEFT PAD //\n\n/**\n* FUNCTION: lpad( str, len[, pad] )\n*\tLeft pads a string such that the padded string has a length of at least `len`.\n*\n* @param {String} str - string to pad\n* @param {Number} len - minimum string length\n* @param {String} [pad=' '] - string used to pad\n* @returns {String} padded string\n*/\nfunction lpad( str, len, pad ) {\n\tvar n;\n\tvar p;\n\tif ( !isString( str ) ) {\n\t\tthrow new TypeError( 'invalid input argument. First argument must be a string. Value: `' + str + '`.' );\n\t}\n\tif ( !isNonNegativeInteger( len ) ) {\n\t\tthrow new TypeError( 'invalid input argument. Second argument must be a nonnegative integer. Value: `' + len + '`.' );\n\t}\n\tif ( arguments.length > 2 ) {\n\t\tp = pad;\n\t\tif ( !isString( p ) ) {\n\t\t\tthrow new TypeError( 'invalid input argument. Third argument must be a string. Value: `' + p + '`.' );\n\t\t}\n\t\tif ( p.length === 0 ) {\n\t\t\tthrow new RangeError( 'invalid input argument. Pad string must not be an empty string.' );\n\t\t}\n\t} else {\n\t\tp = ' ';\n\t}\n\tif ( len > MAX_SAFE_INTEGER ) {\n\t\tthrow new RangeError( 'invalid input argument. Output string length exceeds maximum allowed string length.' );\n\t}\n\tn = ( len - str.length ) / p.length;\n\tif ( n <= 0 ) {\n\t\treturn str;\n\t}\n\tn = ceil( n );\n\treturn repeat( p, n ) + str;\n} // end FUNCTION lpad()\n\n\n// EXPORTS //\n\nmodule.exports = lpad;\n","'use strict';\n\n// MODULES //\n\nvar isString = require( 'validate.io-string-primitive' );\nvar isNonNegativeInteger = require( 'validate.io-nonnegative-integer' );\n\n\n// NOTES //\n\n/**\n* The algorithmic trick used in the implementation is to treat string concatenation the same as binary addition (i.e., any natural number (nonnegative integer) can be expressed as a sum of powers of two).\n*\n* For example,\n*\n* n = 10 => 1010 => 2^3 + 2^0 + 2^1 + 2^0\n*\n* We can produce a 10-repeat string by \"adding\" the results of a 8-repeat string and a 2-repeat string.\n*\n* The implementation is then as follows:\n* : Let `s` be the string to be repeated and `o` be an output string.\n* 0) Initialize an output string `o`.\n* 1) Check the least significant bit to determine if the current `s` string should be \"added\" to the output \"total\".\n* - if the bit is a one, add\n* - otherwise, move on\n* 2) Double the string `s` by adding `s` to `s`.\n* 3) Right-shift the bits of `n`.\n* 4) Check if we have shifted off all bits.\n* - if yes, done.\n* - otherwise, move on\n* 5) Repeat 1-4.\n*\n* The result is that, as the string is repeated, we continually check to see if the doubled string is one which we want to add to our \"total\".\n*\n* The algorithm runs in O(log_2(n)) compared to O(n).\n*/\n\n\n// CONSTANTS //\n\nvar MAX_SAFE_INTEGER = 9007199254740991; // 2**53 - 1\n\n\n// REPEAT //\n\n/**\n* FUNCTION: repeat( str, n )\n*\tRepeats a string a specified number of times and returns the concatenated result.\n*\n* @param {String} str - string to repeat\n* @param {Number} n - number of times to repeat the string\n* @returns {String}\n*/\nfunction repeat( str, n ) {\n\tvar rpt;\n\tvar cnt;\n\tif ( !isString( str ) ) {\n\t\tthrow new TypeError( 'invalid input argument. First argument must be a string. Value: `' + str + '`.' );\n\t}\n\tif ( !isNonNegativeInteger( n ) ) {\n\t\tthrow new TypeError( 'invalid input argument. Second argument must be a nonnegative integer. Value: `' + n + '`.' );\n\t}\n\tif ( str.length === 0 || n === 0 ) {\n\t\treturn '';\n\t}\n\t// Check that output string will not exceed the maximum string length:\n\tif ( str.length * n > MAX_SAFE_INTEGER ) {\n\t\tthrow new RangeError( 'invalid input argument. Output string length exceeds maximum allowed string length.' );\n\t}\n\trpt = '';\n\tcnt = n;\n\tfor( ; ; ) {\n\t\t// If the count is odd, append the current concatenated string:\n\t\tif ( (cnt&1) === 1 ) {\n\t\t\trpt += str;\n\t\t}\n\t\t// Right-shift the bits:\n\t\tcnt >>>= 1;\n\t\tif ( cnt === 0 ) {\n\t\t\tbreak;\n\t\t}\n\t\t// Double the string:\n\t\tstr += str;\n\t}\n\treturn rpt;\n} // end FUNCTION repeat()\n\n\n// EXPORTS //\n\nmodule.exports = repeat;\n","'use strict';\n\n// MODULES //\n\nvar isString = require( 'validate.io-string-primitive' );\nvar isNonNegativeInteger = require( 'validate.io-nonnegative-integer' );\nvar ceil = require( 'math-ceil' );\nvar repeat = require( 'utils-repeat-string' );\n\n\n// CONSTANTS //\n\nvar MAX_SAFE_INTEGER = 9007199254740991; // 2**53 - 1\n\n\n// RIGHT PAD //\n\n/**\n* FUNCTION: rpad( str, len[, pad] )\n*\tRight pads a string such that the padded string has a length of at least `len`.\n*\n* @param {String} str - string to pad\n* @param {Number} len - minimum string length\n* @param {String} [pad=' '] - string used to pad\n* @returns {String} padded string\n*/\nfunction rpad( str, len, pad ) {\n\tvar n;\n\tvar p;\n\tif ( !isString( str ) ) {\n\t\tthrow new TypeError( 'invalid input argument. First argument must be a string. Value: `' + str + '`.' );\n\t}\n\tif ( !isNonNegativeInteger( len ) ) {\n\t\tthrow new TypeError( 'invalid input argument. Second argument must be a nonnegative integer. Value: `' + len + '`.' );\n\t}\n\tif ( arguments.length > 2 ) {\n\t\tp = pad;\n\t\tif ( !isString( p ) ) {\n\t\t\tthrow new TypeError( 'invalid input argument. Third argument must be a string. Value: `' + p + '`.' );\n\t\t}\n\t\tif ( p.length === 0 ) {\n\t\t\tthrow new RangeError( 'invalid input argument. Pad string must not be an empty string.' );\n\t\t}\n\t} else {\n\t\tp = ' ';\n\t}\n\tif ( len > MAX_SAFE_INTEGER ) {\n\t\tthrow new RangeError( 'invalid input argument. Output string length exceeds maximum allowed string length.' );\n\t}\n\tn = ( len - str.length ) / p.length;\n\tif ( n <= 0 ) {\n\t\treturn str;\n\t}\n\tn = ceil( n );\n\treturn str + repeat( p, n );\n} // end FUNCTION rpad()\n\n\n// EXPORTS //\n\nmodule.exports = rpad;\n","/**\n*\n*\tVALIDATE: integer\n*\n*\n*\tDESCRIPTION:\n*\t\t- Validates if a value is an integer.\n*\n*\n*\tNOTES:\n*\t\t[1]\n*\n*\n*\tTODO:\n*\t\t[1]\n*\n*\n*\tLICENSE:\n*\t\tMIT\n*\n*\tCopyright (c) 2014. Athan Reines.\n*\n*\n*\tAUTHOR:\n*\t\tAthan Reines. kgryte@gmail.com. 2014.\n*\n*/\n\n'use strict';\n\n// MODULES //\n\nvar isNumber = require( 'validate.io-number' );\n\n\n// ISINTEGER //\n\n/**\n* FUNCTION: isInteger( value )\n*\tValidates if a value is an integer.\n*\n* @param {Number} value - value to be validated\n* @returns {Boolean} boolean indicating whether value is an integer\n*/\nfunction isInteger( value ) {\n\treturn isNumber( value ) && value%1 === 0;\n} // end FUNCTION isInteger()\n\n\n// EXPORTS //\n\nmodule.exports = isInteger;\n","/**\n*\n*\tVALIDATE: nonnegative-integer\n*\n*\n*\tDESCRIPTION:\n*\t\t- Validates if a value is a nonnegative integer.\n*\n*\n*\tNOTES:\n*\t\t[1]\n*\n*\n*\tTODO:\n*\t\t[1]\n*\n*\n*\tLICENSE:\n*\t\tMIT\n*\n*\tCopyright (c) 2015. Athan Reines.\n*\n*\n*\tAUTHOR:\n*\t\tAthan Reines. kgryte@gmail.com. 2015.\n*\n*/\n\n'use strict';\n\n// MODULES //\n\nvar isInteger = require( 'validate.io-integer' );\n\n\n// IS NONNEGATIVE INTEGER //\n\n/**\n* FUNCTION: isNonNegativeInteger( value )\n*\tValidates if a value is a nonnegative integer.\n*\n* @param {*} value - value to be validated\n* @returns {Boolean} boolean indicating if a value is a nonnegative integer\n*/\nfunction isNonNegativeInteger( value ) {\n\treturn isInteger( value ) && value >= 0;\n} // end FUNCTION isNonNegativeInteger()\n\n\n// EXPORTS //\n\nmodule.exports = isNonNegativeInteger;\n","/**\n*\n*\tVALIDATE: number\n*\n*\n*\tDESCRIPTION:\n*\t\t- Validates if a value is a number.\n*\n*\n*\tNOTES:\n*\t\t[1]\n*\n*\n*\tTODO:\n*\t\t[1]\n*\n*\n*\tLICENSE:\n*\t\tMIT\n*\n*\tCopyright (c) 2014. Athan Reines.\n*\n*\n*\tAUTHOR:\n*\t\tAthan Reines. kgryte@gmail.com. 2014.\n*\n*/\n\n'use strict';\n\n/**\n* FUNCTION: isNumber( value )\n*\tValidates if a value is a number.\n*\n* @param {*} value - value to be validated\n* @returns {Boolean} boolean indicating whether value is a number\n*/\nfunction isNumber( value ) {\n\treturn ( typeof value === 'number' || Object.prototype.toString.call( value ) === '[object Number]' ) && value.valueOf() === value.valueOf();\n} // end FUNCTION isNumber()\n\n\n// EXPORTS //\n\nmodule.exports = isNumber;\n","'use strict';\n\n/**\n* Tests if a value is a string primitive.\n*\n* @param {*} value - value to test\n* @returns {Boolean} boolean indicating if a value is a string primitive\n*/\nfunction isString( value ) {\n\treturn typeof value === 'string';\n} // end FUNCTION isString()\n\n\n// EXPORTS //\n\nmodule.exports = isString;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","export * from './cameras/cameras';\r\nexport * from './controls/controls';\r\nexport * from './core/core';\r\nexport * from './geometries/geometries';\r\nexport * from './helpers/helpers';\r\nexport * from './loaders/loaders';\r\nexport * from './models/models';\r\nexport * from './parsers/parsers';\r\nexport * from './presets/presets';\r\nexport * from './shaders/shaders';\r\nexport * from './widgets/widgets';\r\n\r\nimport { Raycaster } from 'three/src/core/Raycaster';\r\n\r\nconst packageVersion = require('../package.json').version;\r\nconst d3Version = require('../node_modules/three/package.json').version;\r\nwindow.console.log(`ami ${packageVersion} (three ${d3Version})`);","import Orthographic, { camerasOrthographic } from './cameras.orthographic';\r\n\r\nexport { Orthographic as OrthographicCamera, camerasOrthographic as orthographicCameraFactory };\r\n","import Intersections from '../core/core.intersections';\r\nimport Validators from '../core/core.validators';\r\n\r\n/**\r\n * Orthographic camera from THREE.JS with some extra convenience\r\n * functionalities.\r\n *\r\n * @example\r\n * //\r\n * //\r\n *\r\n * @module cameras/orthographic\r\n */\r\n\r\nconst camerasOrthographic = (three = window.THREE) => {\r\n if (three === undefined || three.OrthographicCamera === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = three.OrthographicCamera;\r\n return class extends Constructor {\r\n constructor(left, right, top, bottom, near, far) {\r\n super(left, right, top, bottom, near, far);\r\n\r\n this._front = null;\r\n this._back = null;\r\n\r\n this._directions = [\r\n new three.Vector3(1, 0, 0),\r\n new three.Vector3(0, 1, 0),\r\n new three.Vector3(0, 0, 1),\r\n ];\r\n\r\n this._directionsLabel = [\r\n 'A',\r\n 'P', // TOP/BOTTOM\r\n 'L',\r\n 'R', // LEFT/RIGHT\r\n 'I',\r\n 'S', // FROM/TO\r\n ];\r\n\r\n this._orientation = 'default';\r\n this._convention = 'radio';\r\n this._stackOrientation = 0;\r\n\r\n this._right = null;\r\n this._up = null;\r\n this._direction = null;\r\n\r\n this._controls = null;\r\n this._box = null;\r\n this._canvas = {\r\n width: null,\r\n height: null,\r\n };\r\n\r\n this._fromFront = true;\r\n this._angle = 0;\r\n }\r\n\r\n /**\r\n * Initialize orthographic camera variables\r\n */\r\n init(xCosine, yCosine, zCosine, controls, box, canvas) {\r\n // DEPRECATION NOTICE\r\n window.console.warn(\r\n `cameras.orthographic.init(...) is deprecated.\r\n Use .cosines, .controls, .box and .canvas instead.`\r\n );\r\n\r\n //\r\n if (\r\n !(\r\n Validators.vector3(xCosine) &&\r\n Validators.vector3(yCosine) &&\r\n Validators.vector3(zCosine) &&\r\n Validators.box(box) &&\r\n controls\r\n )\r\n ) {\r\n window.console.log('Invalid input provided.');\r\n\r\n return false;\r\n }\r\n\r\n this._right = xCosine;\r\n this._up = this._adjustTopDirection(xCosine, yCosine);\r\n this._direction = new three.Vector3().crossVectors(this._right, this._up);\r\n this._controls = controls;\r\n this._box = box;\r\n this._canvas = canvas;\r\n\r\n let ray = {\r\n position: this._box.center,\r\n direction: this._direction,\r\n };\r\n\r\n let intersections = this._orderIntersections(\r\n Intersections.rayBox(ray, this._box),\r\n this._direction\r\n );\r\n this._front = intersections[0];\r\n this._back = intersections[1];\r\n\r\n // set default values\r\n this.up.set(this._up.x, this._up.y, this._up.z);\r\n this._updateCanvas();\r\n this._updatePositionAndTarget(this._front, this._back);\r\n this._updateMatrices();\r\n this._updateDirections();\r\n }\r\n\r\n update() {\r\n // http://www.grahamwideman.com/gw/brain/orientation/orientterms.htm\r\n // do magics depending on orientation and convention\r\n // also needs a default mode\r\n\r\n if (this._orientation === 'default') {\r\n switch (this._getMaxIndex(this._directions[2])) {\r\n case 0:\r\n this._orientation = 'sagittal';\r\n break;\r\n\r\n case 1:\r\n this._orientation = 'coronal';\r\n break;\r\n\r\n case 2:\r\n this._orientation = 'axial';\r\n break;\r\n\r\n default:\r\n this._orientation = 'free';\r\n break;\r\n }\r\n }\r\n\r\n if (this._orientation === 'free') {\r\n this._right = this._directions[0];\r\n this._up = this._directions[1];\r\n this._direction = this._directions[2];\r\n } else {\r\n let leftIndex = this.leftDirection();\r\n let leftDirection = this._directions[leftIndex];\r\n let posteriorIndex = this.posteriorDirection();\r\n let posteriorDirection = this._directions[posteriorIndex];\r\n let superiorIndex = this.superiorDirection();\r\n let superiorDirection = this._directions[superiorIndex];\r\n\r\n if (this._convention === 'radio') {\r\n switch (this._orientation) {\r\n case 'axial':\r\n // up vector is 'anterior'\r\n if (posteriorDirection.y > 0) {\r\n posteriorDirection.negate();\r\n }\r\n\r\n // looking towards superior\r\n if (superiorDirection.z < 0) {\r\n superiorDirection.negate();\r\n }\r\n\r\n //\r\n this._right = leftDirection; // does not matter right/left\r\n this._up = posteriorDirection;\r\n this._direction = superiorDirection;\r\n break;\r\n\r\n case 'coronal':\r\n // up vector is 'superior'\r\n if (superiorDirection.z < 0) {\r\n superiorDirection.negate();\r\n }\r\n\r\n // looking towards posterior\r\n if (posteriorDirection.y < 0) {\r\n posteriorDirection.negate();\r\n }\r\n\r\n //\r\n this._right = leftDirection; // does not matter right/left\r\n this._up = superiorDirection;\r\n this._direction = posteriorDirection;\r\n break;\r\n\r\n case 'sagittal':\r\n // up vector is 'superior'\r\n if (superiorDirection.z < 0) {\r\n superiorDirection.negate();\r\n }\r\n\r\n // looking towards right\r\n if (leftDirection.x > 0) {\r\n leftDirection.negate();\r\n }\r\n\r\n //\r\n this._right = posteriorDirection; // does not matter right/left\r\n this._up = superiorDirection;\r\n this._direction = leftDirection;\r\n\r\n break;\r\n\r\n default:\r\n window.console.warn(\r\n `\"${this._orientation}\" orientation is not valid.\r\n (choices: axial, coronal, sagittal)`\r\n );\r\n break;\r\n }\r\n } else if (this._convention === 'neuro') {\r\n switch (this._orientation) {\r\n case 'axial':\r\n // up vector is 'anterior'\r\n if (posteriorDirection.y > 0) {\r\n posteriorDirection.negate();\r\n }\r\n\r\n // looking towards inferior\r\n if (superiorDirection.z > 0) {\r\n superiorDirection.negate();\r\n }\r\n\r\n //\r\n this._right = leftDirection; // does not matter right/left\r\n this._up = posteriorDirection;\r\n this._direction = superiorDirection;\r\n break;\r\n\r\n case 'coronal':\r\n // up vector is 'superior'\r\n if (superiorDirection.z < 0) {\r\n superiorDirection.negate();\r\n }\r\n\r\n // looking towards anterior\r\n if (posteriorDirection.y > 0) {\r\n posteriorDirection.negate();\r\n }\r\n\r\n //\r\n this._right = leftDirection; // does not matter right/left\r\n this._up = superiorDirection;\r\n this._direction = posteriorDirection;\r\n break;\r\n\r\n case 'sagittal':\r\n // up vector is 'superior'\r\n if (superiorDirection.z < 0) {\r\n superiorDirection.negate();\r\n }\r\n\r\n // looking towards right\r\n if (leftDirection.x > 0) {\r\n leftDirection.negate();\r\n }\r\n\r\n //\r\n this._right = posteriorDirection; // does not matter right/left\r\n this._up = superiorDirection;\r\n this._direction = leftDirection;\r\n\r\n break;\r\n\r\n default:\r\n window.console.warn(\r\n `\"${this._orientation}\" orientation is not valid.\r\n (choices: axial, coronal, sagittal)`\r\n );\r\n break;\r\n }\r\n } else {\r\n window.console.warn(`${this._convention} is not valid (choices: radio, neuro)`);\r\n }\r\n }\r\n\r\n // that is what determines left/right\r\n let ray = {\r\n position: this._box.center,\r\n direction: this._direction,\r\n };\r\n\r\n let intersections = this._orderIntersections(\r\n Intersections.rayBox(ray, this._box),\r\n this._direction\r\n );\r\n this._front = intersections[0];\r\n this._back = intersections[1];\r\n\r\n // set default values\r\n this.up.set(this._up.x, this._up.y, this._up.z);\r\n this._updateCanvas();\r\n this._updatePositionAndTarget(this._front, this._back);\r\n this._updateMatrices();\r\n this._updateDirections();\r\n }\r\n\r\n leftDirection() {\r\n return this._findMaxIndex(this._directions, 0);\r\n }\r\n\r\n posteriorDirection() {\r\n return this._findMaxIndex(this._directions, 1);\r\n }\r\n\r\n superiorDirection() {\r\n return this._findMaxIndex(this._directions, 2);\r\n }\r\n\r\n /**\r\n * Invert rows in the current slice.\r\n * Inverting rows in 2 steps:\r\n * * Flip the \"up\" vector\r\n * * Look at the slice from the other side\r\n */\r\n invertRows() {\r\n // flip \"up\" vector\r\n // we flip up first because invertColumns update projectio matrices\r\n this.up.multiplyScalar(-1);\r\n this.invertColumns();\r\n\r\n this._updateDirections();\r\n }\r\n\r\n /**\r\n * Invert rows in the current slice.\r\n * Inverting rows in 1 step:\r\n * * Look at the slice from the other side\r\n */\r\n invertColumns() {\r\n this.center();\r\n // rotate 180 degrees around the up vector...\r\n let oppositePosition = this._oppositePosition(this.position);\r\n\r\n // update posistion and target\r\n // clone is needed because this.position is overwritten in method\r\n this._updatePositionAndTarget(oppositePosition, this.position.clone());\r\n this._updateMatrices();\r\n this._fromFront = !this._fromFront;\r\n\r\n this._angle %= 360;\r\n this._angle = 360 - this._angle;\r\n\r\n this._updateDirections();\r\n }\r\n\r\n /**\r\n * Center slice in the camera FOV.\r\n * It also updates the controllers properly.\r\n * We can center a camera from the front or from the back.\r\n */\r\n center() {\r\n if (this._fromFront) {\r\n this._updatePositionAndTarget(this._front, this._back);\r\n } else {\r\n this._updatePositionAndTarget(this._back, this._front);\r\n }\r\n\r\n this._updateMatrices();\r\n this._updateDirections();\r\n }\r\n\r\n /**\r\n * Pi/2 rotation around the zCosine axis.\r\n * Clock-wise rotation from the user point of view.\r\n */\r\n rotate(angle = null) {\r\n this.center();\r\n\r\n let rotationToApply = 90;\r\n if (angle === null) {\r\n rotationToApply *= -1;\r\n this._angle += 90;\r\n } else {\r\n rotationToApply = 360 - (angle - this._angle);\r\n this._angle = angle;\r\n }\r\n\r\n this._angle %= 360;\r\n\r\n // Rotate the up vector around the \"zCosine\"\r\n let rotation = new three.Matrix4().makeRotationAxis(\r\n this._direction,\r\n (rotationToApply * Math.PI) / 180\r\n );\r\n this.up.applyMatrix4(rotation);\r\n\r\n this._updateMatrices();\r\n this._updateDirections();\r\n }\r\n\r\n // dimensions[0] // width\r\n // dimensions[1] // height\r\n // direction= 0 width, 1 height, 2 best\r\n // factor\r\n fitBox(direction = 0, factor = 1.5) {\r\n //\r\n // if (!(dimensions && dimensions.length >= 2)) {\r\n // window.console.log('Invalid dimensions container.');\r\n // window.console.log(dimensions);\r\n\r\n // return false;\r\n // }\r\n\r\n //\r\n let zoom = 1;\r\n\r\n // update zoom\r\n switch (direction) {\r\n case 0:\r\n zoom = factor * this._computeZoom(this._canvas.width, this._right);\r\n break;\r\n case 1:\r\n zoom = factor * this._computeZoom(this._canvas.height, this._up);\r\n break;\r\n case 2:\r\n zoom =\r\n factor *\r\n Math.min(\r\n this._computeZoom(this._canvas.width, this._right),\r\n this._computeZoom(this._canvas.height, this._up)\r\n );\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (!zoom) {\r\n return false;\r\n }\r\n\r\n this.zoom = zoom;\r\n\r\n this.center();\r\n }\r\n\r\n _adjustTopDirection(horizontalDirection, verticalDirection) {\r\n const vMaxIndex = this._getMaxIndex(verticalDirection);\r\n\r\n // should handle vMax index === 0\r\n if (\r\n (vMaxIndex === 2 && verticalDirection.getComponent(vMaxIndex) < 0) ||\r\n (vMaxIndex === 1 && verticalDirection.getComponent(vMaxIndex) > 0) ||\r\n (vMaxIndex === 0 && verticalDirection.getComponent(vMaxIndex) > 0)\r\n ) {\r\n verticalDirection.negate();\r\n }\r\n\r\n return verticalDirection;\r\n }\r\n\r\n _getMaxIndex(vector) {\r\n // init with X value\r\n let maxValue = Math.abs(vector.x);\r\n let index = 0;\r\n\r\n if (Math.abs(vector.y) > maxValue) {\r\n maxValue = Math.abs(vector.y);\r\n index = 1;\r\n }\r\n\r\n if (Math.abs(vector.z) > maxValue) {\r\n index = 2;\r\n }\r\n\r\n return index;\r\n }\r\n\r\n _findMaxIndex(directions, target) {\r\n // get index of the most superior direction\r\n let maxIndices = this._getMaxIndices(directions);\r\n\r\n for (let i = 0; i < maxIndices.length; i++) {\r\n if (maxIndices[i] === target) {\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n _getMaxIndices(directions) {\r\n let indices = [];\r\n indices.push(this._getMaxIndex(directions[0]));\r\n indices.push(this._getMaxIndex(directions[1]));\r\n indices.push(this._getMaxIndex(directions[2]));\r\n\r\n return indices;\r\n }\r\n\r\n _orderIntersections(intersections, direction) {\r\n const ordered = intersections[0].dot(direction) < intersections[1].dot(direction);\r\n\r\n if (!ordered) {\r\n return [intersections[1], intersections[0]];\r\n }\r\n\r\n return intersections;\r\n }\r\n\r\n _updateCanvas() {\r\n let camFactor = 2;\r\n this.left = -this._canvas.width / camFactor;\r\n this.right = this._canvas.width / camFactor;\r\n this.top = this._canvas.height / camFactor;\r\n this.bottom = -this._canvas.height / camFactor;\r\n\r\n this._updateMatrices();\r\n this.controls.handleResize();\r\n }\r\n\r\n _oppositePosition(position) {\r\n let oppositePosition = position.clone();\r\n // center world postion around box center\r\n oppositePosition.sub(this._box.center);\r\n // rotate\r\n let rotation = new three.Matrix4().makeRotationAxis(this.up, Math.PI);\r\n\r\n oppositePosition.applyMatrix4(rotation);\r\n // translate back to world position\r\n oppositePosition.add(this._box.center);\r\n return oppositePosition;\r\n }\r\n\r\n _computeZoom(dimension, direction) {\r\n if (!(dimension && dimension > 0)) {\r\n window.console.log('Invalid dimension provided.');\r\n window.console.log(dimension);\r\n return false;\r\n }\r\n\r\n // ray\r\n let ray = {\r\n position: this._box.center.clone(),\r\n direction: direction,\r\n };\r\n\r\n let intersections = Intersections.rayBox(ray, this._box);\r\n if (intersections.length < 2) {\r\n window.console.log('Can not adjust the camera ( < 2 intersections).');\r\n window.console.log(ray);\r\n window.console.log(this._box);\r\n return false;\r\n }\r\n\r\n return dimension / intersections[0].distanceTo(intersections[1]);\r\n }\r\n\r\n _updatePositionAndTarget(position, target) {\r\n // position\r\n this.position.set(position.x, position.y, position.z);\r\n\r\n // targets\r\n this.lookAt(target.x, target.y, target.z);\r\n this._controls.target.set(target.x, target.y, target.z);\r\n }\r\n\r\n _updateMatrices() {\r\n this._controls.update();\r\n // THEN camera\r\n this.updateProjectionMatrix();\r\n this.updateMatrixWorld();\r\n }\r\n\r\n _updateLabels() {\r\n this._directionsLabel = [\r\n this._vector2Label(this._up),\r\n this._vector2Label(this._up.clone().negate()),\r\n this._vector2Label(this._right),\r\n this._vector2Label(this._right.clone().negate()),\r\n this._vector2Label(this._direction),\r\n this._vector2Label(this._direction.clone().negate()),\r\n ];\r\n }\r\n\r\n _vector2Label(direction) {\r\n const index = this._getMaxIndex(direction);\r\n // set vector max value to 1\r\n const scaledDirection = direction\r\n .clone()\r\n .divideScalar(Math.abs(direction.getComponent(index)));\r\n const delta = 0.2;\r\n let label = '';\r\n\r\n // loop through components of the vector\r\n for (let i = 0; i < 3; i++) {\r\n if (i === 0) {\r\n if (scaledDirection.getComponent(i) + delta >= 1) {\r\n label += 'L';\r\n } else if (scaledDirection.getComponent(i) - delta <= -1) {\r\n label += 'R';\r\n }\r\n }\r\n\r\n if (i === 1) {\r\n if (scaledDirection.getComponent(i) + delta >= 1) {\r\n label += 'P';\r\n } else if (scaledDirection.getComponent(i) - delta <= -1) {\r\n label += 'A';\r\n }\r\n }\r\n\r\n if (i === 2) {\r\n if (scaledDirection.getComponent(i) + delta >= 1) {\r\n label += 'S';\r\n } else if (scaledDirection.getComponent(i) - delta <= -1) {\r\n label += 'I';\r\n }\r\n }\r\n }\r\n\r\n return label;\r\n }\r\n\r\n _updateDirections() {\r\n // up is correct\r\n this._up = this.up.clone();\r\n\r\n // direction\r\n let pLocal = new three.Vector3(0, 0, -1);\r\n let pWorld = pLocal.applyMatrix4(this.matrixWorld);\r\n this._direction = pWorld.sub(this.position).normalize();\r\n\r\n // right\r\n this._right = new three.Vector3().crossVectors(this._direction, this.up);\r\n\r\n // update labels accordingly\r\n this._updateLabels();\r\n }\r\n\r\n set controls(controls) {\r\n this._controls = controls;\r\n }\r\n\r\n get controls() {\r\n return this._controls;\r\n }\r\n\r\n set box(box) {\r\n this._box = box;\r\n }\r\n\r\n get box() {\r\n return this._box;\r\n }\r\n\r\n set canvas(canvas) {\r\n this._canvas = canvas;\r\n this._updateCanvas();\r\n }\r\n\r\n get canvas() {\r\n return this._canvas;\r\n }\r\n\r\n set angle(angle) {\r\n this.rotate(angle);\r\n }\r\n\r\n get angle() {\r\n return this._angle;\r\n }\r\n\r\n set directions(directions) {\r\n this._directions = directions;\r\n }\r\n\r\n get directions() {\r\n return this._directions;\r\n }\r\n\r\n set convention(convention) {\r\n this._convention = convention;\r\n }\r\n\r\n get convention() {\r\n return this._convention;\r\n }\r\n\r\n set orientation(orientation) {\r\n this._orientation = orientation;\r\n }\r\n\r\n get orientation() {\r\n return this._orientation;\r\n }\r\n\r\n set directionsLabel(directionsLabel) {\r\n this._directionsLabel = directionsLabel;\r\n }\r\n\r\n get directionsLabel() {\r\n return this._directionsLabel;\r\n }\r\n\r\n set stackOrientation(stackOrientation) {\r\n this._stackOrientation = stackOrientation;\r\n\r\n if (this._stackOrientation === 0) {\r\n this._orientation = 'default';\r\n } else {\r\n const maxIndex = this._getMaxIndex(this._directions[(this._stackOrientation + 2) % 3]);\r\n\r\n if (maxIndex === 0) {\r\n this._orientation = 'sagittal';\r\n } else if (maxIndex === 1) {\r\n this._orientation = 'coronal';\r\n } else if (maxIndex === 2) {\r\n this._orientation = 'axial';\r\n }\r\n }\r\n }\r\n\r\n get stackOrientation() {\r\n //\r\n if (this._orientation === 'default') {\r\n this._stackOrientation = 0;\r\n } else {\r\n let maxIndex = this._getMaxIndex(this._direction);\r\n\r\n if (maxIndex === this._getMaxIndex(this._directions[2])) {\r\n this._stackOrientation = 0;\r\n } else if (maxIndex === this._getMaxIndex(this._directions[0])) {\r\n this._stackOrientation = 1;\r\n } else if (maxIndex === this._getMaxIndex(this._directions[1])) {\r\n this._stackOrientation = 2;\r\n }\r\n }\r\n\r\n return this._stackOrientation;\r\n }\r\n };\r\n};\r\n\r\n// export factory\r\nexport { camerasOrthographic };\r\n// default export to\r\nexport default camerasOrthographic();\r\n","import ControlsTrackball, { trackball } from './controls.trackball';\r\nimport TrackballOrtho, { trackballOrtho } from './controls.trackballortho';\r\nimport ControlsOrbit, { orbit } from './controls.orbit';\r\n\r\nexport {\r\n ControlsTrackball as TrackballControl,\r\n trackball as trackballControlFactory,\r\n TrackballOrtho as TrackballOrthoControl,\r\n trackballOrtho as trackballOrthoControlFactory,\r\n ControlsOrbit as OrbitControl,\r\n orbit as orbitControlFactory,\r\n};\r\n","/**\r\n * @author qiao / https://github.com/qiao\r\n * @author mrdoob / http://mrdoob.com\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author WestLangley / http://github.com/WestLangley\r\n * @author erich666 / http://erichaines.com\r\n */\r\n\r\n// This set of controls performs orbiting, dollying (zooming), and panning.\r\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\r\n//\r\n// Orbit - left mouse / touch: one-finger move\r\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\r\n// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\r\n\r\n// adapted from https://github.com/mrdoob/three.js/blob/dev/examples/jsm/controls/OrbitControls.js\r\n\r\nconst orbit = (three = window.THREE) => {\r\n if (three === undefined || three.EventDispatcher === undefined) {\r\n return null;\r\n }\r\n\r\nvar OrbitControls = function ( object, domElement ) {\r\n\r\n\tthis.object = object;\r\n\r\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\r\n\r\n\t// Set to false to disable this control\r\n\tthis.enabled = true;\r\n\r\n\t// Set to prevent default event\r\n\tthis.preventDefault = true;\r\n\r\n\t// \"target\" sets the location of focus, where the object orbits around\r\n\tthis.target = new three.Vector3();\r\n\r\n\t// How far you can dolly in and out ( PerspectiveCamera only )\r\n\tthis.minDistance = 0;\r\n\tthis.maxDistance = Infinity;\r\n\r\n\t// How far you can zoom in and out ( OrthographicCamera only )\r\n\tthis.minZoom = 0;\r\n\tthis.maxZoom = Infinity;\r\n\r\n\t// How far you can orbit vertically, upper and lower limits.\r\n\t// Range is 0 to Math.PI radians.\r\n\tthis.minPolarAngle = 0; // radians\r\n\tthis.maxPolarAngle = Math.PI; // radians\r\n\r\n\t// How far you can orbit horizontally, upper and lower limits.\r\n\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\r\n\tthis.minAzimuthAngle = - Infinity; // radians\r\n\tthis.maxAzimuthAngle = Infinity; // radians\r\n\r\n\t// Set to true to enable damping (inertia)\r\n\t// If damping is enabled, you must call controls.update() in your animation loop\r\n\tthis.enableDamping = false;\r\n\tthis.dampingFactor = 0.25;\r\n\r\n\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\r\n\t// Set to false to disable zooming\r\n\tthis.enableZoom = true;\r\n\tthis.zoomSpeed = 1.0;\r\n\r\n\t// Set to false to disable rotating\r\n\tthis.enableRotate = true;\r\n\tthis.rotateSpeed = 1.0;\r\n\r\n\t// Set to false to disable panning\r\n\tthis.enablePan = true;\r\n\tthis.panSpeed = 1.0;\r\n\tthis.screenSpacePanning = false; // if true, pan in screen-space\r\n\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\r\n\r\n\t// Set to true to automatically rotate around the target\r\n\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\r\n\tthis.autoRotate = false;\r\n\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\r\n\r\n\t// Set to false to disable use of the keys\r\n\tthis.enableKeys = true;\r\n\r\n\t// The four arrow keys\r\n\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\r\n\r\n\t// Mouse buttons\r\n\tthis.mouseButtons = { LEFT: three.MOUSE.LEFT, MIDDLE: three.MOUSE.MIDDLE, RIGHT: three.MOUSE.RIGHT };\r\n\r\n\t// for reset\r\n\tthis.target0 = this.target.clone();\r\n\tthis.position0 = this.object.position.clone();\r\n\tthis.zoom0 = this.object.zoom;\r\n\r\n\t//\r\n\t// public methods\r\n\t//\r\n\r\n\tthis.getPolarAngle = function () {\r\n\r\n\t\treturn spherical.phi;\r\n\r\n\t};\r\n\r\n\tthis.getAzimuthalAngle = function () {\r\n\r\n\t\treturn spherical.theta;\r\n\r\n\t};\r\n\r\n\tthis.saveState = function () {\r\n\r\n\t\tscope.target0.copy( scope.target );\r\n\t\tscope.position0.copy( scope.object.position );\r\n\t\tscope.zoom0 = scope.object.zoom;\r\n\r\n\t};\r\n\r\n\tthis.reset = function () {\r\n\r\n\t\tscope.target.copy( scope.target0 );\r\n\t\tscope.object.position.copy( scope.position0 );\r\n\t\tscope.object.zoom = scope.zoom0;\r\n\r\n\t\tscope.object.updateProjectionMatrix();\r\n\t\tscope.dispatchEvent( changeEvent );\r\n\r\n\t\tscope.update();\r\n\r\n\t\tstate = STATE.NONE;\r\n\r\n };\r\n \r\n // this method is there to match the Trackball API\r\n this.handleResize = function () {\r\n\r\n }\r\n\r\n\t// this method is exposed, but perhaps it would be better if we can make it private...\r\n\tthis.update = function () {\r\n\r\n\t\tvar offset = new three.Vector3();\r\n\r\n\t\t// so camera.up is the orbit axis\r\n\t\tvar quat = new three.Quaternion().setFromUnitVectors( object.up, new three.Vector3( 0, 1, 0 ) );\r\n\t\tvar quatInverse = quat.clone().inverse();\r\n\r\n\t\tvar lastPosition = new three.Vector3();\r\n\t\tvar lastQuaternion = new three.Quaternion();\r\n\r\n\t\treturn function update() {\r\n\r\n\t\t\tvar position = scope.object.position;\r\n\r\n\t\t\toffset.copy( position ).sub( scope.target );\r\n\r\n\t\t\t// rotate offset to \"y-axis-is-up\" space\r\n\t\t\toffset.applyQuaternion( quat );\r\n\r\n\t\t\t// angle from z-axis around y-axis\r\n\t\t\tspherical.setFromVector3( offset );\r\n\r\n\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\r\n\r\n\t\t\t\trotateLeft( getAutoRotationAngle() );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tspherical.theta += sphericalDelta.theta;\r\n\t\t\tspherical.phi += sphericalDelta.phi;\r\n\r\n\t\t\t// restrict theta to be between desired limits\r\n\t\t\tspherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) );\r\n\r\n\t\t\t// restrict phi to be between desired limits\r\n\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\r\n\r\n\t\t\tspherical.makeSafe();\r\n\r\n\r\n\t\t\tspherical.radius *= scale;\r\n\r\n\t\t\t// restrict radius to be between desired limits\r\n\t\t\tspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\r\n\r\n\t\t\t// move target to panned location\r\n\t\t\tscope.target.add( panOffset );\r\n\r\n\t\t\toffset.setFromSpherical( spherical );\r\n\r\n\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\r\n\t\t\toffset.applyQuaternion( quatInverse );\r\n\r\n\t\t\tposition.copy( scope.target ).add( offset );\r\n\r\n\t\t\tscope.object.lookAt( scope.target );\r\n\r\n\t\t\tif ( scope.enableDamping === true ) {\r\n\r\n\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\r\n\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\r\n\r\n\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tsphericalDelta.set( 0, 0, 0 );\r\n\r\n\t\t\t\tpanOffset.set( 0, 0, 0 );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tscale = 1;\r\n\r\n\t\t\t// update condition is:\r\n\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\r\n\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\r\n\r\n\t\t\tif ( zoomChanged ||\r\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\r\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\r\n\r\n\t\t\t\tscope.dispatchEvent( changeEvent );\r\n\r\n\t\t\t\tlastPosition.copy( scope.object.position );\r\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\r\n\t\t\t\tzoomChanged = false;\r\n\r\n\t\t\t\treturn true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\r\n\t\t};\r\n\r\n\t}();\r\n\r\n\tthis.dispose = function () {\r\n\r\n\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );\r\n\t\tscope.domElement.removeEventListener( 'mousedown', onMouseDown, false );\r\n\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel, false );\r\n\r\n\t\tscope.domElement.removeEventListener( 'touchstart', onTouchStart, false );\r\n\t\tscope.domElement.removeEventListener( 'touchend', onTouchEnd, false );\r\n\t\tscope.domElement.removeEventListener( 'touchmove', onTouchMove, false );\r\n\r\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\r\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\r\n\r\n\t\twindow.removeEventListener( 'keydown', onKeyDown, false );\r\n\r\n\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\r\n\r\n\t};\r\n\r\n\t//\r\n\t// internals\r\n\t//\r\n\r\n\tvar scope = this;\r\n\r\n\tvar changeEvent = { type: 'change' };\r\n\tvar startEvent = { type: 'start' };\r\n\tvar endEvent = { type: 'end' };\r\n\r\n\tvar STATE = { NONE: - 1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY_PAN: 4 };\r\n\r\n\tvar state = STATE.NONE;\r\n\r\n\tvar EPS = 0.000001;\r\n\r\n\t// current position in spherical coordinates\r\n\tvar spherical = new three.Spherical();\r\n\tvar sphericalDelta = new three.Spherical();\r\n\r\n\tvar scale = 1;\r\n\tvar panOffset = new three.Vector3();\r\n\tvar zoomChanged = false;\r\n\r\n\tvar rotateStart = new three.Vector2();\r\n\tvar rotateEnd = new three.Vector2();\r\n\tvar rotateDelta = new three.Vector2();\r\n\r\n\tvar panStart = new three.Vector2();\r\n\tvar panEnd = new three.Vector2();\r\n\tvar panDelta = new three.Vector2();\r\n\r\n\tvar dollyStart = new three.Vector2();\r\n\tvar dollyEnd = new three.Vector2();\r\n\tvar dollyDelta = new three.Vector2();\r\n\r\n\tfunction getAutoRotationAngle() {\r\n\r\n\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\r\n\r\n\t}\r\n\r\n\tfunction getZoomScale() {\r\n\r\n\t\treturn Math.pow( 0.95, scope.zoomSpeed );\r\n\r\n\t}\r\n\r\n\tfunction rotateLeft( angle ) {\r\n\r\n\t\tsphericalDelta.theta -= angle;\r\n\r\n\t}\r\n\r\n\tfunction rotateUp( angle ) {\r\n\r\n\t\tsphericalDelta.phi -= angle;\r\n\r\n\t}\r\n\r\n\tvar panLeft = function () {\r\n\r\n\t\tvar v = new three.Vector3();\r\n\r\n\t\treturn function panLeft( distance, objectMatrix ) {\r\n\r\n\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\r\n\t\t\tv.multiplyScalar( - distance );\r\n\r\n\t\t\tpanOffset.add( v );\r\n\r\n\t\t};\r\n\r\n\t}();\r\n\r\n\tvar panUp = function () {\r\n\r\n\t\tvar v = new three.Vector3();\r\n\r\n\t\treturn function panUp( distance, objectMatrix ) {\r\n\r\n\t\t\tif ( scope.screenSpacePanning === true ) {\r\n\r\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\r\n\t\t\t\tv.crossVectors( scope.object.up, v );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tv.multiplyScalar( distance );\r\n\r\n\t\t\tpanOffset.add( v );\r\n\r\n\t\t};\r\n\r\n\t}();\r\n\r\n\t// deltaX and deltaY are in pixels; right and down are positive\r\n\tvar pan = function () {\r\n\r\n\t\tvar offset = new three.Vector3();\r\n\r\n\t\treturn function pan( deltaX, deltaY ) {\r\n\r\n\t\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\r\n\r\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\r\n\r\n\t\t\t\t// perspective\r\n\t\t\t\tvar position = scope.object.position;\r\n\t\t\t\toffset.copy( position ).sub( scope.target );\r\n\t\t\t\tvar targetDistance = offset.length();\r\n\r\n\t\t\t\t// half of the fov is center to top of screen\r\n\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\r\n\r\n\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\r\n\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\r\n\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\r\n\r\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\r\n\r\n\t\t\t\t// orthographic\r\n\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\r\n\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// camera neither orthographic nor perspective\r\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\r\n\t\t\t\tscope.enablePan = false;\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t}();\r\n\r\n\tfunction dollyIn( dollyScale ) {\r\n\r\n\t\tif ( scope.object.isPerspectiveCamera ) {\r\n\r\n\t\t\tscale /= dollyScale;\r\n\r\n\t\t} else if ( scope.object.isOrthographicCamera ) {\r\n\r\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\r\n\t\t\tscope.object.updateProjectionMatrix();\r\n\t\t\tzoomChanged = true;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\r\n\t\t\tscope.enableZoom = false;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction dollyOut( dollyScale ) {\r\n\r\n\t\tif ( scope.object.isPerspectiveCamera ) {\r\n\r\n\t\t\tscale *= dollyScale;\r\n\r\n\t\t} else if ( scope.object.isOrthographicCamera ) {\r\n\r\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\r\n\t\t\tscope.object.updateProjectionMatrix();\r\n\t\t\tzoomChanged = true;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\r\n\t\t\tscope.enableZoom = false;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//\r\n\t// event callbacks - update the object state\r\n\t//\r\n\r\n\tfunction handleMouseDownRotate( event ) {\r\n\r\n\t\t//console.log( 'handleMouseDownRotate' );\r\n\r\n\t\trotateStart.set( event.clientX, event.clientY );\r\n\r\n\t}\r\n\r\n\tfunction handleMouseDownDolly( event ) {\r\n\r\n\t\t//console.log( 'handleMouseDownDolly' );\r\n\r\n\t\tdollyStart.set( event.clientX, event.clientY );\r\n\r\n\t}\r\n\r\n\tfunction handleMouseDownPan( event ) {\r\n\r\n\t\t//console.log( 'handleMouseDownPan' );\r\n\r\n\t\tpanStart.set( event.clientX, event.clientY );\r\n\r\n\t}\r\n\r\n\tfunction handleMouseMoveRotate( event ) {\r\n\r\n\t\t//console.log( 'handleMouseMoveRotate' );\r\n\r\n\t\trotateEnd.set( event.clientX, event.clientY );\r\n\r\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\r\n\r\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\r\n\r\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\r\n\r\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\r\n\r\n\t\trotateStart.copy( rotateEnd );\r\n\r\n\t\tscope.update();\r\n\r\n\t}\r\n\r\n\tfunction handleMouseMoveDolly( event ) {\r\n\r\n\t\t//console.log( 'handleMouseMoveDolly' );\r\n\r\n\t\tdollyEnd.set( event.clientX, event.clientY );\r\n\r\n\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\r\n\r\n\t\tif ( dollyDelta.y > 0 ) {\r\n\r\n\t\t\tdollyIn( getZoomScale() );\r\n\r\n\t\t} else if ( dollyDelta.y < 0 ) {\r\n\r\n\t\t\tdollyOut( getZoomScale() );\r\n\r\n\t\t}\r\n\r\n\t\tdollyStart.copy( dollyEnd );\r\n\r\n\t\tscope.update();\r\n\r\n\t}\r\n\r\n\tfunction handleMouseMovePan( event ) {\r\n\r\n\t\t//console.log( 'handleMouseMovePan' );\r\n\r\n\t\tpanEnd.set( event.clientX, event.clientY );\r\n\r\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\r\n\r\n\t\tpan( panDelta.x, panDelta.y );\r\n\r\n\t\tpanStart.copy( panEnd );\r\n\r\n\t\tscope.update();\r\n\r\n\t}\r\n\r\n\tfunction handleMouseUp( event ) {\r\n\r\n\t\t// console.log( 'handleMouseUp' );\r\n\r\n\t}\r\n\r\n\tfunction handleMouseWheel( event ) {\r\n\r\n\t\t// console.log( 'handleMouseWheel' );\r\n\r\n\t\tif ( event.deltaY < 0 ) {\r\n\r\n\t\t\tdollyOut( getZoomScale() );\r\n\r\n\t\t} else if ( event.deltaY > 0 ) {\r\n\r\n\t\t\tdollyIn( getZoomScale() );\r\n\r\n\t\t}\r\n\r\n\t\tscope.update();\r\n\r\n\t}\r\n\r\n\tfunction handleKeyDown( event ) {\r\n\r\n\t\t//console.log( 'handleKeyDown' );\r\n\r\n\t\tswitch ( event.keyCode ) {\r\n\r\n\t\t\tcase scope.keys.UP:\r\n\t\t\t\tpan( 0, scope.keyPanSpeed );\r\n\t\t\t\tscope.update();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase scope.keys.BOTTOM:\r\n\t\t\t\tpan( 0, - scope.keyPanSpeed );\r\n\t\t\t\tscope.update();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase scope.keys.LEFT:\r\n\t\t\t\tpan( scope.keyPanSpeed, 0 );\r\n\t\t\t\tscope.update();\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase scope.keys.RIGHT:\r\n\t\t\t\tpan( - scope.keyPanSpeed, 0 );\r\n\t\t\t\tscope.update();\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction handleTouchStartRotate( event ) {\r\n\r\n\t\t//console.log( 'handleTouchStartRotate' );\r\n\r\n\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\r\n\r\n\t}\r\n\r\n\tfunction handleTouchStartDollyPan( event ) {\r\n\r\n\t\t//console.log( 'handleTouchStartDollyPan' );\r\n\r\n\t\tif ( scope.enableZoom ) {\r\n\r\n\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\r\n\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\r\n\r\n\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\r\n\r\n\t\t\tdollyStart.set( 0, distance );\r\n\r\n\t\t}\r\n\r\n\t\tif ( scope.enablePan ) {\r\n\r\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\r\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\r\n\r\n\t\t\tpanStart.set( x, y );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction handleTouchMoveRotate( event ) {\r\n\r\n\t\t//console.log( 'handleTouchMoveRotate' );\r\n\r\n\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\r\n\r\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\r\n\r\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\r\n\r\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\r\n\r\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\r\n\r\n\t\trotateStart.copy( rotateEnd );\r\n\r\n\t\tscope.update();\r\n\r\n\t}\r\n\r\n\tfunction handleTouchMoveDollyPan( event ) {\r\n\r\n\t\t//console.log( 'handleTouchMoveDollyPan' );\r\n\r\n\t\tif ( scope.enableZoom ) {\r\n\r\n\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\r\n\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\r\n\r\n\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\r\n\r\n\t\t\tdollyEnd.set( 0, distance );\r\n\r\n\t\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\r\n\r\n\t\t\tdollyIn( dollyDelta.y );\r\n\r\n\t\t\tdollyStart.copy( dollyEnd );\r\n\r\n\t\t}\r\n\r\n\t\tif ( scope.enablePan ) {\r\n\r\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\r\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\r\n\r\n\t\t\tpanEnd.set( x, y );\r\n\r\n\t\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\r\n\r\n\t\t\tpan( panDelta.x, panDelta.y );\r\n\r\n\t\t\tpanStart.copy( panEnd );\r\n\r\n\t\t}\r\n\r\n\t\tscope.update();\r\n\r\n\t}\r\n\r\n\tfunction handleTouchEnd( event ) {\r\n\r\n\t\t//console.log( 'handleTouchEnd' );\r\n\r\n\t}\r\n\r\n\t//\r\n\t// event handlers - FSM: listen for events and reset state\r\n\t//\r\n\r\n\tfunction onMouseDown( event ) {\r\n\r\n\t\tif ( scope.enabled === false ) return;\r\n\r\n\t\tif ( scope.preventDefault === true ) event.preventDefault();\r\n\r\n\t\tswitch ( event.button ) {\r\n\r\n\t\t\tcase scope.mouseButtons.LEFT:\r\n\r\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\r\n\r\n\t\t\t\t\tif ( scope.enablePan === false ) return;\r\n\r\n\t\t\t\t\thandleMouseDownPan( event );\r\n\r\n\t\t\t\t\tstate = STATE.PAN;\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\r\n\r\n\t\t\t\t\thandleMouseDownRotate( event );\r\n\r\n\t\t\t\t\tstate = STATE.ROTATE;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase scope.mouseButtons.MIDDLE:\r\n\r\n\t\t\t\tif ( scope.enableZoom === false ) return;\r\n\r\n\t\t\t\thandleMouseDownDolly( event );\r\n\r\n\t\t\t\tstate = STATE.DOLLY;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase scope.mouseButtons.RIGHT:\r\n\r\n\t\t\t\tif ( scope.enablePan === false ) return;\r\n\r\n\t\t\t\thandleMouseDownPan( event );\r\n\r\n\t\t\t\tstate = STATE.PAN;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\r\n\t\tif ( state !== STATE.NONE ) {\r\n\r\n\t\t\tdocument.addEventListener( 'mousemove', onMouseMove, false );\r\n\t\t\tdocument.addEventListener( 'mouseup', onMouseUp, false );\r\n\r\n\t\t\tscope.dispatchEvent( startEvent );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction onMouseMove( event ) {\r\n\r\n\t\tif ( scope.enabled === false ) return;\r\n\r\n\t\tif ( scope.preventDefault === true ) event.preventDefault();\r\n\r\n\t\tswitch ( state ) {\r\n\r\n\t\t\tcase STATE.ROTATE:\r\n\r\n\t\t\t\tif ( scope.enableRotate === false ) return;\r\n\r\n\t\t\t\thandleMouseMoveRotate( event );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase STATE.DOLLY:\r\n\r\n\t\t\t\tif ( scope.enableZoom === false ) return;\r\n\r\n\t\t\t\thandleMouseMoveDolly( event );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase STATE.PAN:\r\n\r\n\t\t\t\tif ( scope.enablePan === false ) return;\r\n\r\n\t\t\t\thandleMouseMovePan( event );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction onMouseUp( event ) {\r\n\r\n\t\tif ( scope.enabled === false ) return;\r\n\r\n\t\thandleMouseUp( event );\r\n\r\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\r\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\r\n\r\n\t\tscope.dispatchEvent( endEvent );\r\n\r\n\t\tstate = STATE.NONE;\r\n\r\n\t}\r\n\r\n\tfunction onMouseWheel( event ) {\r\n\r\n\t\tif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\r\n\r\n\t\tif ( scope.preventDefault === true ) {\r\n\t\t event.preventDefault();\r\n\t\t event.stopPropagation();\r\n\t\t}\r\n\r\n\t\tscope.dispatchEvent( startEvent );\r\n\r\n\t\thandleMouseWheel( event );\r\n\r\n\t\tscope.dispatchEvent( endEvent );\r\n\r\n\t}\r\n\r\n\tfunction onKeyDown( event ) {\r\n\r\n\t\tif ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;\r\n\r\n\t\thandleKeyDown( event );\r\n\r\n\t}\r\n\r\n\tfunction onTouchStart( event ) {\r\n\r\n\t\tif ( scope.enabled === false ) return;\r\n\r\n\t\tif ( scope.preventDefault === true ) event.preventDefault();\r\n\r\n\t\tswitch ( event.touches.length ) {\r\n\r\n\t\t\tcase 1:\t// one-fingered touch: rotate\r\n\r\n\t\t\t\tif ( scope.enableRotate === false ) return;\r\n\r\n\t\t\t\thandleTouchStartRotate( event );\r\n\r\n\t\t\t\tstate = STATE.TOUCH_ROTATE;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 2:\t// two-fingered touch: dolly-pan\r\n\r\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\r\n\r\n\t\t\t\thandleTouchStartDollyPan( event );\r\n\r\n\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\r\n\t\t\t\tstate = STATE.NONE;\r\n\r\n\t\t}\r\n\r\n\t\tif ( state !== STATE.NONE ) {\r\n\r\n\t\t\tscope.dispatchEvent( startEvent );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction onTouchMove( event ) {\r\n\r\n\t\tif ( scope.enabled === false ) return;\r\n\r\n\t\tif ( scope.preventDefault === true ) {\r\n\t\t event.preventDefault();\r\n\t\t event.stopPropagation();\r\n\t\t}\r\n\r\n\t\tswitch ( event.touches.length ) {\r\n\r\n\t\t\tcase 1: // one-fingered touch: rotate\r\n\r\n\t\t\t\tif ( scope.enableRotate === false ) return;\r\n\t\t\t\tif ( state !== STATE.TOUCH_ROTATE ) return; // is this needed?\r\n\r\n\t\t\t\thandleTouchMoveRotate( event );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 2: // two-fingered touch: dolly-pan\r\n\r\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\r\n\t\t\t\tif ( state !== STATE.TOUCH_DOLLY_PAN ) return; // is this needed?\r\n\r\n\t\t\t\thandleTouchMoveDollyPan( event );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\r\n\t\t\t\tstate = STATE.NONE;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction onTouchEnd( event ) {\r\n\r\n\t\tif ( scope.enabled === false ) return;\r\n\r\n\t\thandleTouchEnd( event );\r\n\r\n\t\tscope.dispatchEvent( endEvent );\r\n\r\n\t\tstate = STATE.NONE;\r\n\r\n\t}\r\n\r\n\tfunction onContextMenu( event ) {\r\n\r\n\t\tif ( scope.enabled === false ) return;\r\n\r\n\t\tif ( scope.preventDefault === true ) event.preventDefault();\r\n\r\n\t}\r\n\r\n\t//\r\n\r\n\tscope.domElement.addEventListener( 'contextmenu', onContextMenu, false );\r\n\r\n\tscope.domElement.addEventListener( 'mousedown', onMouseDown, false );\r\n\tscope.domElement.addEventListener( 'wheel', onMouseWheel, false );\r\n\r\n\tscope.domElement.addEventListener( 'touchstart', onTouchStart, false );\r\n\tscope.domElement.addEventListener( 'touchend', onTouchEnd, false );\r\n\tscope.domElement.addEventListener( 'touchmove', onTouchMove, false );\r\n\r\n\twindow.addEventListener( 'keydown', onKeyDown, false );\r\n\r\n\t// force an update at start\r\n\r\n\tthis.update();\r\n\r\n};\r\n\r\nOrbitControls.prototype = Object.create( three.EventDispatcher.prototype );\r\nOrbitControls.prototype.constructor = OrbitControls;\r\n\r\nObject.defineProperties( OrbitControls.prototype, {\r\n\r\n\tcenter: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .center has been renamed to .target' );\r\n\t\t\treturn this.target;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\t// backward compatibility\r\n\r\n\tnoZoom: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\r\n\t\t\treturn ! this.enableZoom;\r\n\r\n\t\t},\r\n\r\n\t\tset: function ( value ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\r\n\t\t\tthis.enableZoom = ! value;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tnoRotate: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\r\n\t\t\treturn ! this.enableRotate;\r\n\r\n\t\t},\r\n\r\n\t\tset: function ( value ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\r\n\t\t\tthis.enableRotate = ! value;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tnoPan: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\r\n\t\t\treturn ! this.enablePan;\r\n\r\n\t\t},\r\n\r\n\t\tset: function ( value ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\r\n\t\t\tthis.enablePan = ! value;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tnoKeys: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\r\n\t\t\treturn ! this.enableKeys;\r\n\r\n\t\t},\r\n\r\n\t\tset: function ( value ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\r\n\t\t\tthis.enableKeys = ! value;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tstaticMoving: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\r\n\t\t\treturn ! this.enableDamping;\r\n\r\n\t\t},\r\n\r\n\t\tset: function ( value ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\r\n\t\t\tthis.enableDamping = ! value;\r\n\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tdynamicDampingFactor: {\r\n\r\n\t\tget: function () {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\r\n\t\t\treturn this.dampingFactor;\r\n\r\n\t\t},\r\n\r\n\t\tset: function ( value ) {\r\n\r\n\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\r\n\t\t\tthis.dampingFactor = value;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n} );\r\n\r\nreturn OrbitControls;\r\n}\r\n\r\nexport { orbit };\r\nexport default orbit();\r\n","/**\r\n * Original authors from THREEJS repo\r\n * @author Eberhard Graether / http://egraether.com/\r\n * @author Mark Lundin / http://mark-lundin.com\r\n * @author Simone Manini / http://daron1337.github.io\r\n * @author Luca Antiga / http://lantiga.github.io\r\n */\r\n\r\nconst trackball = (three = window.THREE) => {\r\n if (three === undefined || three.EventDispatcher === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = three.EventDispatcher;\r\n return class extends Constructor {\r\n constructor(object, domElement) {\r\n super();\r\n\r\n let _this = this;\r\n let STATE = {\r\n NONE: -1,\r\n ROTATE: 0,\r\n ZOOM: 1,\r\n PAN: 2,\r\n TOUCH_ROTATE: 3,\r\n TOUCH_ZOOM: 4,\r\n TOUCH_PAN: 5,\r\n CUSTOM: 99,\r\n };\r\n\r\n this.object = object;\r\n this.domElement = domElement !== undefined ? domElement : document;\r\n\r\n // API\r\n\r\n this.enabled = true;\r\n\r\n this.screen = { left: 0, top: 0, width: 0, height: 0 };\r\n\r\n this.rotateSpeed = 1.0;\r\n this.zoomSpeed = 1.2;\r\n this.panSpeed = 0.3;\r\n\r\n this.noRotate = false;\r\n this.noZoom = false;\r\n this.noPan = false;\r\n this.noCustom = false;\r\n\r\n this.forceState = -1;\r\n\r\n this.staticMoving = false;\r\n this.dynamicDampingFactor = 0.2;\r\n\r\n this.minDistance = 0;\r\n this.maxDistance = Infinity;\r\n\r\n this.keys = [65 /* A*/, 83 /* S*/, 68];\r\n\r\n // internals\r\n\r\n this.target = new three.Vector3();\r\n\r\n let EPS = 0.000001;\r\n\r\n let lastPosition = new three.Vector3();\r\n\r\n let _state = STATE.NONE,\r\n _prevState = STATE.NONE,\r\n _eye = new three.Vector3(),\r\n _movePrev = new three.Vector2(),\r\n _moveCurr = new three.Vector2(),\r\n _lastAxis = new three.Vector3(),\r\n _lastAngle = 0,\r\n _zoomStart = new three.Vector2(),\r\n _zoomEnd = new three.Vector2(),\r\n _touchZoomDistanceStart = 0,\r\n _touchZoomDistanceEnd = 0,\r\n _panStart = new three.Vector2(),\r\n _panEnd = new three.Vector2(),\r\n _customStart = new three.Vector2(),\r\n _customEnd = new three.Vector2();\r\n\r\n // for reset\r\n\r\n this.target0 = this.target.clone();\r\n this.position0 = this.object.position.clone();\r\n this.up0 = this.object.up.clone();\r\n\r\n // events\r\n\r\n let changeEvent = { type: 'change' };\r\n let startEvent = { type: 'start' };\r\n let endEvent = { type: 'end' };\r\n\r\n // methods\r\n\r\n this.handleResize = function() {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n let box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n let d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n };\r\n\r\n this.handleEvent = function(event) {\r\n if (typeof this[event.type] == 'function') {\r\n this[event.type](event);\r\n }\r\n };\r\n\r\n let getMouseOnScreen = (function() {\r\n let vector = new three.Vector2();\r\n\r\n return function(pageX, pageY) {\r\n vector.set(\r\n (pageX - _this.screen.left) / _this.screen.width,\r\n (pageY - _this.screen.top) / _this.screen.height\r\n );\r\n\r\n return vector;\r\n };\r\n })();\r\n\r\n let getMouseOnCircle = (function() {\r\n let vector = new three.Vector2();\r\n\r\n return function(pageX, pageY) {\r\n vector.set(\r\n (pageX - _this.screen.width * 0.5 - _this.screen.left) / (_this.screen.width * 0.5),\r\n (_this.screen.height + 2 * (_this.screen.top - pageY)) / _this.screen.width // screen.width intentional\r\n );\r\n\r\n return vector;\r\n };\r\n })();\r\n\r\n this.rotateCamera = (function() {\r\n let axis = new three.Vector3(),\r\n quaternion = new three.Quaternion(),\r\n eyeDirection = new three.Vector3(),\r\n objectUpDirection = new three.Vector3(),\r\n objectSidewaysDirection = new three.Vector3(),\r\n moveDirection = new three.Vector3(),\r\n angle;\r\n\r\n return function() {\r\n moveDirection.set(_moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0);\r\n angle = moveDirection.length();\r\n\r\n if (angle) {\r\n _eye.copy(_this.object.position).sub(_this.target);\r\n\r\n eyeDirection.copy(_eye).normalize();\r\n objectUpDirection.copy(_this.object.up).normalize();\r\n objectSidewaysDirection.crossVectors(objectUpDirection, eyeDirection).normalize();\r\n\r\n objectUpDirection.setLength(_moveCurr.y - _movePrev.y);\r\n objectSidewaysDirection.setLength(_moveCurr.x - _movePrev.x);\r\n\r\n moveDirection.copy(objectUpDirection.add(objectSidewaysDirection));\r\n\r\n axis.crossVectors(moveDirection, _eye).normalize();\r\n\r\n angle *= _this.rotateSpeed;\r\n quaternion.setFromAxisAngle(axis, angle);\r\n\r\n _eye.applyQuaternion(quaternion);\r\n _this.object.up.applyQuaternion(quaternion);\r\n\r\n _lastAxis.copy(axis);\r\n _lastAngle = angle;\r\n } else if (!_this.staticMoving && _lastAngle) {\r\n _lastAngle *= Math.sqrt(1.0 - _this.dynamicDampingFactor);\r\n _eye.copy(_this.object.position).sub(_this.target);\r\n quaternion.setFromAxisAngle(_lastAxis, _lastAngle);\r\n _eye.applyQuaternion(quaternion);\r\n _this.object.up.applyQuaternion(quaternion);\r\n }\r\n\r\n _movePrev.copy(_moveCurr);\r\n };\r\n })();\r\n\r\n this.zoomCamera = function() {\r\n let factor;\r\n\r\n if (_state === STATE.TOUCH_ZOOM) {\r\n factor = _touchZoomDistanceStart / _touchZoomDistanceEnd;\r\n _touchZoomDistanceStart = _touchZoomDistanceEnd;\r\n _eye.multiplyScalar(factor);\r\n } else {\r\n factor = 1.0 + (_zoomEnd.y - _zoomStart.y) * _this.zoomSpeed;\r\n\r\n if (factor !== 1.0 && factor > 0.0) {\r\n _eye.multiplyScalar(factor);\r\n\r\n if (_this.staticMoving) {\r\n _zoomStart.copy(_zoomEnd);\r\n } else {\r\n _zoomStart.y += (_zoomEnd.y - _zoomStart.y) * this.dynamicDampingFactor;\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.panCamera = (function() {\r\n let mouseChange = new three.Vector2(),\r\n objectUp = new three.Vector3(),\r\n pan = new three.Vector3();\r\n\r\n return function() {\r\n mouseChange.copy(_panEnd).sub(_panStart);\r\n\r\n if (mouseChange.lengthSq()) {\r\n mouseChange.multiplyScalar(_eye.length() * _this.panSpeed);\r\n\r\n pan\r\n .copy(_eye)\r\n .cross(_this.object.up)\r\n .setLength(mouseChange.x);\r\n pan.add(objectUp.copy(_this.object.up).setLength(mouseChange.y));\r\n\r\n _this.object.position.add(pan);\r\n _this.target.add(pan);\r\n\r\n if (_this.staticMoving) {\r\n _panStart.copy(_panEnd);\r\n } else {\r\n _panStart.add(\r\n mouseChange\r\n .subVectors(_panEnd, _panStart)\r\n .multiplyScalar(_this.dynamicDampingFactor)\r\n );\r\n }\r\n }\r\n };\r\n })();\r\n\r\n this.checkDistances = function() {\r\n if (!_this.noZoom || !_this.noPan) {\r\n if (_eye.lengthSq() > _this.maxDistance * _this.maxDistance) {\r\n _this.object.position.addVectors(_this.target, _eye.setLength(_this.maxDistance));\r\n }\r\n\r\n if (_eye.lengthSq() < _this.minDistance * _this.minDistance) {\r\n _this.object.position.addVectors(_this.target, _eye.setLength(_this.minDistance));\r\n }\r\n }\r\n };\r\n\r\n this.update = function() {\r\n _eye.subVectors(_this.object.position, _this.target);\r\n\r\n if (!_this.noRotate) {\r\n _this.rotateCamera();\r\n }\r\n\r\n if (!_this.noZoom) {\r\n _this.zoomCamera();\r\n }\r\n\r\n if (!_this.noPan) {\r\n _this.panCamera();\r\n }\r\n\r\n if (!_this.noCustom) {\r\n _this.custom(_customStart, _customEnd);\r\n }\r\n\r\n _this.object.position.addVectors(_this.target, _eye);\r\n\r\n _this.checkDistances();\r\n\r\n _this.object.lookAt(_this.target);\r\n\r\n if (lastPosition.distanceToSquared(_this.object.position) > EPS) {\r\n _this.dispatchEvent(changeEvent);\r\n\r\n lastPosition.copy(_this.object.position);\r\n }\r\n };\r\n\r\n this.reset = function() {\r\n _state = STATE.NONE;\r\n _prevState = STATE.NONE;\r\n\r\n _this.target.copy(_this.target0);\r\n _this.object.position.copy(_this.position0);\r\n _this.object.up.copy(_this.up0);\r\n\r\n _eye.subVectors(_this.object.position, _this.target);\r\n\r\n _this.object.lookAt(_this.target);\r\n\r\n _this.dispatchEvent(changeEvent);\r\n\r\n lastPosition.copy(_this.object.position);\r\n };\r\n\r\n this.setState = function(targetState) {\r\n _this.forceState = targetState;\r\n _prevState = targetState;\r\n _state = targetState;\r\n };\r\n\r\n this.custom = function(customStart, customEnd) {};\r\n\r\n // listeners\r\n\r\n function keydown(event) {\r\n if (_this.enabled === false) return;\r\n\r\n window.removeEventListener('keydown', keydown);\r\n\r\n _prevState = _state;\r\n\r\n if (_state !== STATE.NONE) {\r\n return;\r\n } else if (event.keyCode === _this.keys[STATE.ROTATE] && !_this.noRotate) {\r\n _state = STATE.ROTATE;\r\n } else if (event.keyCode === _this.keys[STATE.ZOOM] && !_this.noZoom) {\r\n _state = STATE.ZOOM;\r\n } else if (event.keyCode === _this.keys[STATE.PAN] && !_this.noPan) {\r\n _state = STATE.PAN;\r\n }\r\n }\r\n\r\n function keyup(event) {\r\n if (_this.enabled === false) return;\r\n\r\n _state = _prevState;\r\n\r\n window.addEventListener('keydown', keydown, false);\r\n }\r\n\r\n function mousedown(event) {\r\n if (_this.enabled === false) return;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (_state === STATE.NONE) {\r\n _state = event.button;\r\n }\r\n\r\n if (_state === STATE.ROTATE && !_this.noRotate) {\r\n _moveCurr.copy(getMouseOnCircle(event.pageX, event.pageY));\r\n _movePrev.copy(_moveCurr);\r\n } else if (_state === STATE.ZOOM && !_this.noZoom) {\r\n _zoomStart.copy(getMouseOnScreen(event.pageX, event.pageY));\r\n _zoomEnd.copy(_zoomStart);\r\n } else if (_state === STATE.PAN && !_this.noPan) {\r\n _panStart.copy(getMouseOnScreen(event.pageX, event.pageY));\r\n _panEnd.copy(_panStart);\r\n } else if (_state === STATE.CUSTOM && !_this.noCustom) {\r\n _customStart.copy(getMouseOnScreen(event.pageX, event.pageY));\r\n _customEnd.copy(_panStart);\r\n }\r\n\r\n document.addEventListener('mousemove', mousemove, false);\r\n document.addEventListener('mouseup', mouseup, false);\r\n\r\n _this.dispatchEvent(startEvent);\r\n }\r\n\r\n function mousemove(event) {\r\n if (_this.enabled === false) return;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (_state === STATE.ROTATE && !_this.noRotate) {\r\n _movePrev.copy(_moveCurr);\r\n _moveCurr.copy(getMouseOnCircle(event.pageX, event.pageY));\r\n } else if (_state === STATE.ZOOM && !_this.noZoom) {\r\n _zoomEnd.copy(getMouseOnScreen(event.pageX, event.pageY));\r\n } else if (_state === STATE.PAN && !_this.noPan) {\r\n _panEnd.copy(getMouseOnScreen(event.pageX, event.pageY));\r\n } else if (_state === STATE.CUSTOM && !_this.noCustom) {\r\n _customEnd.copy(getMouseOnScreen(event.pageX, event.pageY));\r\n }\r\n }\r\n\r\n function mouseup(event) {\r\n if (_this.enabled === false) return;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (_this.forceState === -1) {\r\n _state = STATE.NONE;\r\n }\r\n\r\n document.removeEventListener('mousemove', mousemove);\r\n document.removeEventListener('mouseup', mouseup);\r\n _this.dispatchEvent(endEvent);\r\n }\r\n\r\n function mousewheel(event) {\r\n if (_this.enabled === false) return;\r\n\r\n if (_this.noZoom === true) return;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (event.deltaMode) {\r\n case 2:\r\n // Zoom in pages\r\n _zoomStart.y -= event.deltaY * 0.025;\r\n break;\r\n\r\n case 1:\r\n // Zoom in lines\r\n _zoomStart.y -= event.deltaY * 0.01;\r\n break;\r\n\r\n default:\r\n // undefined, 0, assume pixels\r\n _zoomStart.y -= event.deltaY * 0.00025;\r\n break;\r\n }\r\n\r\n // _zoomStart.y += delta * 0.01;\r\n _this.dispatchEvent(startEvent);\r\n _this.dispatchEvent(endEvent);\r\n }\r\n\r\n function touchstart(event) {\r\n if (_this.enabled === false) return;\r\n\r\n if (_this.forceState === -1) {\r\n switch (event.touches.length) {\r\n case 1:\r\n _state = STATE.TOUCH_ROTATE;\r\n _moveCurr.copy(getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\r\n _movePrev.copy(_moveCurr);\r\n break;\r\n\r\n case 2:\r\n _state = STATE.TOUCH_ZOOM;\r\n var dx = event.touches[0].pageX - event.touches[1].pageX;\r\n var dy = event.touches[0].pageY - event.touches[1].pageY;\r\n _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy);\r\n\r\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\r\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\r\n _panStart.copy(getMouseOnScreen(x, y));\r\n _panEnd.copy(_panStart);\r\n break;\r\n\r\n default:\r\n _state = STATE.NONE;\r\n }\r\n } else {\r\n // { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4, CUSTOM: 99 };\r\n switch (_state) {\r\n case 0:\r\n // 1 or 2 fingers, smae behavior\r\n _state = STATE.TOUCH_ROTATE;\r\n _moveCurr.copy(getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\r\n _movePrev.copy(_moveCurr);\r\n break;\r\n\r\n case 1:\r\n case 4:\r\n if (event.touches.length >= 2) {\r\n _state = STATE.TOUCH_ZOOM;\r\n var dx = event.touches[0].pageX - event.touches[1].pageX;\r\n var dy = event.touches[0].pageY - event.touches[1].pageY;\r\n _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy);\r\n } else {\r\n _state = STATE.ZOOM;\r\n _zoomStart.copy(getMouseOnScreen(event.touches[0].pageX, event.touches[0].pageY));\r\n _zoomEnd.copy(_zoomStart);\r\n }\r\n break;\r\n\r\n case 2:\r\n case 5:\r\n if (event.touches.length >= 2) {\r\n _state = STATE.TOUCH_PAN;\r\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\r\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\r\n _panStart.copy(getMouseOnScreen(x, y));\r\n _panEnd.copy(_panStart);\r\n } else {\r\n _state = STATE.PAN;\r\n _panStart.copy(getMouseOnScreen(event.touches[0].pageX, event.touches[0].pageY));\r\n _panEnd.copy(_panStart);\r\n }\r\n break;\r\n\r\n case 99:\r\n _state = STATE.CUSTOM;\r\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\r\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\r\n _customStart.copy(getMouseOnScreen(x, y));\r\n _customEnd.copy(_customStart);\r\n break;\r\n\r\n default:\r\n _state = STATE.NONE;\r\n }\r\n }\r\n\r\n _this.dispatchEvent(startEvent);\r\n }\r\n\r\n function touchmove(event) {\r\n if (_this.enabled === false) return;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (_this.forceState === -1) {\r\n switch (event.touches.length) {\r\n case 1:\r\n _movePrev.copy(_moveCurr);\r\n _moveCurr.copy(getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\r\n break;\r\n\r\n case 2:\r\n var dx = event.touches[0].pageX - event.touches[1].pageX;\r\n var dy = event.touches[0].pageY - event.touches[1].pageY;\r\n _touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy);\r\n\r\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\r\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\r\n _panEnd.copy(getMouseOnScreen(x, y));\r\n break;\r\n\r\n default:\r\n _state = STATE.NONE;\r\n }\r\n } else {\r\n // { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4, CUSTOM: 99 };\r\n switch (_state) {\r\n case 0:\r\n _movePrev.copy(_moveCurr);\r\n _moveCurr.copy(getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\r\n break;\r\n\r\n case 1:\r\n _zoomEnd.copy(getMouseOnScreen(event.touches[0].pageX, event.touches[0].pageY));\r\n break;\r\n\r\n case 2:\r\n _panEnd.copy(getMouseOnScreen(event.touches[0].pageX, event.touches[0].pageY));\r\n break;\r\n\r\n case 4:\r\n // 2 fingers!\r\n // TOUCH ZOOM\r\n var dx = event.touches[0].pageX - event.touches[1].pageX;\r\n var dy = event.touches[0].pageY - event.touches[1].pageY;\r\n _touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy);\r\n break;\r\n\r\n case 5:\r\n // 2 fingers\r\n // TOUCH_PAN\r\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\r\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\r\n _panEnd.copy(getMouseOnScreen(x, y));\r\n break;\r\n\r\n case 99:\r\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\r\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\r\n _customEnd.copy(getMouseOnScreen(x, y));\r\n break;\r\n\r\n default:\r\n _state = STATE.NONE;\r\n }\r\n }\r\n }\r\n\r\n function touchend(event) {\r\n if (_this.enabled === false) return;\r\n\r\n if (_this.forceState === -1) {\r\n switch (event.touches.length) {\r\n case 1:\r\n _movePrev.copy(_moveCurr);\r\n _moveCurr.copy(getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\r\n break;\r\n\r\n case 2:\r\n _touchZoomDistanceStart = _touchZoomDistanceEnd = 0;\r\n\r\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\r\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\r\n _panEnd.copy(getMouseOnScreen(x, y));\r\n _panStart.copy(_panEnd);\r\n break;\r\n }\r\n\r\n _state = STATE.NONE;\r\n } else {\r\n switch (_state) {\r\n case 0:\r\n _movePrev.copy(_moveCurr);\r\n _moveCurr.copy(getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\r\n break;\r\n\r\n case 1:\r\n case 2:\r\n break;\r\n\r\n case 4:\r\n // TOUCH ZOOM\r\n _touchZoomDistanceStart = _touchZoomDistanceEnd = 0;\r\n _state = STATE.ZOOM;\r\n break;\r\n\r\n case 5:\r\n // TOUCH ZOOM\r\n if (event.touches.length >= 2) {\r\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\r\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\r\n _panEnd.copy(getMouseOnScreen(x, y));\r\n _panStart.copy(_panEnd);\r\n }\r\n _state = STATE.PAN;\r\n break;\r\n\r\n case 99:\r\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\r\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\r\n _customEnd.copy(getMouseOnScreen(x, y));\r\n _customStart.copy(_customEnd);\r\n break;\r\n\r\n default:\r\n _state = STATE.NONE;\r\n }\r\n }\r\n\r\n _this.dispatchEvent(endEvent);\r\n }\r\n\r\n function contextmenu(event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.dispose = function() {\r\n this.domElement.removeEventListener('contextmenu', contextmenu, false);\r\n this.domElement.removeEventListener('mousedown', mousedown, false);\r\n this.domElement.removeEventListener('wheel', mousewheel, false);\r\n\r\n this.domElement.removeEventListener('touchstart', touchstart, false);\r\n this.domElement.removeEventListener('touchend', touchend, false);\r\n this.domElement.removeEventListener('touchmove', touchmove, false);\r\n\r\n window.removeEventListener('keydown', keydown, false);\r\n window.removeEventListener('keyup', keyup, false);\r\n };\r\n\r\n this.domElement.addEventListener('contextmenu', contextmenu, false);\r\n this.domElement.addEventListener('mousedown', mousedown, false);\r\n this.domElement.addEventListener('wheel', mousewheel, false);\r\n\r\n this.domElement.addEventListener('touchstart', touchstart, false);\r\n this.domElement.addEventListener('touchend', touchend, false);\r\n this.domElement.addEventListener('touchmove', touchmove, false);\r\n\r\n window.addEventListener('keydown', keydown, false);\r\n window.addEventListener('keyup', keyup, false);\r\n\r\n this.handleResize();\r\n\r\n // force an update at start\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\n// export factory\r\nexport { trackball };\r\n// default export to\r\nexport default trackball();\r\n","/**\r\n * @author Eberhard Graether / http://egraether.com/\r\n * @author Mark Lundin / http://mark-lundin.com\r\n * @author Patrick Fuller / http://patrick-fuller.com\r\n * @author Max Smolens / https://github.com/msmolens\r\n */\r\n\r\nconst trackballOrtho = (three = window.THREE) => {\r\n if (three === undefined || three.EventDispatcher === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = three.EventDispatcher;\r\n return class extends Constructor {\r\n constructor(\r\n object,\r\n domElement,\r\n state = {\r\n NONE: -1,\r\n ROTATE: 1,\r\n ZOOM: 2,\r\n PAN: 0,\r\n SCROLL: 4,\r\n TOUCH_ROTATE: 4,\r\n TOUCH_ZOOM_PAN: 5,\r\n }\r\n ) {\r\n super();\r\n\r\n let _this = this;\r\n let STATE = state;\r\n\r\n this.object = object;\r\n this.domElement = domElement !== undefined ? domElement : document;\r\n\r\n // API\r\n\r\n this.enabled = true;\r\n\r\n this.screen = { left: 0, top: 0, width: 0, height: 0 };\r\n\r\n this.radius = 0;\r\n\r\n this.zoomSpeed = 1.2;\r\n\r\n this.noZoom = false;\r\n this.noPan = false;\r\n\r\n this.staticMoving = false;\r\n this.dynamicDampingFactor = 0.2;\r\n\r\n this.keys = [65 /* A*/, 83 /* S*/, 68];\r\n\r\n // internals\r\n\r\n this.target = new three.Vector3();\r\n\r\n let EPS = 0.000001;\r\n\r\n let _changed = true;\r\n\r\n let _state = STATE.NONE,\r\n _prevState = STATE.NONE,\r\n _eye = new three.Vector3(),\r\n _zoomStart = new three.Vector2(),\r\n _zoomEnd = new three.Vector2(),\r\n _touchZoomDistanceStart = 0,\r\n _touchZoomDistanceEnd = 0,\r\n _panStart = new three.Vector2(),\r\n _panEnd = new three.Vector2();\r\n\r\n // window level fire after...\r\n\r\n // for reset\r\n\r\n this.target0 = this.target.clone();\r\n this.position0 = this.object.position.clone();\r\n this.up0 = this.object.up.clone();\r\n\r\n this.left0 = this.object.left;\r\n this.right0 = this.object.right;\r\n this.top0 = this.object.top;\r\n this.bottom0 = this.object.bottom;\r\n\r\n // events\r\n\r\n let changeEvent = { type: 'change' };\r\n let startEvent = { type: 'start' };\r\n let endEvent = { type: 'end' };\r\n\r\n // methods\r\n\r\n this.handleResize = function() {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n let box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n let d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n\r\n this.radius = 0.5 * Math.min(this.screen.width, this.screen.height);\r\n\r\n this.left0 = this.object.left;\r\n this.right0 = this.object.right;\r\n this.top0 = this.object.top;\r\n this.bottom0 = this.object.bottom;\r\n };\r\n\r\n this.handleEvent = function(event) {\r\n if (typeof this[event.type] == 'function') {\r\n this[event.type](event);\r\n }\r\n };\r\n\r\n let getMouseOnScreen = (function() {\r\n let vector = new three.Vector2();\r\n\r\n return function getMouseOnScreen(pageX, pageY) {\r\n vector.set(\r\n (pageX - _this.screen.left) / _this.screen.width,\r\n (pageY - _this.screen.top) / _this.screen.height\r\n );\r\n\r\n return vector;\r\n };\r\n })();\r\n\r\n this.zoomCamera = function() {\r\n if (_state === STATE.TOUCH_ZOOM_PAN) {\r\n var factor = _touchZoomDistanceEnd / _touchZoomDistanceStart;\r\n _touchZoomDistanceStart = _touchZoomDistanceEnd;\r\n\r\n _this.object.zoom *= factor;\r\n\r\n _changed = true;\r\n } else {\r\n var factor = 1.0 + (_zoomEnd.y - _zoomStart.y) * _this.zoomSpeed;\r\n\r\n if (Math.abs(factor - 1.0) > EPS && factor > 0.0) {\r\n _this.object.zoom /= factor;\r\n\r\n if (_this.staticMoving) {\r\n _zoomStart.copy(_zoomEnd);\r\n } else {\r\n _zoomStart.y += (_zoomEnd.y - _zoomStart.y) * this.dynamicDampingFactor;\r\n }\r\n\r\n _changed = true;\r\n }\r\n }\r\n };\r\n\r\n this.panCamera = (function() {\r\n let mouseChange = new three.Vector2(),\r\n objectUp = new three.Vector3(),\r\n pan = new three.Vector3();\r\n\r\n return function panCamera() {\r\n mouseChange.copy(_panEnd).sub(_panStart);\r\n\r\n if (mouseChange.lengthSq()) {\r\n // Scale movement to keep clicked/dragged position under cursor\r\n let scale_x = (_this.object.right - _this.object.left) / _this.object.zoom;\r\n let scale_y = (_this.object.top - _this.object.bottom) / _this.object.zoom;\r\n mouseChange.x *= scale_x;\r\n mouseChange.y *= scale_y;\r\n\r\n pan\r\n .copy(_eye)\r\n .cross(_this.object.up)\r\n .setLength(mouseChange.x);\r\n pan.add(objectUp.copy(_this.object.up).setLength(mouseChange.y));\r\n\r\n _this.object.position.add(pan);\r\n _this.target.add(pan);\r\n\r\n if (_this.staticMoving) {\r\n _panStart.copy(_panEnd);\r\n } else {\r\n _panStart.add(\r\n mouseChange\r\n .subVectors(_panEnd, _panStart)\r\n .multiplyScalar(_this.dynamicDampingFactor)\r\n );\r\n }\r\n\r\n _changed = true;\r\n }\r\n };\r\n })();\r\n\r\n this.update = function() {\r\n _eye.subVectors(_this.object.position, _this.target);\r\n\r\n if (!_this.noZoom) {\r\n _this.zoomCamera();\r\n\r\n if (_changed) {\r\n _this.object.updateProjectionMatrix();\r\n }\r\n }\r\n\r\n if (!_this.noPan) {\r\n _this.panCamera();\r\n }\r\n\r\n _this.object.position.addVectors(_this.target, _eye);\r\n\r\n _this.object.lookAt(_this.target);\r\n\r\n if (_changed) {\r\n _this.dispatchEvent(changeEvent);\r\n\r\n _changed = false;\r\n }\r\n };\r\n\r\n this.reset = function() {\r\n _state = STATE.NONE;\r\n _prevState = STATE.NONE;\r\n\r\n _this.target.copy(_this.target0);\r\n _this.object.position.copy(_this.position0);\r\n _this.object.up.copy(_this.up0);\r\n\r\n _eye.subVectors(_this.object.position, _this.target);\r\n\r\n _this.object.left = _this.left0;\r\n _this.object.right = _this.right0;\r\n _this.object.top = _this.top0;\r\n _this.object.bottom = _this.bottom0;\r\n\r\n _this.object.lookAt(_this.target);\r\n\r\n _this.dispatchEvent(changeEvent);\r\n\r\n _changed = false;\r\n };\r\n\r\n // listeners\r\n\r\n function keydown(event) {\r\n if (_this.enabled === false) return;\r\n\r\n window.removeEventListener('keydown', keydown);\r\n\r\n _prevState = _state;\r\n\r\n if (_state !== STATE.NONE) {\r\n return;\r\n } else if (event.keyCode === _this.keys[STATE.ROTATE] && !_this.noRotate) {\r\n _state = STATE.ROTATE;\r\n } else if (event.keyCode === _this.keys[STATE.ZOOM] && !_this.noZoom) {\r\n _state = STATE.ZOOM;\r\n } else if (event.keyCode === _this.keys[STATE.PAN] && !_this.noPan) {\r\n _state = STATE.PAN;\r\n }\r\n }\r\n\r\n function keyup(event) {\r\n if (_this.enabled === false) return;\r\n\r\n _state = _prevState;\r\n\r\n window.addEventListener('keydown', keydown, false);\r\n }\r\n\r\n function mousedown(event) {\r\n if (_this.enabled === false) return;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (_state === STATE.NONE) {\r\n _state = event.button;\r\n }\r\n\r\n if (_state === STATE.ROTATE && !_this.noRotate) {\r\n } else if (_state === STATE.ZOOM && !_this.noZoom) {\r\n _zoomStart.copy(getMouseOnScreen(event.pageX, event.pageY));\r\n _zoomEnd.copy(_zoomStart);\r\n } else if (_state === STATE.PAN && !_this.noPan) {\r\n _panStart.copy(getMouseOnScreen(event.pageX, event.pageY));\r\n _panEnd.copy(_panStart);\r\n }\r\n\r\n document.addEventListener('mousemove', mousemove, false);\r\n document.addEventListener('mouseup', mouseup, false);\r\n\r\n _this.dispatchEvent(startEvent);\r\n }\r\n\r\n function mousemove(event) {\r\n if (_this.enabled === false) return;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (_state === STATE.ROTATE && !_this.noRotate) {\r\n } else if (_state === STATE.ZOOM && !_this.noZoom) {\r\n _zoomEnd.copy(getMouseOnScreen(event.pageX, event.pageY));\r\n } else if (_state === STATE.PAN && !_this.noPan) {\r\n _panEnd.copy(getMouseOnScreen(event.pageX, event.pageY));\r\n }\r\n }\r\n\r\n function mouseup(event) {\r\n if (_this.enabled === false) return;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n _state = STATE.NONE;\r\n\r\n document.removeEventListener('mousemove', mousemove);\r\n document.removeEventListener('mouseup', mouseup);\r\n _this.dispatchEvent(endEvent);\r\n }\r\n\r\n function mousewheel(event) {\r\n if (_this.enabled === false) return;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n //_zoomStart.y += event.deltaY * 0.01;\r\n /**\r\n * Watch deltaX and deltaY because in some cases, (i.e. Shift or Alt key pressed)\r\n * deltaX and deltaY are inverted.\r\n *\r\n * It is known behaviors/shortcuts to scroll through a page horizontally.\r\n */\r\n _this.dispatchEvent({\r\n type: 'OnScroll',\r\n delta: event.deltaX * 0.01 + event.deltaY * 0.01,\r\n });\r\n\r\n _this.dispatchEvent(startEvent);\r\n _this.dispatchEvent(endEvent);\r\n }\r\n\r\n function touchstart(event) {\r\n if (_this.enabled === false) return;\r\n\r\n switch (event.touches.length) {\r\n case 1:\r\n _state = STATE.TOUCH_ROTATE;\r\n\r\n break;\r\n\r\n case 2:\r\n _state = STATE.TOUCH_ZOOM_PAN;\r\n var dx = event.touches[0].pageX - event.touches[1].pageX;\r\n var dy = event.touches[0].pageY - event.touches[1].pageY;\r\n _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy);\r\n\r\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\r\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\r\n _panStart.copy(getMouseOnScreen(x, y));\r\n _panEnd.copy(_panStart);\r\n break;\r\n\r\n default:\r\n _state = STATE.NONE;\r\n }\r\n _this.dispatchEvent(startEvent);\r\n }\r\n\r\n function touchmove(event) {\r\n if (_this.enabled === false) return;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (event.touches.length) {\r\n case 1:\r\n break;\r\n\r\n case 2:\r\n var dx = event.touches[0].pageX - event.touches[1].pageX;\r\n var dy = event.touches[0].pageY - event.touches[1].pageY;\r\n _touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy);\r\n\r\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\r\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\r\n _panEnd.copy(getMouseOnScreen(x, y));\r\n break;\r\n\r\n default:\r\n _state = STATE.NONE;\r\n }\r\n }\r\n\r\n function touchend(event) {\r\n if (_this.enabled === false) return;\r\n\r\n switch (event.touches.length) {\r\n case 1:\r\n break;\r\n\r\n case 2:\r\n _touchZoomDistanceStart = _touchZoomDistanceEnd = 0;\r\n\r\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\r\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\r\n _panEnd.copy(getMouseOnScreen(x, y));\r\n _panStart.copy(_panEnd);\r\n break;\r\n }\r\n\r\n _state = STATE.NONE;\r\n _this.dispatchEvent(endEvent);\r\n }\r\n\r\n function contextmenu(event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.dispose = function() {\r\n this.domElement.removeEventListener('contextmenu', contextmenu, false);\r\n this.domElement.removeEventListener('mousedown', mousedown, false);\r\n this.domElement.removeEventListener('wheel', mousewheel, false);\r\n\r\n this.domElement.removeEventListener('touchstart', touchstart, false);\r\n this.domElement.removeEventListener('touchend', touchend, false);\r\n this.domElement.removeEventListener('touchmove', touchmove, false);\r\n\r\n window.removeEventListener('keydown', keydown, false);\r\n window.removeEventListener('keyup', keyup, false);\r\n };\r\n\r\n this.domElement.addEventListener('contextmenu', contextmenu, false);\r\n this.domElement.addEventListener('mousedown', mousedown, false);\r\n this.domElement.addEventListener('wheel', mousewheel, false);\r\n\r\n this.domElement.addEventListener('touchstart', touchstart, false);\r\n this.domElement.addEventListener('touchend', touchend, false);\r\n this.domElement.addEventListener('touchmove', touchmove, false);\r\n\r\n window.addEventListener('keydown', keydown, false);\r\n window.addEventListener('keyup', keyup, false);\r\n\r\n this.handleResize();\r\n\r\n // force an update at start\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\n// export factory\r\nexport { trackballOrtho };\r\n// default export to\r\nexport default trackballOrtho();\r\n","export enum COLORS {\r\n blue = '#00B0FF',\r\n yellow = '#FFEB3B',\r\n red = '#F50057',\r\n green = '#76FF03',\r\n white = '#FFF',\r\n lightRed = '#F77',\r\n}\r\n\r\n/**\r\n * Colors utility functions\r\n */\r\nexport default class Colors {\r\n /**\r\n * Convert LAB to XYZ\r\n * http://www.easyrgb.com/index.php?X=MATH&H=08#text8\r\n *\r\n * @param {*} l\r\n * @param {*} a\r\n * @param {*} b\r\n *\r\n * @return {*}\r\n */\r\n public static cielab2XYZ(l: number, a: number, b: number) {\r\n // https://www.mathworks.com/help/images/ref/whitepoint.html\r\n // d65: 0.9504, 1, 1.0888\r\n const refX = 95.047;\r\n const refY = 100.0;\r\n const refZ = 108.883;\r\n\r\n let y = (l + 16) / 116;\r\n let x = a / 500 + y;\r\n let z = y - b / 200;\r\n\r\n if (Math.pow(y, 3) > 0.008856) {\r\n y = Math.pow(y, 3);\r\n } else {\r\n y = (y - 16 / 116) / 7.787;\r\n }\r\n\r\n if (Math.pow(x, 3) > 0.008856) {\r\n x = Math.pow(x, 3);\r\n } else {\r\n x = (x - 16 / 116) / 7.787;\r\n }\r\n\r\n if (Math.pow(z, 3) > 0.008856) {\r\n z = Math.pow(z, 3);\r\n } else {\r\n z = (z - 16 / 116) / 7.787;\r\n }\r\n return [refX * x, refY * y, refZ * z];\r\n }\r\n\r\n /**\r\n * Convert XYZ to RGB space\r\n *\r\n * @param {*} x\r\n * @param {*} y\r\n * @param {*} z\r\n *\r\n * @return {*}\r\n */\r\n public static xyz2RGB(x: number, y: number, z: number) {\r\n x /= 100;\r\n y /= 100;\r\n z /= 100;\r\n let r = x * 3.2406 + y * -1.5372 + z * -0.4986;\r\n let g = x * -0.9689 + y * 1.8758 + z * 0.0415;\r\n let b = x * 0.0557 + y * -0.204 + z * 1.057;\r\n\r\n if (r > 0.0031308) {\r\n r = 1.055 * Math.pow(r, 1 / 2.4) - 0.055;\r\n } else {\r\n r = 12.92 * r;\r\n }\r\n\r\n if (g > 0.0031308) {\r\n g = 1.055 * Math.pow(g, 1 / 2.4) - 0.055;\r\n } else {\r\n g = 12.92 * g;\r\n }\r\n\r\n if (b > 0.0031308) {\r\n b = 1.055 * Math.pow(b, 1 / 2.4) - 0.055;\r\n } else {\r\n b = 12.92 * b;\r\n }\r\n\r\n r = r * 255;\r\n g = g * 255;\r\n b = b * 255;\r\n\r\n return [r, g, b];\r\n }\r\n\r\n /**\r\n * Convert LAB to RGB\r\n *\r\n * @param {*} l\r\n * @param {*} a\r\n * @param {*} b\r\n *\r\n * @return {*}\r\n */\r\n public static cielab2RGB(l: number = 50, a: number = 0, b: number = 0) {\r\n if (!(l >= 0 && l <= 100)) {\r\n return null;\r\n }\r\n\r\n const [x, y, z] = this.cielab2XYZ(l, a, b);\r\n return this.xyz2RGB(x, y, z);\r\n }\r\n}\r\n","import CoreUtils from './core.utils';\r\nimport Validators from './core.validators';\r\n\r\nimport { Matrix4 } from 'three/src/math/Matrix4';\r\nimport { Vector3 } from 'three/src/math/Vector3';\r\n\r\n/**\r\n * Compute/test intersection between different objects.\r\n *\r\n * @module core/intersections\r\n */\r\n\r\nexport default class Intersections {\r\n /**\r\n * Compute intersection between oriented bounding box and a plane.\r\n *\r\n * Returns intersection in plane's space.\r\n *\r\n * Should return at least 3 intersections. If not, the plane and the box do not\r\n * intersect.\r\n *\r\n * @param {Object} aabb - Axe Aligned Bounding Box representation.\r\n * @param {Vector3} aabb.halfDimensions - Half dimensions of the box.\r\n * @param {Vector3} aabb.center - Center of the box.\r\n * @param {Matrix4} aabb.toAABB - Transform to go from plane space to box space.\r\n * @param {Object} plane - Plane representation\r\n * @param {Vector3} plane.position - position of normal which describes the plane.\r\n * @param {Vector3} plane.direction - Direction of normal which describes the plane.\r\n *\r\n * @returns {Array} List of all intersections in plane's space.\r\n * @returns {boolean} false is invalid input provided.\r\n *\r\n * @example\r\n * //Returns array with intersection N intersections\r\n * let aabb = {\r\n * center: new Vector3(150, 150, 150),\r\n * halfDimensions: new Vector3(50, 60, 70),\r\n * toAABB: new Matrix4()\r\n * }\r\n * let plane = {\r\n * position: new Vector3(110, 120, 130),\r\n * direction: new Vector3(1, 0, 0)\r\n * }\r\n *\r\n * let intersections = CoreIntersections.aabbPlane(aabb, plane);\r\n * // intersections ==\r\n * //[ { x : 110, y : 90, z : 80 },\r\n * // { x : 110, y : 210, z : 220 },\r\n * // { x : 110, y : 210, z : 80 },\r\n * // { x : 110, y : 90, z : 220 } ]\r\n *\r\n * //Returns empty array with 0 intersections\r\n * let aabb = {\r\n *\r\n * }\r\n * let plane = {\r\n *\r\n * }\r\n *\r\n * let intersections = VJS.Core.Validators.matrix4(new Vector3());\r\n *\r\n * //Returns false if invalid input?\r\n *\r\n */\r\n static aabbPlane(aabb, plane) {\r\n //\r\n // obb = { halfDimensions, orientation, center, toAABB }\r\n // plane = { position, direction }\r\n //\r\n //\r\n // LOGIC:\r\n //\r\n // Test intersection of each edge of the Oriented Bounding Box with the Plane\r\n //\r\n // ALL EDGES\r\n //\r\n // .+-------+\r\n // .' | .'|\r\n // +---+---+' |\r\n // | | | |\r\n // | ,+---+---+\r\n // |.' | .'\r\n // +-------+'\r\n //\r\n // SPACE ORIENTATION\r\n //\r\n // +\r\n // j |\r\n // |\r\n // | i\r\n // k ,+-------+\r\n // .'\r\n // +\r\n //\r\n //\r\n // 1- Move Plane position and orientation in IJK space\r\n // 2- Test Edges/ IJK Plane intersections\r\n // 3- Return intersection Edge/ IJK Plane if it touches the Oriented BBox\r\n\r\n let intersections = [];\r\n\r\n if (!(this.validateAabb(aabb) && this.validatePlane(plane))) {\r\n window.console.log('Invalid aabb or plane provided.');\r\n return false;\r\n }\r\n\r\n // invert space matrix\r\n let fromAABB = new Matrix4();\r\n fromAABB.getInverse(aabb.toAABB);\r\n\r\n let t1 = plane.direction.clone().applyMatrix4(aabb.toAABB);\r\n let t0 = new Vector3(0, 0, 0).applyMatrix4(aabb.toAABB);\r\n\r\n let planeAABB = this.posdir(\r\n plane.position.clone().applyMatrix4(aabb.toAABB),\r\n new Vector3(t1.x - t0.x, t1.y - t0.y, t1.z - t0.z).normalize()\r\n );\r\n\r\n let bbox = CoreUtils.bbox(aabb.center, aabb.halfDimensions);\r\n\r\n let orientation = new Vector3(new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1));\r\n\r\n // 12 edges (i.e. ray)/plane intersection tests\r\n // RAYS STARTING FROM THE FIRST CORNER (0, 0, 0)\r\n //\r\n // +\r\n // |\r\n // |\r\n // |\r\n // ,+---+---+\r\n // .'\r\n // +\r\n\r\n let ray = this.posdir(\r\n new Vector3(\r\n aabb.center.x - aabb.halfDimensions.x,\r\n aabb.center.y - aabb.halfDimensions.y,\r\n aabb.center.z - aabb.halfDimensions.z\r\n ),\r\n orientation.x\r\n );\r\n this.rayPlaneInBBox(ray, planeAABB, bbox, intersections);\r\n\r\n ray.direction = orientation.y;\r\n this.rayPlaneInBBox(ray, planeAABB, bbox, intersections);\r\n\r\n ray.direction = orientation.z;\r\n this.rayPlaneInBBox(ray, planeAABB, bbox, intersections);\r\n\r\n // RAYS STARTING FROM THE LAST CORNER\r\n //\r\n // +\r\n // .'\r\n // +-------+'\r\n // |\r\n // |\r\n // |\r\n // +\r\n //\r\n\r\n let ray2 = this.posdir(\r\n new Vector3(\r\n aabb.center.x + aabb.halfDimensions.x,\r\n aabb.center.y + aabb.halfDimensions.y,\r\n aabb.center.z + aabb.halfDimensions.z\r\n ),\r\n orientation.x\r\n );\r\n this.rayPlaneInBBox(ray2, planeAABB, bbox, intersections);\r\n\r\n ray2.direction = orientation.y;\r\n this.rayPlaneInBBox(ray2, planeAABB, bbox, intersections);\r\n\r\n ray2.direction = orientation.z;\r\n this.rayPlaneInBBox(ray2, planeAABB, bbox, intersections);\r\n\r\n // RAYS STARTING FROM THE SECOND CORNER\r\n //\r\n // +\r\n // |\r\n // |\r\n // |\r\n // +\r\n // .'\r\n // +'\r\n\r\n let ray3 = this.posdir(\r\n new Vector3(\r\n aabb.center.x + aabb.halfDimensions.x,\r\n aabb.center.y - aabb.halfDimensions.y,\r\n aabb.center.z - aabb.halfDimensions.z\r\n ),\r\n orientation.y\r\n );\r\n this.rayPlaneInBBox(ray3, planeAABB, bbox, intersections);\r\n\r\n ray3.direction = orientation.z;\r\n this.rayPlaneInBBox(ray3, planeAABB, bbox, intersections);\r\n\r\n // RAYS STARTING FROM THE THIRD CORNER\r\n //\r\n // .+-------+\r\n // .'\r\n // +\r\n //\r\n //\r\n //\r\n //\r\n\r\n let ray4 = this.posdir(\r\n new Vector3(\r\n aabb.center.x - aabb.halfDimensions.x,\r\n aabb.center.y + aabb.halfDimensions.y,\r\n aabb.center.z - aabb.halfDimensions.z\r\n ),\r\n orientation.x\r\n );\r\n this.rayPlaneInBBox(ray4, planeAABB, bbox, intersections);\r\n\r\n ray4.direction = orientation.z;\r\n this.rayPlaneInBBox(ray4, planeAABB, bbox, intersections);\r\n\r\n // RAYS STARTING FROM THE FOURTH CORNER\r\n //\r\n //\r\n //\r\n // +\r\n // |\r\n // |\r\n // |\r\n // +-------+\r\n\r\n let ray5 = this.posdir(\r\n new Vector3(\r\n aabb.center.x - aabb.halfDimensions.x,\r\n aabb.center.y - aabb.halfDimensions.y,\r\n aabb.center.z + aabb.halfDimensions.z\r\n ),\r\n orientation.x\r\n );\r\n this.rayPlaneInBBox(ray5, planeAABB, bbox, intersections);\r\n\r\n ray5.direction = orientation.y;\r\n this.rayPlaneInBBox(ray5, planeAABB, bbox, intersections);\r\n\r\n // @todo make sure objects are unique...\r\n\r\n // back to original space\r\n intersections.map(function(element) {\r\n return element.applyMatrix4(fromAABB);\r\n });\r\n\r\n return intersections;\r\n }\r\n\r\n /**\r\n * Compute intersection between a ray and a plane.\r\n *\r\n * @memberOf this\r\n * @public\r\n *\r\n * @param {Object} ray - Ray representation.\r\n * @param {Vector3} ray.position - position of normal which describes the ray.\r\n * @param {Vector3} ray.direction - Direction of normal which describes the ray.\r\n * @param {Object} plane - Plane representation\r\n * @param {Vector3} plane.position - position of normal which describes the plane.\r\n * @param {Vector3} plane.direction - Direction of normal which describes the plane.\r\n *\r\n * @returns {Vector3|null} Intersection between ray and plane or null.\r\n */\r\n static rayPlane(ray, plane) {\r\n // ray: {position, direction}\r\n // plane: {position, direction}\r\n\r\n if (ray.direction.dot(plane.direction) !== 0) {\r\n //\r\n // not parallel, move forward\r\n //\r\n // LOGIC:\r\n //\r\n // Ray equation: P = P0 + tV\r\n // P = \r\n // P0 = \r\n // V = \r\n //\r\n // Therefore:\r\n // Px = ray.position.x + t*ray.direction.x\r\n // Py = ray.position.y + t*ray.direction.y\r\n // Pz = ray.position.z + t*ray.direction.z\r\n //\r\n //\r\n //\r\n // Plane equation: ax + by + cz + d = 0\r\n // a = plane.direction.x\r\n // b = plane.direction.y\r\n // c = plane.direction.z\r\n // d = -( plane.direction.x*plane.position.x +\r\n // plane.direction.y*plane.position.y +\r\n // plane.direction.z*plane.position.z )\r\n //\r\n //\r\n // 1- in the plane equation, we replace x, y and z by Px, Py and Pz\r\n // 2- find t\r\n // 3- replace t in Px, Py and Pz to get the coordinate of the intersection\r\n //\r\n let t =\r\n (plane.direction.x * (plane.position.x - ray.position.x) +\r\n plane.direction.y * (plane.position.y - ray.position.y) +\r\n plane.direction.z * (plane.position.z - ray.position.z)) /\r\n (plane.direction.x * ray.direction.x +\r\n plane.direction.y * ray.direction.y +\r\n plane.direction.z * ray.direction.z);\r\n\r\n let intersection = new Vector3(\r\n ray.position.x + t * ray.direction.x,\r\n ray.position.y + t * ray.direction.y,\r\n ray.position.z + t * ray.direction.z\r\n );\r\n\r\n return intersection;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Compute intersection between a ray and a box\r\n * @param {Object} ray\r\n * @param {Object} box\r\n * @return {Array}\r\n */\r\n static rayBox(ray, box) {\r\n // should also do the space transforms here\r\n // ray: {position, direction}\r\n // box: {halfDimensions, center}\r\n\r\n let intersections = [];\r\n\r\n let bbox = CoreUtils.bbox(box.center, box.halfDimensions);\r\n\r\n // window.console.log(bbox);\r\n\r\n // X min\r\n let plane = this.posdir(\r\n new Vector3(bbox.min.x, box.center.y, box.center.z),\r\n new Vector3(-1, 0, 0)\r\n );\r\n this.rayPlaneInBBox(ray, plane, bbox, intersections);\r\n\r\n // X max\r\n plane = this.posdir(new Vector3(bbox.max.x, box.center.y, box.center.z), new Vector3(1, 0, 0));\r\n this.rayPlaneInBBox(ray, plane, bbox, intersections);\r\n\r\n // Y min\r\n plane = this.posdir(new Vector3(box.center.x, bbox.min.y, box.center.z), new Vector3(0, -1, 0));\r\n this.rayPlaneInBBox(ray, plane, bbox, intersections);\r\n\r\n // Y max\r\n plane = this.posdir(new Vector3(box.center.x, bbox.max.y, box.center.z), new Vector3(0, 1, 0));\r\n this.rayPlaneInBBox(ray, plane, bbox, intersections);\r\n\r\n // Z min\r\n plane = this.posdir(new Vector3(box.center.x, box.center.y, bbox.min.z), new Vector3(0, 0, -1));\r\n this.rayPlaneInBBox(ray, plane, bbox, intersections);\r\n\r\n // Z max\r\n plane = this.posdir(new Vector3(box.center.x, box.center.y, bbox.max.z), new Vector3(0, 0, 1));\r\n this.rayPlaneInBBox(ray, plane, bbox, intersections);\r\n\r\n return intersections;\r\n }\r\n\r\n /**\r\n * Intersection between ray and a plane that are in a box.\r\n * @param {*} ray\r\n * @param {*} planeAABB\r\n * @param {*} bbox\r\n * @param {*} intersections\r\n */\r\n static rayPlaneInBBox(ray, planeAABB, bbox, intersections) {\r\n let intersection = this.rayPlane(ray, planeAABB);\r\n // window.console.log(intersection);\r\n if (intersection && this.inBBox(intersection, bbox)) {\r\n if (!intersections.find(this.findIntersection(intersection))) {\r\n intersections.push(intersection);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Find intersection in array\r\n * @param {*} myintersection\r\n */\r\n static findIntersection(myintersection) {\r\n return function found(element, index, array) {\r\n if (\r\n myintersection.x === element.x &&\r\n myintersection.y === element.y &&\r\n myintersection.z === element.z\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n }\r\n\r\n /**\r\n * Is point in box.\r\n * @param {Object} point\r\n * @param {Object} bbox\r\n * @return {Boolean}\r\n */\r\n static inBBox(point, bbox) {\r\n //\r\n let epsilon = 0.0001;\r\n if (\r\n point &&\r\n point.x >= bbox.min.x - epsilon &&\r\n point.y >= bbox.min.y - epsilon &&\r\n point.z >= bbox.min.z - epsilon &&\r\n point.x <= bbox.max.x + epsilon &&\r\n point.y <= bbox.max.y + epsilon &&\r\n point.z <= bbox.max.z + epsilon\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n static posdir(position, direction) {\r\n return { position, direction };\r\n }\r\n\r\n static validatePlane(plane) {\r\n //\r\n if (plane === null) {\r\n window.console.log('Invalid plane.');\r\n window.console.log(plane);\r\n\r\n return false;\r\n }\r\n\r\n if (!Validators.vector3(plane.position)) {\r\n window.console.log('Invalid plane.position.');\r\n window.console.log(plane.position);\r\n\r\n return false;\r\n }\r\n\r\n if (!Validators.vector3(plane.direction)) {\r\n window.console.log('Invalid plane.direction.');\r\n window.console.log(plane.direction);\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n static validateAabb(aabb) {\r\n //\r\n if (aabb === null) {\r\n window.console.log('Invalid aabb.');\r\n window.console.log(aabb);\r\n return false;\r\n }\r\n\r\n if (!Validators.matrix4(aabb.toAABB)) {\r\n window.console.log('Invalid aabb.toAABB: ');\r\n window.console.log(aabb.toAABB);\r\n\r\n return false;\r\n }\r\n\r\n if (!Validators.vector3(aabb.center)) {\r\n window.console.log('Invalid aabb.center.');\r\n window.console.log(aabb.center);\r\n\r\n return false;\r\n }\r\n\r\n if (\r\n !(\r\n Validators.vector3(aabb.halfDimensions) &&\r\n aabb.halfDimensions.x >= 0 &&\r\n aabb.halfDimensions.y >= 0 &&\r\n aabb.halfDimensions.z >= 0\r\n )\r\n ) {\r\n window.console.log('Invalid aabb.halfDimensions.');\r\n window.console.log(aabb.halfDimensions);\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import Colors from './core.colors';\r\nimport Intersections from './core.intersections';\r\nimport Validators from './core.validators';\r\nimport Utils from './core.utils';\r\n\r\nexport {\r\n Colors as ColorsCore,\r\n Intersections as IntersectionsCore,\r\n Utils as UtilsCore,\r\n Validators as ValidatorsCore,\r\n};\r\n","import Validators from './core.validators';\r\n\r\nimport { Box3 } from 'three/src/math/Box3';\r\nimport { Raycaster } from 'three/src/core/Raycaster';\r\nimport { Triangle } from 'three/src/math/Triangle';\r\nimport { Matrix4 } from 'three/src/math/Matrix4';\r\nimport { Vector3 } from 'three/src/math/Vector3';\r\n\r\n/**\r\n * General purpose functions.\r\n *\r\n * @module core/utils\r\n */\r\nexport default class CoreUtils {\r\n /**\r\n * Generate a bouding box object.\r\n * @param {Vector3} center - Center of the box.\r\n * @param {Vector3} halfDimensions - Half Dimensions of the box.\r\n * @return {Object} The bounding box object. {Object.min} is a {Vector3}\r\n * containing the min bounds. {Object.max} is a {Vector3} containing the\r\n * max bounds.\r\n * @return {boolean} False input NOT valid.\r\n * @example\r\n * // Returns\r\n * //{ min: { x : 0, y : 0, z : 0 },\r\n * // max: { x : 2, y : 4, z : 6 }\r\n * //}\r\n * VJS.Core.Utils.bbox(\r\n * new Vector3(1, 2, 3), new Vector3(1, 2, 3));\r\n *\r\n * //Returns false\r\n * VJS.Core.Utils.bbox(new Vector3(), new Matrix4());\r\n *\r\n */\r\n static bbox(center, halfDimensions) {\r\n // make sure we have valid inputs\r\n if (!(Validators.vector3(center) && Validators.vector3(halfDimensions))) {\r\n console.log('Invalid center or plane halfDimensions.');\r\n return false;\r\n }\r\n\r\n // make sure half dimensions are >= 0\r\n if (!(halfDimensions.x >= 0 && halfDimensions.y >= 0 && halfDimensions.z >= 0)) {\r\n window.console.log('halfDimensions must be >= 0.');\r\n window.console.log(halfDimensions);\r\n return false;\r\n }\r\n\r\n // min/max bound\r\n let min = center.clone().sub(halfDimensions);\r\n let max = center.clone().add(halfDimensions);\r\n\r\n return {\r\n min,\r\n max,\r\n };\r\n }\r\n\r\n /**\r\n * Find min/max values in an array\r\n * @param {Array} data\r\n * @return {Array}\r\n */\r\n static minMax(data = []) {\r\n let minMax = [65535, -32768];\r\n let numPixels = data.length;\r\n\r\n for (let index = 0; index < numPixels; index++) {\r\n let spv = data[index];\r\n minMax[0] = Math.min(minMax[0], spv);\r\n minMax[1] = Math.max(minMax[1], spv);\r\n }\r\n\r\n return minMax;\r\n }\r\n\r\n /**\r\n * Check HTMLElement\r\n * @param {HTMLElement} obj\r\n * @return {boolean}\r\n */\r\n static isElement(obj) {\r\n try {\r\n // Using W3 DOM2 (works for FF, Opera and Chrom)\r\n return obj instanceof HTMLElement;\r\n } catch (e) {\r\n // Browsers not supporting W3 DOM2 don't have HTMLElement and\r\n // an exception is thrown and we end up here. Testing some\r\n // properties that all elements have. (works on IE7)\r\n return (\r\n typeof obj === 'object' &&\r\n obj.nodeType === 1 &&\r\n typeof obj.style === 'object' &&\r\n typeof obj.ownerDocument === 'object'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Check string\r\n * @param {String} str\r\n * @return {Boolean}\r\n */\r\n static isString(str) {\r\n return typeof str === 'string' || str instanceof String;\r\n }\r\n\r\n /**\r\n * Parse url and find out the extension of the exam file.\r\n *\r\n * @param {*} url - The url to be parsed.\r\n * The query string can contain some \"special\" parameters that can be used to ease the parsing process\r\n * when the url doesn't match the exam file name on the filesystem:\r\n * - filename: the name of the exam file\r\n * - contentType: the mime type of the exam file. Currently only \"application/dicom\" is recognized, nifti files don't have a standard mime type.\r\n * For example:\r\n * http:///getExam?id=100&filename=myexam%2Enii%2Egz\r\n * http:///getExam?id=100&contentType=application%2Fdicom\r\n *\r\n * @return {Object}\r\n */\r\n static parseUrl(url) {\r\n const parsedUrl = new URL(url, 'http://fix.me');\r\n const data = {\r\n filename: parsedUrl.searchParams.get('filename'),\r\n extension: '',\r\n pathname: parsedUrl.pathname,\r\n query: parsedUrl.search,\r\n };\r\n // get file name\r\n if (!data.filename) {\r\n data.filename = data.pathname.split('/').pop();\r\n }\r\n\r\n // find extension\r\n const splittedName = data.filename.split('.');\r\n\r\n data.extension = splittedName.length > 1 ? splittedName.pop() : 'dicom';\r\n\r\n const skipExt = [\r\n 'asp',\r\n 'aspx',\r\n 'go',\r\n 'gs',\r\n 'hs',\r\n 'jsp',\r\n 'js',\r\n 'php',\r\n 'pl',\r\n 'py',\r\n 'rb',\r\n 'htm',\r\n 'html',\r\n ];\r\n\r\n if (\r\n !isNaN(data.extension) ||\r\n skipExt.indexOf(data.extension) !== -1 ||\r\n (data.query && data.query.includes('contentType=application%2Fdicom'))\r\n ) {\r\n data.extension = 'dicom';\r\n }\r\n console.log('url data', data);\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Compute IJK to LPS tranform.\r\n * http://nipy.org/nibabel/dicom/dicom_orientation.html\r\n *\r\n * @param {*} xCos\r\n * @param {*} yCos\r\n * @param {*} zCos\r\n * @param {*} spacing\r\n * @param {*} origin\r\n * @param {*} registrationMatrix\r\n *\r\n * @return {*}\r\n */\r\n static ijk2LPS(xCos, yCos, zCos, spacing, origin, registrationMatrix = new Matrix4()) {\r\n const ijk2LPS = new Matrix4();\r\n ijk2LPS.set(\r\n xCos.x * spacing.y,\r\n yCos.x * spacing.x,\r\n zCos.x * spacing.z,\r\n origin.x,\r\n xCos.y * spacing.y,\r\n yCos.y * spacing.x,\r\n zCos.y * spacing.z,\r\n origin.y,\r\n xCos.z * spacing.y,\r\n yCos.z * spacing.x,\r\n zCos.z * spacing.z,\r\n origin.z,\r\n 0,\r\n 0,\r\n 0,\r\n 1\r\n );\r\n ijk2LPS.premultiply(registrationMatrix);\r\n\r\n return ijk2LPS;\r\n }\r\n\r\n /**\r\n * Compute AABB to LPS transform.\r\n * AABB: Axe Aligned Bounding Box.\r\n *\r\n * @param {*} xCos\r\n * @param {*} yCos\r\n * @param {*} zCos\r\n * @param {*} origin\r\n *\r\n * @return {*}\r\n */\r\n static aabb2LPS(xCos, yCos, zCos, origin) {\r\n const aabb2LPS = new Matrix4();\r\n aabb2LPS.set(\r\n xCos.x,\r\n yCos.x,\r\n zCos.x,\r\n origin.x,\r\n xCos.y,\r\n yCos.y,\r\n zCos.y,\r\n origin.y,\r\n xCos.z,\r\n yCos.z,\r\n zCos.z,\r\n origin.z,\r\n 0,\r\n 0,\r\n 0,\r\n 1\r\n );\r\n\r\n return aabb2LPS;\r\n }\r\n\r\n /**\r\n * Transform coordinates from world coordinate to data\r\n *\r\n * @param {*} lps2IJK\r\n * @param {*} worldCoordinates\r\n *\r\n * @return {*}\r\n */\r\n static worldToData(lps2IJK, worldCoordinates) {\r\n let dataCoordinate = new Vector3().copy(worldCoordinates).applyMatrix4(lps2IJK);\r\n\r\n // same rounding in the shaders\r\n dataCoordinate.addScalar(0.5).floor();\r\n\r\n return dataCoordinate;\r\n }\r\n\r\n static value(stack, coordinate) {\r\n window.console.warn('value is deprecated, please use getPixelData instead');\r\n this.getPixelData(stack, coordinate);\r\n }\r\n\r\n /**\r\n * Get voxel value\r\n *\r\n * @param {ModelsStack} stack\r\n * @param {Vector3} coordinate\r\n * @return {*}\r\n */\r\n static getPixelData(stack, coordinate) {\r\n if (coordinate.z >= 0 && coordinate.z < stack._frame.length) {\r\n return stack._frame[coordinate.z].getPixelData(coordinate.x, coordinate.y);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Set voxel value\r\n *\r\n * @param {ModelsStack} stack\r\n * @param {Vector3} coordinate\r\n * @param {Number} value\r\n * @return {*}\r\n */\r\n static setPixelData(stack, coordinate, value) {\r\n if (coordinate.z >= 0 && coordinate.z < stack._frame.length) {\r\n stack._frame[coordinate.z].setPixelData(coordinate.x, coordinate.y, value);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Apply slope/intercept to a value\r\n *\r\n * @param {*} value\r\n * @param {*} slope\r\n * @param {*} intercept\r\n *\r\n * @return {*}\r\n */\r\n static rescaleSlopeIntercept(value, slope, intercept) {\r\n return value * slope + intercept;\r\n }\r\n\r\n /**\r\n *\r\n * Convenience function to extract center of mass from list of points.\r\n *\r\n * @param {Array} points - Set of points from which we want to extract the center of mass.\r\n *\r\n * @returns {Vector3} Center of mass from given points.\r\n */\r\n static centerOfMass(points) {\r\n let centerOfMass = new Vector3(0, 0, 0);\r\n for (let i = 0; i < points.length; i++) {\r\n centerOfMass.x += points[i].x;\r\n centerOfMass.y += points[i].y;\r\n centerOfMass.z += points[i].z;\r\n }\r\n centerOfMass.divideScalar(points.length);\r\n\r\n return centerOfMass;\r\n }\r\n\r\n /**\r\n *\r\n * Order 3D planar points around a refence point.\r\n *\r\n * @private\r\n *\r\n * @param {Array} points - Set of planar 3D points to be ordered.\r\n * @param {Vector3} direction - Direction of the plane in which points and reference are sitting.\r\n *\r\n * @returns {Array} Set of object representing the ordered points.\r\n */\r\n static orderIntersections(points, direction) {\r\n let reference = this.centerOfMass(points);\r\n // direction from first point to reference\r\n let referenceDirection = new Vector3(\r\n points[0].x - reference.x,\r\n points[0].y - reference.y,\r\n points[0].z - reference.z\r\n ).normalize();\r\n\r\n let base = new Vector3(0, 0, 0).crossVectors(referenceDirection, direction).normalize();\r\n\r\n let orderedpoints = [];\r\n\r\n // other lines // if inter, return location + angle\r\n for (let j = 0; j < points.length; j++) {\r\n let point = new Vector3(points[j].x, points[j].y, points[j].z);\r\n point.direction = new Vector3(\r\n points[j].x - reference.x,\r\n points[j].y - reference.y,\r\n points[j].z - reference.z\r\n ).normalize();\r\n\r\n let x = referenceDirection.dot(point.direction);\r\n let y = base.dot(point.direction);\r\n point.xy = { x, y };\r\n\r\n let theta = Math.atan2(y, x) * (180 / Math.PI);\r\n point.angle = theta;\r\n\r\n orderedpoints.push(point);\r\n }\r\n\r\n orderedpoints.sort(function(a, b) {\r\n return a.angle - b.angle;\r\n });\r\n\r\n let noDups = [orderedpoints[0]];\r\n let epsilon = 0.0001;\r\n for (let i = 1; i < orderedpoints.length; i++) {\r\n if (Math.abs(orderedpoints[i - 1].angle - orderedpoints[i].angle) > epsilon) {\r\n noDups.push(orderedpoints[i]);\r\n }\r\n }\r\n\r\n return noDups;\r\n }\r\n\r\n /**\r\n * Get min, max, mean and sd of voxel values behind the mesh\r\n *\r\n * @param {THREE.Mesh} mesh Region of Interest\r\n * @param {*} camera Tested on CamerasOrthographic\r\n * @param {ModelsStack} stack\r\n *\r\n * @return {Object|null}\r\n */\r\n static getRoI(mesh, camera, stack) {\r\n mesh.geometry.computeBoundingBox();\r\n\r\n const bbox = new Box3().setFromObject(mesh);\r\n const min = bbox.min.clone().project(camera);\r\n const max = bbox.max.clone().project(camera);\r\n const offsetWidth = camera.controls.domElement.offsetWidth;\r\n const offsetHeight = camera.controls.domElement.offsetHeight;\r\n const rayCaster = new Raycaster();\r\n const values = [];\r\n\r\n min.x = Math.round(((min.x + 1) * offsetWidth) / 2);\r\n min.y = Math.round(((-min.y + 1) * offsetHeight) / 2);\r\n max.x = Math.round(((max.x + 1) * offsetWidth) / 2);\r\n max.y = Math.round(((-max.y + 1) * offsetHeight) / 2);\r\n [min.x, max.x] = [Math.min(min.x, max.x), Math.max(min.x, max.x)];\r\n [min.y, max.y] = [Math.min(min.y, max.y), Math.max(min.y, max.y)];\r\n\r\n let intersect = [];\r\n let value = null;\r\n\r\n for (let x = min.x; x <= max.x; x++) {\r\n for (let y = min.y; y <= max.y; y++) {\r\n rayCaster.setFromCamera(\r\n {\r\n x: (x / offsetWidth) * 2 - 1,\r\n y: -(y / offsetHeight) * 2 + 1,\r\n },\r\n camera\r\n );\r\n intersect = rayCaster.intersectObject(mesh);\r\n\r\n if (intersect.length === 0) {\r\n continue;\r\n }\r\n\r\n value = CoreUtils.getPixelData(\r\n stack,\r\n CoreUtils.worldToData(stack.lps2IJK, intersect[0].point)\r\n );\r\n\r\n // the image isn't RGB and coordinates are inside it\r\n if (value !== null && stack.numberOfChannels === 1) {\r\n values.push(\r\n CoreUtils.rescaleSlopeIntercept(value, stack.rescaleSlope, stack.rescaleIntercept)\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (values.length === 0) {\r\n return null;\r\n }\r\n\r\n const avg = values.reduce((sum, val) => sum + val) / values.length;\r\n\r\n return {\r\n min: values.reduce((prev, val) => (prev < val ? prev : val)),\r\n max: values.reduce((prev, val) => (prev > val ? prev : val)),\r\n mean: avg,\r\n sd: Math.sqrt(values.reduce((sum, val) => sum + Math.pow(val - avg, 2), 0) / values.length),\r\n };\r\n }\r\n\r\n /**\r\n * Calculate shape area (sum of triangle polygons area).\r\n * May be inaccurate or completely wrong for some shapes.\r\n *\r\n * @param {THREE.Geometry} geometry\r\n *\r\n * @returns {Number}\r\n */\r\n static getGeometryArea(geometry) {\r\n if (geometry.faces.length < 1) {\r\n return 0.0;\r\n }\r\n\r\n let area = 0.0;\r\n let vertices = geometry.vertices;\r\n\r\n geometry.faces.forEach(function(elem) {\r\n area += new Triangle(vertices[elem.a], vertices[elem.b], vertices[elem.c]).getArea();\r\n });\r\n\r\n return area;\r\n }\r\n\r\n static stringToNumber(numberAsString) {\r\n let number = Number(numberAsString);\r\n\r\n // returns true is number is NaN\r\n if (number !== number) {\r\n const dots = (numberAsString.match(/\\./g)||[]).length;\r\n const commas = (numberAsString.match(/\\,/g)||[]).length;\r\n\r\n if (commas === 1 && dots < 2) {\r\n // convert 1,45 to 1.45\r\n // convert 1,456.78 to 1456.78\r\n const replaceBy = dots === 0 ? '.' : '';\r\n const stringWithoutComma = numberAsString.replace(/,/g, replaceBy);\r\n number = Number(stringWithoutComma);\r\n }\r\n\r\n // if that didn't help\r\n // weird stuff happenning\r\n // should throw an error instead of setting value to 1.0\r\n if (number !== number) {\r\n console.error(`String could not be converted to number (${numberAsString}). Setting value to \"1.0\".`);\r\n number = 1.0;\r\n }\r\n }\r\n\r\n return number;\r\n }\r\n}\r\n","/**\r\n * Validate basic structures.\r\n *\r\n * @example\r\n * //Returns true\r\n * VJS.Core.Validators.matrix4(new THREE.Matrix4());\r\n *\r\n * //Returns false\r\n * VJS.Core.Validators.matrix4(new THREE.Vector3());\r\n *\r\n * @module core/validators\r\n */\r\n\r\nexport default class Validators {\r\n /**\r\n * Validates a matrix as a THREEJS.Matrix4\r\n * link\r\n * @param {Object} objectToTest - The object to be tested.\r\n * @return {boolean} True if valid Matrix4, false if NOT.\r\n */\r\n static matrix4(objectToTest) {\r\n if (\r\n !(\r\n objectToTest !== null &&\r\n typeof objectToTest !== 'undefined' &&\r\n objectToTest.hasOwnProperty('elements') &&\r\n objectToTest.elements.length === 16 &&\r\n typeof objectToTest.identity === 'function' &&\r\n typeof objectToTest.copy === 'function' &&\r\n typeof objectToTest.determinant === 'function'\r\n )\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Validates a vector as a THREEJS.Vector3\r\n * @param {Object} objectToTest - The object to be tested.\r\n * @return {boolean} True if valid Vector3, false if NOT.\r\n */\r\n static vector3(objectToTest) {\r\n if (\r\n !(\r\n objectToTest !== null &&\r\n typeof objectToTest !== 'undefined' &&\r\n objectToTest.hasOwnProperty('x') &&\r\n objectToTest.hasOwnProperty('y') &&\r\n objectToTest.hasOwnProperty('z') &&\r\n !objectToTest.hasOwnProperty('w')\r\n )\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Validates a box.\r\n *\r\n * @example\r\n * // a box is defined as\r\n * let box = {\r\n * center: THREE.Vector3,\r\n * halfDimensions: THREE.Vector3\r\n * }\r\n *\r\n * @param {Object} objectToTest - The object to be tested.\r\n * @return {boolean} True if valid box, false if NOT.\r\n */\r\n static box(objectToTest) {\r\n if (\r\n !(\r\n objectToTest !== null &&\r\n typeof objectToTest !== 'undefined' &&\r\n objectToTest.hasOwnProperty('center') &&\r\n this.vector3(objectToTest.center) &&\r\n objectToTest.hasOwnProperty('halfDimensions') &&\r\n this.vector3(objectToTest.halfDimensions) &&\r\n objectToTest.halfDimensions.x >= 0 &&\r\n objectToTest.halfDimensions.y >= 0 &&\r\n objectToTest.halfDimensions.z >= 0\r\n )\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Validates a ray.\r\n *\r\n * @example\r\n * // a ray is defined as\r\n * let ray = {\r\n * postion: THREE.Vector3,\r\n * direction: THREE.Vector3\r\n * }\r\n *\r\n * @param {Object} objectToTest - The object to be tested.\r\n * @return {boolean} True if valid ray, false if NOT.\r\n */\r\n static ray(objectToTest) {\r\n if (\r\n !(\r\n objectToTest !== null &&\r\n typeof objectToTest !== 'undefined' &&\r\n objectToTest.hasOwnProperty('position') &&\r\n this.vector3(objectToTest.position) &&\r\n objectToTest.hasOwnProperty('direction') &&\r\n this.vector3(objectToTest.direction)\r\n )\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","// from dicom wadoo loader\r\n// https://github.com/cornerstonejs/cornerstoneWADOImageLoader/blob/master/src/shared/decoders/decodeRLE.js\r\nfunction decodeRLE(imageFrame, pixelData) {\r\n if (imageFrame.bitsAllocated === 8) {\r\n if (imageFrame.planarConfiguration) {\r\n return decode8Planar(imageFrame, pixelData);\r\n }\r\n\r\n return decode8(imageFrame, pixelData);\r\n } else if (imageFrame.bitsAllocated === 16) {\r\n return decode16(imageFrame, pixelData);\r\n }\r\n\r\n throw new Error('unsupported pixel format for RLE');\r\n}\r\n\r\nfunction decode8(imageFrame, pixelData) {\r\n const frameData = pixelData;\r\n const frameSize = imageFrame.rows * imageFrame.columns;\r\n const outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel);\r\n const header = new DataView(frameData.buffer, frameData.byteOffset);\r\n const data = new Int8Array(frameData.buffer, frameData.byteOffset);\r\n const out = new Int8Array(outFrame);\r\n\r\n let outIndex = 0;\r\n const numSegments = header.getInt32(0, true);\r\n\r\n for (let s = 0; s < numSegments; ++s) {\r\n outIndex = s;\r\n\r\n let inIndex = header.getInt32((s + 1) * 4, true);\r\n let maxIndex = header.getInt32((s + 2) * 4, true);\r\n\r\n if (maxIndex === 0) {\r\n maxIndex = frameData.length;\r\n }\r\n\r\n const endOfSegment = frameSize * numSegments;\r\n\r\n while (inIndex < maxIndex) {\r\n const n = data[inIndex++];\r\n\r\n if (n >= 0 && n <= 127) {\r\n // copy n bytes\r\n for (let i = 0; i < n + 1 && outIndex < endOfSegment; ++i) {\r\n out[outIndex] = data[inIndex++];\r\n outIndex += imageFrame.samplesPerPixel;\r\n }\r\n } else if (n <= -1 && n >= -127) {\r\n const value = data[inIndex++];\r\n // run of n bytes\r\n\r\n for (let j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) {\r\n out[outIndex] = value;\r\n outIndex += imageFrame.samplesPerPixel;\r\n }\r\n } /* else if (n === -128) {\r\n } // do nothing */\r\n }\r\n }\r\n imageFrame.pixelData = new Uint8Array(outFrame);\r\n\r\n return imageFrame;\r\n}\r\n\r\nfunction decode8Planar(imageFrame, pixelData) {\r\n const frameData = pixelData;\r\n const frameSize = imageFrame.rows * imageFrame.columns;\r\n const outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel);\r\n const header = new DataView(frameData.buffer, frameData.byteOffset);\r\n const data = new Int8Array(frameData.buffer, frameData.byteOffset);\r\n const out = new Int8Array(outFrame);\r\n\r\n let outIndex = 0;\r\n const numSegments = header.getInt32(0, true);\r\n\r\n for (let s = 0; s < numSegments; ++s) {\r\n outIndex = s * frameSize;\r\n\r\n let inIndex = header.getInt32((s + 1) * 4, true);\r\n let maxIndex = header.getInt32((s + 2) * 4, true);\r\n\r\n if (maxIndex === 0) {\r\n maxIndex = frameData.length;\r\n }\r\n\r\n const endOfSegment = frameSize * numSegments;\r\n\r\n while (inIndex < maxIndex) {\r\n const n = data[inIndex++];\r\n\r\n if (n >= 0 && n <= 127) {\r\n // copy n bytes\r\n for (let i = 0; i < n + 1 && outIndex < endOfSegment; ++i) {\r\n out[outIndex] = data[inIndex++];\r\n outIndex++;\r\n }\r\n } else if (n <= -1 && n >= -127) {\r\n const value = data[inIndex++];\r\n // run of n bytes\r\n\r\n for (let j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) {\r\n out[outIndex] = value;\r\n outIndex++;\r\n }\r\n } /* else if (n === -128) {\r\n } // do nothing */\r\n }\r\n }\r\n imageFrame.pixelData = new Uint8Array(outFrame);\r\n\r\n return imageFrame;\r\n}\r\n\r\nfunction decode16(imageFrame, pixelData) {\r\n const frameData = pixelData;\r\n const frameSize = imageFrame.rows * imageFrame.columns;\r\n\r\n const outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel * 2);\r\n\r\n const header = new DataView(frameData.buffer, frameData.byteOffset);\r\n const data = new Int8Array(frameData.buffer, frameData.byteOffset);\r\n\r\n const out = new Int8Array(outFrame);\r\n\r\n const numSegments = header.getInt32(0, true);\r\n\r\n for (let s = 0; s < numSegments; ++s) {\r\n let outIndex = 0;\r\n const highByte = s === 0 ? 1 : 0;\r\n\r\n let inIndex = header.getInt32((s + 1) * 4, true);\r\n let maxIndex = header.getInt32((s + 2) * 4, true);\r\n\r\n if (maxIndex === 0) {\r\n maxIndex = frameData.length;\r\n }\r\n\r\n while (inIndex < maxIndex) {\r\n const n = data[inIndex++];\r\n\r\n if (n >= 0 && n <= 127) {\r\n for (let i = 0; i < n + 1 && outIndex < frameSize; ++i) {\r\n out[outIndex * 2 + highByte] = data[inIndex++];\r\n outIndex++;\r\n }\r\n } else if (n <= -1 && n >= -127) {\r\n const value = data[inIndex++];\r\n\r\n for (let j = 0; j < -n + 1 && outIndex < frameSize; ++j) {\r\n out[outIndex * 2 + highByte] = value;\r\n outIndex++;\r\n }\r\n } /* else if (n === -128) {\r\n } // do nothing */\r\n }\r\n }\r\n if (imageFrame.pixelRepresentation === 0) {\r\n imageFrame.pixelData = new Uint16Array(outFrame);\r\n } else {\r\n imageFrame.pixelData = new Int16Array(outFrame);\r\n }\r\n\r\n return imageFrame;\r\n}\r\n\r\nexport const RLEDecoder = decodeRLE;\r\n","import Slice, { geometriesSlice } from './geometries.slice';\r\nimport Voxel, { geometriesVoxel } from './geometries.voxel';\r\n\r\nexport {\r\n Slice as SliceGeometry,\r\n geometriesSlice as sliceGeometryFactory,\r\n Voxel as VoxelGeometry,\r\n geometriesVoxel as voxelGeometryFactory,\r\n};\r\n","/** * Imports ***/\r\nimport coreIntersections from '../core/core.intersections';\r\nimport coreUtils from '../core/core.utils';\r\n\r\n/**\r\n *\r\n * It is typically used for creating an irregular 3D planar shape given a box and the cut-plane.\r\n *\r\n * Demo: {@link https://fnndsc.github.io/vjs#geometry_slice}\r\n *\r\n * @module geometries/slice\r\n *\r\n * @param {Vector3} halfDimensions - Half-dimensions of the box to be sliced.\r\n * @param {Vector3} center - Center of the box to be sliced.\r\n * @param {Vector3} orientation - Orientation of the box to be sliced. (might not be necessary..?)\r\n * @param {Vector3} position - Position of the cutting plane.\r\n * @param {Vector3} direction - Cross direction of the cutting plane.\r\n *\r\n * @example\r\n * // Define box to be sliced\r\n * let halfDimensions = new THREE.Vector(123, 45, 67);\r\n * let center = new Vector3(0, 0, 0);\r\n * let orientation = new Vector3(\r\n * new Vector3(1, 0, 0),\r\n * new Vector3(0, 1, 0),\r\n * new Vector3(0, 0, 1)\r\n * );\r\n *\r\n * // Define slice plane\r\n * let position = center.clone();\r\n * let direction = new Vector3(-0.2, 0.5, 0.3);\r\n *\r\n * // Create the slice geometry & materials\r\n * let sliceGeometry = new VJS.geometries.slice(halfDimensions, center, orientation, position, direction);\r\n * let sliceMaterial = new THREE.MeshBasicMaterial({\r\n * 'side': THREE.DoubleSide,\r\n * 'color': 0xFF5722\r\n * });\r\n *\r\n * // Create mesh and add it to the scene\r\n * let slice = new THREE.Mesh(sliceGeometry, sliceMaterial);\r\n * scene.add(slice);\r\n */\r\n\r\nconst geometriesSlice = (three = window.THREE) => {\r\n if (three === undefined || three.ShapeBufferGeometry === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = three.ShapeBufferGeometry;\r\n return class extends Constructor {\r\n constructor(halfDimensions, center, position, direction, toAABB = new three.Matrix4()) {\r\n //\r\n // prepare data for the shape!\r\n //\r\n let aabb = {\r\n halfDimensions,\r\n center,\r\n toAABB,\r\n };\r\n\r\n let plane = {\r\n position,\r\n direction,\r\n };\r\n\r\n // BOOM!\r\n let intersections = coreIntersections.aabbPlane(aabb, plane);\r\n\r\n // can not exist before calling the constructor\r\n if (intersections.length < 3) {\r\n window.console.log('WARNING: Less than 3 intersections between AABB and Plane.');\r\n window.console.log('AABB');\r\n window.console.log(aabb);\r\n window.console.log('Plane');\r\n window.console.log(plane);\r\n window.console.log('exiting...');\r\n const err = new Error(\r\n 'geometries.slice has less than 3 intersections, can not create a valid geometry.'\r\n );\r\n throw err;\r\n }\r\n\r\n let points = coreUtils.orderIntersections(intersections, direction);\r\n\r\n // create the shape\r\n let shape = new three.Shape();\r\n // move to first point!\r\n shape.moveTo(points[0].xy.x, points[0].xy.y);\r\n\r\n // loop through all points!\r\n const positions = new Float32Array(points.length * 3);\r\n positions.set(points[0].toArray(), 0);\r\n\r\n for (let i = 1; i < points.length; i++) {\r\n // project each on plane!\r\n positions.set(points[i].toArray(), i * 3);\r\n\r\n shape.lineTo(points[i].xy.x, points[i].xy.y);\r\n }\r\n\r\n // close the shape!\r\n shape.lineTo(points[0].xy.x, points[0].xy.y);\r\n\r\n //\r\n // Generate Slice Buffer Geometry from Shape Buffer Geomtry\r\n // bewcause it does triangulation for us!\r\n super(shape);\r\n this.type = 'SliceBufferGeometry';\r\n\r\n // update real position of each vertex! (not in 2d)\r\n this.addAttribute( 'position', new three.Float32BufferAttribute( positions, 3 ) );\r\n this.vertices = points; // legacy code to compute normals int he SliceHelper\r\n }\r\n };\r\n};\r\n\r\n// export factory\r\nexport { geometriesSlice };\r\n// default export to\r\nexport default geometriesSlice();\r\n","/**\r\n *\r\n * @module geometries/voxel\r\n */\r\n\r\nconst geometriesVoxel = (three = window.THREE) => {\r\n if (three === undefined || three.BoxGeometry === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = three.BoxGeometry;\r\n return class extends Constructor {\r\n constructor(dataPosition) {\r\n super(1, 1, 1);\r\n\r\n this._location = dataPosition;\r\n\r\n this.applyMatrix(\r\n new three.Matrix4().makeTranslation(this._location.x, this._location.y, this._location.z)\r\n );\r\n\r\n this.verticesNeedUpdate = true;\r\n }\r\n\r\n resetVertices() {\r\n this.vertices[0].set(0.5, 0.5, 0.5);\r\n this.vertices[1].set(0.5, 0.5, -0.5);\r\n this.vertices[2].set(0.5, -0.5, 0.5);\r\n this.vertices[3].set(0.5, -0.5, -0.5);\r\n this.vertices[4].set(-0.5, 0.5, -0.5);\r\n this.vertices[5].set(-0.5, 0.5, 0.5);\r\n this.vertices[6].set(-0.5, -0.5, -0.5);\r\n this.vertices[7].set(-0.5, -0.5, 0.5);\r\n }\r\n\r\n set location(location) {\r\n this._location = location;\r\n\r\n // update vertices from location\r\n this.vertices[0].set(+0.5, +0.5, +0.5);\r\n this.vertices[1].set(+0.5, +0.5, -0.5);\r\n this.vertices[2].set(+0.5, -0.5, +0.5);\r\n this.vertices[3].set(+0.5, -0.5, -0.5);\r\n this.vertices[4].set(-0.5, +0.5, -0.5);\r\n this.vertices[5].set(-0.5, +0.5, +0.5);\r\n this.vertices[6].set(-0.5, -0.5, -0.5);\r\n this.vertices[7].set(-0.5, -0.5, +0.5);\r\n\r\n this.applyMatrix(\r\n new three.Matrix4().makeTranslation(this._location.x, this._location.y, this._location.z)\r\n );\r\n\r\n this.verticesNeedUpdate = true;\r\n }\r\n\r\n get location() {\r\n return this._location;\r\n }\r\n };\r\n};\r\n\r\n// export factory\r\nexport { geometriesVoxel };\r\n// default export to\r\nexport default geometriesVoxel();\r\n","/**\r\n * @module helpers/border\r\n */\r\n\r\nconst helpersBorder = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = three.Object3D;\r\n return class extends Constructor {\r\n constructor(helpersSlice) {\r\n //\r\n super();\r\n\r\n this._helpersSlice = helpersSlice;\r\n\r\n this._visible = true;\r\n this._color = 0xff0000;\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n\r\n this._create();\r\n }\r\n\r\n set helpersSlice(helpersSlice) {\r\n this._helpersSlice = helpersSlice;\r\n this._update();\r\n }\r\n\r\n get helpersSlice() {\r\n return this._helpersSlice;\r\n }\r\n\r\n set visible(visible) {\r\n this._visible = visible;\r\n if (this._mesh) {\r\n this._mesh.visible = this._visible;\r\n }\r\n }\r\n\r\n get visible() {\r\n return this._visible;\r\n }\r\n\r\n set color(color) {\r\n this._color = color;\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n get color() {\r\n return this._color;\r\n }\r\n\r\n _create() {\r\n if (!this._material) {\r\n this._material = new three.LineBasicMaterial({\r\n color: this._color,\r\n linewidth: 1,\r\n });\r\n }\r\n\r\n if (!this._helpersSlice.geometry.vertices) {\r\n return;\r\n }\r\n\r\n this._geometry = new three.BufferGeometry();\r\n \r\n // set vertices positions\r\n const nbOfVertices = this._helpersSlice.geometry.vertices.length;\r\n const positions = new Float32Array((nbOfVertices + 1) * 3);\r\n positions.set(this._helpersSlice.geometry.attributes.position.array, 0);\r\n positions.set(this._helpersSlice.geometry.vertices[0].toArray(), nbOfVertices * 3);\r\n this._geometry.addAttribute( 'position', new three.Float32BufferAttribute( positions, 3 ) );\r\n\r\n this._mesh = new three.Line(this._geometry, this._material);\r\n if (this._helpersSlice.aabbSpace === 'IJK') {\r\n this._mesh.applyMatrix(this._helpersSlice.stack.ijk2LPS);\r\n }\r\n this._mesh.visible = this._visible;\r\n\r\n // and add it!\r\n this.add(this._mesh);\r\n }\r\n\r\n _update() {\r\n // update slice\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh = null;\r\n }\r\n\r\n this._create();\r\n }\r\n\r\n dispose() {\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.dispose();\r\n this._material = null;\r\n }\r\n };\r\n};\r\n\r\n// export factory\r\nexport { helpersBorder };\r\n// default export to\r\nexport default helpersBorder();\r\n","/**\r\n * @module helpers/boundingbox\r\n */\r\n\r\nconst helpersBoundingBox = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = three.Object3D;\r\n return class extends Constructor {\r\n constructor(stack) {\r\n //\r\n super();\r\n\r\n // private vars\r\n this._stack = stack;\r\n this._visible = true;\r\n this._color = 0xffffff;\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n this._meshStack = null;\r\n\r\n // create object\r\n this._create();\r\n }\r\n\r\n // getters/setters\r\n set visible(visible) {\r\n this._visible = visible;\r\n if (this._mesh) {\r\n this._mesh.visible = this._visible;\r\n }\r\n }\r\n\r\n get visible() {\r\n return this._visible;\r\n }\r\n\r\n set color(color) {\r\n this._color = color;\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n get color() {\r\n return this._color;\r\n }\r\n\r\n // private methods\r\n _create() {\r\n // Convenience vars\r\n const dimensions = this._stack.dimensionsIJK;\r\n const halfDimensions = this._stack.halfDimensionsIJK;\r\n const offset = new three.Vector3(-0.5, -0.5, -0.5);\r\n\r\n // Geometry\r\n const geometry = new three.BoxGeometry(dimensions.x, dimensions.y, dimensions.z);\r\n geometry.applyMatrix(\r\n new three.Matrix4().makeTranslation(\r\n halfDimensions.x + offset.x,\r\n halfDimensions.y + offset.y,\r\n halfDimensions.z + offset.z\r\n )\r\n );\r\n this._geometry = geometry;\r\n\r\n // Material\r\n this._material = new three.MeshBasicMaterial({\r\n wireframe: true,\r\n });\r\n\r\n const mesh = new three.Mesh(this._geometry, null);\r\n mesh.applyMatrix(this._stack.ijk2LPS);\r\n mesh.visible = this._visible;\r\n this._meshStack = mesh;\r\n\r\n this._mesh = new three.BoxHelper(this._meshStack, this._color);\r\n this._material = this._mesh.material;\r\n\r\n this.add(this._mesh);\r\n }\r\n\r\n _update() {\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n }\r\n\r\n this._create();\r\n }\r\n\r\n dispose() {\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.dispose();\r\n this._material = null;\r\n }\r\n };\r\n};\r\n\r\n// export factory\r\nexport { helpersBoundingBox };\r\n// default export too\r\nexport default helpersBoundingBox();\r\n","/** * Imports ***/\r\nimport ShadersUniform from '../shaders/shaders.contour.uniform';\r\nimport ShadersVertex from '../shaders/shaders.contour.vertex';\r\nimport ShadersFragment from '../shaders/shaders.contour.fragment';\r\n\r\n/**\r\n * @module helpers/contour\r\n */\r\nconst helpersContour = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = three.Object3D;\r\n return class extends Constructor {\r\n constructor(stack, geometry, texture) {\r\n //\r\n super();\r\n\r\n this._stack = stack;\r\n this._textureToFilter = texture;\r\n this._contourWidth = 1;\r\n this._contourOpacity = 1;\r\n this._canvasWidth = 0;\r\n this._canvasHeight = 0;\r\n this._shadersFragment = ShadersFragment;\r\n this._shadersVertex = ShadersVertex;\r\n this._uniforms = ShadersUniform.uniforms();\r\n this._material = null;\r\n this._geometry = geometry;\r\n\r\n this._create();\r\n }\r\n\r\n _create() {\r\n this._prepareMaterial();\r\n this._mesh = new three.Mesh(this._geometry, this._material);\r\n this._mesh.applyMatrix(this._stack._ijk2LPS);\r\n this.add(this._mesh);\r\n }\r\n\r\n _prepareMaterial() {\r\n if (!this._material) {\r\n // contour default width\r\n this._uniforms.uWidth.value = this._contourWidth;\r\n this._uniforms.uOpacity.value = this._contourOpacity;\r\n\r\n //\r\n this._uniforms.uCanvasWidth.value = this._canvasWidth;\r\n this._uniforms.uCanvasHeight.value = this._canvasHeight;\r\n\r\n // generate material\r\n let fs = new ShadersFragment(this._uniforms);\r\n let vs = new ShadersVertex();\r\n this._material = new three.ShaderMaterial({\r\n side: three.DoubleSide,\r\n uniforms: this._uniforms,\r\n vertexShader: vs.compute(),\r\n fragmentShader: fs.compute(),\r\n transparent: true,\r\n });\r\n }\r\n }\r\n\r\n update() {\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh = null;\r\n }\r\n\r\n this._create();\r\n }\r\n\r\n dispose() {\r\n //\r\n if (this._textureToFilter !== null) {\r\n this._textureToFilter.dispose();\r\n this._textureToFilter = null;\r\n }\r\n\r\n this._shadersFragment = null;\r\n this._shadersVertex = null;\r\n\r\n this._uniforms = null;\r\n\r\n // material, geometry and mesh\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n this._stack = null;\r\n }\r\n\r\n get geometry() {\r\n return this._geometry;\r\n }\r\n\r\n set geometry(geometry) {\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh = null;\r\n\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n }\r\n\r\n this._geometry = geometry;\r\n\r\n this._create();\r\n }\r\n\r\n get textureToFilter() {\r\n return this._textureToFilter;\r\n }\r\n\r\n set textureToFilter(texture) {\r\n this._textureToFilter = texture;\r\n this._uniforms.uTextureFilled.value = texture;\r\n this._material.needsUpdate = true;\r\n }\r\n\r\n get contourOpacity() {\r\n return this._contourOpacity;\r\n }\r\n\r\n set contourOpacity(contourOpacity) {\r\n this._contourOpacity = contourOpacity;\r\n this._uniforms.uOpacity.value = this._contourOpacity;\r\n }\r\n\r\n get contourWidth() {\r\n return this._contourWidth;\r\n }\r\n\r\n set contourWidth(contourWidth) {\r\n this._contourWidth = contourWidth;\r\n this._uniforms.uWidth.value = this._contourWidth;\r\n }\r\n\r\n get canvasWidth() {\r\n return this._canvasWidth;\r\n }\r\n\r\n set canvasWidth(canvasWidth) {\r\n this._canvasWidth = canvasWidth;\r\n this._uniforms.uCanvasWidth.value = this._canvasWidth;\r\n }\r\n\r\n get canvasHeight() {\r\n return this._canvasHeight;\r\n }\r\n\r\n set canvasHeight(canvasHeight) {\r\n this._canvasHeight = canvasHeight;\r\n this._uniforms.uCanvasHeight.value = this._canvasHeight;\r\n }\r\n };\r\n};\r\n\r\n// export factory\r\nexport { helpersContour };\r\n// default export to\r\nexport default helpersContour();\r\n","import Border, { helpersBorder } from './helpers.border';\r\nimport BoundingBox, { helpersBoundingBox } from './helpers.boundingbox';\r\nimport Contour, { helpersContour } from './helpers.contour';\r\nimport Localizer, { helpersLocalizer } from './helpers.localizer';\r\nimport Lut, { helpersLut } from './helpers.lut';\r\nimport SegmentationLut from './helpers.segmentationlut';\r\nimport ProgressBar from './helpers.progressbar';\r\nimport ProgressBarEventBased from './helpers.progressbar.eventbased';\r\nimport Slice, { helpersSlice } from './helpers.slice';\r\nimport Stack, { helpersStack } from './helpers.stack';\r\nimport VolumeRendering, { helpersVolumeRendering } from './helpers.volumerendering';\r\n\r\nexport {\r\n Border as BorderHelper,\r\n helpersBorder as borderHelperFactory,\r\n BoundingBox as BoundingBoxHelper,\r\n helpersBoundingBox as boundingBoxHelperFactory,\r\n Contour as ContourHelper,\r\n helpersContour as contourHelperFactory,\r\n Localizer as LocalizerHelper,\r\n helpersLocalizer as localizerHelperFactory,\r\n Lut as LutHelper,\r\n helpersLut as lutHelperFactory,\r\n SegmentationLut as SegmentationLutHelper,\r\n ProgressBar as ProgressBarHelper,\r\n ProgressBarEventBased as ProgressBarEventBasedHelper,\r\n Slice as SliceHelper,\r\n helpersSlice as sliceHelperFactory,\r\n Stack as StackHelper,\r\n helpersStack as stackHelperFactory,\r\n VolumeRendering as VolumeRenderingHelper,\r\n helpersVolumeRendering as VolumeRenderingHelperFactory,\r\n};\r\n","/** * Imports ***/\r\nimport ShadersUniform from '../shaders/shaders.localizer.uniform';\r\nimport ShadersVertex from '../shaders/shaders.localizer.vertex';\r\nimport ShadersFragment from '../shaders/shaders.localizer.fragment';\r\n\r\n/**\r\n * @module helpers/localizer\r\n */\r\nconst helpersLocalizer = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = three.Object3D;\r\n return class extends Constructor {\r\n constructor(stack, geometry, referencePlane) {\r\n //\r\n super();\r\n\r\n this._stack = stack;\r\n this._referencePlane = referencePlane;\r\n this._plane1 = null;\r\n this._color1 = null;\r\n this._plane2 = null;\r\n this._color2 = null;\r\n this._plane3 = null;\r\n this._color3 = null;\r\n this._canvasWidth = 0;\r\n this._canvasHeight = 0;\r\n this._shadersFragment = ShadersFragment;\r\n this._shadersVertex = ShadersVertex;\r\n this._uniforms = ShadersUniform.uniforms();\r\n this._material = null;\r\n this._geometry = geometry;\r\n\r\n this._create();\r\n }\r\n\r\n _create() {\r\n this._prepareMaterial();\r\n this._mesh = new three.Mesh(this._geometry, this._material);\r\n this._mesh.applyMatrix(this._stack._ijk2LPS);\r\n this.add(this._mesh);\r\n }\r\n\r\n _prepareMaterial() {\r\n if (!this._material) {\r\n // reference plane\r\n this._uniforms.uSlice.value = this._referencePlane;\r\n\r\n // localizer planes\r\n if (this._plane1) {\r\n this._uniforms.uPlane1.value = this._plane1;\r\n this._uniforms.uPlaneColor1.value = this._color1;\r\n }\r\n\r\n if (this._plane2) {\r\n this._uniforms.uPlane2.value = this._plane2;\r\n this._uniforms.uPlaneColor2.value = this._color2;\r\n }\r\n\r\n if (this._plane3) {\r\n this._uniforms.uPlane3.value = this._plane3;\r\n this._uniforms.uPlaneColor3.value = this._color3;\r\n }\r\n\r\n //\r\n this._uniforms.uCanvasWidth.value = this._canvasWidth;\r\n this._uniforms.uCanvasHeight.value = this._canvasHeight;\r\n\r\n // generate material\r\n let fs = new ShadersFragment(this._uniforms);\r\n let vs = new ShadersVertex();\r\n this._material = new three.ShaderMaterial({\r\n side: three.DoubleSide,\r\n uniforms: this._uniforms,\r\n vertexShader: vs.compute(),\r\n fragmentShader: fs.compute(),\r\n });\r\n this._material.transparent = true;\r\n }\r\n }\r\n\r\n update() {\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh = null;\r\n }\r\n\r\n this._create();\r\n }\r\n\r\n dispose() {\r\n //\r\n this._referencePlane = null;\r\n this._plane1 = null;\r\n this._color1 = null;\r\n this._plane2 = null;\r\n this._color2 = null;\r\n this._plane3 = null;\r\n this._color3 = null;\r\n\r\n this._shadersFragment = null;\r\n this._shadersVertex = null;\r\n\r\n this._uniforms = null;\r\n\r\n // material, geometry and mesh\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n this._stack = null;\r\n }\r\n\r\n get geometry() {\r\n return this._geometry;\r\n }\r\n\r\n set geometry(geometry) {\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh = null;\r\n\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n }\r\n\r\n this._geometry = geometry;\r\n\r\n this._create();\r\n }\r\n\r\n get referencePlane() {\r\n return this._referencePlane;\r\n }\r\n\r\n set referencePlane(referencePlane) {\r\n this._referencePlane = referencePlane;\r\n this._uniforms.uSlice.value = this._referencePlane;\r\n }\r\n\r\n get plane1() {\r\n return this._plane1;\r\n }\r\n\r\n set plane1(plane1) {\r\n this._plane1 = plane1;\r\n this._uniforms.uPlane1.value = this._plane1;\r\n }\r\n\r\n get color1() {\r\n return this._color1;\r\n }\r\n\r\n set color1(color1) {\r\n this._color1 = color1;\r\n this._uniforms.uPlaneColor1.value = this._color1;\r\n }\r\n\r\n get plane2() {\r\n return this._plane2;\r\n }\r\n\r\n set plane2(plane2) {\r\n this._plane2 = plane2;\r\n this._uniforms.uPlane2.value = this._plane2;\r\n }\r\n\r\n get color2() {\r\n return this._color2;\r\n }\r\n\r\n set color2(color2) {\r\n this._color2 = color2;\r\n this._uniforms.uPlaneColor2.value = this._color2;\r\n }\r\n\r\n get plane3() {\r\n return this._plane3;\r\n }\r\n\r\n set plane3(plane3) {\r\n this._plane3 = plane3;\r\n this._uniforms.uPlane3.value = this._plane3;\r\n }\r\n\r\n get color3() {\r\n return this._color3;\r\n }\r\n\r\n set color3(color3) {\r\n this._color3 = color3;\r\n this._uniforms.uPlaneColor3.value = this._color3;\r\n }\r\n\r\n get canvasWidth() {\r\n return this._canvasWidth;\r\n }\r\n\r\n set canvasWidth(canvasWidth) {\r\n this._canvasWidth = canvasWidth;\r\n this._uniforms.uCanvasWidth.value = this._canvasWidth;\r\n }\r\n\r\n get canvasHeight() {\r\n return this._canvasHeight;\r\n }\r\n\r\n set canvasHeight(canvasHeight) {\r\n this._canvasHeight = canvasHeight;\r\n this._uniforms.uCanvasHeight.value = this._canvasHeight;\r\n }\r\n };\r\n};\r\n\r\nexport { helpersLocalizer };\r\nexport default helpersLocalizer();\r\n","import CoreUtils from '../core/core.utils';\r\n\r\n/**\r\n * @module helpers/lut\r\n */\r\nconst helpersLut = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n const Constructor = three.Object3D;\r\n return class extends Constructor {\r\n constructor(\r\n domTarget,\r\n lut = 'default',\r\n lutO = 'linear',\r\n color = [[0, 0, 0, 0], [1, 1, 1, 1]],\r\n opacity = [[0, 0], [1, 1]],\r\n discrete = false\r\n ) {\r\n // min/max (0-1 or real intensities)\r\n // show/hide\r\n // horizontal/vertical\r\n super();\r\n if (CoreUtils.isString(domTarget)) {\r\n this._dom = document.getElementById(domTarget);\r\n } else {\r\n this._dom = domTarget;\r\n }\r\n\r\n this._discrete = discrete;\r\n this._color = color;\r\n this._lut = lut;\r\n this._luts = { [lut]: color };\r\n\r\n this._opacity = opacity;\r\n this._lutO = lutO;\r\n this._lutsO = { [lutO]: opacity };\r\n\r\n this.initCanvas();\r\n this.paintCanvas();\r\n }\r\n\r\n initCanvas() {\r\n // container\r\n this._canvasContainer = this.initCanvasContainer(this._dom);\r\n // background\r\n this._canvasBg = this.createCanvas();\r\n this._canvasContainer.appendChild(this._canvasBg);\r\n // foreground\r\n this._canvas = this.createCanvas();\r\n this._canvasContainer.appendChild(this._canvas);\r\n }\r\n\r\n initCanvasContainer(dom) {\r\n let canvasContainer = dom;\r\n canvasContainer.style.border = '1px solid #F9F9F9';\r\n return canvasContainer;\r\n }\r\n\r\n createCanvas() {\r\n let canvas = document.createElement('canvas');\r\n canvas.height = 1;\r\n canvas.width = 256;\r\n canvas.style.width = '256px';\r\n canvas.style.height = '16px';\r\n return canvas;\r\n }\r\n\r\n paintCanvas() {\r\n // setup context\r\n let ctx = this._canvas.getContext('2d');\r\n ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\r\n ctx.globalCompositeOperation = 'source-over';\r\n\r\n // apply color\r\n if (!this._discrete) {\r\n let color = ctx.createLinearGradient(0, 0, this._canvas.width, 0);\r\n for (let i = 0; i < this._color.length; i++) {\r\n color.addColorStop(\r\n this._color[i][0],\r\n `rgba( ${Math.round(this._color[i][1] * 255)}, ${Math.round(\r\n this._color[i][2] * 255\r\n )}, ${Math.round(this._color[i][3] * 255)}, 1)`\r\n );\r\n }\r\n\r\n ctx.fillStyle = color;\r\n ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\r\n\r\n // setup context\r\n ctx.globalCompositeOperation = 'destination-in';\r\n\r\n // apply opacity\r\n let opacity = ctx.createLinearGradient(0, 0, this._canvas.width, 0);\r\n for (let i = 0; i < this._opacity.length; i++) {\r\n opacity.addColorStop(\r\n this._opacity[i][0],\r\n 'rgba(255, 255, 255, ' + this._opacity[i][1] + ')'\r\n );\r\n }\r\n ctx.fillStyle = opacity;\r\n ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\r\n } else {\r\n ctx.lineWidth = 2 * this._canvas.height;\r\n\r\n for (let i = 0; i < this._color.length; i++) {\r\n let currentPos = this._color[i][0];\r\n let nextPos = 1;\r\n if (i < this._color.length - 1) {\r\n nextPos = this._color[i + 1][0];\r\n }\r\n let previousPos = 0;\r\n if (i > 0) {\r\n previousPos = this._color[i - 1][0];\r\n }\r\n\r\n let from = previousPos + (currentPos - previousPos) / 2;\r\n let to = currentPos + (nextPos - currentPos) / 2;\r\n let color = this._color[i];\r\n let opacity = this._opacity[i] ? this._opacity[i][1] : 1;\r\n\r\n ctx.beginPath();\r\n ctx.strokeStyle = `rgba( ${Math.round(color[1] * 255)}, ${Math.round(\r\n color[2] * 255\r\n )}, ${Math.round(color[3] * 255)}, ${opacity})`;\r\n ctx.moveTo(from * this._canvas.width, 0);\r\n ctx.lineTo(to * this._canvas.width, 0);\r\n ctx.stroke();\r\n ctx.closePath();\r\n }\r\n }\r\n }\r\n\r\n get texture() {\r\n let texture = new three.Texture(this._canvas);\r\n texture.mapping = three.UVMapping;\r\n texture.wrapS = texture.wrapT = three.ClampToEdgeWrapping;\r\n texture.magFilter = texture.minFilter = three.NearestFilter;\r\n texture.premultiplyAlpha = true;\r\n texture.needsUpdate = true;\r\n return texture;\r\n }\r\n\r\n set lut(targetLUT) {\r\n this._color = this._luts[targetLUT];\r\n this._lut = targetLUT;\r\n\r\n this.paintCanvas();\r\n }\r\n\r\n get lut() {\r\n return this._lut;\r\n }\r\n\r\n set luts(newLuts) {\r\n this._luts = newLuts;\r\n }\r\n\r\n get luts() {\r\n return this._luts;\r\n }\r\n\r\n set lutO(targetLUTO) {\r\n this._opacity = this._lutsO[targetLUTO];\r\n this._lutO = targetLUTO;\r\n\r\n this.paintCanvas();\r\n }\r\n\r\n get lutO() {\r\n return this._lutO;\r\n }\r\n\r\n set lutsO(newLutsO) {\r\n this._lutsO = newLutsO;\r\n }\r\n\r\n get lutsO() {\r\n return this._lutsO;\r\n }\r\n\r\n set discrete(discrete) {\r\n this._discrete = discrete;\r\n\r\n this.paintCanvas();\r\n }\r\n\r\n get discrete() {\r\n return this._discrete;\r\n }\r\n\r\n lutsAvailable(type = 'color') {\r\n let available = [];\r\n let luts = this._luts;\r\n\r\n if (type !== 'color') {\r\n luts = this._lutsO;\r\n }\r\n\r\n for (let i in luts) {\r\n available.push(i);\r\n }\r\n\r\n return available;\r\n }\r\n\r\n // add luts to class' lut (so a user can add its own as well)\r\n static presetLuts() {\r\n return {\r\n default: [[0, 0, 0, 0], [1, 1, 1, 1]],\r\n spectrum: [\r\n [0, 0, 0, 0],\r\n [0.1, 0, 0, 1],\r\n [0.33, 0, 1, 1],\r\n [0.5, 0, 1, 0],\r\n [0.66, 1, 1, 0],\r\n [0.9, 1, 0, 0],\r\n [1, 1, 1, 1],\r\n ],\r\n hot_and_cold: [\r\n [0, 0, 0, 1],\r\n [0.15, 0, 1, 1],\r\n [0.3, 0, 1, 0],\r\n [0.45, 0, 0, 0],\r\n [0.5, 0, 0, 0],\r\n [0.55, 0, 0, 0],\r\n [0.7, 1, 1, 0],\r\n [0.85, 1, 0, 0],\r\n [1, 1, 1, 1],\r\n ],\r\n gold: [\r\n [0, 0, 0, 0],\r\n [0.13, 0.19, 0.03, 0],\r\n [0.25, 0.39, 0.12, 0],\r\n [0.38, 0.59, 0.26, 0],\r\n [0.5, 0.8, 0.46, 0.08],\r\n [0.63, 0.99, 0.71, 0.21],\r\n [0.75, 0.99, 0.88, 0.34],\r\n [0.88, 0.99, 0.99, 0.48],\r\n [1, 0.9, 0.95, 0.61],\r\n ],\r\n red: [[0, 0.75, 0, 0], [0.5, 1, 0.5, 0], [0.95, 1, 1, 0], [1, 1, 1, 1]],\r\n green: [[0, 0, 0.75, 0], [0.5, 0.5, 1, 0], [0.95, 1, 1, 0], [1, 1, 1, 1]],\r\n blue: [[0, 0, 0, 1], [0.5, 0, 0.5, 1], [0.95, 0, 1, 1], [1, 1, 1, 1]],\r\n walking_dead: [[0, 0.1, 1, 1], [1, 1, 1, 1]],\r\n random: [\r\n [0, 0, 0, 0],\r\n [0.27, 0.18, 0.18, 0.18],\r\n [0.41, 1, 1, 1],\r\n [0.7, 1, 0, 0],\r\n [1, 1, 1, 1],\r\n ],\r\n muscle_bone: [\r\n [0, 0, 0, 0],\r\n [0.00392156862745098, 0.00784313725490196, 0, 0],\r\n [0.00784313725490196, 0.0196078431372549, 0, 0],\r\n [0.011764705882352941, 0.03137254901960784, 0, 0],\r\n [0.01568627450980392, 0.0392156862745098, 0, 0.00392156862745098],\r\n [0.0196078431372549, 0.050980392156862744, 0.00392156862745098, 0.00392156862745098],\r\n [0.023529411764705882, 0.06274509803921569, 0.00392156862745098, 0.00392156862745098],\r\n [0.027450980392156862, 0.07058823529411765, 0.00392156862745098, 0.00784313725490196],\r\n [0.03137254901960784, 0.08235294117647059, 0.00392156862745098, 0.00784313725490196],\r\n [0.03529411764705882, 0.09411764705882353, 0.00784313725490196, 0.00784313725490196],\r\n [0.0392156862745098, 0.10196078431372549, 0.00784313725490196, 0.00784313725490196],\r\n [0.043137254901960784, 0.11372549019607843, 0.00784313725490196, 0.011764705882352941],\r\n [0.047058823529411764, 0.12549019607843137, 0.00784313725490196, 0.011764705882352941],\r\n [0.050980392156862744, 0.13333333333333333, 0.011764705882352941, 0.011764705882352941],\r\n [0.054901960784313725, 0.1450980392156863, 0.011764705882352941, 0.01568627450980392],\r\n [0.058823529411764705, 0.1568627450980392, 0.011764705882352941, 0.01568627450980392],\r\n [0.06274509803921569, 0.16470588235294117, 0.011764705882352941, 0.01568627450980392],\r\n [0.06666666666666667, 0.17647058823529413, 0.011764705882352941, 0.0196078431372549],\r\n [0.07058823529411765, 0.18823529411764706, 0.01568627450980392, 0.0196078431372549],\r\n [0.07450980392156863, 0.2, 0.01568627450980392, 0.0196078431372549],\r\n [0.0784313725490196, 0.20784313725490197, 0.01568627450980392, 0.0196078431372549],\r\n [0.08235294117647059, 0.2196078431372549, 0.01568627450980392, 0.023529411764705882],\r\n [0.08627450980392157, 0.23137254901960785, 0.0196078431372549, 0.023529411764705882],\r\n [0.09019607843137255, 0.23921568627450981, 0.0196078431372549, 0.023529411764705882],\r\n [0.09411764705882353, 0.25098039215686274, 0.0196078431372549, 0.027450980392156862],\r\n [0.09803921568627451, 0.2627450980392157, 0.0196078431372549, 0.027450980392156862],\r\n [0.10196078431372549, 0.27058823529411763, 0.023529411764705882, 0.027450980392156862],\r\n [0.10588235294117647, 0.2823529411764706, 0.023529411764705882, 0.027450980392156862],\r\n [0.10980392156862745, 0.29411764705882354, 0.023529411764705882, 0.03137254901960784],\r\n [0.11372549019607843, 0.30196078431372547, 0.023529411764705882, 0.03137254901960784],\r\n [0.11764705882352941, 0.3137254901960784, 0.023529411764705882, 0.03137254901960784],\r\n [0.12156862745098039, 0.3254901960784314, 0.027450980392156862, 0.03529411764705882],\r\n [0.12549019607843137, 0.3333333333333333, 0.027450980392156862, 0.03529411764705882],\r\n [0.12941176470588237, 0.34509803921568627, 0.027450980392156862, 0.03529411764705882],\r\n [0.13333333333333333, 0.3568627450980392, 0.027450980392156862, 0.0392156862745098],\r\n [0.13725490196078433, 0.36470588235294116, 0.03137254901960784, 0.0392156862745098],\r\n [0.1411764705882353, 0.3764705882352941, 0.03137254901960784, 0.0392156862745098],\r\n [0.1450980392156863, 0.38823529411764707, 0.03137254901960784, 0.0392156862745098],\r\n [0.14901960784313725, 0.4, 0.03137254901960784, 0.043137254901960784],\r\n [0.15294117647058825, 0.40784313725490196, 0.03529411764705882, 0.043137254901960784],\r\n [0.1568627450980392, 0.4196078431372549, 0.03529411764705882, 0.043137254901960784],\r\n [0.1607843137254902, 0.43137254901960786, 0.03529411764705882, 0.047058823529411764],\r\n [0.16470588235294117, 0.4392156862745098, 0.03529411764705882, 0.047058823529411764],\r\n [0.16862745098039217, 0.45098039215686275, 0.03529411764705882, 0.047058823529411764],\r\n [0.17254901960784313, 0.4627450980392157, 0.0392156862745098, 0.047058823529411764],\r\n [0.17647058823529413, 0.47058823529411764, 0.0392156862745098, 0.050980392156862744],\r\n [0.1803921568627451, 0.4823529411764706, 0.0392156862745098, 0.050980392156862744],\r\n [0.1843137254901961, 0.49411764705882355, 0.0392156862745098, 0.050980392156862744],\r\n [0.18823529411764706, 0.5019607843137255, 0.043137254901960784, 0.054901960784313725],\r\n [0.19215686274509805, 0.5137254901960784, 0.043137254901960784, 0.054901960784313725],\r\n [0.19607843137254902, 0.5254901960784314, 0.043137254901960784, 0.054901960784313725],\r\n [0.2, 0.5333333333333333, 0.043137254901960784, 0.058823529411764705],\r\n [0.20392156862745098, 0.5450980392156862, 0.047058823529411764, 0.058823529411764705],\r\n [0.20784313725490197, 0.5568627450980392, 0.047058823529411764, 0.058823529411764705],\r\n [0.21176470588235294, 0.5647058823529412, 0.047058823529411764, 0.058823529411764705],\r\n [0.21568627450980393, 0.5764705882352941, 0.047058823529411764, 0.06274509803921569],\r\n [0.2196078431372549, 0.5882352941176471, 0.047058823529411764, 0.06274509803921569],\r\n [0.2235294117647059, 0.6, 0.050980392156862744, 0.06274509803921569],\r\n [0.22745098039215686, 0.6078431372549019, 0.050980392156862744, 0.06666666666666667],\r\n [0.23137254901960785, 0.6196078431372549, 0.050980392156862744, 0.06666666666666667],\r\n [0.23529411764705882, 0.6313725490196078, 0.050980392156862744, 0.06666666666666667],\r\n [0.23921568627450981, 0.6392156862745098, 0.054901960784313725, 0.06666666666666667],\r\n [0.24313725490196078, 0.6509803921568628, 0.054901960784313725, 0.07058823529411765],\r\n [0.24705882352941178, 0.6627450980392157, 0.054901960784313725, 0.07058823529411765],\r\n [0.25098039215686274, 0.6705882352941176, 0.054901960784313725, 0.07058823529411765],\r\n [0.2549019607843137, 0.6823529411764706, 0.058823529411764705, 0.07450980392156863],\r\n [0.25882352941176473, 0.6941176470588235, 0.058823529411764705, 0.07450980392156863],\r\n [0.2627450980392157, 0.7019607843137254, 0.058823529411764705, 0.07450980392156863],\r\n [0.26666666666666666, 0.7137254901960784, 0.058823529411764705, 0.0784313725490196],\r\n [0.27058823529411763, 0.7254901960784313, 0.058823529411764705, 0.0784313725490196],\r\n [0.27450980392156865, 0.7333333333333333, 0.06274509803921569, 0.0784313725490196],\r\n [0.2784313725490196, 0.7450980392156863, 0.06274509803921569, 0.0784313725490196],\r\n [0.2823529411764706, 0.7568627450980392, 0.06274509803921569, 0.08235294117647059],\r\n [0.28627450980392155, 0.7647058823529411, 0.06274509803921569, 0.08235294117647059],\r\n [0.2901960784313726, 0.7764705882352941, 0.06666666666666667, 0.08235294117647059],\r\n [0.29411764705882354, 0.788235294117647, 0.06666666666666667, 0.08627450980392157],\r\n [0.2980392156862745, 0.8, 0.06666666666666667, 0.08627450980392157],\r\n [0.30196078431372547, 0.807843137254902, 0.06666666666666667, 0.08627450980392157],\r\n [0.3058823529411765, 0.8196078431372549, 0.07058823529411765, 0.08627450980392157],\r\n [0.30980392156862746, 0.8313725490196079, 0.07058823529411765, 0.09019607843137255],\r\n [0.3137254901960784, 0.8392156862745098, 0.07058823529411765, 0.09019607843137255],\r\n [0.3176470588235294, 0.8509803921568627, 0.07058823529411765, 0.09019607843137255],\r\n [0.3215686274509804, 0.8627450980392157, 0.07058823529411765, 0.09411764705882353],\r\n [0.3254901960784314, 0.8705882352941177, 0.07450980392156863, 0.09411764705882353],\r\n [0.32941176470588235, 0.8823529411764706, 0.07450980392156863, 0.09411764705882353],\r\n [0.3333333333333333, 0.8941176470588236, 0.07450980392156863, 0.09803921568627451],\r\n [0.33725490196078434, 0.9019607843137255, 0.07450980392156863, 0.09803921568627451],\r\n [0.3411764705882353, 0.9137254901960784, 0.0784313725490196, 0.09803921568627451],\r\n [0.34509803921568627, 0.9254901960784314, 0.0784313725490196, 0.09803921568627451],\r\n [0.34901960784313724, 0.9333333333333333, 0.0784313725490196, 0.10196078431372549],\r\n [0.35294117647058826, 0.9450980392156862, 0.0784313725490196, 0.10196078431372549],\r\n [0.3568627450980392, 0.9568627450980393, 0.08235294117647059, 0.10196078431372549],\r\n [0.3607843137254902, 0.9647058823529412, 0.08235294117647059, 0.10588235294117647],\r\n [0.36470588235294116, 0.9764705882352941, 0.08235294117647059, 0.10588235294117647],\r\n [0.3686274509803922, 0.9882352941176471, 0.08235294117647059, 0.10588235294117647],\r\n [0.37254901960784315, 1, 0.08235294117647059, 0.10588235294117647],\r\n [0.3764705882352941, 1, 0.09411764705882353, 0.10588235294117647],\r\n [0.3803921568627451, 1, 0.10588235294117647, 0.10588235294117647],\r\n [0.3843137254901961, 1, 0.11764705882352941, 0.10196078431372549],\r\n [0.38823529411764707, 1, 0.12941176470588237, 0.10196078431372549],\r\n [0.39215686274509803, 1, 0.1411764705882353, 0.10196078431372549],\r\n [0.396078431372549, 1, 0.15294117647058825, 0.09803921568627451],\r\n [0.4, 1, 0.16470588235294117, 0.09803921568627451],\r\n [0.403921568627451, 1, 0.17647058823529413, 0.09803921568627451],\r\n [0.40784313725490196, 1, 0.18823529411764706, 0.09411764705882353],\r\n [0.4117647058823529, 1, 0.2, 0.09411764705882353],\r\n [0.41568627450980394, 1, 0.21176470588235294, 0.09411764705882353],\r\n [0.4196078431372549, 1, 0.2235294117647059, 0.09019607843137255],\r\n [0.4235294117647059, 1, 0.23529411764705882, 0.09019607843137255],\r\n [0.42745098039215684, 1, 0.24705882352941178, 0.08627450980392157],\r\n [0.43137254901960786, 1, 0.25882352941176473, 0.08627450980392157],\r\n [0.43529411764705883, 1, 0.27058823529411763, 0.08627450980392157],\r\n [0.4392156862745098, 1, 0.2823529411764706, 0.08235294117647059],\r\n [0.44313725490196076, 1, 0.29411764705882354, 0.08235294117647059],\r\n [0.4470588235294118, 1, 0.3058823529411765, 0.08235294117647059],\r\n [0.45098039215686275, 1, 0.3176470588235294, 0.0784313725490196],\r\n [0.4549019607843137, 1, 0.32941176470588235, 0.0784313725490196],\r\n [0.4588235294117647, 1, 0.3411764705882353, 0.0784313725490196],\r\n [0.4627450980392157, 1, 0.35294117647058826, 0.07450980392156863],\r\n [0.4666666666666667, 1, 0.36470588235294116, 0.07450980392156863],\r\n [0.47058823529411764, 1, 0.3764705882352941, 0.07450980392156863],\r\n [0.4745098039215686, 1, 0.38823529411764707, 0.07058823529411765],\r\n [0.47843137254901963, 1, 0.4, 0.07058823529411765],\r\n [0.4823529411764706, 1, 0.4117647058823529, 0.07058823529411765],\r\n [0.48627450980392156, 1, 0.4235294117647059, 0.06666666666666667],\r\n [0.49019607843137253, 1, 0.43529411764705883, 0.06666666666666667],\r\n [0.49411764705882355, 1, 0.4470588235294118, 0.06274509803921569],\r\n [0.4980392156862745, 1, 0.4588235294117647, 0.06274509803921569],\r\n [0.5019607843137255, 1, 0.47058823529411764, 0.06274509803921569],\r\n [0.5058823529411764, 1, 0.4823529411764706, 0.058823529411764705],\r\n [0.5098039215686274, 1, 0.49411764705882355, 0.058823529411764705],\r\n [0.5137254901960784, 1, 0.5058823529411764, 0.058823529411764705],\r\n [0.5176470588235295, 1, 0.5137254901960784, 0.054901960784313725],\r\n [0.5215686274509804, 1, 0.5254901960784314, 0.054901960784313725],\r\n [0.5254901960784314, 1, 0.5372549019607843, 0.054901960784313725],\r\n [0.5294117647058824, 1, 0.5490196078431373, 0.050980392156862744],\r\n [0.5333333333333333, 1, 0.5607843137254902, 0.050980392156862744],\r\n [0.5372549019607843, 1, 0.5725490196078431, 0.050980392156862744],\r\n [0.5411764705882353, 1, 0.5843137254901961, 0.047058823529411764],\r\n [0.5450980392156862, 1, 0.596078431372549, 0.047058823529411764],\r\n [0.5490196078431373, 1, 0.6078431372549019, 0.043137254901960784],\r\n [0.5529411764705883, 1, 0.6196078431372549, 0.043137254901960784],\r\n [0.5568627450980392, 1, 0.6313725490196078, 0.043137254901960784],\r\n [0.5607843137254902, 1, 0.6431372549019608, 0.0392156862745098],\r\n [0.5647058823529412, 1, 0.6549019607843137, 0.0392156862745098],\r\n [0.5686274509803921, 1, 0.6666666666666666, 0.0392156862745098],\r\n [0.5725490196078431, 1, 0.6784313725490196, 0.03529411764705882],\r\n [0.5764705882352941, 1, 0.6901960784313725, 0.03529411764705882],\r\n [0.5803921568627451, 1, 0.6941176470588235, 0.0392156862745098],\r\n [0.5843137254901961, 1, 0.7019607843137254, 0.0392156862745098],\r\n [0.5882352941176471, 1, 0.7058823529411765, 0.043137254901960784],\r\n [0.592156862745098, 1, 0.7098039215686275, 0.043137254901960784],\r\n [0.596078431372549, 1, 0.7137254901960784, 0.047058823529411764],\r\n [0.6, 1, 0.7176470588235294, 0.047058823529411764],\r\n [0.6039215686274509, 1, 0.7254901960784313, 0.050980392156862744],\r\n [0.6078431372549019, 1, 0.7294117647058823, 0.050980392156862744],\r\n [0.611764705882353, 1, 0.7333333333333333, 0.054901960784313725],\r\n [0.615686274509804, 1, 0.7372549019607844, 0.058823529411764705],\r\n [0.6196078431372549, 1, 0.7411764705882353, 0.058823529411764705],\r\n [0.6235294117647059, 1, 0.7490196078431373, 0.06274509803921569],\r\n [0.6274509803921569, 1, 0.7529411764705882, 0.06274509803921569],\r\n [0.6313725490196078, 1, 0.7568627450980392, 0.06666666666666667],\r\n [0.6352941176470588, 1, 0.7607843137254902, 0.06666666666666667],\r\n [0.6392156862745098, 1, 0.7647058823529411, 0.07058823529411765],\r\n [0.6431372549019608, 1, 0.7725490196078432, 0.07058823529411765],\r\n [0.6470588235294118, 1, 0.7764705882352941, 0.07450980392156863],\r\n [0.6509803921568628, 1, 0.7803921568627451, 0.07450980392156863],\r\n [0.6549019607843137, 1, 0.7843137254901961, 0.0784313725490196],\r\n [0.6588235294117647, 1, 0.788235294117647, 0.08235294117647059],\r\n [0.6627450980392157, 1, 0.796078431372549, 0.08235294117647059],\r\n [0.6666666666666666, 1, 0.8, 0.08627450980392157],\r\n [0.6705882352941176, 1, 0.803921568627451, 0.08627450980392157],\r\n [0.6745098039215687, 1, 0.807843137254902, 0.09019607843137255],\r\n [0.6784313725490196, 1, 0.8117647058823529, 0.09019607843137255],\r\n [0.6823529411764706, 1, 0.8196078431372549, 0.09411764705882353],\r\n [0.6862745098039216, 1, 0.8235294117647058, 0.09411764705882353],\r\n [0.6901960784313725, 1, 0.8274509803921568, 0.09803921568627451],\r\n [0.6941176470588235, 1, 0.8313725490196079, 0.10196078431372549],\r\n [0.6980392156862745, 1, 0.8352941176470589, 0.10196078431372549],\r\n [0.7019607843137254, 1, 0.8431372549019608, 0.10588235294117647],\r\n [0.7058823529411765, 1, 0.8470588235294118, 0.10588235294117647],\r\n [0.7098039215686275, 1, 0.8509803921568627, 0.10980392156862745],\r\n [0.7137254901960784, 1, 0.8549019607843137, 0.10980392156862745],\r\n [0.7176470588235294, 1, 0.8627450980392157, 0.11372549019607843],\r\n [0.7215686274509804, 1, 0.8666666666666667, 0.11372549019607843],\r\n [0.7254901960784313, 1, 0.8705882352941177, 0.11764705882352941],\r\n [0.7294117647058823, 1, 0.8745098039215686, 0.12156862745098039],\r\n [0.7333333333333333, 1, 0.8784313725490196, 0.12156862745098039],\r\n [0.7372549019607844, 1, 0.8862745098039215, 0.12549019607843137],\r\n [0.7411764705882353, 1, 0.8901960784313725, 0.12549019607843137],\r\n [0.7450980392156863, 1, 0.8941176470588236, 0.12941176470588237],\r\n [0.7490196078431373, 1, 0.8980392156862745, 0.12941176470588237],\r\n [0.7529411764705882, 1, 0.9019607843137255, 0.13333333333333333],\r\n [0.7568627450980392, 1, 0.9098039215686274, 0.13333333333333333],\r\n [0.7607843137254902, 1, 0.9137254901960784, 0.13725490196078433],\r\n [0.7647058823529411, 1, 0.9176470588235294, 0.1411764705882353],\r\n [0.7686274509803922, 1, 0.9215686274509803, 0.1411764705882353],\r\n [0.7725490196078432, 1, 0.9254901960784314, 0.1450980392156863],\r\n [0.7764705882352941, 1, 0.9333333333333333, 0.1450980392156863],\r\n [0.7803921568627451, 1, 0.9372549019607843, 0.14901960784313725],\r\n [0.7843137254901961, 1, 0.9411764705882353, 0.14901960784313725],\r\n [0.788235294117647, 1, 0.9450980392156862, 0.15294117647058825],\r\n [0.792156862745098, 1, 0.9450980392156862, 0.16862745098039217],\r\n [0.796078431372549, 1, 0.9490196078431372, 0.1843137254901961],\r\n [0.8, 1, 0.9490196078431372, 0.2],\r\n [0.803921568627451, 1, 0.9490196078431372, 0.21568627450980393],\r\n [0.807843137254902, 1, 0.9490196078431372, 0.22745098039215686],\r\n [0.8117647058823529, 1, 0.9529411764705882, 0.24313725490196078],\r\n [0.8156862745098039, 1, 0.9529411764705882, 0.25882352941176473],\r\n [0.8196078431372549, 1, 0.9529411764705882, 0.27450980392156865],\r\n [0.8235294117647058, 1, 0.9529411764705882, 0.2901960784313726],\r\n [0.8274509803921568, 1, 0.9568627450980393, 0.3058823529411765],\r\n [0.8313725490196079, 1, 0.9568627450980393, 0.3215686274509804],\r\n [0.8352941176470589, 1, 0.9568627450980393, 0.33725490196078434],\r\n [0.8392156862745098, 1, 0.9568627450980393, 0.35294117647058826],\r\n [0.8431372549019608, 1, 0.9607843137254902, 0.3686274509803922],\r\n [0.8470588235294118, 1, 0.9607843137254902, 0.3843137254901961],\r\n [0.8509803921568627, 1, 0.9607843137254902, 0.4],\r\n [0.8549019607843137, 1, 0.9607843137254902, 0.4117647058823529],\r\n [0.8588235294117647, 1, 0.9647058823529412, 0.42745098039215684],\r\n [0.8627450980392157, 1, 0.9647058823529412, 0.44313725490196076],\r\n [0.8666666666666667, 1, 0.9647058823529412, 0.4588235294117647],\r\n [0.8705882352941177, 1, 0.9647058823529412, 0.4745098039215686],\r\n [0.8745098039215686, 1, 0.9686274509803922, 0.49019607843137253],\r\n [0.8784313725490196, 1, 0.9686274509803922, 0.5058823529411764],\r\n [0.8823529411764706, 1, 0.9686274509803922, 0.5215686274509804],\r\n [0.8862745098039215, 1, 0.9686274509803922, 0.5372549019607843],\r\n [0.8901960784313725, 1, 0.9725490196078431, 0.5529411764705883],\r\n [0.8941176470588236, 1, 0.9725490196078431, 0.5686274509803921],\r\n [0.8980392156862745, 1, 0.9725490196078431, 0.5843137254901961],\r\n [0.9019607843137255, 1, 0.9725490196078431, 0.6],\r\n [0.9058823529411765, 1, 0.9725490196078431, 0.611764705882353],\r\n [0.9098039215686274, 1, 0.9764705882352941, 0.6274509803921569],\r\n [0.9137254901960784, 1, 0.9764705882352941, 0.6431372549019608],\r\n [0.9176470588235294, 1, 0.9764705882352941, 0.6588235294117647],\r\n [0.9215686274509803, 1, 0.9764705882352941, 0.6745098039215687],\r\n [0.9254901960784314, 1, 0.9803921568627451, 0.6901960784313725],\r\n [0.9294117647058824, 1, 0.9803921568627451, 0.7058823529411765],\r\n [0.9333333333333333, 1, 0.9803921568627451, 0.7215686274509804],\r\n [0.9372549019607843, 1, 0.9803921568627451, 0.7372549019607844],\r\n [0.9411764705882353, 1, 0.984313725490196, 0.7529411764705882],\r\n [0.9450980392156862, 1, 0.984313725490196, 0.7686274509803922],\r\n [0.9490196078431372, 1, 0.984313725490196, 0.7843137254901961],\r\n [0.9529411764705882, 1, 0.984313725490196, 0.8],\r\n [0.9568627450980393, 1, 0.9882352941176471, 0.8117647058823529],\r\n [0.9607843137254902, 1, 0.9882352941176471, 0.8274509803921568],\r\n [0.9647058823529412, 1, 0.9882352941176471, 0.8431372549019608],\r\n [0.9686274509803922, 1, 0.9882352941176471, 0.8588235294117647],\r\n [0.9725490196078431, 1, 0.9921568627450981, 0.8745098039215686],\r\n [0.9764705882352941, 1, 0.9921568627450981, 0.8901960784313725],\r\n [0.9803921568627451, 1, 0.9921568627450981, 0.9058823529411765],\r\n [0.984313725490196, 1, 0.9921568627450981, 0.9215686274509803],\r\n [0.9882352941176471, 1, 0.996078431372549, 0.9372549019607843],\r\n [0.9921568627450981, 1, 0.996078431372549, 0.9529411764705882],\r\n [0.996078431372549, 1, 0.996078431372549, 0.9686274509803922],\r\n [1, 1, 0.996078431372549, 0.984313725490196],\r\n ],\r\n };\r\n }\r\n\r\n static presetLutsO() {\r\n return {\r\n linear: [[0, 0], [1, 1]],\r\n lowpass: [[0, 0.8], [0.2, 0.6], [0.3, 0.1], [1, 0]],\r\n bandpass: [[0, 0], [0.4, 0.8], [0.6, 0.8], [1, 0]],\r\n highpass: [[0, 0], [0.7, 0.1], [0.8, 0.6], [1, 0.8]],\r\n flat: [[0, 0.7], [1, 1]],\r\n random: [[0, 0], [0.38, 0], [0.55, 1], [0.72, 1], [1, 0.05]],\r\n linear_full: [\r\n [0, 0],\r\n [0.00392156862745098, 0.00392156862745098],\r\n [0.00784313725490196, 0.00784313725490196],\r\n [0.011764705882352941, 0.011764705882352941],\r\n [0.01568627450980392, 0.01568627450980392],\r\n [0.0196078431372549, 0.0196078431372549],\r\n [0.023529411764705882, 0.023529411764705882],\r\n [0.027450980392156862, 0.027450980392156862],\r\n [0.03137254901960784, 0.03137254901960784],\r\n [0.03529411764705882, 0.03529411764705882],\r\n [0.0392156862745098, 0.0392156862745098],\r\n [0.043137254901960784, 0.043137254901960784],\r\n [0.047058823529411764, 0.047058823529411764],\r\n [0.050980392156862744, 0.050980392156862744],\r\n [0.054901960784313725, 0.054901960784313725],\r\n [0.058823529411764705, 0.058823529411764705],\r\n [0.06274509803921569, 0.06274509803921569],\r\n [0.06666666666666667, 0.06666666666666667],\r\n [0.07058823529411765, 0.07058823529411765],\r\n [0.07450980392156863, 0.07450980392156863],\r\n [0.0784313725490196, 0.0784313725490196],\r\n [0.08235294117647059, 0.08235294117647059],\r\n [0.08627450980392157, 0.08627450980392157],\r\n [0.09019607843137255, 0.09019607843137255],\r\n [0.09411764705882353, 0.09411764705882353],\r\n [0.09803921568627451, 0.09803921568627451],\r\n [0.10196078431372549, 0.10196078431372549],\r\n [0.10588235294117647, 0.10588235294117647],\r\n [0.10980392156862745, 0.10980392156862745],\r\n [0.11372549019607843, 0.11372549019607843],\r\n [0.11764705882352941, 0.11764705882352941],\r\n [0.12156862745098039, 0.12156862745098039],\r\n [0.12549019607843137, 0.12549019607843137],\r\n [0.12941176470588237, 0.12941176470588237],\r\n [0.13333333333333333, 0.13333333333333333],\r\n [0.13725490196078433, 0.13725490196078433],\r\n [0.1411764705882353, 0.1411764705882353],\r\n [0.1450980392156863, 0.1450980392156863],\r\n [0.14901960784313725, 0.14901960784313725],\r\n [0.15294117647058825, 0.15294117647058825],\r\n [0.1568627450980392, 0.1568627450980392],\r\n [0.1607843137254902, 0.1607843137254902],\r\n [0.16470588235294117, 0.16470588235294117],\r\n [0.16862745098039217, 0.16862745098039217],\r\n [0.17254901960784313, 0.17254901960784313],\r\n [0.17647058823529413, 0.17647058823529413],\r\n [0.1803921568627451, 0.1803921568627451],\r\n [0.1843137254901961, 0.1843137254901961],\r\n [0.18823529411764706, 0.18823529411764706],\r\n [0.19215686274509805, 0.19215686274509805],\r\n [0.19607843137254902, 0.19607843137254902],\r\n [0.2, 0.2],\r\n [0.20392156862745098, 0.20392156862745098],\r\n [0.20784313725490197, 0.20784313725490197],\r\n [0.21176470588235294, 0.21176470588235294],\r\n [0.21568627450980393, 0.21568627450980393],\r\n [0.2196078431372549, 0.2196078431372549],\r\n [0.2235294117647059, 0.2235294117647059],\r\n [0.22745098039215686, 0.22745098039215686],\r\n [0.23137254901960785, 0.23137254901960785],\r\n [0.23529411764705882, 0.23529411764705882],\r\n [0.23921568627450981, 0.23921568627450981],\r\n [0.24313725490196078, 0.24313725490196078],\r\n [0.24705882352941178, 0.24705882352941178],\r\n [0.25098039215686274, 0.25098039215686274],\r\n [0.2549019607843137, 0.2549019607843137],\r\n [0.25882352941176473, 0.25882352941176473],\r\n [0.2627450980392157, 0.2627450980392157],\r\n [0.26666666666666666, 0.26666666666666666],\r\n [0.27058823529411763, 0.27058823529411763],\r\n [0.27450980392156865, 0.27450980392156865],\r\n [0.2784313725490196, 0.2784313725490196],\r\n [0.2823529411764706, 0.2823529411764706],\r\n [0.28627450980392155, 0.28627450980392155],\r\n [0.2901960784313726, 0.2901960784313726],\r\n [0.29411764705882354, 0.29411764705882354],\r\n [0.2980392156862745, 0.2980392156862745],\r\n [0.30196078431372547, 0.30196078431372547],\r\n [0.3058823529411765, 0.3058823529411765],\r\n [0.30980392156862746, 0.30980392156862746],\r\n [0.3137254901960784, 0.3137254901960784],\r\n [0.3176470588235294, 0.3176470588235294],\r\n [0.3215686274509804, 0.3215686274509804],\r\n [0.3254901960784314, 0.3254901960784314],\r\n [0.32941176470588235, 0.32941176470588235],\r\n [0.3333333333333333, 0.3333333333333333],\r\n [0.33725490196078434, 0.33725490196078434],\r\n [0.3411764705882353, 0.3411764705882353],\r\n [0.34509803921568627, 0.34509803921568627],\r\n [0.34901960784313724, 0.34901960784313724],\r\n [0.35294117647058826, 0.35294117647058826],\r\n [0.3568627450980392, 0.3568627450980392],\r\n [0.3607843137254902, 0.3607843137254902],\r\n [0.36470588235294116, 0.36470588235294116],\r\n [0.3686274509803922, 0.3686274509803922],\r\n [0.37254901960784315, 0.37254901960784315],\r\n [0.3764705882352941, 0.3764705882352941],\r\n [0.3803921568627451, 0.3803921568627451],\r\n [0.3843137254901961, 0.3843137254901961],\r\n [0.38823529411764707, 0.38823529411764707],\r\n [0.39215686274509803, 0.39215686274509803],\r\n [0.396078431372549, 0.396078431372549],\r\n [0.4, 0.4],\r\n [0.403921568627451, 0.403921568627451],\r\n [0.40784313725490196, 0.40784313725490196],\r\n [0.4117647058823529, 0.4117647058823529],\r\n [0.41568627450980394, 0.41568627450980394],\r\n [0.4196078431372549, 0.4196078431372549],\r\n [0.4235294117647059, 0.4235294117647059],\r\n [0.42745098039215684, 0.42745098039215684],\r\n [0.43137254901960786, 0.43137254901960786],\r\n [0.43529411764705883, 0.43529411764705883],\r\n [0.4392156862745098, 0.4392156862745098],\r\n [0.44313725490196076, 0.44313725490196076],\r\n [0.4470588235294118, 0.4470588235294118],\r\n [0.45098039215686275, 0.45098039215686275],\r\n [0.4549019607843137, 0.4549019607843137],\r\n [0.4588235294117647, 0.4588235294117647],\r\n [0.4627450980392157, 0.4627450980392157],\r\n [0.4666666666666667, 0.4666666666666667],\r\n [0.47058823529411764, 0.47058823529411764],\r\n [0.4745098039215686, 0.4745098039215686],\r\n [0.47843137254901963, 0.47843137254901963],\r\n [0.4823529411764706, 0.4823529411764706],\r\n [0.48627450980392156, 0.48627450980392156],\r\n [0.49019607843137253, 0.49019607843137253],\r\n [0.49411764705882355, 0.49411764705882355],\r\n [0.4980392156862745, 0.4980392156862745],\r\n [0.5019607843137255, 0.5019607843137255],\r\n [0.5058823529411764, 0.5058823529411764],\r\n [0.5098039215686274, 0.5098039215686274],\r\n [0.5137254901960784, 0.5137254901960784],\r\n [0.5176470588235295, 0.5176470588235295],\r\n [0.5215686274509804, 0.5215686274509804],\r\n [0.5254901960784314, 0.5254901960784314],\r\n [0.5294117647058824, 0.5294117647058824],\r\n [0.5333333333333333, 0.5333333333333333],\r\n [0.5372549019607843, 0.5372549019607843],\r\n [0.5411764705882353, 0.5411764705882353],\r\n [0.5450980392156862, 0.5450980392156862],\r\n [0.5490196078431373, 0.5490196078431373],\r\n [0.5529411764705883, 0.5529411764705883],\r\n [0.5568627450980392, 0.5568627450980392],\r\n [0.5607843137254902, 0.5607843137254902],\r\n [0.5647058823529412, 0.5647058823529412],\r\n [0.5686274509803921, 0.5686274509803921],\r\n [0.5725490196078431, 0.5725490196078431],\r\n [0.5764705882352941, 0.5764705882352941],\r\n [0.5803921568627451, 0.5803921568627451],\r\n [0.5843137254901961, 0.5843137254901961],\r\n [0.5882352941176471, 0.5882352941176471],\r\n [0.592156862745098, 0.592156862745098],\r\n [0.596078431372549, 0.596078431372549],\r\n [0.6, 0.6],\r\n [0.6039215686274509, 0.6039215686274509],\r\n [0.6078431372549019, 0.6078431372549019],\r\n [0.611764705882353, 0.611764705882353],\r\n [0.615686274509804, 0.615686274509804],\r\n [0.6196078431372549, 0.6196078431372549],\r\n [0.6235294117647059, 0.6235294117647059],\r\n [0.6274509803921569, 0.6274509803921569],\r\n [0.6313725490196078, 0.6313725490196078],\r\n [0.6352941176470588, 0.6352941176470588],\r\n [0.6392156862745098, 0.6392156862745098],\r\n [0.6431372549019608, 0.6431372549019608],\r\n [0.6470588235294118, 0.6470588235294118],\r\n [0.6509803921568628, 0.6509803921568628],\r\n [0.6549019607843137, 0.6549019607843137],\r\n [0.6588235294117647, 0.6588235294117647],\r\n [0.6627450980392157, 0.6627450980392157],\r\n [0.6666666666666666, 0.6666666666666666],\r\n [0.6705882352941176, 0.6705882352941176],\r\n [0.6745098039215687, 0.6745098039215687],\r\n [0.6784313725490196, 0.6784313725490196],\r\n [0.6823529411764706, 0.6823529411764706],\r\n [0.6862745098039216, 0.6862745098039216],\r\n [0.6901960784313725, 0.6901960784313725],\r\n [0.6941176470588235, 0.6941176470588235],\r\n [0.6980392156862745, 0.6980392156862745],\r\n [0.7019607843137254, 0.7019607843137254],\r\n [0.7058823529411765, 0.7058823529411765],\r\n [0.7098039215686275, 0.7098039215686275],\r\n [0.7137254901960784, 0.7137254901960784],\r\n [0.7176470588235294, 0.7176470588235294],\r\n [0.7215686274509804, 0.7215686274509804],\r\n [0.7254901960784313, 0.7254901960784313],\r\n [0.7294117647058823, 0.7294117647058823],\r\n [0.7333333333333333, 0.7333333333333333],\r\n [0.7372549019607844, 0.7372549019607844],\r\n [0.7411764705882353, 0.7411764705882353],\r\n [0.7450980392156863, 0.7450980392156863],\r\n [0.7490196078431373, 0.7490196078431373],\r\n [0.7529411764705882, 0.7529411764705882],\r\n [0.7568627450980392, 0.7568627450980392],\r\n [0.7607843137254902, 0.7607843137254902],\r\n [0.7647058823529411, 0.7647058823529411],\r\n [0.7686274509803922, 0.7686274509803922],\r\n [0.7725490196078432, 0.7725490196078432],\r\n [0.7764705882352941, 0.7764705882352941],\r\n [0.7803921568627451, 0.7803921568627451],\r\n [0.7843137254901961, 0.7843137254901961],\r\n [0.788235294117647, 0.788235294117647],\r\n [0.792156862745098, 0.792156862745098],\r\n [0.796078431372549, 0.796078431372549],\r\n [0.8, 0.8],\r\n [0.803921568627451, 0.803921568627451],\r\n [0.807843137254902, 0.807843137254902],\r\n [0.8117647058823529, 0.8117647058823529],\r\n [0.8156862745098039, 0.8156862745098039],\r\n [0.8196078431372549, 0.8196078431372549],\r\n [0.8235294117647058, 0.8235294117647058],\r\n [0.8274509803921568, 0.8274509803921568],\r\n [0.8313725490196079, 0.8313725490196079],\r\n [0.8352941176470589, 0.8352941176470589],\r\n [0.8392156862745098, 0.8392156862745098],\r\n [0.8431372549019608, 0.8431372549019608],\r\n [0.8470588235294118, 0.8470588235294118],\r\n [0.8509803921568627, 0.8509803921568627],\r\n [0.8549019607843137, 0.8549019607843137],\r\n [0.8588235294117647, 0.8588235294117647],\r\n [0.8627450980392157, 0.8627450980392157],\r\n [0.8666666666666667, 0.8666666666666667],\r\n [0.8705882352941177, 0.8705882352941177],\r\n [0.8745098039215686, 0.8745098039215686],\r\n [0.8784313725490196, 0.8784313725490196],\r\n [0.8823529411764706, 0.8823529411764706],\r\n [0.8862745098039215, 0.8862745098039215],\r\n [0.8901960784313725, 0.8901960784313725],\r\n [0.8941176470588236, 0.8941176470588236],\r\n [0.8980392156862745, 0.8980392156862745],\r\n [0.9019607843137255, 0.9019607843137255],\r\n [0.9058823529411765, 0.9058823529411765],\r\n [0.9098039215686274, 0.9098039215686274],\r\n [0.9137254901960784, 0.9137254901960784],\r\n [0.9176470588235294, 0.9176470588235294],\r\n [0.9215686274509803, 0.9215686274509803],\r\n [0.9254901960784314, 0.9254901960784314],\r\n [0.9294117647058824, 0.9294117647058824],\r\n [0.9333333333333333, 0.9333333333333333],\r\n [0.9372549019607843, 0.9372549019607843],\r\n [0.9411764705882353, 0.9411764705882353],\r\n [0.9450980392156862, 0.9450980392156862],\r\n [0.9490196078431372, 0.9490196078431372],\r\n [0.9529411764705882, 0.9529411764705882],\r\n [0.9568627450980393, 0.9568627450980393],\r\n [0.9607843137254902, 0.9607843137254902],\r\n [0.9647058823529412, 0.9647058823529412],\r\n [0.9686274509803922, 0.9686274509803922],\r\n [0.9725490196078431, 0.9725490196078431],\r\n [0.9764705882352941, 0.9764705882352941],\r\n [0.9803921568627451, 0.9803921568627451],\r\n [0.984313725490196, 0.984313725490196],\r\n [0.9882352941176471, 0.9882352941176471],\r\n [0.9921568627450981, 0.9921568627450981],\r\n [0.996078431372549, 0.996078431372549],\r\n [1, 1],\r\n ],\r\n };\r\n }\r\n };\r\n};\r\n\r\nexport { helpersLut };\r\nexport default helpersLut();\r\n","/**\r\n * Helpers material mixin.\r\n *\r\n * @module helpers/material/mixin\r\n */\r\n\r\nconst helpersMaterialMixin = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = three.Object3D;\r\n return class extends Constructor {\r\n _createMaterial(extraOptions) {\r\n // generate shaders on-demand!\r\n let fs = new this._shadersFragment(this._uniforms);\r\n let vs = new this._shadersVertex();\r\n\r\n // material\r\n let globalOptions = {\r\n uniforms: this._uniforms,\r\n vertexShader: vs.compute(),\r\n fragmentShader: fs.compute(),\r\n };\r\n\r\n let options = Object.assign(extraOptions, globalOptions);\r\n this._material = new three.ShaderMaterial(options);\r\n this._material.needsUpdate = true;\r\n }\r\n\r\n _updateMaterial() {\r\n // generate shaders on-demand!\r\n let fs = new this._shadersFragment(this._uniforms);\r\n let vs = new this._shadersVertex();\r\n\r\n this._material.vertexShader = vs.compute();\r\n this._material.fragmentShader = fs.compute();\r\n\r\n this._material.needsUpdate = true;\r\n }\r\n\r\n _prepareTexture() {\r\n this._textures = [];\r\n for (let m = 0; m < this._stack._rawData.length; m++) {\r\n let tex = new three.DataTexture(\r\n this._stack.rawData[m],\r\n this._stack.textureSize,\r\n this._stack.textureSize,\r\n this._stack.textureType,\r\n three.UnsignedByteType,\r\n three.UVMapping,\r\n three.ClampToEdgeWrapping,\r\n three.ClampToEdgeWrapping,\r\n three.NearestFilter,\r\n three.NearestFilter\r\n );\r\n tex.needsUpdate = true;\r\n tex.flipY = true;\r\n this._textures.push(tex);\r\n }\r\n }\r\n };\r\n};\r\n\r\nexport { helpersMaterialMixin };\r\nexport default helpersMaterialMixin();\r\n","import CoreUtils from '../core/core.utils';\r\n\r\n/**\r\n * Event Based progressbar\r\n * @module helpers/progressBar\r\n *\r\n * @example\r\n *\r\n * let loader = new LoadersVolume();\r\n * const domContainer = document.getElementById('progressbar');\r\n * const pb = new HelpersProgressBarEventBased(loader, domContainer);\r\n */\r\n\r\nexport default class HelpersProgressBarEventBased {\r\n constructor(emitter, domTarget) {\r\n if (!emitter || !this._isFunction(emitter.emit)) {\r\n window.console.error('please give the this._emitter instance');\r\n return;\r\n }\r\n\r\n if (CoreUtils.isString(domTarget)) {\r\n this._dom = document.getElementById(domTarget);\r\n } else {\r\n this._dom = domTarget;\r\n }\r\n\r\n if (!CoreUtils.isElement(this._dom)) {\r\n window.console.error('please give the id of container dom or directly a dom instance');\r\n return;\r\n }\r\n this._emitter = emitter;\r\n this.initContainerDom();\r\n this.initEventListenner();\r\n this.loaded = 0;\r\n this.totalFile = 0;\r\n }\r\n\r\n _isFunction(fn) {\r\n return Object.prototype.toString.call(fn) === '[object Function]';\r\n }\r\n\r\n initEventListenner() {\r\n const self = this;\r\n\r\n this._emitter.on('load-start', function(event) {\r\n const totalFiles = event.files.length;\r\n self.totalFile = totalFiles;\r\n self._domTotalFile.innerHTML = totalFiles;\r\n });\r\n\r\n this._emitter.on('fetch-start', function(event) {\r\n const fetchLi = document.createElement('li');\r\n\r\n const fileTag = document.createElement('div');\r\n fileTag.innerHTML = 'file: ' + event.file;\r\n fileTag.style.color = '#ffffff';\r\n fetchLi.append(fileTag);\r\n\r\n fetchLi.className = 'fetch-file';\r\n fetchLi.id = 'file-' + event.file;\r\n fetchLi.style.marginBottom = '7px';\r\n fetchLi.style.border = '1px solid #ffffff;';\r\n fetchLi.style.width = '60%';\r\n const fetchprogress = document.createElement('div');\r\n fetchprogress.id = 'file-fetch-' + event.file;\r\n fetchprogress.style.width = '0%';\r\n fetchLi.append(fetchprogress);\r\n self._domProcessList.append(fetchLi);\r\n });\r\n\r\n this._emitter.on('fetch-progress', function(event) {\r\n const id = 'file-fetch-' + event.file;\r\n const fileFetchDom = document.getElementById(id);\r\n fileFetchDom.style.width = (event.loaded / event.total) * 100 + '%';\r\n fileFetchDom.style.border = '1px solid red';\r\n });\r\n\r\n this._emitter.on('fetch-success', function(event) {\r\n // show result\r\n const liParent = document.getElementById('file-' + event.file);\r\n const result = document.createElement('div');\r\n result.id = 'file-result-' + event.file;\r\n result.innerHTML = 'fetch-success';\r\n result.style.color = '#ffffff';\r\n liParent.append(result);\r\n });\r\n\r\n this._emitter.on('fetch-error', function(event) {\r\n // console.log(event);\r\n });\r\n\r\n this._emitter.on('fetch-abort', function(event) {\r\n // console.log(event);\r\n });\r\n\r\n this._emitter.on('fetch-end', function(event) {\r\n // console.log(event);\r\n });\r\n\r\n this._emitter.on('fetch-timeout', function(event) {\r\n // console.log(event);\r\n });\r\n\r\n this._emitter.on('parse-start', function(event) {\r\n const liParent = document.getElementById('file-' + event.file);\r\n const parseprogress = document.createElement('div');\r\n parseprogress.id = 'file-parse-' + event.file;\r\n parseprogress.style.width = '0%';\r\n liParent.append(parseprogress);\r\n });\r\n\r\n this._emitter.on('parsing', function(event) {\r\n const id = 'file-parse-' + event.file;\r\n const fileParseDom = document.getElementById(id);\r\n fileParseDom.style.width = (event.parsed / event.total) * 100 + '%';\r\n fileParseDom.style.border = '1px solid yellow';\r\n });\r\n\r\n this._emitter.on('parse-success', function(event) {\r\n self.loaded += 1;\r\n self._domCurrentFile.innerHTML = self.loaded;\r\n self._domCurrentProgress.style.width = (self.loaded / self.totalFile) * 100 + '%';\r\n // show result\r\n const liParent = document.getElementById('file-' + event.file);\r\n const result = document.createElement('div');\r\n result.id = 'file-result-' + event.file;\r\n result.innerHTML = 'parse-success';\r\n result.style.color = '#ffffff';\r\n liParent.append(result);\r\n });\r\n }\r\n\r\n initContainerDom() {\r\n const containerDom = `\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
    \r\n
\r\n
`;\r\n const wrap = document.createElement('div');\r\n wrap.innerHTML = containerDom;\r\n this._dom.append(wrap);\r\n // dom interface\r\n this._domCurrentFile = document.getElementById('current-file-index');\r\n this._domTotalFile = document.getElementById('total-file');\r\n this._domProcessList = document.getElementById('process-list');\r\n this._domCurrentProgress = document.getElementById('current-progress');\r\n }\r\n}\r\n","/**\r\n * @module helpers/progressBar\r\n */\r\n\r\nexport default class HelpersProgressBar {\r\n constructor(container) {\r\n this._container = container;\r\n this._modes = {\r\n load: {\r\n name: 'load',\r\n color: '#FFF56F',\r\n },\r\n parse: {\r\n name: 'parse',\r\n color: '#2196F3',\r\n },\r\n };\r\n\r\n this.requestAnimationFrameID = null;\r\n\r\n this._mode = null;\r\n this._value = null;\r\n this._total = null;\r\n this._totalFiles = null;\r\n\r\n this.init();\r\n }\r\n\r\n free() {\r\n let progressContainers = this._container.getElementsByClassName('progress container');\r\n if (progressContainers.length > 0) {\r\n progressContainers[0].parentNode.removeChild(progressContainers[0]);\r\n }\r\n progressContainers = null;\r\n // stop rendering loop\r\n window.cancelAnimationFrame(this.requestAnimationFrameID);\r\n }\r\n\r\n init() {\r\n let progressContainer = this._domContainer();\r\n\r\n for (let mode in this._modes) {\r\n if (this._modes.hasOwnProperty(mode)) {\r\n let bar = this._domBar(this._modes[mode]);\r\n progressContainer.appendChild(bar);\r\n bar = null;\r\n }\r\n }\r\n\r\n this._container.appendChild(progressContainer);\r\n progressContainer = null;\r\n\r\n // start rendering loop\r\n this.updateUI();\r\n }\r\n\r\n // url can be used in child class to show overall progress bar\r\n update(value, total, mode, url = '') {\r\n this._mode = mode;\r\n this._value = value;\r\n // depending on CDN, total return to XHTTPRequest can be 0.\r\n // In this case, we generate a random number to animate the progressbar\r\n if (total === 0) {\r\n this._total = value;\r\n this._value = Math.random() * value;\r\n } else {\r\n this._total = total;\r\n }\r\n }\r\n\r\n updateUI() {\r\n this.requestAnimationFrameID = requestAnimationFrame(() => {\r\n this.updateUI();\r\n });\r\n\r\n if (\r\n !(\r\n this._modes.hasOwnProperty(this._mode) &&\r\n this._modes[this._mode].hasOwnProperty('name') &&\r\n this._modes[this._mode].hasOwnProperty('color')\r\n )\r\n ) {\r\n return false;\r\n }\r\n\r\n const progress = Math.round((this._value / this._total) * 100);\r\n const color = this._modes[this._mode].color;\r\n\r\n let progressBar = this._container.getElementsByClassName(\r\n 'progress ' + this._modes[this._mode].name\r\n );\r\n if (progressBar.length > 0) {\r\n progressBar[0].style.borderColor = color;\r\n progressBar[0].style.width = progress + '%';\r\n }\r\n progressBar = null;\r\n }\r\n\r\n _domContainer() {\r\n let container = document.createElement('div');\r\n\r\n // class it\r\n container.classList.add('progress');\r\n container.classList.add('container');\r\n\r\n // style it\r\n container.style.width = '100%';\r\n container.style.height = '8px';\r\n container.style.position = 'absolute';\r\n container.style.backgroundColor = 'rgba(158, 158, 158, 0.5)';\r\n container.style.top = '0';\r\n container.style.zIndex = '1';\r\n\r\n return container;\r\n }\r\n\r\n _domBar(mode) {\r\n if (!(mode.hasOwnProperty('name') && mode.hasOwnProperty('color'))) {\r\n window.console.log('Invalid mode provided.');\r\n window.console.log(mode);\r\n\r\n return false;\r\n }\r\n\r\n let bar = document.createElement('div');\r\n\r\n // class it\r\n bar.classList.add(mode.name);\r\n bar.classList.add('progress');\r\n\r\n // style it\r\n bar.style.border = '2px solid ' + mode.color;\r\n bar.style.width = '0%';\r\n\r\n return bar;\r\n }\r\n\r\n set totalFiles(totalFiles) {\r\n this._totalFiles = totalFiles;\r\n }\r\n\r\n get totalFiles() {\r\n return this._totalFiles;\r\n }\r\n}\r\n","import CoreUtils from '../core/core.utils';\r\n\r\nlet defaultSegmentation = {\r\n 0: { color: [0, 0, 0], opacity: 0, label: 'background' },\r\n 1: { color: [255, 0, 0], opacity: 1, label: 'white matter' },\r\n};\r\n\r\nexport default class HelpersSegmentationLut {\r\n constructor(domTarget, segmentation = defaultSegmentation) {\r\n if (CoreUtils.isString(domTarget)) {\r\n this._dom = document.getElementById(domTarget);\r\n } else {\r\n this._dom = domTarget;\r\n }\r\n\r\n this._segmentation = segmentation;\r\n\r\n /* The segmentation object contains the color, opacity, label and structures associated:\r\n e.g\r\n const freesurferSegmentation = {\r\n 0: {color: [0, 0, 0],opacity: 0,label: 'background'},\r\n 1: {color: [255, 0, 0],opacity: 1,label: 'white matter'},\r\n }\r\n */\r\n this.initCanvas();\r\n this.paintCanvas();\r\n }\r\n\r\n initCanvas() {\r\n // container\r\n this._canvasContainer = this.initCanvasContainer(this._dom);\r\n // background\r\n this._canvasBg = this.createCanvas();\r\n this._canvasContainer.appendChild(this._canvasBg);\r\n // foreground\r\n this._canvas = this.createCanvas();\r\n this._canvasContainer.appendChild(this._canvas);\r\n }\r\n\r\n initCanvasContainer(dom) {\r\n let canvasContainer = dom;\r\n canvasContainer.style.width = '256 px';\r\n canvasContainer.style.height = '128 px';\r\n canvasContainer.style.border = '1px solid #F9F9F9';\r\n return canvasContainer;\r\n }\r\n\r\n createCanvas() {\r\n let canvas = document.createElement('canvas');\r\n canvas.height = 128;\r\n canvas.width = 256;\r\n return canvas;\r\n }\r\n\r\n paintCanvas() {\r\n // setup context\r\n let ctx = this._canvas.getContext('2d');\r\n ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\r\n ctx.globalCompositeOperation = 'source-over';\r\n ctx.lineWidth = 1;\r\n\r\n for (let i in this._segmentation) {\r\n // i is the label number and specifies the coordinates inside the canvas\r\n let xCoord = i % this._canvas.width;\r\n let yCoord = Math.floor(i / this._canvas.width);\r\n let opacity =\r\n typeof this._segmentation[i]['opacity'] != 'undefined'\r\n ? this._segmentation[i]['opacity']\r\n : 1;\r\n let color = this._segmentation[i]['color'];\r\n\r\n ctx.fillStyle = `rgba( ${Math.round(color[0])}, ${Math.round(color[1])}, ${Math.round(\r\n color[2]\r\n )}, ${opacity})`;\r\n ctx.fillRect(xCoord, yCoord, 1, 1);\r\n }\r\n }\r\n\r\n get texture() {\r\n let texture = new THREE.Texture(this._canvas);\r\n texture.mapping = THREE.UVMapping;\r\n texture.wrapS = texture.wrapT = THREE.ClampToEdgeWrapping;\r\n texture.magFilter = texture.minFilter = THREE.NearestFilter;\r\n texture.premultiplyAlpha = true;\r\n texture.needsUpdate = true;\r\n\r\n return texture;\r\n }\r\n\r\n /**\r\n * Set and get the segmentation object\r\n * (you can create it or get it from the presets file)\r\n *\r\n * @param {*} segmentation\r\n */\r\n set segmentation(segmentation) {\r\n this._segmentation = segmentation;\r\n this.paintCanvas();\r\n }\r\n\r\n get segmentation() {\r\n return this._segmentation;\r\n }\r\n}\r\n","/** * Imports ***/\r\nimport { geometriesSlice } from '../geometries/geometries.slice';\r\nimport ShadersUniform from '../shaders/shaders.data.uniform';\r\nimport ShadersVertex from '../shaders/shaders.data.vertex';\r\nimport ShadersFragment from '../shaders/shaders.data.fragment';\r\n\r\nimport { helpersMaterialMixin } from '../helpers/helpers.material.mixin';\r\n\r\n/**\r\n * @module helpers/slice\r\n */\r\n\r\nconst helpersSlice = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = helpersMaterialMixin(three);\r\n return class extends Constructor {\r\n constructor(\r\n stack,\r\n index = 0,\r\n position = new three.Vector3(0, 0, 0),\r\n direction = new three.Vector3(0, 0, 1),\r\n aabbSpace = 'IJK'\r\n ) {\r\n //\r\n super();\r\n\r\n // private vars\r\n this._stack = stack;\r\n\r\n // image settings\r\n // index only used to grab window/level and intercept/slope\r\n this._invert = this._stack.invert;\r\n\r\n this._lut = 'none';\r\n this._lutTexture = null;\r\n // if auto === true, get from index\r\n // else from stack which holds the default values\r\n this._intensityAuto = true;\r\n this._interpolation = 1; // default to trilinear interpolation\r\n // starts at 0\r\n this._index = index;\r\n this._windowWidth = null;\r\n this._windowCenter = null;\r\n this._opacity = 1;\r\n this._rescaleSlope = null;\r\n this._rescaleIntercept = null;\r\n this._spacing = 1;\r\n this._thickness = 0;\r\n this._thicknessMethod = 0; // default to MIP (Maximum Intensity Projection); 1 - Mean; 2 - MinIP\r\n\r\n // threshold\r\n this._lowerThreshold = null;\r\n this._upperThreshold = null;\r\n\r\n this._canvasWidth = 0;\r\n this._canvasHeight = 0;\r\n this._borderColor = null;\r\n\r\n // Object3D settings\r\n // shape\r\n this._planePosition = position;\r\n this._planeDirection = direction;\r\n // change aaBBSpace changes the box dimensions\r\n // also changes the transform\r\n // there is also a switch to move back mesh to LPS space automatically\r\n this._aaBBspace = aabbSpace; // or LPS -> different transforms, esp for the geometry/mesh\r\n this._material = null;\r\n this._textures = [];\r\n this._shadersFragment = ShadersFragment;\r\n this._shadersVertex = ShadersVertex;\r\n this._uniforms = ShadersUniform.uniforms();\r\n this._geometry = null;\r\n this._mesh = null;\r\n this._visible = true;\r\n\r\n // update dimensions, center, etc.\r\n // depending on aaBBSpace\r\n this._init();\r\n\r\n // update object\r\n this._create();\r\n }\r\n\r\n // getters/setters\r\n\r\n get stack() {\r\n return this._stack;\r\n }\r\n\r\n set stack(stack) {\r\n this._stack = stack;\r\n }\r\n\r\n get spacing() {\r\n return this._spacing;\r\n }\r\n\r\n set spacing(spacing) {\r\n this._spacing = spacing;\r\n this._uniforms.uSpacing.value = this._spacing;\r\n }\r\n\r\n get thickness() {\r\n return this._thickness;\r\n }\r\n\r\n set thickness(thickness) {\r\n this._thickness = thickness;\r\n this._uniforms.uThickness.value = this._thickness;\r\n }\r\n\r\n get thicknessMethod() {\r\n return this._thicknessMethod;\r\n }\r\n\r\n set thicknessMethod(thicknessMethod) {\r\n this._thicknessMethod = thicknessMethod;\r\n this._uniforms.uThicknessMethod.value = this._thicknessMethod;\r\n }\r\n get windowWidth() {\r\n return this._windowWidth;\r\n }\r\n\r\n set windowWidth(windowWidth) {\r\n this._windowWidth = windowWidth;\r\n this.updateIntensitySettingsUniforms();\r\n }\r\n\r\n get windowCenter() {\r\n return this._windowCenter;\r\n }\r\n\r\n set windowCenter(windowCenter) {\r\n this._windowCenter = windowCenter;\r\n this.updateIntensitySettingsUniforms();\r\n }\r\n\r\n get opacity() {\r\n return this._opacity;\r\n }\r\n\r\n set opacity(opacity) {\r\n this._opacity = opacity;\r\n this.updateIntensitySettingsUniforms();\r\n }\r\n\r\n // adding thresholding method\r\n get upperThreshold() {\r\n return this._upperThreshold;\r\n }\r\n\r\n set upperThreshold(upperThreshold) {\r\n this._upperThreshold = upperThreshold;\r\n this.updateIntensitySettingsUniforms();\r\n }\r\n\r\n get lowerThreshold() {\r\n return this._lowerThreshold;\r\n }\r\n\r\n set lowerThreshold(lowerThreshold) {\r\n this._lowerThreshold = lowerThreshold;\r\n this.updateIntensitySettingsUniforms();\r\n }\r\n get rescaleSlope() {\r\n return this._rescaleSlope;\r\n }\r\n\r\n set rescaleSlope(rescaleSlope) {\r\n this._rescaleSlope = rescaleSlope;\r\n this.updateIntensitySettingsUniforms();\r\n }\r\n\r\n get rescaleIntercept() {\r\n return this._rescaleIntercept;\r\n }\r\n\r\n set rescaleIntercept(rescaleIntercept) {\r\n this._rescaleIntercept = rescaleIntercept;\r\n this.updateIntensitySettingsUniforms();\r\n }\r\n\r\n get invert() {\r\n return this._invert;\r\n }\r\n\r\n set invert(invert) {\r\n this._invert = invert;\r\n this.updateIntensitySettingsUniforms();\r\n }\r\n\r\n get lut() {\r\n return this._lut;\r\n }\r\n\r\n set lut(lut) {\r\n this._lut = lut;\r\n }\r\n\r\n get lutTexture() {\r\n return this._lutTexture;\r\n }\r\n\r\n set lutTexture(lutTexture) {\r\n this._lutTexture = lutTexture;\r\n this.updateIntensitySettingsUniforms();\r\n }\r\n\r\n get intensityAuto() {\r\n return this._intensityAuto;\r\n }\r\n\r\n set intensityAuto(intensityAuto) {\r\n this._intensityAuto = intensityAuto;\r\n this.updateIntensitySettings();\r\n this.updateIntensitySettingsUniforms();\r\n }\r\n\r\n get interpolation() {\r\n return this._interpolation;\r\n }\r\n\r\n set interpolation(interpolation) {\r\n this._interpolation = interpolation;\r\n this.updateIntensitySettingsUniforms();\r\n this._updateMaterial();\r\n }\r\n\r\n get index() {\r\n return this._index;\r\n }\r\n\r\n set index(index) {\r\n this._index = index;\r\n this._update();\r\n }\r\n\r\n set planePosition(position) {\r\n this._planePosition = position;\r\n this._update();\r\n }\r\n\r\n get planePosition() {\r\n return this._planePosition;\r\n }\r\n\r\n set planeDirection(direction) {\r\n this._planeDirection = direction;\r\n this._update();\r\n }\r\n\r\n get planeDirection() {\r\n return this._planeDirection;\r\n }\r\n\r\n set halfDimensions(halfDimensions) {\r\n this._halfDimensions = halfDimensions;\r\n }\r\n\r\n get halfDimensions() {\r\n return this._halfDimensions;\r\n }\r\n\r\n set center(center) {\r\n this._center = center;\r\n }\r\n\r\n get center() {\r\n return this._center;\r\n }\r\n\r\n set aabbSpace(aabbSpace) {\r\n this._aaBBspace = aabbSpace;\r\n this._init();\r\n }\r\n\r\n get aabbSpace() {\r\n return this._aaBBspace;\r\n }\r\n\r\n set mesh(mesh) {\r\n this._mesh = mesh;\r\n }\r\n\r\n get mesh() {\r\n return this._mesh;\r\n }\r\n\r\n set geometry(geometry) {\r\n this._geometry = geometry;\r\n }\r\n\r\n get geometry() {\r\n return this._geometry;\r\n }\r\n\r\n set canvasWidth(canvasWidth) {\r\n this._canvasWidth = canvasWidth;\r\n this._uniforms.uCanvasWidth.value = this._canvasWidth;\r\n }\r\n\r\n get canvasWidth() {\r\n return this._canvasWidth;\r\n }\r\n\r\n set canvasHeight(canvasHeight) {\r\n this._canvasHeight = canvasHeight;\r\n this._uniforms.uCanvasHeight.value = this._canvasHeight;\r\n }\r\n\r\n get canvasHeight() {\r\n return this._canvasHeight;\r\n }\r\n\r\n set borderColor(borderColor) {\r\n this._borderColor = borderColor;\r\n this._uniforms.uBorderColor.value = new three.Color(borderColor);\r\n }\r\n\r\n get borderColor() {\r\n return this._borderColor;\r\n }\r\n\r\n _init() {\r\n if (!this._stack || !this._stack._prepared || !this._stack._packed) {\r\n return;\r\n }\r\n\r\n if (this._aaBBspace === 'IJK') {\r\n this._halfDimensions = this._stack.halfDimensionsIJK;\r\n this._center = new three.Vector3(\r\n this._stack.halfDimensionsIJK.x - 0.5,\r\n this._stack.halfDimensionsIJK.y - 0.5,\r\n this._stack.halfDimensionsIJK.z - 0.5\r\n );\r\n this._toAABB = new three.Matrix4();\r\n } else {\r\n // LPS\r\n let aaBBox = this._stack.AABBox();\r\n this._halfDimensions = aaBBox.clone().multiplyScalar(0.5);\r\n this._center = this._stack.centerAABBox();\r\n this._toAABB = this._stack.lps2AABB;\r\n }\r\n }\r\n\r\n // private methods\r\n _create() {\r\n if (!this._stack || !this._stack.prepared || !this._stack.packed) {\r\n return;\r\n }\r\n\r\n // Convenience vars\r\n try {\r\n const SliceGeometryContructor = geometriesSlice(three);\r\n this._geometry = new SliceGeometryContructor(\r\n this._halfDimensions,\r\n this._center,\r\n this._planePosition,\r\n this._planeDirection,\r\n this._toAABB\r\n );\r\n } catch (e) {\r\n window.console.log(e);\r\n window.console.log('invalid slice geometry - exiting...');\r\n return;\r\n }\r\n\r\n if (!this._geometry.vertices) {\r\n return;\r\n }\r\n\r\n if (!this._material) {\r\n //\r\n this._uniforms.uTextureSize.value = this._stack.textureSize;\r\n this._uniforms.uDataDimensions.value = [\r\n this._stack.dimensionsIJK.x,\r\n this._stack.dimensionsIJK.y,\r\n this._stack.dimensionsIJK.z,\r\n ];\r\n this._uniforms.uWorldToData.value = this._stack.lps2IJK;\r\n this._uniforms.uNumberOfChannels.value = this._stack.numberOfChannels;\r\n this._uniforms.uPixelType.value = this._stack.pixelType;\r\n this._uniforms.uBitsAllocated.value = this._stack.bitsAllocated;\r\n this._uniforms.uPackedPerPixel.value = this._stack.packedPerPixel;\r\n this._uniforms.uSpacing.value = this._spacing;\r\n this._uniforms.uThickness.value = this._thickness;\r\n this._uniforms.uThicknessMethod.value = this._thicknessMethod;\r\n // compute texture if material exist\r\n this._prepareTexture();\r\n this._uniforms.uTextureContainer.value = this._textures;\r\n if (this._stack.textureUnits > 8) {\r\n this._uniforms.uTextureContainer.length = 14;\r\n }\r\n\r\n this._createMaterial({\r\n side: three.DoubleSide,\r\n });\r\n }\r\n\r\n // update intensity related stuff\r\n this.updateIntensitySettings();\r\n this.updateIntensitySettingsUniforms();\r\n\r\n // create the mesh!\r\n this._mesh = new three.Mesh(this._geometry, this._material);\r\n if (this._aaBBspace === 'IJK') {\r\n this._mesh.applyMatrix(this._stack.ijk2LPS);\r\n }\r\n\r\n this._mesh.visible = this._visible;\r\n\r\n // and add it!\r\n this.add(this._mesh);\r\n }\r\n\r\n updateIntensitySettings() {\r\n // if auto, get from frame index\r\n if (this._intensityAuto) {\r\n this.updateIntensitySetting('windowCenter');\r\n this.updateIntensitySetting('windowWidth');\r\n this.updateIntensitySetting('rescaleSlope');\r\n this.updateIntensitySetting('rescaleIntercept');\r\n } else {\r\n if (this._windowCenter === null) {\r\n this._windowCenter = this._stack.windowCenter;\r\n }\r\n\r\n if (this._windowWidth === null) {\r\n this._windowWidth = this._stack.windowWidth;\r\n }\r\n\r\n if (this._rescaleSlope === null) {\r\n this._rescaleSlope = this._stack.rescaleSlope;\r\n }\r\n\r\n if (this._rescaleIntercept === null) {\r\n this._rescaleIntercept = this._stack.rescaleIntercept;\r\n }\r\n }\r\n\r\n // adding thresholding\r\n if (this._upperThreshold === null) {\r\n this._upperThreshold = this._stack._minMax[1];\r\n }\r\n\r\n if (this._lowerThreshold === null) {\r\n this._lowerThreshold = this._stack._minMax[0];\r\n }\r\n }\r\n\r\n updateIntensitySettingsUniforms() {\r\n // compensate for the offset to only pass > 0 values to shaders\r\n // models > models.stack.js : _packTo8Bits\r\n let offset = 0;\r\n if (this._stack._minMax[0] < 0) {\r\n offset -= this._stack._minMax[0];\r\n }\r\n\r\n // set slice window center and width\r\n this._uniforms.uRescaleSlopeIntercept.value = [this._rescaleSlope, this._rescaleIntercept];\r\n this._uniforms.uWindowCenterWidth.value = [offset + this._windowCenter, this._windowWidth];\r\n\r\n // set slice opacity\r\n this._uniforms.uOpacity.value = this._opacity;\r\n\r\n // set slice upper/lower threshold\r\n this._uniforms.uLowerUpperThreshold.value = [\r\n offset + this._lowerThreshold,\r\n offset + this._upperThreshold,\r\n ];\r\n\r\n // invert\r\n this._uniforms.uInvert.value = this._invert === true ? 1 : 0;\r\n\r\n // interpolation\r\n this._uniforms.uInterpolation.value = this._interpolation;\r\n\r\n // lut\r\n if (this._lut === 'none') {\r\n this._uniforms.uLut.value = 0;\r\n } else {\r\n this._uniforms.uLut.value = 1;\r\n this._uniforms.uTextureLUT.value = this._lutTexture;\r\n }\r\n }\r\n\r\n updateIntensitySetting(setting) {\r\n if (this._stack.frame[this._index] && this._stack.frame[this._index][setting]) {\r\n this['_' + setting] = this._stack.frame[this._index][setting];\r\n } else {\r\n this['_' + setting] = this._stack[setting];\r\n }\r\n }\r\n\r\n _update() {\r\n // update slice\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n // we do not want to dispose the texture!\r\n // this._mesh.material.dispose();\r\n // this._mesh.material = null;\r\n this._mesh = null;\r\n }\r\n\r\n this._create();\r\n }\r\n\r\n dispose() {\r\n // Release memory\r\n for (let j = 0; j < this._textures.length; j++) {\r\n this._textures[j].dispose();\r\n this._textures[j] = null;\r\n }\r\n this._textures = null;\r\n this._shadersFragment = null;\r\n this._shadersVertex = null;\r\n\r\n this._uniforms = null;\r\n\r\n // material, geometry and mesh\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n this._stack = null;\r\n }\r\n\r\n cartesianEquation() {\r\n // Make sure we have a geometry\r\n if (!this._geometry || !this._geometry.vertices || this._geometry.vertices.length < 3) {\r\n return new three.Vector4();\r\n }\r\n\r\n let vertices = this._geometry.vertices;\r\n let dataToWorld = this._stack.ijk2LPS;\r\n let p1 = new three.Vector3(vertices[0].x, vertices[0].y, vertices[0].z).applyMatrix4(\r\n dataToWorld\r\n );\r\n let p2 = new three.Vector3(vertices[1].x, vertices[1].y, vertices[1].z).applyMatrix4(\r\n dataToWorld\r\n );\r\n let p3 = new three.Vector3(vertices[2].x, vertices[2].y, vertices[2].z).applyMatrix4(\r\n dataToWorld\r\n );\r\n let v1 = new three.Vector3();\r\n let v2 = new three.Vector3();\r\n let normal = v1\r\n .subVectors(p3, p2)\r\n .cross(v2.subVectors(p1, p2))\r\n .normalize();\r\n\r\n return new three.Vector4(normal.x, normal.y, normal.z, -normal.dot(p1));\r\n }\r\n };\r\n};\r\n\r\nexport { helpersSlice };\r\nexport default helpersSlice();\r\n","/** * Imports ***/\r\nimport { helpersBorder } from '../helpers/helpers.border';\r\nimport { helpersBoundingBox } from '../helpers/helpers.boundingbox';\r\nimport { helpersSlice } from '../helpers/helpers.slice';\r\n\r\n/**\r\n * Helper to easily display and interact with a stack.
\r\n *
\r\n * Defaults:
\r\n * - orientation: 0 (acquisition direction)
\r\n * - index: middle slice in acquisition direction
\r\n *
\r\n * Features:
\r\n * - slice from the stack (in any direction)
\r\n * - slice border
\r\n * - stack bounding box
\r\n *
\r\n * Live demo at: {@link http://jsfiddle.net/gh/get/library/pure/fnndsc/ami/tree/master/lessons/01#run|Lesson 01}\r\n *\r\n * @example\r\n * let stack = new VJS.Models.Stack();\r\n * ... // prepare the stack\r\n *\r\n * let helpersStack = new VJS.Helpers.Stack(stack);\r\n * stackHelper.bbox.color = 0xF9F9F9;\r\n * stackHelper.border.color = 0xF9F9F9;\r\n *\r\n * let scene = new THREE.Scene();\r\n * scene.add(stackHelper);\r\n *\r\n * @see module:helpers/border\r\n * @see module:helpers/boundingbox\r\n * @see module:helpers/slice\r\n *\r\n * @module helpers/stack\r\n */\r\nconst helpersStack = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = three.Object3D;\r\n return class extends Constructor {\r\n constructor(stack) {\r\n //\r\n super();\r\n\r\n this._stack = stack;\r\n this._bBox = null;\r\n this._slice = null;\r\n this._border = null;\r\n this._dummy = null;\r\n\r\n this._orientation = 0;\r\n this._index = 0;\r\n\r\n this._uniforms = null;\r\n this._autoWindowLevel = false;\r\n this._outOfBounds = false;\r\n this._orientationMaxIndex = 0;\r\n this._orientationSpacing = 0;\r\n\r\n this._canvasWidth = 0;\r\n this._canvasHeight = 0;\r\n this._borderColor = null;\r\n\r\n this._create();\r\n }\r\n\r\n /**\r\n * Get stack.\r\n *\r\n * @type {ModelsStack}\r\n */\r\n get stack() {\r\n return this._stack;\r\n }\r\n\r\n /**\r\n * Set stack.\r\n *\r\n * @type {ModelsStack}\r\n */\r\n set stack(stack) {\r\n this._stack = stack;\r\n }\r\n\r\n /**\r\n * Get bounding box helper.\r\n *\r\n * @type {HelpersBoundingBox}\r\n */\r\n get bbox() {\r\n return this._bBox;\r\n }\r\n\r\n /**\r\n * Get slice helper.\r\n *\r\n * @type {HelpersSlice}\r\n */\r\n get slice() {\r\n return this._slice;\r\n }\r\n\r\n /**\r\n * Get border helper.\r\n *\r\n * @type {HelpersSlice}\r\n */\r\n get border() {\r\n return this._border;\r\n }\r\n\r\n /**\r\n * Set/get current slice index.
\r\n * Sets outOfBounds flag to know if target index is in/out stack bounding box.
\r\n *
\r\n * Internally updates the sliceHelper index and position. Also updates the\r\n * borderHelper with the updated sliceHelper.\r\n *\r\n * @type {number}\r\n */\r\n get index() {\r\n return this._index;\r\n }\r\n\r\n set index(index) {\r\n this._index = index;\r\n\r\n // update the slice\r\n this._slice.index = index;\r\n let halfDimensions = this._stack.halfDimensionsIJK;\r\n this._slice.planePosition = this._prepareSlicePosition(halfDimensions, this._index);\r\n\r\n // also update the border\r\n this._border.helpersSlice = this._slice;\r\n\r\n // update ourOfBounds flag\r\n this._isIndexOutOfBounds();\r\n }\r\n\r\n /**\r\n * Set/get current slice orientation.
\r\n * Values:
\r\n * - 0: acquisition direction (slice normal is z_cosine)
\r\n * - 1: next direction (slice normal is x_cosine)
\r\n * - 2: next direction (slice normal is y_cosine)
\r\n * - n: set orientation to 0
\r\n *
\r\n * Internally updates the sliceHelper direction. Also updates the\r\n * borderHelper with the updated sliceHelper.\r\n *\r\n * @type {number}\r\n */\r\n set orientation(orientation) {\r\n this._orientation = orientation;\r\n this._computeOrientationMaxIndex();\r\n\r\n this._computeOrientationSpacing();\r\n this._slice.spacing = Math.abs(this._orientationSpacing);\r\n this._slice.thickness = this._slice.spacing;\r\n\r\n this._slice.planeDirection = this._prepareDirection(this._orientation);\r\n\r\n // also update the border\r\n this._border.helpersSlice = this._slice;\r\n }\r\n\r\n get orientation() {\r\n return this._orientation;\r\n }\r\n\r\n /**\r\n * Set/get the outOfBound flag.\r\n *\r\n * @type {boolean}\r\n */\r\n set outOfBounds(outOfBounds) {\r\n this._outOfBounds = outOfBounds;\r\n }\r\n\r\n get outOfBounds() {\r\n return this._outOfBounds;\r\n }\r\n\r\n /**\r\n * Set/get the orientationMaxIndex.\r\n *\r\n * @type {number}\r\n */\r\n set orientationMaxIndex(orientationMaxIndex) {\r\n this._orientationMaxIndex = orientationMaxIndex;\r\n }\r\n\r\n get orientationMaxIndex() {\r\n return this._orientationMaxIndex;\r\n }\r\n\r\n /**\r\n * Set/get the orientationSpacing.\r\n *\r\n * @type {number}\r\n */\r\n set orientationSpacing(orientationSpacing) {\r\n this._orientationSpacing = orientationSpacing;\r\n }\r\n\r\n get orientationSpacing() {\r\n return this._orientationSpacing;\r\n }\r\n\r\n set canvasWidth(canvasWidth) {\r\n this._canvasWidth = canvasWidth;\r\n this._slice.canvasWidth = this._canvasWidth;\r\n }\r\n\r\n get canvasWidth() {\r\n return this._canvasWidth;\r\n }\r\n\r\n set canvasHeight(canvasHeight) {\r\n this._canvasHeight = canvasHeight;\r\n this._slice.canvasHeight = this._canvasHeight;\r\n }\r\n\r\n get canvasHeight() {\r\n return this._canvasHeight;\r\n }\r\n\r\n set borderColor(borderColor) {\r\n this._borderColor = borderColor;\r\n this._border.color = borderColor;\r\n this._slice.borderColor = this._borderColor;\r\n }\r\n\r\n get borderColor() {\r\n return this._borderColor;\r\n }\r\n\r\n //\r\n // PRIVATE METHODS\r\n //\r\n\r\n /**\r\n * Initial setup, including stack prepare, bbox prepare, slice prepare and\r\n * border prepare.\r\n *\r\n * @private\r\n */\r\n _create() {\r\n if (this._stack) {\r\n // prepare sthe stack internals\r\n this._prepareStack();\r\n\r\n // prepare visual objects\r\n this._prepareBBox();\r\n this._prepareSlice();\r\n this._prepareBorder();\r\n // todo: Arrow\r\n } else {\r\n window.console.log('no stack to be prepared...');\r\n }\r\n }\r\n\r\n _computeOrientationSpacing() {\r\n let spacing = this._stack._spacing;\r\n switch (this._orientation) {\r\n case 0:\r\n this._orientationSpacing = spacing.z;\r\n break;\r\n case 1:\r\n this._orientationSpacing = spacing.x;\r\n break;\r\n case 2:\r\n this._orientationSpacing = spacing.y;\r\n break;\r\n default:\r\n this._orientationSpacing = 0;\r\n break;\r\n }\r\n }\r\n\r\n _computeOrientationMaxIndex() {\r\n let dimensionsIJK = this._stack.dimensionsIJK;\r\n this._orientationMaxIndex = 0;\r\n switch (this._orientation) {\r\n case 0:\r\n this._orientationMaxIndex = dimensionsIJK.z - 1;\r\n break;\r\n case 1:\r\n this._orientationMaxIndex = dimensionsIJK.x - 1;\r\n break;\r\n case 2:\r\n this._orientationMaxIndex = dimensionsIJK.y - 1;\r\n break;\r\n default:\r\n // do nothing!\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Given orientation, check if index is in/out of bounds.\r\n *\r\n * @private\r\n */\r\n _isIndexOutOfBounds() {\r\n this._computeOrientationMaxIndex();\r\n if (this._index >= this._orientationMaxIndex || this._index < 0) {\r\n this._outOfBounds = true;\r\n } else {\r\n this._outOfBounds = false;\r\n }\r\n }\r\n\r\n /**\r\n * Prepare a stack for visualization. (image to world transform, frames order,\r\n * pack data into 8 bits textures, etc.)\r\n *\r\n * @private\r\n */\r\n _prepareStack() {\r\n // make sure there is something, if not throw an error\r\n // compute image to workd transform, order frames, etc.\r\n if (!this._stack.prepared) {\r\n this._stack.prepare();\r\n }\r\n // pack data into 8 bits rgba texture for the shader\r\n // this one can be slow...\r\n if (!this._stack.packed) {\r\n this._stack.pack();\r\n }\r\n }\r\n\r\n /**\r\n * Setup bounding box helper given prepared stack and add bounding box helper\r\n * to stack helper.\r\n *\r\n * @private\r\n */\r\n _prepareBBox() {\r\n const HelpersBoundingBoxConstructor = helpersBoundingBox(three);\r\n this._bBox = new HelpersBoundingBoxConstructor(this._stack);\r\n this.add(this._bBox);\r\n }\r\n\r\n /**\r\n * Setup border helper given slice helper and add border helper\r\n * to stack helper.\r\n *\r\n * @private\r\n */\r\n _prepareBorder() {\r\n const HelpersBorderContructor = helpersBorder(three);\r\n this._border = new HelpersBorderContructor(this._slice);\r\n this.add(this._border);\r\n }\r\n\r\n /**\r\n * Setup slice helper given prepared stack helper and add slice helper\r\n * to stack helper.\r\n *\r\n * @private\r\n */\r\n _prepareSlice() {\r\n let halfDimensionsIJK = this._stack.halfDimensionsIJK;\r\n // compute initial index given orientation\r\n this._index = this._prepareSliceIndex(halfDimensionsIJK);\r\n // compute initial position given orientation and index\r\n let position = this._prepareSlicePosition(halfDimensionsIJK, this._index);\r\n // compute initial direction orientation\r\n let direction = this._prepareDirection(this._orientation);\r\n\r\n const SliceHelperConstructor = helpersSlice(three);\r\n this._slice = new SliceHelperConstructor(this._stack, this._index, position, direction);\r\n this.add(this._slice);\r\n }\r\n\r\n /**\r\n * Compute slice index depending on orientation.\r\n *\r\n * @param {Vector3} indices - Indices in each direction.\r\n *\r\n * @returns {number} Slice index according to current orientation.\r\n *\r\n * @private\r\n */\r\n _prepareSliceIndex(indices) {\r\n let index = 0;\r\n switch (this._orientation) {\r\n case 0:\r\n index = Math.floor(indices.z);\r\n break;\r\n case 1:\r\n index = Math.floor(indices.x);\r\n break;\r\n case 2:\r\n index = Math.floor(indices.y);\r\n break;\r\n default:\r\n // do nothing!\r\n break;\r\n }\r\n return index;\r\n }\r\n\r\n /**\r\n * Compute slice position depending on orientation.\r\n * Sets index in proper location of reference position.\r\n *\r\n * @param {Vector3} rPosition - Reference position.\r\n * @param {number} index - Current index.\r\n *\r\n * @returns {number} Slice index according to current orientation.\r\n *\r\n * @private\r\n */\r\n _prepareSlicePosition(rPosition, index) {\r\n let position = new three.Vector3(0, 0, 0);\r\n switch (this._orientation) {\r\n case 0:\r\n position = new three.Vector3(Math.floor(rPosition.x), Math.floor(rPosition.y), index);\r\n break;\r\n case 1:\r\n position = new three.Vector3(index, Math.floor(rPosition.y), Math.floor(rPosition.z));\r\n break;\r\n case 2:\r\n position = new three.Vector3(Math.floor(rPosition.x), index, Math.floor(rPosition.z));\r\n break;\r\n default:\r\n // do nothing!\r\n break;\r\n }\r\n return position;\r\n }\r\n\r\n /**\r\n * Compute slice direction depending on orientation.\r\n *\r\n * @param {number} orientation - Slice orientation.\r\n *\r\n * @returns {Vector3} Slice direction\r\n *\r\n * @private\r\n */\r\n _prepareDirection(orientation) {\r\n let direction = new three.Vector3(0, 0, 1);\r\n switch (orientation) {\r\n case 0:\r\n direction = new three.Vector3(0, 0, 1);\r\n break;\r\n case 1:\r\n direction = new three.Vector3(1, 0, 0);\r\n break;\r\n case 2:\r\n direction = new three.Vector3(0, 1, 0);\r\n break;\r\n default:\r\n // do nothing!\r\n break;\r\n }\r\n\r\n return direction;\r\n }\r\n\r\n /**\r\n * Release the stack helper memory including the slice memory.\r\n *\r\n * @public\r\n */\r\n dispose() {\r\n this.remove(this._slice);\r\n this._slice.dispose();\r\n this._slice = null;\r\n this._bBox.dispose();\r\n this._bBox = null;\r\n this._border.dispose();\r\n this._border = null;\r\n }\r\n };\r\n};\r\n\r\n// export factory\r\nexport { helpersStack };\r\n// default export to\r\nexport default helpersStack();\r\n","/** * Imports ***/\r\nimport ShadersUniform from '../shaders/shaders.vr.uniform';\r\nimport ShadersVertex from '../shaders/shaders.vr.vertex';\r\nimport ShadersFragment from '../shaders/shaders.vr.fragment';\r\n\r\nimport { helpersMaterialMixin } from '../helpers/helpers.material.mixin';\r\n\r\n/**\r\n * @module helpers/volumerendering\r\n */\r\n\r\nconst helpersVolumeRendering = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = helpersMaterialMixin(three);\r\n return class extends Constructor {\r\n constructor(stack) {\r\n //\r\n super();\r\n\r\n this._stack = stack;\r\n this._textures = [];\r\n this._shadersFragment = ShadersFragment;\r\n this._shadersVertex = ShadersVertex;\r\n this._uniforms = ShadersUniform.uniforms();\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n\r\n this._algorithm = 0; // ray marching\r\n this._alphaCorrection = 0.5; // default\r\n this._interpolation = 1; // default to trilinear interpolation\r\n this._shading = 1; // shading is on by default\r\n this._shininess = 10.0;\r\n this._steps = 256; // default\r\n this._offset = 0;\r\n this._windowCenter = 0.0;\r\n this._windowWidth = 1.0;\r\n\r\n this._create();\r\n }\r\n\r\n _create() {\r\n this._prepareStack();\r\n this._prepareTexture();\r\n this._prepareMaterial();\r\n this._prepareGeometry();\r\n\r\n this._mesh = new three.Mesh(this._geometry, this._material);\r\n this.add(this._mesh);\r\n }\r\n\r\n _prepareStack() {\r\n if (!this._stack.prepared) {\r\n this._stack.prepare();\r\n }\r\n\r\n if (!this._stack.packed) {\r\n this._stack.pack();\r\n }\r\n\r\n // compensate for the offset to only pass > 0 values to shaders\r\n // models > models.stack.js : _packTo8Bits\r\n this._offset = Math.min(0, this._stack._minMax[0]);\r\n this._windowCenter = this._stack.windowCenter;\r\n this._windowWidth = this._stack.windowWidth * 0.8; // multiply for better default visualization\r\n }\r\n\r\n _prepareMaterial() {\r\n // uniforms\r\n this._uniforms = ShadersUniform.uniforms();\r\n this._uniforms.uWorldBBox.value = this._stack.worldBoundingBox();\r\n this._uniforms.uTextureSize.value = this._stack.textureSize;\r\n this._uniforms.uTextureContainer.value = this._textures;\r\n if (this._stack.textureUnits > 8) {\r\n this._uniforms.uTextureContainer.length = 14;\r\n }\r\n this._uniforms.uWorldToData.value = this._stack.lps2IJK;\r\n this._uniforms.uNumberOfChannels.value = this._stack.numberOfChannels;\r\n this._uniforms.uPixelType.value = this._stack.pixelType;\r\n this._uniforms.uBitsAllocated.value = this._stack.bitsAllocated;\r\n this._uniforms.uPackedPerPixel.value = this._stack.packedPerPixel;\r\n this._uniforms.uWindowCenterWidth.value = [\r\n this._windowCenter - this._offset,\r\n this._windowWidth,\r\n ];\r\n this._uniforms.uRescaleSlopeIntercept.value = [\r\n this._stack.rescaleSlope,\r\n this._stack.rescaleIntercept,\r\n ];\r\n this._uniforms.uDataDimensions.value = [\r\n this._stack.dimensionsIJK.x,\r\n this._stack.dimensionsIJK.y,\r\n this._stack.dimensionsIJK.z,\r\n ];\r\n this._uniforms.uAlphaCorrection.value = this._alphaCorrection;\r\n this._uniforms.uInterpolation.value = this._interpolation;\r\n this._uniforms.uShading.value = this._shading;\r\n this._uniforms.uShininess.value = this._shininess;\r\n this._uniforms.uSteps.value = this._steps;\r\n this._uniforms.uAlgorithm.value = this._algorithm;\r\n\r\n this._createMaterial({\r\n side: three.BackSide,\r\n transparent: true,\r\n });\r\n }\r\n\r\n _prepareGeometry() {\r\n let worldBBox = this._stack.worldBoundingBox();\r\n let centerLPS = this._stack.worldCenter();\r\n\r\n this._geometry = new three.BoxGeometry(\r\n worldBBox[1] - worldBBox[0],\r\n worldBBox[3] - worldBBox[2],\r\n worldBBox[5] - worldBBox[4]\r\n );\r\n this._geometry.applyMatrix(\r\n new three.Matrix4().makeTranslation(centerLPS.x, centerLPS.y, centerLPS.z)\r\n );\r\n }\r\n\r\n get uniforms() {\r\n return this._uniforms;\r\n }\r\n\r\n set uniforms(uniforms) {\r\n this._uniforms = uniforms;\r\n }\r\n\r\n set mesh(mesh) {\r\n this._mesh = mesh;\r\n }\r\n\r\n get mesh() {\r\n return this._mesh;\r\n }\r\n\r\n get stack() {\r\n return this._stack;\r\n }\r\n\r\n set stack(stack) {\r\n this._stack = stack;\r\n }\r\n\r\n get windowCenter() {\r\n return this._windowCenter;\r\n }\r\n\r\n set windowCenter(windowCenter) {\r\n this._windowCenter = windowCenter;\r\n this._uniforms.uWindowCenterWidth.value[0] = this._windowCenter - this._offset;\r\n }\r\n\r\n get windowWidth() {\r\n return this._windowWidth;\r\n }\r\n\r\n set windowWidth(windowWidth) {\r\n this._windowWidth = Math.max(1, windowWidth);\r\n this._uniforms.uWindowCenterWidth.value[1] = this._windowWidth;\r\n }\r\n\r\n get steps() {\r\n return this._steps;\r\n }\r\n\r\n set steps(steps) {\r\n this._steps = steps;\r\n this._uniforms.uSteps.value = this._steps;\r\n }\r\n\r\n get alphaCorrection() {\r\n return this._alphaCorrection;\r\n }\r\n\r\n set alphaCorrection(alphaCorrection) {\r\n this._alphaCorrection = alphaCorrection;\r\n this._uniforms.uAlphaCorrection.value = this._alphaCorrection;\r\n }\r\n\r\n get interpolation() {\r\n return this._interpolation;\r\n }\r\n\r\n set interpolation(interpolation) {\r\n this._interpolation = interpolation;\r\n this._uniforms.uInterpolation.value = this._interpolation;\r\n this._updateMaterial();\r\n }\r\n\r\n get shading() {\r\n return this._shading;\r\n }\r\n\r\n set shading(shading) {\r\n this._shading = shading;\r\n this._uniforms.uShading.value = this._shading;\r\n }\r\n\r\n get shininess() {\r\n return this._shininess;\r\n }\r\n\r\n set shininess(shininess) {\r\n this._shininess = shininess;\r\n this._uniforms.uShininess.value = this._shininess;\r\n }\r\n\r\n get algorithm() {\r\n return this._algorithm;\r\n }\r\n\r\n set algorithm(algorithm) {\r\n this._algorithm = algorithm;\r\n this._uniforms.uAlgorithm.value = this._algorithm;\r\n }\r\n\r\n dispose() {\r\n // Release memory\r\n for (let j = 0; j < this._textures.length; j++) {\r\n this._textures[j].dispose();\r\n this._textures[j] = null;\r\n }\r\n this._textures = null;\r\n this._shadersFragment = null;\r\n this._shadersVertex = null;\r\n\r\n this._uniforms.uTextureContainer = null;\r\n this._uniforms.uTextureLUT = null;\r\n this._uniforms = null;\r\n\r\n // material, geometry and mesh\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n this._stack = null;\r\n }\r\n };\r\n};\r\n\r\nexport { helpersVolumeRendering };\r\nexport default helpersVolumeRendering();\r\n","/** Imports **/\r\nimport HelpersProgressBar from '../helpers/helpers.progressbar';\r\nimport EventEmitter from 'events';\r\n\r\n/**\r\n *\r\n * It is typically used to load a DICOM image. Use loading manager for\r\n * advanced usage, such as multiple files handling.\r\n *\r\n * Demo: {@link https://fnndsc.github.io/vjs#loader_dicom}\r\n *\r\n * @module loaders/base\r\n * @extends EventEmitter\r\n * @example\r\n * var files = ['/data/dcm/fruit'];\r\n *\r\n * // Instantiate a dicom loader\r\n * var lDicomoader = new dicom();\r\n *\r\n * // load a resource\r\n * loader.load(\r\n * // resource URL\r\n * files[0],\r\n * // Function when resource is loaded\r\n * function(object) {\r\n * //scene.add( object );\r\n * window.console.log(object);\r\n * }\r\n * );\r\n */\r\nexport default class LoadersBase extends EventEmitter {\r\n /**\r\n * Create a Loader.\r\n * @param {dom} container - The dom container of loader.\r\n * @param {object} ProgressBar - The progressbar of loader.\r\n */\r\n constructor(container = null, ProgressBar = HelpersProgressBar) {\r\n super();\r\n this._loaded = -1;\r\n this._totalLoaded = -1;\r\n this._parsed = -1;\r\n this._totalParsed = -1;\r\n\r\n this._data = [];\r\n\r\n this._container = container;\r\n this._progressBar = null;\r\n if (this._container && ProgressBar) {\r\n this._progressBar = new ProgressBar(this._container);\r\n }\r\n }\r\n\r\n /**\r\n * free the reference.\r\n */\r\n free() {\r\n this._data = [];\r\n this._container = null;\r\n // this._helpersProgressBar = null;\r\n\r\n if (this._progressBar) {\r\n this._progressBar.free();\r\n this._progressBar = null;\r\n }\r\n }\r\n\r\n /**\r\n * load the resource by url.\r\n * @param {string} url - resource url.\r\n * @param {Map} requests - used for cancellation.\r\n * @return {promise} promise.\r\n */\r\n fetch(url, requests) {\r\n return new Promise((resolve, reject) => {\r\n const request = new XMLHttpRequest();\r\n request.open('GET', url);\r\n request.crossOrigin = true;\r\n request.responseType = 'arraybuffer';\r\n\r\n request.onloadstart = event => {\r\n // emit 'fetch-start' event\r\n this.emit('fetch-start', {\r\n file: url,\r\n time: new Date(),\r\n });\r\n };\r\n\r\n request.onload = event => {\r\n if (request.status === 200 || request.status === 0) {\r\n this._loaded = event.loaded;\r\n this._totalLoaded = event.total;\r\n\r\n // will be removed after eventer set up\r\n if (this._progressBar) {\r\n this._progressBar.update(this._loaded, this._totalLoaded, 'load', url);\r\n }\r\n\r\n let buffer = request.response;\r\n let response = {\r\n url,\r\n buffer,\r\n };\r\n\r\n // emit 'fetch-success' event\r\n this.emit('fetch-success', {\r\n file: url,\r\n time: new Date(),\r\n totalLoaded: event.total,\r\n });\r\n\r\n resolve(response);\r\n } else {\r\n reject(request.statusText);\r\n }\r\n };\r\n\r\n request.onerror = () => {\r\n // emit 'fetch-error' event\r\n this.emit('fetch-error', {\r\n file: url,\r\n time: new Date(),\r\n });\r\n\r\n reject(request.statusText);\r\n };\r\n\r\n request.onabort = event => {\r\n // emit 'fetch-abort' event\r\n this.emit('fetch-abort', {\r\n file: url,\r\n time: new Date(),\r\n });\r\n\r\n reject(request.statusText || 'Aborted');\r\n };\r\n\r\n request.ontimeout = () => {\r\n // emit 'fetch-timeout' event\r\n this.emit('fetch-timeout', {\r\n file: url,\r\n time: new Date(),\r\n });\r\n\r\n reject(request.statusText);\r\n };\r\n\r\n request.onprogress = event => {\r\n this._loaded = event.loaded;\r\n this._totalLoaded = event.total;\r\n // emit 'fetch-progress' event\r\n this.emit('fetch-progress', {\r\n file: url,\r\n total: event.total,\r\n loaded: event.loaded,\r\n time: new Date(),\r\n });\r\n // will be removed after eventer set up\r\n if (this._progressBar) {\r\n this._progressBar.update(this._loaded, this._totalLoaded, 'load', url);\r\n }\r\n };\r\n\r\n request.onloadend = event => {\r\n // emit 'fetch-end' event\r\n this.emit('fetch-end', {\r\n file: url,\r\n time: new Date(),\r\n });\r\n // just use onload when success and onerror when failure, etc onabort\r\n // reject(request.statusText);\r\n };\r\n\r\n if (requests instanceof Map) {\r\n requests.set(url, request);\r\n }\r\n\r\n request.send();\r\n });\r\n }\r\n\r\n /**\r\n * parse the data loaded\r\n * SHOULD BE implementd by detail loader.\r\n * @param {object} response - loaded data.\r\n * @return {promise} promise.\r\n */\r\n parse(response) {\r\n return new Promise((resolve, reject) => {\r\n resolve(response);\r\n });\r\n }\r\n\r\n /**\r\n * default load sequence group promise.\r\n * @param {array} url - resource url.\r\n * @param {Map} requests - used for cancellation.\r\n * @return {promise} promise.\r\n */\r\n loadSequenceGroup(url, requests) {\r\n const fetchSequence = [];\r\n\r\n url.forEach(file => {\r\n fetchSequence.push(this.fetch(file, requests));\r\n });\r\n\r\n return Promise.all(fetchSequence)\r\n .then(rawdata => {\r\n return this.parse(rawdata);\r\n })\r\n .then(data => {\r\n this._data.push(data);\r\n return data;\r\n })\r\n .catch(function (error) {\r\n if (error === 'Aborted') {\r\n return;\r\n }\r\n window.console.log('oops... something went wrong...');\r\n window.console.log(error);\r\n });\r\n }\r\n\r\n /**\r\n * default load sequence promise.\r\n * @param {string} url - resource url.\r\n * @param {Map} requests - used for cancellation.\r\n * @return {promise} promise.\r\n */\r\n loadSequence(url, requests) {\r\n return this.fetch(url, requests)\r\n .then(rawdata => {\r\n return this.parse(rawdata);\r\n })\r\n .then(data => {\r\n this._data.push(data);\r\n return data;\r\n })\r\n .catch(function (error) {\r\n if (error === 'Aborted') {\r\n return;\r\n }\r\n window.console.log('oops... something went wrong...');\r\n window.console.log(error);\r\n });\r\n }\r\n\r\n /**\r\n * load the data by url(urls)\r\n * @param {string|array} url - resource url.\r\n * @param {Map} requests - used for cancellation.\r\n * @return {promise} promise\r\n */\r\n load(url, requests) {\r\n // if we load a single file, convert it to an array\r\n if (!Array.isArray(url)) {\r\n url = [url];\r\n }\r\n\r\n if (this._progressBar) {\r\n this._progressBar.totalFiles = url.length;\r\n this._progressBar.requests = requests;\r\n }\r\n\r\n // emit 'load-start' event\r\n this.emit('load-start', {\r\n files: url,\r\n time: new Date(),\r\n });\r\n\r\n const loadSequences = [];\r\n url.forEach(file => {\r\n if (!Array.isArray(file)) {\r\n loadSequences.push(this.loadSequence(file, requests));\r\n } else {\r\n loadSequences.push(this.loadSequenceGroup(file, requests));\r\n }\r\n });\r\n return Promise.all(loadSequences);\r\n }\r\n\r\n /**\r\n * Set data\r\n * @param {array} data\r\n */\r\n set data(data) {\r\n this._data = data;\r\n }\r\n\r\n /**\r\n * Get data\r\n * @return {array} data loaded\r\n */\r\n get data() {\r\n return this._data;\r\n }\r\n}\r\n","/** * Imports ***/\r\n\r\nconst PAKO = require('pako');\r\n\r\nimport LoadersBase from './loaders.base';\r\nimport ModelsSeries from '../models/models.series';\r\nimport ModelsStack from '../models/models.stack';\r\nimport ModelsFrame from '../models/models.frame';\r\n\r\nimport {CornerstoneDataParser} from \"../utils\";\r\n\r\n/**\r\n *\r\n * It is typically used to load a DICOM image. Use loading manager for\r\n * advanced usage, such as multiple files handling.\r\n *\r\n * Demo: {@link https://fnndsc.github.io/vjs#loader_dicom}\r\n *\r\n * @module loaders/volumes\r\n * @example\r\n * var files = ['/data/dcm/fruit'];\r\n *\r\n * // Instantiate a dicom loader\r\n * var lDicomoader = new dicom();\r\n *\r\n * // load a resource\r\n * loader.load(\r\n * // resource URL\r\n * files[0],\r\n * // Function when resource is loaded\r\n * function(object) {\r\n * //scene.add( object );\r\n * console.log(object);\r\n * }\r\n * );\r\n */\r\nexport default class LoadersVolumesCornerstone extends LoadersBase {\r\n load(url, requests, cornerstone) {\r\n this.cornerstone = cornerstone;\r\n return super.load(url, requests);\r\n }\r\n\r\n loadSequenceGroup(url, requests) {\r\n window.console.log('load sequence group cornerstone');\r\n const fetchSequence = [];\r\n const loader = this.cornerstone;\r\n url.forEach(file => {\r\n fetchSequence.push(loader.loadAndCacheImage(url));\r\n });\r\n\r\n return Promise.all(fetchSequence)\r\n .then(rawdata => {\r\n return this.parse(rawdata);\r\n })\r\n .then(data => {\r\n this._data.push(data);\r\n return data;\r\n })\r\n .catch(function (error) {\r\n if (error === 'Aborted') {\r\n return;\r\n }\r\n window.console.log('oops... something went wrong...');\r\n window.console.log(error);\r\n });\r\n }\r\n\r\n loadSequence(url, requests) {\r\n window.console.log('load sequence cornerstone');\r\n return this.cornerstone.loadAndCacheImage(url)\r\n .then(image => {\r\n window.console.log('loaded by cornerstone', image);\r\n return this.parse(image);\r\n })\r\n .then(data => {\r\n this._data.push(data);\r\n return data;\r\n })\r\n .catch(function (error) {\r\n if (error === 'Aborted') {\r\n return;\r\n }\r\n window.console.log('oops... something went wrong...');\r\n window.console.log(error);\r\n });\r\n };\r\n\r\n /**\r\n * Parse response.\r\n * response is formated as:\r\n * {\r\n * url: 'resource url',\r\n * buffer: xmlresponse,\r\n * }\r\n * @param {object} response - response\r\n * @return {promise} promise\r\n */\r\n parse(response) {\r\n const cornerstoneImage = response;\r\n // emit 'parse-start' event\r\n this.emit('parse-start', {\r\n file: response.url,\r\n time: new Date(),\r\n });\r\n\r\n // give a chance to the UI to update because\r\n // after the rendering will be blocked with intensive JS\r\n // will be removed after eventer set up\r\n if (this._progressBar) {\r\n this._progressBar.update(0, 100, 'parse', response.url);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve(\r\n new Promise((resolve, reject) => {\r\n const {imageId} = cornerstoneImage;\r\n const {metaData} = this.cornerstone;\r\n const metaDataAll = metaData.get('all', imageId);\r\n console.log('get all metaData', metaDataAll);\r\n const dataParser = new CornerstoneDataParser(metaDataAll);\r\n\r\n let volumeParser = null;\r\n // create a series\r\n let series = new ModelsSeries();\r\n // series.rawHeader = volumeParser.rawHeader();\r\n // global information\r\n series.seriesInstanceUID = dataParser.seriesInstanceUID();\r\n series.transferSyntaxUID = dataParser.transferSyntaxUID();\r\n\r\n series.seriesDate = dataParser.seriesDate();\r\n series.seriesDescription = dataParser.seriesDescription();\r\n series.studyDate = dataParser.studyDate();\r\n series.studyDescription = dataParser.studyDescription();\r\n series.numberOfFrames = dataParser.numberOfFrames();\r\n if (!series.numberOfFrames) {\r\n series.numberOfFrames = 1;\r\n }\r\n\r\n series.numberOfChannels = dataParser.numberOfChannels();\r\n series.modality = dataParser.modality();\r\n if (series.modality === 'SEG') {\r\n series.segmentationType = dataParser.segmentationType();\r\n // series.segmentationSegments = dataParser.segmentationSegments();\r\n }\r\n\r\n series.patientID = dataParser.patientID();\r\n series.patientName = dataParser.patientName();\r\n series.patientAge = dataParser.patientAge();\r\n series.patientBirthdate = dataParser.patientBirthdate();\r\n series.patientSex = dataParser.patientSex();\r\n\r\n console.log('create series', series);\r\n\r\n let stack = new ModelsStack();\r\n stack.pixelRepresentation = dataParser.pixelRepresentation();\r\n stack.pixelType = dataParser.pixelType();\r\n stack.invert = dataParser.invert();\r\n stack.spacingBetweenSlices = dataParser.spacingBetweenSlices();\r\n stack.modality = series.modality;\r\n // if it is a segmentation, attach extra information\r\n if (stack.modality === 'SEG') {\r\n // colors\r\n // labels\r\n // etc.\r\n stack.segmentationType = series.segmentationType;\r\n stack.segmentationSegments = series.segmentationSegments;\r\n }\r\n series.stack.push(stack);\r\n // recursive call for each frame\r\n // better than for loop to be able\r\n // to update dom with \"progress\" callback\r\n setTimeout(\r\n this.parseFrameClosure(series, stack, response.url, 0, dataParser, resolve, reject, cornerstoneImage),\r\n 0\r\n )\r\n })\r\n );\r\n }, 10);\r\n });\r\n }\r\n\r\n parseFrameClosure(series, stack, url, i, dataParser, resolve, reject, cornerstoneImage) {\r\n return () => {\r\n this.parseFrame(series, stack, url, i, dataParser, resolve, reject, cornerstoneImage);\r\n };\r\n }\r\n\r\n /**\r\n * recursive parse frame\r\n * @param {ModelsSeries} series - data series\r\n * @param {ModelsStack} stack - data stack\r\n * @param {string} url - resource url\r\n * @param {number} i - frame index\r\n * @param {parser} dataParser - selected parser\r\n * @param {promise.resolve} resolve - promise resolve args\r\n * @param {promise.reject} reject - promise reject args\r\n */\r\n parseFrame(series, stack, url, i, dataParser, resolve, reject, cornerstoneImage) {\r\n let frame = new ModelsFrame();\r\n frame.sopInstanceUID = dataParser.sopInstanceUID(i);\r\n frame.url = url;\r\n frame.index = i;\r\n frame.invert = stack.invert;\r\n frame.frameTime = dataParser.frameTime(i);\r\n frame.ultrasoundRegions = dataParser.ultrasoundRegions(i);\r\n frame.rows = dataParser.rows(i);\r\n frame.columns = dataParser.columns(i);\r\n frame.numberOfChannels = stack.numberOfChannels;\r\n frame.pixelPaddingValue = dataParser.pixelPaddingValue(i);\r\n frame.pixelRepresentation = stack.pixelRepresentation;\r\n frame.pixelType = stack.pixelType;\r\n frame.pixelData = cornerstoneImage.getPixelData();\r\n frame.pixelSpacing = dataParser.pixelSpacing(i);\r\n frame.spacingBetweenSlices = dataParser.spacingBetweenSlices(i);\r\n frame.sliceThickness = dataParser.sliceThickness(i);\r\n frame.imageOrientation = dataParser.imageOrientation(i);\r\n // frame.rightHanded = dataParser.rightHanded();\r\n // stack.rightHanded = frame.rightHanded;\r\n if (frame.imageOrientation === null) {\r\n frame.imageOrientation = [1, 0, 0, 0, 1, 0];\r\n }\r\n frame.imagePosition = dataParser.imagePosition(i);\r\n /*\r\n null ImagePosition should not be handle here\r\n if (frame.imagePosition === null) {\r\n frame.imagePosition = [0, 0, i];\r\n }*/\r\n // frame.dimensionIndexValues = dataParser.dimensionIndexValues(i);\r\n frame.bitsAllocated = dataParser.bitsAllocated(i);\r\n frame.instanceNumber = dataParser.instanceNumber(i);\r\n frame.windowCenter = dataParser.windowCenter(i);\r\n frame.windowWidth = dataParser.windowWidth(i);\r\n frame.rescaleSlope = dataParser.rescaleSlope(i);\r\n frame.rescaleIntercept = dataParser.rescaleIntercept(i);\r\n // should pass frame index for consistency...\r\n frame.minMax = dataParser.minMaxPixelData(frame.pixelData);\r\n\r\n // if series.mo\r\n if (series.modality === 'SEG') {\r\n frame.referencedSegmentNumber = dataParser.referencedSegmentNumber(i);\r\n }\r\n\r\n stack.frame.push(frame);\r\n\r\n // update status\r\n this._parsed = i + 1;\r\n this._totalParsed = series.numberOfFrames;\r\n\r\n // will be removed after eventer set up\r\n if (this._progressBar) {\r\n this._progressBar.update(this._parsed, this._totalParsed, 'parse', url);\r\n }\r\n\r\n // emit 'parsing' event\r\n this.emit('parsing', {\r\n file: url,\r\n total: this._totalParsed,\r\n parsed: this._parsed,\r\n time: new Date(),\r\n });\r\n\r\n if (this._parsed === this._totalParsed) {\r\n // emit 'parse-success' event\r\n this.emit('parse-success', {\r\n file: url,\r\n total: this._totalParsed,\r\n parsed: this._parsed,\r\n time: new Date(),\r\n });\r\n\r\n resolve(series);\r\n } else {\r\n setTimeout(\r\n this.parseFrameClosure(series, stack, url, this._parsed, dataParser, resolve, reject),\r\n 0\r\n );\r\n }\r\n }\r\n}\r\n","import Volume from './loaders.volume';\r\nimport Cornerstone from './loaders.cornerstone';\r\n\r\nexport {Volume as VolumeLoader};\r\nexport {Cornerstone as VolumeCornerstoneLoader}\r\n","/** * Imports ***/\r\nconst PAKO = require('pako');\r\n\r\nimport LoadersBase from './loaders.base';\r\nimport CoreUtils from '../core/core.utils';\r\nimport ModelsSeries from '../models/models.series';\r\nimport ModelsStack from '../models/models.stack';\r\nimport ModelsFrame from '../models/models.frame';\r\nimport ParsersDicom from '../parsers/parsers.dicom';\r\nimport ParsersMhd from '../parsers/parsers.mhd';\r\nimport ParsersNifti from '../parsers/parsers.nifti';\r\nimport ParsersNrrd from '../parsers/parsers.nrrd';\r\nimport ParsersMgh from '../parsers/parsers.mgh';\r\n\r\n/**\r\n *\r\n * It is typically used to load a DICOM image. Use loading manager for\r\n * advanced usage, such as multiple files handling.\r\n *\r\n * Demo: {@link https://fnndsc.github.io/vjs#loader_dicom}\r\n *\r\n * @module loaders/volumes\r\n * @example\r\n * var files = ['/data/dcm/fruit'];\r\n *\r\n * // Instantiate a dicom loader\r\n * var lDicomoader = new dicom();\r\n *\r\n * // load a resource\r\n * loader.load(\r\n * // resource URL\r\n * files[0],\r\n * // Function when resource is loaded\r\n * function(object) {\r\n * //scene.add( object );\r\n * console.log(object);\r\n * }\r\n * );\r\n */\r\nexport default class LoadersVolumes extends LoadersBase {\r\n /**\r\n * Parse response.\r\n * response is formated as:\r\n * {\r\n * url: 'resource url',\r\n * buffer: xmlresponse,\r\n * }\r\n * @param {object} response - response\r\n * @return {promise} promise\r\n */\r\n parse(response) {\r\n // emit 'parse-start' event\r\n this.emit('parse-start', {\r\n file: response.url,\r\n time: new Date(),\r\n });\r\n\r\n // give a chance to the UI to update because\r\n // after the rendering will be blocked with intensive JS\r\n // will be removed after eventer set up\r\n if (this._progressBar) {\r\n this._progressBar.update(0, 100, 'parse', response.url);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve(\r\n new Promise((resolve, reject) => {\r\n let data = response;\r\n\r\n if (!Array.isArray(data)) {\r\n data = [data];\r\n }\r\n\r\n data.forEach(dataset => {\r\n this._preprocess(dataset);\r\n });\r\n\r\n if (data.length === 1) {\r\n data = data[0];\r\n } else {\r\n // if raw/mhd pair\r\n let mhdFile = data.filter(this._filterByExtension.bind(null, 'MHD'));\r\n let rawFile = data.filter(this._filterByExtension.bind(null, 'RAW'));\r\n if (data.length === 2 && mhdFile.length === 1 && rawFile.length === 1) {\r\n data.url = mhdFile[0].url;\r\n data.extension = mhdFile[0].extension;\r\n data.mhdBuffer = mhdFile[0].buffer;\r\n data.rawBuffer = rawFile[0].buffer;\r\n }\r\n }\r\n\r\n let Parser = this._parser(data.extension);\r\n if (!Parser) {\r\n // emit 'parse-error' event\r\n this.emit('parse-error', {\r\n file: response.url,\r\n time: new Date(),\r\n error: data.filename + 'can not be parsed.',\r\n });\r\n reject(data.filename + ' can not be parsed.');\r\n }\r\n\r\n // check extension\r\n let volumeParser = null;\r\n try {\r\n volumeParser = new Parser(data, 0);\r\n } catch (e) {\r\n console.warn(e);\r\n // emit 'parse-error' event\r\n this.emit('parse-error', {\r\n file: response.url,\r\n time: new Date(),\r\n error: e,\r\n });\r\n reject(e);\r\n }\r\n\r\n // create a series\r\n let series = new ModelsSeries();\r\n series.rawHeader = volumeParser.rawHeader();\r\n // global information\r\n series.seriesInstanceUID = volumeParser.seriesInstanceUID();\r\n series.transferSyntaxUID = volumeParser.transferSyntaxUID();\r\n series.seriesDate = volumeParser.seriesDate();\r\n series.seriesDescription = volumeParser.seriesDescription();\r\n series.studyDate = volumeParser.studyDate();\r\n series.studyDescription = volumeParser.studyDescription();\r\n series.numberOfFrames = volumeParser.numberOfFrames();\r\n if (!series.numberOfFrames) {\r\n series.numberOfFrames = 1;\r\n }\r\n series.numberOfChannels = volumeParser.numberOfChannels();\r\n series.modality = volumeParser.modality();\r\n // if it is a segmentation, attach extra information\r\n if (series.modality === 'SEG') {\r\n // colors\r\n // labels\r\n // etc.\r\n series.segmentationType = volumeParser.segmentationType();\r\n series.segmentationSegments = volumeParser.segmentationSegments();\r\n }\r\n // patient information\r\n series.patientID = volumeParser.patientID();\r\n series.patientName = volumeParser.patientName();\r\n series.patientAge = volumeParser.patientAge();\r\n series.patientBirthdate = volumeParser.patientBirthdate();\r\n series.patientSex = volumeParser.patientSex();\r\n\r\n // just create 1 dummy stack for now\r\n let stack = new ModelsStack();\r\n stack.numberOfChannels = volumeParser.numberOfChannels();\r\n stack.pixelRepresentation = volumeParser.pixelRepresentation();\r\n stack.pixelType = volumeParser.pixelType();\r\n stack.invert = volumeParser.invert();\r\n stack.spacingBetweenSlices = volumeParser.spacingBetweenSlices();\r\n stack.modality = series.modality;\r\n // if it is a segmentation, attach extra information\r\n if (stack.modality === 'SEG') {\r\n // colors\r\n // labels\r\n // etc.\r\n stack.segmentationType = series.segmentationType;\r\n stack.segmentationSegments = series.segmentationSegments;\r\n }\r\n series.stack.push(stack);\r\n // recursive call for each frame\r\n // better than for loop to be able\r\n // to update dom with \"progress\" callback\r\n setTimeout(\r\n this.parseFrameClosure(series, stack, response.url, 0, volumeParser, resolve, reject),\r\n 0\r\n );\r\n })\r\n );\r\n }, 10);\r\n });\r\n }\r\n\r\n parseFrameClosure(series, stack, url, i, dataParser, resolve, reject) {\r\n return () => {\r\n this.parseFrame(series, stack, url, i, dataParser, resolve, reject);\r\n };\r\n }\r\n\r\n /**\r\n * recursive parse frame\r\n * @param {ModelsSeries} series - data series\r\n * @param {ModelsStack} stack - data stack\r\n * @param {string} url - resource url\r\n * @param {number} i - frame index\r\n * @param {parser} dataParser - selected parser\r\n * @param {promise.resolve} resolve - promise resolve args\r\n * @param {promise.reject} reject - promise reject args\r\n */\r\n parseFrame(series, stack, url, i, dataParser, resolve, reject) {\r\n let frame = new ModelsFrame();\r\n frame.sopInstanceUID = dataParser.sopInstanceUID(i);\r\n frame.url = url;\r\n frame.index = i;\r\n frame.invert = stack.invert;\r\n frame.frameTime = dataParser.frameTime(i);\r\n frame.ultrasoundRegions = dataParser.ultrasoundRegions(i);\r\n frame.rows = dataParser.rows(i);\r\n frame.columns = dataParser.columns(i);\r\n frame.numberOfChannels = stack.numberOfChannels;\r\n frame.pixelPaddingValue = dataParser.pixelPaddingValue(i);\r\n frame.pixelRepresentation = stack.pixelRepresentation;\r\n frame.pixelType = stack.pixelType;\r\n frame.pixelData = dataParser.extractPixelData(i);\r\n frame.pixelSpacing = dataParser.pixelSpacing(i);\r\n frame.spacingBetweenSlices = dataParser.spacingBetweenSlices(i);\r\n frame.sliceThickness = dataParser.sliceThickness(i);\r\n frame.imageOrientation = dataParser.imageOrientation(i);\r\n frame.rightHanded = dataParser.rightHanded();\r\n stack.rightHanded = frame.rightHanded;\r\n if (frame.imageOrientation === null) {\r\n frame.imageOrientation = [1, 0, 0, 0, 1, 0];\r\n }\r\n frame.imagePosition = dataParser.imagePosition(i);\r\n /*\r\n null ImagePosition should not be handle here\r\n if (frame.imagePosition === null) {\r\n frame.imagePosition = [0, 0, i];\r\n }*/\r\n frame.dimensionIndexValues = dataParser.dimensionIndexValues(i);\r\n frame.bitsAllocated = dataParser.bitsAllocated(i);\r\n frame.instanceNumber = dataParser.instanceNumber(i);\r\n frame.windowCenter = dataParser.windowCenter(i);\r\n frame.windowWidth = dataParser.windowWidth(i);\r\n frame.rescaleSlope = dataParser.rescaleSlope(i);\r\n frame.rescaleIntercept = dataParser.rescaleIntercept(i);\r\n // should pass frame index for consistency...\r\n frame.minMax = dataParser.minMaxPixelData(frame.pixelData);\r\n\r\n // if series.mo\r\n if (series.modality === 'SEG') {\r\n frame.referencedSegmentNumber = dataParser.referencedSegmentNumber(i);\r\n }\r\n\r\n stack.frame.push(frame);\r\n\r\n // update status\r\n this._parsed = i + 1;\r\n this._totalParsed = series.numberOfFrames;\r\n\r\n // will be removed after eventer set up\r\n if (this._progressBar) {\r\n this._progressBar.update(this._parsed, this._totalParsed, 'parse', url);\r\n }\r\n\r\n // emit 'parsing' event\r\n this.emit('parsing', {\r\n file: url,\r\n total: this._totalParsed,\r\n parsed: this._parsed,\r\n time: new Date(),\r\n });\r\n\r\n if (this._parsed === this._totalParsed) {\r\n // emit 'parse-success' event\r\n this.emit('parse-success', {\r\n file: url,\r\n total: this._totalParsed,\r\n parsed: this._parsed,\r\n time: new Date(),\r\n });\r\n\r\n resolve(series);\r\n } else {\r\n setTimeout(\r\n this.parseFrameClosure(series, stack, url, this._parsed, dataParser, resolve, reject),\r\n 0\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Return parser given an extension\r\n * @param {string} extension - extension\r\n * @return {parser} selected parser\r\n */\r\n _parser(extension) {\r\n let Parser = null;\r\n\r\n switch (extension.toUpperCase()) {\r\n case 'NII':\r\n case 'NII_':\r\n Parser = ParsersNifti;\r\n break;\r\n case 'DCM':\r\n case 'DIC':\r\n case 'DICOM':\r\n case 'IMA':\r\n case '':\r\n Parser = ParsersDicom;\r\n break;\r\n case 'MHD':\r\n Parser = ParsersMhd;\r\n break;\r\n case 'NRRD':\r\n Parser = ParsersNrrd;\r\n break;\r\n case 'MGH':\r\n case 'MGZ':\r\n Parser = ParsersMgh;\r\n break;\r\n default:\r\n console.warn('unsupported extension: ' + extension);\r\n return false;\r\n }\r\n return Parser;\r\n }\r\n\r\n /**\r\n * Pre-process data to be parsed (find data type and de-compress)\r\n * @param {*} data\r\n */\r\n _preprocess(data) {\r\n const parsedUrl = CoreUtils.parseUrl(data.url);\r\n // update data\r\n data.filename = parsedUrl.filename;\r\n data.extension = parsedUrl.extension;\r\n data.pathname = parsedUrl.pathname;\r\n data.query = parsedUrl.query;\r\n\r\n // unzip if extension is '.gz'\r\n if (data.extension === 'gz') {\r\n data.gzcompressed = true;\r\n data.extension = data.filename\r\n .split('.gz')\r\n .shift()\r\n .split('.')\r\n .pop();\r\n } else if (data.extension === 'mgz') {\r\n data.gzcompressed = true;\r\n data.extension = 'mgh';\r\n } else if (data.extension === 'zraw') {\r\n data.gzcompressed = true;\r\n data.extension = 'raw';\r\n } else {\r\n data.gzcompressed = false;\r\n }\r\n\r\n if (data.gzcompressed) {\r\n let decompressedData = PAKO.inflate(data.buffer);\r\n data.buffer = decompressedData.buffer;\r\n }\r\n }\r\n\r\n /**\r\n * Filter data by extension\r\n * @param {*} extension\r\n * @param {*} item\r\n * @returns Boolean\r\n */\r\n _filterByExtension(extension, item) {\r\n if (item.extension.toUpperCase() === extension.toUpperCase()) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","/**\r\n * Base object.\r\n *\r\n * @module models/base\r\n */\r\n\r\nexport default class ModelsBase {\r\n constructor() {\r\n this._id = -1;\r\n }\r\n /**\r\n * Merge 2 arrays of models.\r\n * Merge the target array into the reference array.\r\n *\r\n * @param {Array.} referenceArray - Array to be merge against\r\n * @param {Array.} targetArray - Array to be merged against reference.\r\n *\r\n * @return {boolean} True if merge was sucessful. False if something went wrong.\r\n */\r\n mergeModels(referenceArray, targetArray) {\r\n if (!(this._validateModelArray(referenceArray) && this._validateModelArray(targetArray))) {\r\n window.console.log('invalid inputs provided.');\r\n return false;\r\n }\r\n\r\n for (let i = 0, targetLength = targetArray.length; i < targetLength; i++) {\r\n // test targetArray against existing targetArray\r\n for (let j = 0, refLength = referenceArray.length; j < refLength; j++) {\r\n if (referenceArray[j].merge(targetArray[i])) {\r\n // merged successfully\r\n break;\r\n } else if (j === referenceArray.length - 1) {\r\n // last merge was not successful\r\n // this is a new targetArray\r\n referenceArray.push(targetArray[i]);\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Merge model against current model.\r\n */\r\n merge(model) {\r\n // make sure model is valid\r\n if (!this.validate(model)) {\r\n return false;\r\n }\r\n\r\n // they can be merged if they match\r\n if (this._id === model._id) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Validate a model.\r\n *\r\n * @return {boolean} True if model is valid. False if not.\r\n */\r\n validate(model) {\r\n if (!(model && model !== null && typeof model.merge === 'function')) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Validate array of models.\r\n *\r\n * @param {Array.} modelArray - Array containing models.\r\n *\r\n * @return {boolean} True if array is valid. False if not.\r\n */\r\n _validateModelArray(modelArray) {\r\n if (!(modelArray !== null && Array === modelArray.constructor)) {\r\n window.console.log('invalid model array provided.');\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < modelArray.length; i++) {\r\n if (\r\n !(\r\n modelArray[i] &&\r\n modelArray[i] !== null &&\r\n typeof modelArray[i].validate === 'function' &&\r\n modelArray[i].validate(modelArray[i])\r\n )\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","/** * Imports ***/\r\nimport ModelsBase from '../models/models.base';\r\n\r\nimport { Vector3 } from 'three/src/math/Vector3';\r\n\r\n/**\r\n * Frame object.\r\n *\r\n * @module models/frame\r\n */\r\nexport default class ModelsFrame extends ModelsBase {\r\n /**\r\n * Constructor\r\n */\r\n constructor() {\r\n super();\r\n\r\n this._sopInstanceUID = null;\r\n this._url = null;\r\n this._stackID = -1;\r\n this._invert = false;\r\n this._frameTime = null;\r\n this._ultrasoundRegions = [];\r\n this._rows = 0;\r\n this._columns = 0;\r\n this._dimensionIndexValues = [];\r\n this._imagePosition = null;\r\n this._imageOrientation = null;\r\n this._rightHanded = true;\r\n this._sliceThickness = 1;\r\n this._spacingBetweenSlices = null;\r\n this._pixelPaddingValue = null;\r\n this._pixelRepresentation = 0;\r\n this._pixelType = 0;\r\n this._pixelSpacing = null;\r\n this._pixelAspectRatio = null;\r\n this._pixelData = null;\r\n\r\n this._instanceNumber = null;\r\n this._windowCenter = null;\r\n this._windowWidth = null;\r\n this._rescaleSlope = null;\r\n this._rescaleIntercept = null;\r\n\r\n this._bitsAllocated = 8;\r\n this._numberOfChannels = 1;\r\n\r\n this._minMax = null;\r\n this._dist = null;\r\n\r\n this._index = -1;\r\n\r\n this._referencedSegmentNumber = -1;\r\n }\r\n\r\n /**\r\n * Validate the frame.\r\n *\r\n * @param {*} model\r\n *\r\n * @return {*}\r\n */\r\n validate(model) {\r\n if (\r\n !(\r\n super.validate(model) &&\r\n typeof model.cosines === 'function' &&\r\n typeof model.spacingXY === 'function' &&\r\n model.hasOwnProperty('_sopInstanceUID') &&\r\n model.hasOwnProperty('_dimensionIndexValues') &&\r\n model.hasOwnProperty('_imageOrientation') &&\r\n model.hasOwnProperty('_imagePosition')\r\n )\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Merge current frame with provided frame.\r\n *\r\n * Frames can be merged (i.e. are identical) if following are equals:\r\n * - dimensionIndexValues\r\n * - imageOrientation\r\n * - imagePosition\r\n * - instanceNumber\r\n * - sopInstanceUID\r\n *\r\n * @param {*} frame\r\n *\r\n * @return {boolean} True if frames could be merge. False if not.\r\n */\r\n merge(frame) {\r\n if (!this.validate(frame)) {\r\n return false;\r\n }\r\n\r\n if (\r\n this._compareArrays(this._dimensionIndexValues, frame.dimensionIndexValues) &&\r\n this._compareArrays(this._imageOrientation, frame.imageOrientation) &&\r\n this._compareArrays(this._imagePosition, frame.imagePosition) &&\r\n this._instanceNumber === frame.instanceNumber &&\r\n this._sopInstanceUID === frame.sopInstanceUID\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Generate X, y and Z cosines from image orientation\r\n * Returns default orientation if _imageOrientation was invalid.\r\n *\r\n * @returns {array} Array[3] containing cosinesX, Y and Z.\r\n */\r\n cosines() {\r\n let cosines = [new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1)];\r\n\r\n if (this._imageOrientation && this._imageOrientation.length === 6) {\r\n let xCos = new Vector3(\r\n this._imageOrientation[0],\r\n this._imageOrientation[1],\r\n this._imageOrientation[2]\r\n );\r\n let yCos = new Vector3(\r\n this._imageOrientation[3],\r\n this._imageOrientation[4],\r\n this._imageOrientation[5]\r\n );\r\n\r\n if (xCos.length() > 0 && yCos.length() > 0) {\r\n cosines[0] = xCos;\r\n cosines[1] = yCos;\r\n cosines[2] = new Vector3(0, 0, 0).crossVectors(cosines[0], cosines[1]).normalize();\r\n }\r\n } else {\r\n window.console.log('No valid image orientation for frame');\r\n window.console.log(this);\r\n window.console.log('Returning default orientation.');\r\n }\r\n\r\n if (!this._rightHanded) {\r\n cosines[2].negate();\r\n }\r\n\r\n return cosines;\r\n }\r\n\r\n /**\r\n * Get x/y spacing of a frame.\r\n *\r\n * @return {*}\r\n */\r\n spacingXY() {\r\n let spacingXY = [1.0, 1.0];\r\n\r\n if (this.pixelSpacing) {\r\n spacingXY[0] = this.pixelSpacing[0];\r\n\r\n spacingXY[1] = this.pixelSpacing[1];\r\n } else if (this.pixelAspectRatio) {\r\n spacingXY[0] = 1.0;\r\n spacingXY[1] = (1.0 * this.pixelAspectRatio[1]) / this.pixelAspectRatio[0];\r\n }\r\n\r\n return spacingXY;\r\n }\r\n\r\n /**\r\n * Get data value\r\n *\r\n * @param {*} column\r\n * @param {*} row\r\n * @return {*}\r\n */\r\n getPixelData(column, row) {\r\n if (column >= 0 && column < this._columns && row >= 0 && row < this._rows) {\r\n return this.pixelData[column + this._columns * row];\r\n } else {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Set data value\r\n *\r\n * @param {*} column\r\n * @param {*} row\r\n * @param {*} value\r\n * @return {*}\r\n */\r\n setPixelData(column, row, value) {\r\n this.pixelData[column + this._columns * row] = value;\r\n }\r\n\r\n /**\r\n * Get frame preview as data:URL\r\n *\r\n * @return {String}\r\n */\r\n getImageDataUrl() {\r\n const canvas = document.createElement('canvas');\r\n canvas.width = this._columns;\r\n canvas.height = this._rows;\r\n\r\n const context = canvas.getContext('2d');\r\n\r\n const imageData = context.createImageData(canvas.width, canvas.height);\r\n\r\n imageData.data.set(this._frameToCanvas());\r\n context.putImageData(imageData, 0, 0);\r\n\r\n return canvas.toDataURL();\r\n }\r\n\r\n /**\r\n * Convert frame.pixelData to canvas.context.imageData.data\r\n *\r\n * @return {Uint8Array}\r\n */\r\n _frameToCanvas() {\r\n const dimension = this._columns * this._rows;\r\n\r\n const params = {\r\n invert: this._invert,\r\n min: this._minMax[0],\r\n padding: this._pixelPaddingValue,\r\n };\r\n let data = new Uint8Array(dimension * 4);\r\n\r\n if (params.padding !== null) {\r\n // recalculation of min ignoring pixelPaddingValue\r\n params.min = this._minMax[1];\r\n for (let index = 0, numPixels = this._pixelData.length; index < numPixels; index++) {\r\n if (this._pixelData[index] !== params.padding) {\r\n params.min = Math.min(params.min, this._pixelData[index]);\r\n }\r\n }\r\n }\r\n\r\n if (this._windowWidth && this._windowCenter !== null) {\r\n // applying windowCenter and windowWidth\r\n const intercept = this._rescaleIntercept || 0;\r\n\r\n const slope = this._rescaleSlope || 1;\r\n\r\n params.min = Math.max(\r\n (this._windowCenter - this._windowWidth / 2 - intercept) / slope,\r\n params.min\r\n );\r\n params.max = Math.min(\r\n (this._windowCenter + this._windowWidth / 2 - intercept) / slope,\r\n this._minMax[1]\r\n );\r\n } else {\r\n params.max = this._minMax[1];\r\n }\r\n\r\n params.range = params.max - params.min || 255; // if max is 0 convert it to: 255 - black, 1 - white\r\n\r\n if (this._numberOfChannels === 1) {\r\n for (let i = 0; i < dimension; i++) {\r\n const normalized = this._pixelTo8Bit(this._pixelData[i], params);\r\n data[4 * i] = normalized;\r\n data[4 * i + 1] = normalized;\r\n data[4 * i + 2] = normalized;\r\n data[4 * i + 3] = 255; // alpha channel (fully opaque)\r\n }\r\n } else if (this._numberOfChannels === 3) {\r\n for (let i = 0; i < dimension; i++) {\r\n data[4 * i] = this._pixelTo8Bit(this._pixelData[3 * i], params);\r\n data[4 * i + 1] = this._pixelTo8Bit(this._pixelData[3 * i + 1], params);\r\n data[4 * i + 2] = this._pixelTo8Bit(this._pixelData[3 * i + 2], params);\r\n data[4 * i + 3] = 255; // alpha channel (fully opaque)\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Convert pixel value to 8 bit (canvas.context.imageData.data: maximum 8 bit per each of RGBA value)\r\n *\r\n * @param {Number} value Pixel value\r\n * @param {Object} params {invert, min, mix, padding, range}\r\n *\r\n * @return {Number}\r\n */\r\n _pixelTo8Bit(value, params) {\r\n // values equal to pixelPaddingValue are outside of the image and should be ignored\r\n let packedValue = value <= params.min || value === params.padding ? 0 : 255;\r\n\r\n if (value > params.min && value < params.max) {\r\n packedValue = Math.round(((value - params.min) * 255) / params.range);\r\n }\r\n\r\n return Number.isNaN(packedValue) ? 0 : params.invert ? 255 - packedValue : packedValue;\r\n }\r\n\r\n /**\r\n * Compare 2 arrays.\r\n *\r\n * 2 null arrays return true.\r\n * Do no perform strict type checking.\r\n *\r\n * @param {*} reference\r\n * @param {*} target\r\n *\r\n * @return {boolean} True if arrays are identicals. False if not.\r\n */\r\n _compareArrays(reference, target) {\r\n // could both be null\r\n if (reference === target) {\r\n return true;\r\n }\r\n\r\n // if not null....\r\n if (reference && target && reference.join() === target.join()) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n get frameTime() {\r\n return this._frameTime;\r\n }\r\n\r\n set frameTime(frameTime) {\r\n this._frameTime = frameTime;\r\n }\r\n\r\n get ultrasoundRegions() {\r\n return this._ultrasoundRegions;\r\n }\r\n\r\n set ultrasoundRegions(ultrasoundRegions) {\r\n this._ultrasoundRegions = ultrasoundRegions;\r\n }\r\n\r\n get rows() {\r\n return this._rows;\r\n }\r\n\r\n set rows(rows) {\r\n this._rows = rows;\r\n }\r\n\r\n get columns() {\r\n return this._columns;\r\n }\r\n\r\n set columns(columns) {\r\n this._columns = columns;\r\n }\r\n\r\n get spacingBetweenSlices() {\r\n return this._spacingBetweenSlices;\r\n }\r\n\r\n set spacingBetweenSlices(spacingBetweenSlices) {\r\n this._spacingBetweenSlices = spacingBetweenSlices;\r\n }\r\n\r\n get sliceThickness() {\r\n return this._sliceThickness;\r\n }\r\n\r\n set sliceThickness(sliceThickness) {\r\n this._sliceThickness = sliceThickness;\r\n }\r\n\r\n get imagePosition() {\r\n return this._imagePosition;\r\n }\r\n\r\n set imagePosition(imagePosition) {\r\n this._imagePosition = imagePosition;\r\n }\r\n\r\n get imageOrientation() {\r\n return this._imageOrientation;\r\n }\r\n\r\n set imageOrientation(imageOrientation) {\r\n this._imageOrientation = imageOrientation;\r\n }\r\n\r\n get windowWidth() {\r\n return this._windowWidth;\r\n }\r\n\r\n set windowWidth(windowWidth) {\r\n this._windowWidth = windowWidth;\r\n }\r\n\r\n get windowCenter() {\r\n return this._windowCenter;\r\n }\r\n\r\n set windowCenter(windowCenter) {\r\n this._windowCenter = windowCenter;\r\n }\r\n\r\n get rescaleSlope() {\r\n return this._rescaleSlope;\r\n }\r\n\r\n set rescaleSlope(rescaleSlope) {\r\n this._rescaleSlope = rescaleSlope;\r\n }\r\n\r\n get rescaleIntercept() {\r\n return this._rescaleIntercept;\r\n }\r\n\r\n set rescaleIntercept(rescaleIntercept) {\r\n this._rescaleIntercept = rescaleIntercept;\r\n }\r\n\r\n get bitsAllocated() {\r\n return this._bitsAllocated;\r\n }\r\n\r\n set bitsAllocated(bitsAllocated) {\r\n this._bitsAllocated = bitsAllocated;\r\n }\r\n\r\n get dist() {\r\n return this._dist;\r\n }\r\n\r\n set dist(dist) {\r\n this._dist = dist;\r\n }\r\n\r\n get pixelSpacing() {\r\n return this._pixelSpacing;\r\n }\r\n\r\n set pixelSpacing(pixelSpacing) {\r\n this._pixelSpacing = pixelSpacing;\r\n }\r\n\r\n get pixelAspectRatio() {\r\n return this._pixelAspectRatio;\r\n }\r\n\r\n set pixelAspectRatio(pixelAspectRatio) {\r\n this._pixelAspectRatio = pixelAspectRatio;\r\n }\r\n\r\n get minMax() {\r\n return this._minMax;\r\n }\r\n\r\n set minMax(minMax) {\r\n this._minMax = minMax;\r\n }\r\n\r\n get dimensionIndexValues() {\r\n return this._dimensionIndexValues;\r\n }\r\n\r\n set dimensionIndexValues(dimensionIndexValues) {\r\n this._dimensionIndexValues = dimensionIndexValues;\r\n }\r\n\r\n get instanceNumber() {\r\n return this._instanceNumber;\r\n }\r\n\r\n set instanceNumber(instanceNumber) {\r\n this._instanceNumber = instanceNumber;\r\n }\r\n\r\n get pixelData() {\r\n return this._pixelData;\r\n }\r\n\r\n set pixelData(pixelData) {\r\n this._pixelData = pixelData;\r\n }\r\n\r\n set sopInstanceUID(sopInstanceUID) {\r\n this._sopInstanceUID = sopInstanceUID;\r\n }\r\n\r\n get sopInstanceUID() {\r\n return this._sopInstanceUID;\r\n }\r\n\r\n get pixelPaddingValue() {\r\n return this._pixelPaddingValue;\r\n }\r\n\r\n set pixelPaddingValue(pixelPaddingValue) {\r\n this._pixelPaddingValue = pixelPaddingValue;\r\n }\r\n\r\n get pixelRepresentation() {\r\n return this._pixelRepresentation;\r\n }\r\n\r\n set pixelRepresentation(pixelRepresentation) {\r\n this._pixelRepresentation = pixelRepresentation;\r\n }\r\n\r\n get pixelType() {\r\n return this._pixelType;\r\n }\r\n\r\n set pixelType(pixelType) {\r\n this._pixelType = pixelType;\r\n }\r\n\r\n get url() {\r\n return this._url;\r\n }\r\n\r\n set url(url) {\r\n this._url = url;\r\n }\r\n\r\n get referencedSegmentNumber() {\r\n return this._referencedSegmentNumber;\r\n }\r\n\r\n set referencedSegmentNumber(referencedSegmentNumber) {\r\n this._referencedSegmentNumber = referencedSegmentNumber;\r\n }\r\n\r\n get rightHanded() {\r\n return this._rightHanded;\r\n }\r\n\r\n set rightHanded(rightHanded) {\r\n this._rightHanded = rightHanded;\r\n }\r\n\r\n get index() {\r\n return this._index;\r\n }\r\n\r\n set index(index) {\r\n this._index = index;\r\n }\r\n\r\n get invert() {\r\n return this._invert;\r\n }\r\n\r\n set invert(invert) {\r\n this._invert = invert;\r\n }\r\n\r\n get numberOfChannels() {\r\n return this._numberOfChannels;\r\n }\r\n\r\n set numberOfChannels(numberOfChannels) {\r\n this._numberOfChannels = numberOfChannels;\r\n }\r\n}\r\n","import Frame from './models.frame';\r\nimport Stack from './models.stack';\r\nimport Series from './models.series';\r\nimport Voxel from './models.voxel';\r\n\r\nexport { Frame as FrameModel, Stack as StackModel, Series as SeriesModel, Voxel as VoxelModel };\r\n","/** * Imports ***/\r\nimport ModelsBase from '../models/models.base';\r\n\r\n/**\r\n * Series object.\r\n *\r\n * @module models/series\r\n */\r\nexport default class ModelsSeries extends ModelsBase {\r\n /**\r\n * Models series constructor\r\n */\r\n constructor() {\r\n super();\r\n\r\n this._concatenationUID = -1;\r\n this._seriesInstanceUID = -1;\r\n this._transferSyntaxUID = '';\r\n this._seriesNumber = -1;\r\n this._seriesDescription = '';\r\n this._seriesDate = '';\r\n this._studyDescription = '';\r\n this._studyDate = '';\r\n this._accessionNumber = -1;\r\n this._modality = 'Modality not set';\r\n this._dimensionIndexSequence = [];\r\n // it is used in the loader in case a dicom/nifti contains multiple frames\r\n // should be updated after merge or renamed\r\n this._numberOfFrames = 0;\r\n this._numberOfChannels = 1;\r\n\r\n // patient information\r\n this._rawHeader = null;\r\n this._patientID = '';\r\n this._patientName = '';\r\n this._patientAge = '';\r\n this._patientBirthdate = '';\r\n this._patientSex = '';\r\n\r\n // SEGMENTATION STUFF\r\n this._segmentationType = null;\r\n this._segmentationSegments = [];\r\n\r\n // STACK\r\n this._stack = [];\r\n }\r\n\r\n /**\r\n * Validate a series.\r\n *\r\n * Requirements:\r\n * - mergeSeries method\r\n * - _seriesInstanceUID\r\n * - _numberOfFrames\r\n * - _numberOfChannels\r\n * _ _stack\r\n *\r\n * @param {ModelsSeries} model - Model to be validated as series.\r\n *\r\n * @return {boolean} True if series is valid. False if not.\r\n *\r\n * @override\r\n */\r\n validate(model) {\r\n if (\r\n !(\r\n super.validate(model) &&\r\n typeof model.mergeSeries === 'function' &&\r\n model.hasOwnProperty('_seriesInstanceUID') &&\r\n model.hasOwnProperty('_numberOfFrames') &&\r\n model.hasOwnProperty('_numberOfChannels') &&\r\n model.hasOwnProperty('_stack') &&\r\n typeof model._stack !== 'undefined' &&\r\n Array === model._stack.constructor\r\n )\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Merge current series with provided series.\r\n * 2 series can ONLY be merge if they have the same SeriesInstanceUID.\r\n *\r\n * Also merges the stacks inside a series.\r\n *\r\n * @param {ModelsSeries} series - Series to be merged against current series.\r\n *\r\n * @return {boolean} True if series could be merge. False if not.\r\n *\r\n * @override\r\n */\r\n merge(series) {\r\n if (!this.validate(series)) {\r\n return false;\r\n }\r\n\r\n if (this._seriesInstanceUID === series.seriesInstanceUID) {\r\n // may merge incorrectly if loader will return more than one stacks per series\r\n if (series.stack[0]) {\r\n if (this._stack[0]._numberOfFrames === 0) {\r\n this._stack[0].computeNumberOfFrames();\r\n }\r\n this._stack[0].computeCosines();\r\n if (series.stack[0]._numberOfFrames === 0) {\r\n series.stack[0].computeNumberOfFrames();\r\n }\r\n series.stack[0].computeCosines();\r\n }\r\n return this.mergeModels(this._stack, series.stack);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Merge current series with provided array of series.\r\n * 2 series can ONLY be merge if they have the same SeriesInstanceUID.\r\n *\r\n * Also merges the stacks inside a series.\r\n *\r\n * @param {Array.} target - Series to be merged against current series.\r\n *\r\n * @return {Array.} Array of series properly merged.\r\n */\r\n mergeSeries(target) {\r\n let seriesContainer = [this];\r\n this.mergeModels(seriesContainer, target);\r\n return seriesContainer;\r\n }\r\n\r\n /**\r\n * Series instance UID setter\r\n *\r\n * @param {*} seriesInstanceUID\r\n */\r\n set seriesInstanceUID(seriesInstanceUID) {\r\n this._seriesInstanceUID = seriesInstanceUID;\r\n }\r\n\r\n /**\r\n * Series instace UID getter\r\n *\r\n * @return {*}\r\n */\r\n get seriesInstanceUID() {\r\n return this._seriesInstanceUID;\r\n }\r\n\r\n /**\r\n * Transfer syntax UID setter\r\n *\r\n * @param {*} transferSyntaxUID\r\n */\r\n set transferSyntaxUID(transferSyntaxUID) {\r\n this._transferSyntaxUID = transferSyntaxUID;\r\n }\r\n\r\n /**\r\n * Transfer syntax UID getter\r\n *\r\n * @return {*}\r\n */\r\n get transferSyntaxUID() {\r\n return this._transferSyntaxUID;\r\n }\r\n\r\n /**\r\n * Transfer syntax UID getter\r\n *\r\n * @return {*}\r\n */\r\n get transferSyntaxUIDLabel() {\r\n switch (this._transferSyntaxUID) {\r\n case '1.2.840.10008.1.2.4.90':\r\n return 'JPEG 2000 Lossless';\r\n case '1.2.840.10008.1.2.4.91':\r\n return 'JPEG 2000 Lossy';\r\n case '1.2.840.10008.1.2.4.57':\r\n return 'JPEG Lossless, Nonhierarchical (Processes 14)';\r\n case '1.2.840.10008.1.2.4.70':\r\n return 'JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1])';\r\n case '1.2.840.10008.1.2.4.50':\r\n return 'JPEG Baseline lossy process 1 (8 bit)';\r\n case '1.2.840.10008.1.2.4.51':\r\n return 'JPEG Baseline lossy process 2 & 4 (12 bit)';\r\n case '1.2.840.10008.1.2':\r\n return 'Implicit VR Little Endian';\r\n case '1.2.840.10008.1.2.1':\r\n return 'Explicit VR Little Endian';\r\n case '1.2.840.10008.1.2.2':\r\n return 'Explicit VR Big Endian';\r\n default:\r\n return `Unknown transfersyntax: ${this._transferSyntaxUID}`;\r\n }\r\n }\r\n\r\n /**\r\n * Study date setter\r\n *\r\n * @param {*} studyDate\r\n */\r\n set studyDate(studyDate) {\r\n this._studyDate = studyDate;\r\n }\r\n\r\n /**\r\n * Study date getter\r\n *\r\n * @return {*}\r\n */\r\n get studyDate() {\r\n return this._studyDate;\r\n }\r\n\r\n /**\r\n * Study descripition setter\r\n *\r\n * @param {*} studyDescription\r\n */\r\n set studyDescription(studyDescription) {\r\n this._studyDescription = studyDescription;\r\n }\r\n\r\n /**\r\n * Study description getter\r\n *\r\n * @return {*}\r\n */\r\n get studyDescription() {\r\n return this._studyDescription;\r\n }\r\n\r\n /**\r\n * Series date setter\r\n *\r\n * @param {*} seriesDate\r\n */\r\n set seriesDate(seriesDate) {\r\n this._seriesDate = seriesDate;\r\n }\r\n\r\n /**\r\n * Series date getter\r\n *\r\n * @return {*}\r\n */\r\n get seriesDate() {\r\n return this._seriesDate;\r\n }\r\n\r\n /**\r\n * Series descripition setter\r\n *\r\n * @param {*} seriesDescription\r\n */\r\n set seriesDescription(seriesDescription) {\r\n this._seriesDescription = seriesDescription;\r\n }\r\n\r\n /**\r\n * Series description getter\r\n *\r\n * @return {*}\r\n */\r\n get seriesDescription() {\r\n return this._seriesDescription;\r\n }\r\n\r\n /**\r\n * Raw Header setter\r\n *\r\n * @param {*} rawHeader\r\n */\r\n set rawHeader(rawHeader) {\r\n this._rawHeader = rawHeader;\r\n }\r\n\r\n /**\r\n * Raw Header getter\r\n *\r\n * @return {*}\r\n */\r\n get rawHeader() {\r\n return this._rawHeader;\r\n }\r\n\r\n /**\r\n * Patient ID setter\r\n *\r\n * @param {*} patientID\r\n */\r\n set patientID(patientID) {\r\n this._patientID = patientID;\r\n }\r\n\r\n /**\r\n * Patient ID getter\r\n *\r\n * @return {*}\r\n */\r\n get patientID() {\r\n return this._patientID;\r\n }\r\n\r\n /**\r\n * Patient name setter\r\n *\r\n * @param {*} patientName\r\n */\r\n set patientName(patientName) {\r\n this._patientName = patientName;\r\n }\r\n\r\n /**\r\n * Patient name getter\r\n *\r\n * @return {*}\r\n */\r\n get patientName() {\r\n return this._patientName;\r\n }\r\n\r\n /**\r\n * Patient age setter\r\n *\r\n * @param {*} patientAge\r\n */\r\n set patientAge(patientAge) {\r\n this._patientAge = patientAge;\r\n }\r\n\r\n /**\r\n * Patient age getter\r\n *\r\n * @return {*}\r\n */\r\n get patientAge() {\r\n return this._patientAge;\r\n }\r\n\r\n /**\r\n * Patient birthdate setter\r\n *\r\n * @param {*} patientBirthdate\r\n */\r\n set patientBirthdate(patientBirthdate) {\r\n this._patientBirthdate = patientBirthdate;\r\n }\r\n\r\n /**\r\n * Patient birthdate getter\r\n *\r\n * @return {*}\r\n */\r\n get patientBirthdate() {\r\n return this._patientBirthdate;\r\n }\r\n\r\n /**\r\n * Patient sex setter\r\n *\r\n * @param {*} patientSex\r\n */\r\n set patientSex(patientSex) {\r\n this._patientSex = patientSex;\r\n }\r\n\r\n /**\r\n * Patient sex getter\r\n *\r\n * @return {*}\r\n */\r\n get patientSex() {\r\n return this._patientSex;\r\n }\r\n\r\n /**\r\n * Number of frames setter\r\n *\r\n * @param {*} numberOfFrames\r\n */\r\n set numberOfFrames(numberOfFrames) {\r\n this._numberOfFrames = numberOfFrames;\r\n }\r\n\r\n /**\r\n * Number of frames getter\r\n *\r\n * @return {*}\r\n */\r\n get numberOfFrames() {\r\n return this._numberOfFrames;\r\n }\r\n\r\n /**\r\n * Number of channels setter\r\n *\r\n * @param {*} numberOfChannels\r\n */\r\n set numberOfChannels(numberOfChannels) {\r\n this._numberOfChannels = numberOfChannels;\r\n }\r\n\r\n /**\r\n * Number of channels getter\r\n *\r\n * @return {*}\r\n */\r\n get numberOfChannels() {\r\n return this._numberOfChannels;\r\n }\r\n\r\n /**\r\n * Stack setter\r\n *\r\n * @param {*} stack\r\n */\r\n set stack(stack) {\r\n this._stack = stack;\r\n }\r\n\r\n /**\r\n * Stack getter\r\n *\r\n * @return {*}\r\n */\r\n get stack() {\r\n return this._stack;\r\n }\r\n\r\n /**\r\n * Modality setter\r\n *\r\n * @param {*} modality\r\n */\r\n set modality(modality) {\r\n this._modality = modality;\r\n }\r\n\r\n /**\r\n * Modality getter\r\n *\r\n * @return {*}\r\n */\r\n get modality() {\r\n return this._modality;\r\n }\r\n\r\n /**\r\n * Segmentation type setter\r\n *\r\n * @param {*} segmentationType\r\n */\r\n set segmentationType(segmentationType) {\r\n this._segmentationType = segmentationType;\r\n }\r\n\r\n /**\r\n * Segmentation type getter\r\n *\r\n * @return {*}\r\n */\r\n get segmentationType() {\r\n return this._segmentationType;\r\n }\r\n\r\n /**\r\n * Segmentation segments setter\r\n *\r\n * @param {*} segmentationSegments\r\n */\r\n set segmentationSegments(segmentationSegments) {\r\n this._segmentationSegments = segmentationSegments;\r\n }\r\n\r\n /**\r\n * Segmentation segments getter\r\n *\r\n * @return {*}\r\n */\r\n get segmentationSegments() {\r\n return this._segmentationSegments;\r\n }\r\n}\r\n","/** * Imports ***/\r\nimport { Matrix4 } from 'three/src/math/Matrix4';\r\nimport { Vector3 } from 'three/src/math/Vector3';\r\nimport { RGBFormat, RGBAFormat } from 'three/src/constants';\r\n\r\nimport CoreColors from '../core/core.colors';\r\nimport CoreUtils from '../core/core.utils';\r\nimport ModelsBase from '../models/models.base';\r\n\r\nconst binaryString = require('math-float32-to-binary-string');\r\n\r\n/**\r\n * Stack object.\r\n *\r\n * @module models/stack\r\n */\r\nexport default class ModelsStack extends ModelsBase {\r\n /**\r\n * Models Stack constructor\r\n */\r\n constructor() {\r\n super();\r\n\r\n this._uid = null;\r\n this._stackID = -1;\r\n\r\n this._frame = [];\r\n this._numberOfFrames = 0;\r\n\r\n this._rows = 0;\r\n this._columns = 0;\r\n this._numberOfChannels = 1;\r\n this._bitsAllocated = 8;\r\n this._pixelType = 0;\r\n this._pixelRepresentation = 0;\r\n\r\n this._textureSize = 4096;\r\n this._textureUnits = 7;\r\n\r\n this._rawData = [];\r\n\r\n this._windowCenter = 0;\r\n this._windowWidth = 0;\r\n\r\n this._rescaleSlope = 1;\r\n this._rescaleIntercept = 0;\r\n\r\n this._minMax = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY];\r\n\r\n // TRANSFORMATION MATRICES\r\n this._regMatrix = new Matrix4();\r\n\r\n this._ijk2LPS = null;\r\n this._lps2IJK = null;\r\n\r\n this._aabb2LPS = null;\r\n this._lps2AABB = null;\r\n\r\n //\r\n // IJK dimensions\r\n this._dimensionsIJK = null;\r\n this._halfDimensionsIJK = null;\r\n this._spacing = new Vector3(1, 1, 1);\r\n this._spacingBetweenSlices = 0;\r\n this._sliceThickness = 0;\r\n this._origin = null;\r\n this._rightHanded = true;\r\n this._xCosine = new Vector3(1, 0, 0);\r\n this._yCosine = new Vector3(0, 1, 0);\r\n this._zCosine = new Vector3(0, 0, 1);\r\n\r\n // convenience vars\r\n this._prepared = false;\r\n this._packed = false;\r\n this._packedPerPixel = 1;\r\n\r\n //\r\n this._modality = 'Modality not set';\r\n\r\n // SEGMENTATION STUFF\r\n this._segmentationType = null;\r\n this._segmentationSegments = [];\r\n this._segmentationDefaultColor = [63, 174, 128];\r\n this._frameSegment = [];\r\n this._segmentationLUT = [];\r\n this._segmentationLUTO = [];\r\n\r\n // photometricInterpretation Monochrome1 VS Monochrome2\r\n this._invert = false;\r\n }\r\n\r\n /**\r\n * Prepare segmentation stack.\r\n * A segmentation stack can hold x frames that are at the same location\r\n * but segmentation specific information:\r\n * - Frame X contains voxels for segmentation A.\r\n * - Frame Y contains voxels for segmenttation B.\r\n * - Frame X and Y are at the same location.\r\n *\r\n * We currently merge overlaping frames into 1.\r\n */\r\n prepareSegmentation() {\r\n // store frame and do special pre-processing\r\n this._frameSegment = this._frame;\r\n let mergedFrames = [];\r\n\r\n // order frames\r\n this.computeCosines();\r\n this._frame.map(this._computeDistanceArrayMap.bind(null, this._zCosine));\r\n this._frame.sort(this._sortDistanceArraySort);\r\n\r\n // merge frames\r\n let prevIndex = -1;\r\n for (let i = 0; i < this._frame.length; i++) {\r\n if (!mergedFrames[prevIndex] || mergedFrames[prevIndex]._dist != this._frame[i]._dist) {\r\n mergedFrames.push(this._frame[i]);\r\n prevIndex++;\r\n\r\n // Scale frame\r\n // by default each frame contains binary data about a segmentation.\r\n // we scale it by the referenceSegmentNumber in order to have a\r\n // segmentation specific voxel value rather than 0 or 1.\r\n // That allows us to merge frames later on.\r\n // If we merge frames without scaling, then we can not differenciate\r\n // voxels from segmentation A or B as the value is 0 or 1 in both cases.\r\n for (let k = 0; k < mergedFrames[prevIndex]._rows * mergedFrames[prevIndex]._columns; k++) {\r\n mergedFrames[prevIndex]._pixelData[k] *= this._frame[i]._referencedSegmentNumber;\r\n }\r\n } else {\r\n // frame already exsits at this location.\r\n // merge data from this segmentation into existing frame\r\n for (let k = 0; k < mergedFrames[prevIndex]._rows * mergedFrames[prevIndex]._columns; k++) {\r\n mergedFrames[prevIndex]._pixelData[k] +=\r\n this._frame[i].pixelData[k] * this._frame[i]._referencedSegmentNumber;\r\n }\r\n }\r\n\r\n mergedFrames[prevIndex].minMax = CoreUtils.minMax(mergedFrames[prevIndex]._pixelData);\r\n }\r\n\r\n // get information about segments\r\n let dict = {};\r\n let max = 0;\r\n for (let i = 0; i < this._segmentationSegments.length; i++) {\r\n max = Math.max(max, parseInt(this._segmentationSegments[i].segmentNumber, 10));\r\n\r\n let color = this._segmentationSegments[i].recommendedDisplayCIELab;\r\n if (color === null) {\r\n dict[this._segmentationSegments[i].segmentNumber] = this._segmentationDefaultColor;\r\n } else {\r\n dict[this._segmentationSegments[i].segmentNumber] = CoreColors.cielab2RGB(...color);\r\n }\r\n }\r\n\r\n // generate LUTs\r\n for (let i = 0; i <= max; i++) {\r\n let index = i / max;\r\n let opacity = i ? 1 : 0;\r\n let rgb = [0, 0, 0];\r\n if (dict.hasOwnProperty(i.toString())) {\r\n rgb = dict[i.toString()];\r\n }\r\n\r\n rgb[0] /= 255;\r\n rgb[1] /= 255;\r\n rgb[2] /= 255;\r\n\r\n this._segmentationLUT.push([index, ...rgb]);\r\n this._segmentationLUTO.push([index, opacity]);\r\n }\r\n\r\n this._frame = mergedFrames;\r\n }\r\n\r\n /**\r\n * Compute cosines\r\n * Order frames\r\n * computeSpacing\r\n * sanityCheck\r\n * init some vars\r\n * compute min/max\r\n * compute transformation matrices\r\n *\r\n * @return {*}\r\n */\r\n prepare() {\r\n // if segmentation, merge some frames...\r\n if (this._modality === 'SEG') {\r\n this.prepareSegmentation();\r\n }\r\n\r\n this.computeNumberOfFrames();\r\n\r\n // pass parameters from frame to stack\r\n this._rows = this._frame[0].rows;\r\n this._columns = this._frame[0].columns;\r\n this._dimensionsIJK = new Vector3(this._columns, this._rows, this._numberOfFrames);\r\n this._halfDimensionsIJK = new Vector3(\r\n this._dimensionsIJK.x / 2,\r\n this._dimensionsIJK.y / 2,\r\n this._dimensionsIJK.z / 2\r\n );\r\n this._spacingBetweenSlices = this._frame[0].spacingBetweenSlices;\r\n this._sliceThickness = this._frame[0].sliceThickness;\r\n\r\n // compute direction cosines\r\n this.computeCosines();\r\n\r\n // order the frames\r\n if (this._numberOfFrames > 1) {\r\n this.orderFrames();\r\n }\r\n\r\n // compute/guess spacing\r\n this.computeSpacing();\r\n // set extra vars if nulls\r\n // do it now because before we would think image position/orientation\r\n // are defined and we would use it to compute spacing.\r\n if (!this._frame[0].imagePosition) {\r\n this._frame[0].imagePosition = [0, 0, 0];\r\n }\r\n if (!this._frame[0].imageOrientation) {\r\n this._frame[0].imageOrientation = [1, 0, 0, 0, 1, 0];\r\n }\r\n\r\n this._origin = this._arrayToVector3(this._frame[0].imagePosition, 0);\r\n\r\n // compute transforms\r\n this.computeIJK2LPS();\r\n\r\n this.computeLPS2AABB();\r\n // this.packEchos();\r\n\r\n const middleFrameIndex = Math.floor(this._frame.length / 2);\r\n const middleFrame = this._frame[middleFrameIndex];\r\n\r\n this._rescaleSlope = middleFrame.rescaleSlope || 1;\r\n this._rescaleIntercept = middleFrame.rescaleIntercept || 0;\r\n\r\n // rescale/slope min max\r\n this.computeMinMaxIntensities();\r\n this._minMax[0] = CoreUtils.rescaleSlopeIntercept(\r\n this._minMax[0],\r\n this._rescaleSlope,\r\n this._rescaleIntercept\r\n );\r\n this._minMax[1] = CoreUtils.rescaleSlopeIntercept(\r\n this._minMax[1],\r\n this._rescaleSlope,\r\n this._rescaleIntercept\r\n );\r\n\r\n this._windowWidth = middleFrame.windowWidth || this._minMax[1] - this._minMax[0];\r\n\r\n this._windowCenter = middleFrame.windowCenter || this._minMax[0] + this._windowWidth / 2;\r\n\r\n this._bitsAllocated = middleFrame.bitsAllocated;\r\n this._prepared = true;\r\n }\r\n\r\n packEchos() {\r\n // 4 echo times...\r\n let echos = 4;\r\n let packedEcho = [];\r\n for (let i = 0; i < this._frame.length; i += echos) {\r\n let frame = this._frame[i];\r\n for (let k = 0; k < this._rows * this._columns; k++) {\r\n for (let j = 1; j < echos; j++) {\r\n frame.pixelData[k] += this._frame[i + j].pixelData[k];\r\n }\r\n frame.pixelData[k] /= echos;\r\n }\r\n packedEcho.push(frame);\r\n }\r\n this._frame = packedEcho;\r\n this._numberOfFrames = this._frame.length;\r\n this._dimensionsIJK = new Vector3(this._columns, this._rows, this._numberOfFrames);\r\n this._halfDimensionsIJK = new Vector3(\r\n this._dimensionsIJK.x / 2,\r\n this._dimensionsIJK.y / 2,\r\n this._dimensionsIJK.z / 2\r\n );\r\n }\r\n\r\n computeNumberOfFrames() {\r\n // we need at least 1 frame\r\n if (this._frame && this._frame.length > 0) {\r\n this._numberOfFrames = this._frame.length;\r\n } else {\r\n window.console.warn(\"_frame doesn't contain anything....\");\r\n window.console.warn(this._frame);\r\n return false;\r\n }\r\n }\r\n\r\n // frame.cosines - returns array [x, y, z]\r\n computeCosines() {\r\n if (this._frame && this._frame[0]) {\r\n let cosines = this._frame[0].cosines();\r\n this._xCosine = cosines[0];\r\n this._yCosine = cosines[1];\r\n this._zCosine = cosines[2];\r\n }\r\n }\r\n\r\n orderFrames() {\r\n // order the frames based on theirs dimension indices\r\n // first index is the most important.\r\n // 1,1,1,1 will be first\r\n // 1,1,2,1 will be next\r\n // 1,1,2,3 will be next\r\n // 1,1,3,1 will be next\r\n if (this._frame[0].dimensionIndexValues) {\r\n this._frame.sort(this._orderFrameOnDimensionIndicesArraySort);\r\n\r\n // else order with image position and orientation\r\n } else if (\r\n this._frame[0].imagePosition &&\r\n this._frame[0].imageOrientation &&\r\n this._frame[1] &&\r\n this._frame[1].imagePosition &&\r\n this._frame[1].imageOrientation &&\r\n this._frame[0].imagePosition.join() !== this._frame[1].imagePosition.join()\r\n ) {\r\n // compute and sort by dist in this series\r\n this._frame.map(this._computeDistanceArrayMap.bind(null, this._zCosine));\r\n this._frame.sort(this._sortDistanceArraySort);\r\n } else if (\r\n this._frame[0].instanceNumber !== null &&\r\n this._frame[1] &&\r\n this._frame[1].instanceNumber !== null &&\r\n this._frame[0].instanceNumber !== this._frame[1].instanceNumber\r\n ) {\r\n this._frame.sort(this._sortInstanceNumberArraySort);\r\n } else if (\r\n this._frame[0].sopInstanceUID &&\r\n this._frame[1] &&\r\n this._frame[1].sopInstanceUID &&\r\n this._frame[0].sopInstanceUID !== this._frame[1].sopInstanceUID\r\n ) {\r\n this._frame.sort(this._sortSopInstanceUIDArraySort);\r\n } else if (!this._frame[0].imagePosition) {\r\n // cancel warning if you have set null imagePosition on purpose (?)\r\n } else {\r\n window.console.warn('do not know how to order the frames...');\r\n }\r\n }\r\n\r\n computeSpacing() {\r\n this.xySpacing();\r\n this.zSpacing();\r\n }\r\n\r\n /**\r\n * Compute stack z spacing\r\n */\r\n zSpacing() {\r\n if (this._numberOfFrames > 1) {\r\n if (this._frame[0].pixelSpacing && this._frame[0].pixelSpacing[2]) {\r\n this._spacing.z = this._frame[0].pixelSpacing[2];\r\n } else {\r\n // compute and sort by dist in this series\r\n this._frame.map(this._computeDistanceArrayMap.bind(null, this._zCosine));\r\n\r\n // if distances are different, re-sort array\r\n if (this._frame[1].dist !== this._frame[0].dist) {\r\n this._frame.sort(this._sortDistanceArraySort);\r\n this._spacing.z = this._frame[1].dist - this._frame[0].dist;\r\n } else if (this._spacingBetweenSlices) {\r\n this._spacing.z = this._spacingBetweenSlices;\r\n } else if (this._frame[0].sliceThickness) {\r\n this._spacing.z = this._frame[0].sliceThickness;\r\n }\r\n }\r\n }\r\n\r\n // Spacing\r\n // can not be 0 if not matrix can not be inverted.\r\n if (this._spacing.z === 0) {\r\n this._spacing.z = 1;\r\n }\r\n }\r\n\r\n /**\r\n * FRAME CAN DO IT\r\n */\r\n xySpacing() {\r\n if (this._frame && this._frame[0]) {\r\n let spacingXY = this._frame[0].spacingXY();\r\n this._spacing.x = spacingXY[0];\r\n this._spacing.y = spacingXY[1];\r\n }\r\n }\r\n\r\n /**\r\n * Find min and max intensities among all frames.\r\n */\r\n computeMinMaxIntensities() {\r\n // what about colors!!!!?\r\n // we ignore values if NaNs\r\n // https://github.com/FNNDSC/ami/issues/185\r\n for (let i = 0; i < this._frame.length; i++) {\r\n // get min/max\r\n let min = this._frame[i].minMax[0];\r\n if (!Number.isNaN(min)) {\r\n this._minMax[0] = Math.min(this._minMax[0], min);\r\n }\r\n\r\n let max = this._frame[i].minMax[1];\r\n if (!Number.isNaN(max)) {\r\n this._minMax[1] = Math.max(this._minMax[1], max);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Compute IJK to LPS and invert transforms\r\n */\r\n computeIJK2LPS() {\r\n // ijk to lps\r\n this._ijk2LPS = CoreUtils.ijk2LPS(\r\n this._xCosine,\r\n this._yCosine,\r\n this._zCosine,\r\n this._spacing,\r\n this._origin,\r\n this._regMatrix\r\n );\r\n\r\n // lps 2 ijk\r\n this._lps2IJK = new Matrix4();\r\n this._lps2IJK.getInverse(this._ijk2LPS);\r\n }\r\n\r\n /**\r\n * Compute LPS to AABB and invert transforms\r\n */\r\n computeLPS2AABB() {\r\n this._aabb2LPS = CoreUtils.aabb2LPS(this._xCosine, this._yCosine, this._zCosine, this._origin);\r\n\r\n this._lps2AABB = new Matrix4();\r\n this._lps2AABB.getInverse(this._aabb2LPS);\r\n }\r\n\r\n /**\r\n * Merge stacks\r\n *\r\n * @param {*} stack\r\n *\r\n * @return {*}\r\n */\r\n merge(stack) {\r\n // also make sure x/y/z cosines are a match!\r\n if (\r\n this._stackID === stack.stackID &&\r\n this._numberOfFrames === 1 &&\r\n stack._numberOfFrames === 1 &&\r\n this._frame[0].columns === stack.frame[0].columns &&\r\n this._frame[0].rows === stack.frame[0].rows &&\r\n this._xCosine.equals(stack.xCosine) &&\r\n this._yCosine.equals(stack.yCosine) &&\r\n this._zCosine.equals(stack.zCosine)\r\n ) {\r\n return this.mergeModels(this._frame, stack.frame);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Pack current stack pixel data into 8 bits array buffers\r\n */\r\n pack() {\r\n // Get total number of voxels\r\n const nbVoxels = this._dimensionsIJK.x * this._dimensionsIJK.y * this._dimensionsIJK.z;\r\n\r\n // Packing style\r\n if ((this._bitsAllocated === 8 && this._numberOfChannels === 1) || this._bitsAllocated === 1) {\r\n this._packedPerPixel = 4;\r\n }\r\n\r\n if (this._bitsAllocated === 16 && this._numberOfChannels === 1) {\r\n this._packedPerPixel = 2;\r\n }\r\n\r\n // Loop through all the textures we need\r\n const textureDimension = this._textureSize * this._textureSize;\r\n let requiredTextures = Math.ceil(nbVoxels / (textureDimension * this._packedPerPixel));\r\n let voxelIndexStart = 0;\r\n let voxelIndexStop = this._packedPerPixel * textureDimension;\r\n if (voxelIndexStop > nbVoxels) {\r\n voxelIndexStop = nbVoxels;\r\n }\r\n\r\n if (this._textureUnits < requiredTextures) {\r\n console.warn('Insufficient number of supported textures. Some frames will not be packed.');\r\n requiredTextures = this._textureUnits;\r\n }\r\n\r\n for (let ii = 0; ii < requiredTextures; ii++) {\r\n const packed = this._packTo8Bits(\r\n this._numberOfChannels,\r\n this._frame,\r\n this._textureSize,\r\n voxelIndexStart,\r\n voxelIndexStop\r\n );\r\n this._textureType = packed.textureType;\r\n this._rawData.push(packed.data);\r\n\r\n voxelIndexStart += this._packedPerPixel * textureDimension;\r\n voxelIndexStop += this._packedPerPixel * textureDimension;\r\n if (voxelIndexStop > nbVoxels) {\r\n voxelIndexStop = nbVoxels;\r\n }\r\n }\r\n\r\n this._packed = true;\r\n }\r\n\r\n /**\r\n * Pack frame data to 32 bits texture\r\n * @param {*} channels\r\n * @param {*} frame\r\n * @param {*} textureSize\r\n * @param {*} startVoxel\r\n * @param {*} stopVoxel\r\n */\r\n _packTo8Bits(channels, frame, textureSize, startVoxel, stopVoxel) {\r\n const packed = {\r\n textureType: null,\r\n data: null,\r\n };\r\n\r\n const bitsAllocated = frame[0].bitsAllocated;\r\n const pixelType = frame[0].pixelType;\r\n\r\n // transform signed to unsigned for convenience\r\n let offset = 0;\r\n if (this._minMax[0] < 0) {\r\n offset -= this._minMax[0];\r\n }\r\n\r\n let packIndex = 0;\r\n let frameIndex = 0;\r\n let inFrameIndex = 0;\r\n // frame should return it!\r\n const frameDimension = frame[0].rows * frame[0].columns;\r\n\r\n if ((bitsAllocated === 8 && channels === 1) || bitsAllocated === 1) {\r\n let data = new Uint8Array(textureSize * textureSize * 4);\r\n let coordinate = 0;\r\n let channelOffset = 0;\r\n for (let i = startVoxel; i < stopVoxel; i++) {\r\n frameIndex = ~~(i / frameDimension);\r\n inFrameIndex = i % frameDimension;\r\n\r\n let raw = frame[frameIndex].pixelData[inFrameIndex] + offset;\r\n if (!Number.isNaN(raw)) {\r\n data[4 * coordinate + channelOffset] = raw;\r\n }\r\n\r\n packIndex++;\r\n coordinate = Math.floor(packIndex / 4);\r\n channelOffset = packIndex % 4;\r\n }\r\n packed.textureType = RGBAFormat;\r\n packed.data = data;\r\n } else if (bitsAllocated === 16 && channels === 1) {\r\n let data = new Uint8Array(textureSize * textureSize * 4);\r\n let coordinate = 0;\r\n let channelOffset = 0;\r\n\r\n for (let i = startVoxel; i < stopVoxel; i++) {\r\n frameIndex = ~~(i / frameDimension);\r\n inFrameIndex = i % frameDimension;\r\n\r\n let raw = frame[frameIndex].pixelData[inFrameIndex] + offset;\r\n if (!Number.isNaN(raw)) {\r\n data[4 * coordinate + 2 * channelOffset] = raw & 0x00ff;\r\n data[4 * coordinate + 2 * channelOffset + 1] = (raw >>> 8) & 0x00ff;\r\n }\r\n\r\n packIndex++;\r\n coordinate = Math.floor(packIndex / 2);\r\n channelOffset = packIndex % 2;\r\n }\r\n\r\n packed.textureType = RGBAFormat;\r\n packed.data = data;\r\n } else if (bitsAllocated === 32 && channels === 1 && pixelType === 0) {\r\n let data = new Uint8Array(textureSize * textureSize * 4);\r\n for (let i = startVoxel; i < stopVoxel; i++) {\r\n frameIndex = ~~(i / frameDimension);\r\n inFrameIndex = i % frameDimension;\r\n\r\n let raw = frame[frameIndex].pixelData[inFrameIndex] + offset;\r\n if (!Number.isNaN(raw)) {\r\n data[4 * packIndex] = raw & 0x000000ff;\r\n data[4 * packIndex + 1] = (raw >>> 8) & 0x000000ff;\r\n data[4 * packIndex + 2] = (raw >>> 16) & 0x000000ff;\r\n data[4 * packIndex + 3] = (raw >>> 24) & 0x000000ff;\r\n }\r\n\r\n packIndex++;\r\n }\r\n packed.textureType = RGBAFormat;\r\n packed.data = data;\r\n } else if (bitsAllocated === 32 && channels === 1 && pixelType === 1) {\r\n let data = new Uint8Array(textureSize * textureSize * 4);\r\n\r\n for (let i = startVoxel; i < stopVoxel; i++) {\r\n frameIndex = ~~(i / frameDimension);\r\n inFrameIndex = i % frameDimension;\r\n\r\n let raw = frame[frameIndex].pixelData[inFrameIndex] + offset;\r\n if (!Number.isNaN(raw)) {\r\n let bitString = binaryString(raw);\r\n let bitStringArray = bitString.match(/.{1,8}/g);\r\n\r\n data[4 * packIndex] = parseInt(bitStringArray[0], 2);\r\n data[4 * packIndex + 1] = parseInt(bitStringArray[1], 2);\r\n data[4 * packIndex + 2] = parseInt(bitStringArray[2], 2);\r\n data[4 * packIndex + 3] = parseInt(bitStringArray[3], 2);\r\n }\r\n\r\n packIndex++;\r\n }\r\n\r\n packed.textureType = RGBAFormat;\r\n packed.data = data;\r\n } else if (bitsAllocated === 8 && channels === 3) {\r\n let data = new Uint8Array(textureSize * textureSize * 3);\r\n\r\n for (let i = startVoxel; i < stopVoxel; i++) {\r\n frameIndex = ~~(i / frameDimension);\r\n inFrameIndex = i % frameDimension;\r\n\r\n data[3 * packIndex] = frame[frameIndex].pixelData[3 * inFrameIndex];\r\n data[3 * packIndex + 1] = frame[frameIndex].pixelData[3 * inFrameIndex + 1];\r\n data[3 * packIndex + 2] = frame[frameIndex].pixelData[3 * inFrameIndex + 2];\r\n packIndex++;\r\n }\r\n\r\n packed.textureType = RGBFormat;\r\n packed.data = data;\r\n }\r\n\r\n return packed;\r\n }\r\n\r\n /**\r\n * Get the stack world center\r\n *\r\n *@return {*}\r\n */\r\n worldCenter() {\r\n let center = this._halfDimensionsIJK\r\n .clone()\r\n .addScalar(-0.5)\r\n .applyMatrix4(this._ijk2LPS);\r\n return center;\r\n }\r\n\r\n /**\r\n * Get the stack world bounding box\r\n * @return {*}\r\n */\r\n worldBoundingBox() {\r\n let bbox = [\r\n Number.POSITIVE_INFINITY,\r\n Number.NEGATIVE_INFINITY,\r\n Number.POSITIVE_INFINITY,\r\n Number.NEGATIVE_INFINITY,\r\n Number.POSITIVE_INFINITY,\r\n Number.NEGATIVE_INFINITY,\r\n ];\r\n\r\n const dims = this._dimensionsIJK;\r\n\r\n for (let i = 0; i <= dims.x; i += dims.x) {\r\n for (let j = 0; j <= dims.y; j += dims.y) {\r\n for (let k = 0; k <= dims.z; k += dims.z) {\r\n let world = new Vector3(i, j, k).applyMatrix4(this._ijk2LPS);\r\n bbox = [\r\n Math.min(bbox[0], world.x),\r\n Math.max(bbox[1], world.x), // x min/max\r\n Math.min(bbox[2], world.y),\r\n Math.max(bbox[3], world.y),\r\n Math.min(bbox[4], world.z),\r\n Math.max(bbox[5], world.z),\r\n ];\r\n }\r\n }\r\n }\r\n\r\n return bbox;\r\n }\r\n\r\n /**\r\n * Get AABB size in LPS space.\r\n *\r\n * @return {*}\r\n */\r\n AABBox() {\r\n let world0 = new Vector3()\r\n .addScalar(-0.5)\r\n .applyMatrix4(this._ijk2LPS)\r\n .applyMatrix4(this._lps2AABB);\r\n\r\n let world7 = this._dimensionsIJK\r\n .clone()\r\n .addScalar(-0.5)\r\n .applyMatrix4(this._ijk2LPS)\r\n .applyMatrix4(this._lps2AABB);\r\n\r\n let minBBox = new Vector3(\r\n Math.abs(world0.x - world7.x),\r\n Math.abs(world0.y - world7.y),\r\n Math.abs(world0.z - world7.z)\r\n );\r\n\r\n return minBBox;\r\n }\r\n\r\n /**\r\n * Get AABB center in LPS space\r\n */\r\n centerAABBox() {\r\n let centerBBox = this.worldCenter();\r\n centerBBox.applyMatrix4(this._lps2AABB);\r\n return centerBBox;\r\n }\r\n\r\n static indexInDimensions(index, dimensions) {\r\n if (\r\n index.x >= 0 &&\r\n index.y >= 0 &&\r\n index.z >= 0 &&\r\n index.x < dimensions.x &&\r\n index.y < dimensions.y &&\r\n index.z < dimensions.z\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _arrayToVector3(array, index) {\r\n return new Vector3(array[index], array[index + 1], array[index + 2]);\r\n }\r\n\r\n _orderFrameOnDimensionIndicesArraySort(a, b) {\r\n if (\r\n 'dimensionIndexValues' in a &&\r\n Object.prototype.toString.call(a.dimensionIndexValues) === '[object Array]' &&\r\n 'dimensionIndexValues' in b &&\r\n Object.prototype.toString.call(b.dimensionIndexValues) === '[object Array]'\r\n ) {\r\n for (let i = 0; i < a.dimensionIndexValues.length; i++) {\r\n if (parseInt(a.dimensionIndexValues[i], 10) > parseInt(b.dimensionIndexValues[i], 10)) {\r\n return 1;\r\n }\r\n if (parseInt(a.dimensionIndexValues[i], 10) < parseInt(b.dimensionIndexValues[i], 10)) {\r\n return -1;\r\n }\r\n }\r\n } else {\r\n window.console.warn(\"One of the frames doesn't have a dimensionIndexValues array.\");\r\n window.console.warn(a);\r\n window.console.warn(b);\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n _computeDistanceArrayMap(normal, frame) {\r\n if (frame.imagePosition) {\r\n frame.dist =\r\n frame.imagePosition[0] * normal.x +\r\n frame.imagePosition[1] * normal.y +\r\n frame.imagePosition[2] * normal.z;\r\n }\r\n return frame;\r\n }\r\n\r\n _sortDistanceArraySort(a, b) {\r\n return a.dist - b.dist;\r\n }\r\n _sortInstanceNumberArraySort(a, b) {\r\n return a.instanceNumber - b.instanceNumber;\r\n }\r\n _sortSopInstanceUIDArraySort(a, b) {\r\n return a.sopInstanceUID - b.sopInstanceUID;\r\n }\r\n\r\n set numberOfChannels(numberOfChannels) {\r\n this._numberOfChannels = numberOfChannels;\r\n }\r\n\r\n get numberOfChannels() {\r\n return this._numberOfChannels;\r\n }\r\n\r\n set frame(frame) {\r\n this._frame = frame;\r\n }\r\n\r\n get frame() {\r\n return this._frame;\r\n }\r\n\r\n set prepared(prepared) {\r\n this._prepared = prepared;\r\n }\r\n\r\n get prepared() {\r\n return this._prepared;\r\n }\r\n\r\n set packed(packed) {\r\n this._packed = packed;\r\n }\r\n\r\n get packed() {\r\n return this._packed;\r\n }\r\n\r\n set packedPerPixel(packedPerPixel) {\r\n this._packedPerPixel = packedPerPixel;\r\n }\r\n\r\n get packedPerPixel() {\r\n return this._packedPerPixel;\r\n }\r\n\r\n set dimensionsIJK(dimensionsIJK) {\r\n this._dimensionsIJK = dimensionsIJK;\r\n }\r\n\r\n get dimensionsIJK() {\r\n return this._dimensionsIJK;\r\n }\r\n\r\n set halfDimensionsIJK(halfDimensionsIJK) {\r\n this._halfDimensionsIJK = halfDimensionsIJK;\r\n }\r\n\r\n get halfDimensionsIJK() {\r\n return this._halfDimensionsIJK;\r\n }\r\n\r\n set regMatrix(regMatrix) {\r\n this._regMatrix = regMatrix;\r\n }\r\n\r\n get regMatrix() {\r\n return this._regMatrix;\r\n }\r\n\r\n set ijk2LPS(ijk2LPS) {\r\n this._ijk2LPS = ijk2LPS;\r\n }\r\n\r\n get ijk2LPS() {\r\n return this._ijk2LPS;\r\n }\r\n\r\n set lps2IJK(lps2IJK) {\r\n this._lps2IJK = lps2IJK;\r\n }\r\n\r\n get lps2IJK() {\r\n return this._lps2IJK;\r\n }\r\n\r\n set lps2AABB(lps2AABB) {\r\n this._lps2AABB = lps2AABB;\r\n }\r\n\r\n get lps2AABB() {\r\n return this._lps2AABB;\r\n }\r\n\r\n set textureSize(textureSize) {\r\n this._textureSize = textureSize;\r\n }\r\n\r\n get textureSize() {\r\n return this._textureSize;\r\n }\r\n\r\n set textureUnits(textureUnits) {\r\n this._textureUnits = textureUnits;\r\n }\r\n\r\n get textureUnits() {\r\n return this._textureUnits;\r\n }\r\n\r\n set textureType(textureType) {\r\n this._textureType = textureType;\r\n }\r\n\r\n get textureType() {\r\n return this._textureType;\r\n }\r\n\r\n set bitsAllocated(bitsAllocated) {\r\n this._bitsAllocated = bitsAllocated;\r\n }\r\n\r\n get bitsAllocated() {\r\n return this._bitsAllocated;\r\n }\r\n\r\n set rawData(rawData) {\r\n this._rawData = rawData;\r\n }\r\n\r\n get rawData() {\r\n return this._rawData;\r\n }\r\n\r\n get windowWidth() {\r\n return this._windowWidth;\r\n }\r\n\r\n set windowWidth(windowWidth) {\r\n this._windowWidth = windowWidth;\r\n }\r\n\r\n get windowCenter() {\r\n return this._windowCenter;\r\n }\r\n\r\n set windowCenter(windowCenter) {\r\n this._windowCenter = windowCenter;\r\n }\r\n\r\n get rescaleSlope() {\r\n return this._rescaleSlope;\r\n }\r\n\r\n set rescaleSlope(rescaleSlope) {\r\n this._rescaleSlope = rescaleSlope;\r\n }\r\n\r\n get rescaleIntercept() {\r\n return this._rescaleIntercept;\r\n }\r\n\r\n set rescaleIntercept(rescaleIntercept) {\r\n this._rescaleIntercept = rescaleIntercept;\r\n }\r\n\r\n get xCosine() {\r\n return this._xCosine;\r\n }\r\n\r\n set xCosine(xCosine) {\r\n this._xCosine = xCosine;\r\n }\r\n\r\n get yCosine() {\r\n return this._yCosine;\r\n }\r\n\r\n set yCosine(yCosine) {\r\n this._yCosine = yCosine;\r\n }\r\n\r\n get zCosine() {\r\n return this._zCosine;\r\n }\r\n\r\n set zCosine(zCosine) {\r\n this._zCosine = zCosine;\r\n }\r\n\r\n get minMax() {\r\n return this._minMax;\r\n }\r\n\r\n set minMax(minMax) {\r\n this._minMax = minMax;\r\n }\r\n\r\n get stackID() {\r\n return this._stackID;\r\n }\r\n\r\n set stackID(stackID) {\r\n this._stackID = stackID;\r\n }\r\n\r\n get pixelType() {\r\n return this._pixelType;\r\n }\r\n\r\n set pixelType(pixelType) {\r\n this._pixelType = pixelType;\r\n }\r\n\r\n get pixelRepresentation() {\r\n return this._pixelRepresentation;\r\n }\r\n\r\n set pixelRepresentation(pixelRepresentation) {\r\n this._pixelRepresentation = pixelRepresentation;\r\n }\r\n\r\n set invert(invert) {\r\n this._invert = invert;\r\n }\r\n\r\n get invert() {\r\n return this._invert;\r\n }\r\n\r\n set modality(modality) {\r\n this._modality = modality;\r\n }\r\n\r\n get modality() {\r\n return this._modality;\r\n }\r\n\r\n get rightHanded() {\r\n return this._rightHanded;\r\n }\r\n\r\n set rightHanded(rightHanded) {\r\n this._rightHanded = rightHanded;\r\n }\r\n\r\n get spacingBetweenSlices() {\r\n return this._spacingBetweenSlices;\r\n }\r\n\r\n set spacingBetweenSlices(spacingBetweenSlices) {\r\n this._spacingBetweenSlices = spacingBetweenSlices;\r\n }\r\n\r\n set segmentationSegments(segmentationSegments) {\r\n this._segmentationSegments = segmentationSegments;\r\n }\r\n\r\n get segmentationSegments() {\r\n return this._segmentationSegments;\r\n }\r\n\r\n set segmentationType(segmentationType) {\r\n this._segmentationType = segmentationType;\r\n }\r\n\r\n get segmentationType() {\r\n return this._segmentationType;\r\n }\r\n\r\n set segmentationLUT(segmentationLUT) {\r\n this._segmentationLUT = segmentationLUT;\r\n }\r\n\r\n get segmentationLUT() {\r\n return this._segmentationLUT;\r\n }\r\n\r\n set segmentationLUTO(segmentationLUTO) {\r\n this._segmentationLUTO = segmentationLUTO;\r\n }\r\n\r\n get segmentationLUTO() {\r\n return this._segmentationLUTO;\r\n }\r\n\r\n // DEPRECATED FUNCTION\r\n\r\n /**\r\n * @deprecated for core.utils.value\r\n *\r\n * Get voxel value.\r\n *\r\n * @param {*} stack\r\n * @param {*} coordinate\r\n *\r\n * @return {*}\r\n */\r\n static value(stack, coordinate) {\r\n window.console.warn(\r\n `models.stack.value is deprecated.\r\n Please use core.utils.value instead.`\r\n );\r\n return CoreUtils.value(stack, coordinate);\r\n }\r\n\r\n /**\r\n * @deprecated for core.utils.rescaleSlopeIntercept\r\n *\r\n * Apply slope/intercept to a value.\r\n *\r\n * @param {*} value\r\n * @param {*} slope\r\n * @param {*} intercept\r\n *\r\n * @return {*}\r\n */\r\n static valueRescaleSlopeIntercept(value, slope, intercept) {\r\n window.console.warn(\r\n `models.stack.valueRescaleSlopeIntercept is deprecated.\r\n Please use core.utils.rescaleSlopeIntercept instead.`\r\n );\r\n return CoreUtils.rescaleSlopeIntercept(value, slope, intercept);\r\n }\r\n\r\n /**\r\n * @deprecated for core.utils.worldToData\r\n *\r\n * Transform coordinates from world coordinate to data\r\n *\r\n * @param {*} stack\r\n * @param {*} worldCoordinates\r\n *\r\n * @return {*}\r\n */\r\n static worldToData(stack, worldCoordinates) {\r\n window.console.warn(\r\n `models.stack.worldToData is deprecated.\r\n Please use core.utils.worldToData instead.`\r\n );\r\n\r\n return CoreUtils.worldToData(stack._lps2IJK, worldCoordinates);\r\n }\r\n}\r\n","/**\r\n * @module models/voxel\r\n */\r\n\r\nexport default class ModelsVoxel {\r\n constructor() {\r\n this._id = -1;\r\n this._worldCoordinates = null;\r\n this._dataCoordinates = null;\r\n this._screenCoordinates = null;\r\n this._value = null;\r\n }\r\n\r\n set worldCoordinates(worldCoordinates) {\r\n this._worldCoordinates = worldCoordinates;\r\n }\r\n\r\n get worldCoordinates() {\r\n return this._worldCoordinates;\r\n }\r\n\r\n set dataCoordinates(dataCoordinates) {\r\n this._dataCoordinates = dataCoordinates;\r\n }\r\n\r\n get dataCoordinates() {\r\n return this._dataCoordinates;\r\n }\r\n\r\n set screenCoordinates(screenCoordinates) {\r\n this._screenCoordinates = screenCoordinates;\r\n }\r\n\r\n get screenCoordinates() {\r\n return this._screenCoordinates;\r\n }\r\n\r\n set value(value) {\r\n this._value = value;\r\n }\r\n\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n set id(id) {\r\n this._id = id;\r\n }\r\n\r\n get id() {\r\n return this._id;\r\n }\r\n}\r\n","/** * Imports ***/\r\nimport UtilsCore from '../core/core.utils';\r\nimport ParsersVolume from './parsers.volume';\r\n\r\nimport * as OpenJPEG from 'OpenJPEG.js/dist/openJPEG-DynamicMemory-browser.js';\r\n\r\nimport {RLEDecoder} from '../decoders/decoders.rle';\r\n\r\nlet DicomParser = require('dicom-parser');\r\nlet Jpeg = require('jpeg-lossless-decoder-js');\r\nlet JpegBaseline = require('../../external/scripts/jpeg');\r\nlet Jpx = require('../../external/scripts/jpx');\r\nlet openJPEG; // for one time initialization\r\n\r\n/**\r\n * Dicom parser is a combination of utilities to get a VJS image from dicom files.\r\n *scripts\r\n * Relies on dcmjs, jquery, HTML5 fetch API, HTML5 promise API.\r\n *\r\n * image-JPEG2000 (jpx) is still in use, because Cornerstone does it and may have identified some edge corners.\r\n * Ref:\r\n * https://github.com/cornerstonejs/cornerstoneWADOImageLoader/blob/master/docs/Codecs.md\r\n * https://github.com/cornerstonejs/cornerstoneWADOImageLoader/blob/a9b408f5562bde5543fc6986bd23fbac9d676562/src/shared/decoders/decodeJPEG2000.js#L127-L134\r\n *\r\n * @module parsers/dicom\r\n *\r\n * @param arrayBuffer {arraybuffer} - List of files to be parsed. It is urls from which\r\n * VJS.parsers.dicom can pull the data from.\r\n */\r\nexport default class ParsersDicom extends ParsersVolume {\r\n constructor(data, id) {\r\n console.log('parse image', data);\r\n super();\r\n\r\n this._id = id;\r\n\r\n this._arrayBuffer = data.buffer;\r\n\r\n let byteArray = new Uint8Array(this._arrayBuffer);\r\n\r\n // catch error\r\n // throw error if any!\r\n this._dataSet = null;\r\n\r\n try {\r\n this._dataSet = DicomParser.parseDicom(byteArray);\r\n // const parser = new Jpx();\r\n // console.log('jpx parser', parser);\r\n // this._dataSet = parser.parse(byteArray);\r\n } catch (e) {\r\n console.log(e);\r\n const error = new Error('parsers.dicom could not parse the file');\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Series instance UID (0020,000e)\r\n *\r\n * @return {String}\r\n */\r\n seriesInstanceUID() {\r\n return this._dataSet.string('x0020000e');\r\n }\r\n\r\n /**\r\n * Study instance UID (0020,000d)\r\n *\r\n * @return {String}\r\n */\r\n studyInstanceUID() {\r\n return this._dataSet.string('x0020000d');\r\n }\r\n\r\n /**\r\n * Get modality (0008,0060)\r\n *\r\n * @return {String}\r\n */\r\n modality() {\r\n return this._dataSet.string('x00080060');\r\n }\r\n\r\n /**\r\n * Segmentation type (0062,0001)\r\n *\r\n * @return {String}\r\n */\r\n segmentationType() {\r\n return this._dataSet.string('x00620001');\r\n }\r\n\r\n /**\r\n * Segmentation segments\r\n * -> Sequence of segments (0062,0002)\r\n * -> Recommended Display CIELab\r\n * -> Segmentation Code\r\n * -> Segment Number (0062,0004)\r\n * -> Segment Label (0062,0005)\r\n * -> Algorithm Type (0062,0008)\r\n *\r\n * @return {*}\r\n */\r\n segmentationSegments() {\r\n let segmentationSegments = [];\r\n let segmentSequence = this._dataSet.elements.x00620002;\r\n\r\n if (!segmentSequence) {\r\n return segmentationSegments;\r\n }\r\n\r\n for (let i = 0; i < segmentSequence.items.length; i++) {\r\n let recommendedDisplayCIELab = this._recommendedDisplayCIELab(segmentSequence.items[i]);\r\n let segmentationCode = this._segmentationCode(segmentSequence.items[i]);\r\n let segmentNumber = segmentSequence.items[i].dataSet.uint16('x00620004');\r\n let segmentLabel = segmentSequence.items[i].dataSet.string('x00620005');\r\n let segmentAlgorithmType = segmentSequence.items[i].dataSet.string('x00620008');\r\n\r\n segmentationSegments.push({\r\n recommendedDisplayCIELab,\r\n segmentationCodeDesignator: segmentationCode['segmentationCodeDesignator'],\r\n segmentationCodeValue: segmentationCode['segmentationCodeValue'],\r\n segmentationCodeMeaning: segmentationCode['segmentationCodeMeaning'],\r\n segmentNumber,\r\n segmentLabel,\r\n segmentAlgorithmType,\r\n });\r\n }\r\n\r\n return segmentationSegments;\r\n }\r\n\r\n /**\r\n * Segmentation code\r\n * -> Code designator (0008,0102)\r\n * -> Code value (0008,0200)\r\n * -> Code Meaning Type (0008,0104)\r\n *\r\n * @param {*} segment\r\n *\r\n * @return {*}\r\n */\r\n _segmentationCode(segment) {\r\n let segmentationCodeDesignator = 'unknown';\r\n let segmentationCodeValue = 'unknown';\r\n let segmentationCodeMeaning = 'unknown';\r\n let element = segment.dataSet.elements.x00082218;\r\n\r\n if (element && element.items && element.items.length > 0) {\r\n segmentationCodeDesignator = element.items[0].dataSet.string('x00080102');\r\n segmentationCodeValue = element.items[0].dataSet.string('x00080100');\r\n segmentationCodeMeaning = element.items[0].dataSet.string('x00080104');\r\n }\r\n\r\n return {\r\n segmentationCodeDesignator,\r\n segmentationCodeValue,\r\n segmentationCodeMeaning,\r\n };\r\n }\r\n\r\n /**\r\n * Recommended display CIELab\r\n *\r\n * @param {*} segment\r\n *\r\n * @return {*}\r\n */\r\n _recommendedDisplayCIELab(segment) {\r\n if (!segment.dataSet.elements.x0062000d) {\r\n return null;\r\n }\r\n\r\n let offset = segment.dataSet.elements.x0062000d.dataOffset;\r\n let length = segment.dataSet.elements.x0062000d.length;\r\n let byteArray = segment.dataSet.byteArray.slice(offset, offset + length);\r\n\r\n // https://www.dabsoft.ch/dicom/3/C.10.7.1.1/\r\n let CIELabScaled = new Uint16Array(length / 2);\r\n for (let i = 0; i < length / 2; i++) {\r\n CIELabScaled[i] = (byteArray[2 * i + 1] << 8) + byteArray[2 * i];\r\n }\r\n\r\n let CIELabNormalized = [\r\n (CIELabScaled[0] / 65535) * 100,\r\n (CIELabScaled[1] / 65535) * 255 - 128,\r\n (CIELabScaled[2] / 65535) * 255 - 128,\r\n ];\r\n\r\n return CIELabNormalized;\r\n }\r\n\r\n /**\r\n * Raw dataset\r\n *\r\n * @return {*}\r\n */\r\n rawHeader() {\r\n return this._dataSet;\r\n }\r\n\r\n /**\r\n * SOP Instance UID\r\n *\r\n * @param {*} frameIndex\r\n *\r\n * @return {*}\r\n */\r\n sopInstanceUID(frameIndex = 0) {\r\n let sopInstanceUID = this._findStringEverywhere('x2005140f', 'x00080018', frameIndex);\r\n return sopInstanceUID;\r\n }\r\n\r\n /**\r\n * Transfer syntax UID\r\n *\r\n * @return {*}\r\n */\r\n transferSyntaxUID() {\r\n return this._dataSet.string('x00020010');\r\n }\r\n\r\n /**\r\n * Study date\r\n *\r\n * @return {*}\r\n */\r\n studyDate() {\r\n return this._dataSet.string('x00080020');\r\n }\r\n\r\n /**\r\n * Study description\r\n *\r\n * @return {*}\r\n */\r\n studyDescription() {\r\n return this._dataSet.string('x00081030');\r\n }\r\n\r\n /**\r\n * Series date\r\n *\r\n * @return {*}\r\n */\r\n seriesDate() {\r\n return this._dataSet.string('x00080021');\r\n }\r\n\r\n /**\r\n * Series description\r\n *\r\n * @return {*}\r\n */\r\n seriesDescription() {\r\n return this._dataSet.string('x0008103e');\r\n }\r\n\r\n /**\r\n * Patient name\r\n *\r\n * @return {*}\r\n */\r\n patientName() {\r\n return this._dataSet.string('x00100010');\r\n }\r\n\r\n /**\r\n * Patient ID\r\n *\r\n * @return {*}\r\n */\r\n patientID() {\r\n return this._dataSet.string('x00100020');\r\n }\r\n\r\n /**\r\n * Patient birthdate\r\n *\r\n * @return {*}\r\n */\r\n patientBirthdate() {\r\n return this._dataSet.string('x00100030');\r\n }\r\n\r\n /**\r\n * Patient sex\r\n *\r\n * @return {*}\r\n */\r\n patientSex() {\r\n return this._dataSet.string('x00100040');\r\n }\r\n\r\n /**\r\n * Patient age\r\n *\r\n * @return {*}\r\n */\r\n patientAge() {\r\n return this._dataSet.string('x00101010');\r\n }\r\n\r\n /**\r\n * Photometric interpretation\r\n *\r\n * @return {*}\r\n */\r\n photometricInterpretation() {\r\n return this._dataSet.string('x00280004');\r\n }\r\n\r\n planarConfiguration() {\r\n let planarConfiguration = this._dataSet.uint16('x00280006');\r\n\r\n if (typeof planarConfiguration === 'undefined') {\r\n planarConfiguration = null;\r\n }\r\n\r\n return planarConfiguration;\r\n }\r\n\r\n samplesPerPixel() {\r\n return this._dataSet.uint16('x00280002');\r\n }\r\n\r\n numberOfFrames() {\r\n let numberOfFrames = this._dataSet.intString('x00280008');\r\n\r\n // need something smarter!\r\n if (typeof numberOfFrames === 'undefined') {\r\n numberOfFrames = null;\r\n }\r\n\r\n return numberOfFrames;\r\n }\r\n\r\n numberOfChannels() {\r\n let numberOfChannels = 1;\r\n let photometricInterpretation = this.photometricInterpretation();\r\n\r\n if (\r\n !(\r\n photometricInterpretation !== 'RGB' &&\r\n photometricInterpretation !== 'PALETTE COLOR' &&\r\n photometricInterpretation !== 'YBR_FULL' &&\r\n photometricInterpretation !== 'YBR_FULL_422' &&\r\n photometricInterpretation !== 'YBR_PARTIAL_422' &&\r\n photometricInterpretation !== 'YBR_PARTIAL_420' &&\r\n photometricInterpretation !== 'YBR_RCT'\r\n )\r\n ) {\r\n numberOfChannels = 3;\r\n }\r\n\r\n // make sure we return a number! (not a string!)\r\n return numberOfChannels;\r\n }\r\n\r\n invert() {\r\n let photometricInterpretation = this.photometricInterpretation();\r\n\r\n return photometricInterpretation === 'MONOCHROME1' ? true : false;\r\n }\r\n\r\n imageOrientation(frameIndex = 0) {\r\n // expect frame index to start at 0!\r\n let imageOrientation = this._findStringEverywhere('x00209116', 'x00200037', frameIndex);\r\n\r\n // format image orientation ('1\\0\\0\\0\\1\\0') to array containing 6 numbers\r\n if (imageOrientation) {\r\n // make sure we return a number! (not a string!)\r\n // might not need to split (floatString + index)\r\n imageOrientation = imageOrientation.split('\\\\').map(UtilsCore.stringToNumber);\r\n }\r\n\r\n return imageOrientation;\r\n }\r\n\r\n referencedSegmentNumber(frameIndex = 0) {\r\n let referencedSegmentNumber = -1;\r\n let referencedSegmentNumberElement = this._findInGroupSequence(\r\n 'x52009230',\r\n 'x0062000a',\r\n frameIndex,\r\n );\r\n\r\n if (referencedSegmentNumberElement !== null) {\r\n referencedSegmentNumber = referencedSegmentNumberElement.uint16('x0062000b');\r\n }\r\n\r\n return referencedSegmentNumber;\r\n }\r\n\r\n pixelAspectRatio() {\r\n let pixelAspectRatio = [\r\n this._dataSet.intString('x00280034', 0),\r\n this._dataSet.intString('x00280034', 1),\r\n ];\r\n\r\n // need something smarter!\r\n if (typeof pixelAspectRatio[0] === 'undefined') {\r\n pixelAspectRatio = null;\r\n }\r\n\r\n // make sure we return a number! (not a string!)\r\n return pixelAspectRatio;\r\n }\r\n\r\n imagePosition(frameIndex = 0) {\r\n let imagePosition = this._findStringEverywhere('x00209113', 'x00200032', frameIndex);\r\n\r\n // format image orientation ('1\\0\\0\\0\\1\\0') to array containing 6 numbers\r\n if (imagePosition) {\r\n // make sure we return a number! (not a string!)\r\n imagePosition = imagePosition.split('\\\\').map(UtilsCore.stringToNumber);\r\n }\r\n\r\n return imagePosition;\r\n }\r\n\r\n instanceNumber(frameIndex = 0) {\r\n let instanceNumber = null;\r\n // first look for frame!\r\n // per frame functionnal group sequence\r\n let perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230;\r\n\r\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\r\n if (perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x2005140f) {\r\n let planeOrientationSequence =\r\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x2005140f.items[0]\r\n .dataSet;\r\n instanceNumber = planeOrientationSequence.intString('x00200013');\r\n } else {\r\n instanceNumber = this._dataSet.intString('x00200013');\r\n\r\n if (typeof instanceNumber === 'undefined') {\r\n instanceNumber = null;\r\n }\r\n }\r\n } else {\r\n // should we default to undefined??\r\n // default orientation\r\n instanceNumber = this._dataSet.intString('x00200013');\r\n\r\n if (typeof instanceNumber === 'undefined') {\r\n instanceNumber = null;\r\n }\r\n }\r\n\r\n return instanceNumber;\r\n }\r\n\r\n pixelSpacing(frameIndex = 0) {\r\n // expect frame index to start at 0!\r\n let pixelSpacing = this._findStringEverywhere('x00289110', 'x00280030', frameIndex);\r\n\r\n if (pixelSpacing === null) {\r\n pixelSpacing = this._dataSet.string('x00181164');\r\n\r\n if (typeof pixelSpacing === 'undefined') {\r\n pixelSpacing = null;\r\n }\r\n }\r\n\r\n if (pixelSpacing) {\r\n const splittedSpacing = pixelSpacing.split('\\\\');\r\n if (splittedSpacing.length !== 2) {\r\n console.error(`DICOM spacing format is not supported (could not split string on \"\\\\\"): ${pixelSpacing}`);\r\n pixelSpacing = null;\r\n } else {\r\n pixelSpacing = splittedSpacing.map(UtilsCore.stringToNumber);\r\n }\r\n }\r\n\r\n return pixelSpacing;\r\n }\r\n\r\n ultrasoundRegions(frameIndex = 0) {\r\n const sequence = this._dataSet.elements['x00186011'];\r\n\r\n if (!sequence || !sequence.items) {\r\n return [];\r\n }\r\n\r\n const ultrasoundRegions = [];\r\n\r\n sequence.items.forEach(item => {\r\n ultrasoundRegions.push({\r\n x0: item.dataSet.uint32('x00186018'),\r\n y0: item.dataSet.uint32('x0018601a'),\r\n x1: item.dataSet.uint32('x0018601c'),\r\n y1: item.dataSet.uint32('x0018601e'),\r\n axisX: item.dataSet.int32('x00186020') || null, // optional\r\n axisY: item.dataSet.int32('x00186022') || null, // optional\r\n unitsX: this._getUnitsName(item.dataSet.uint16('x00186024')),\r\n unitsY: this._getUnitsName(item.dataSet.uint16('x00186026')),\r\n deltaX: item.dataSet.double('x0018602c'),\r\n deltaY: item.dataSet.double('x0018602e'),\r\n });\r\n });\r\n\r\n return ultrasoundRegions;\r\n }\r\n\r\n frameTime(frameIndex = 0) {\r\n let frameIncrementPointer = this._dataSet.uint16('x00280009', 1);\r\n let frameRate = this._dataSet.intString('x00082144');\r\n let frameTime;\r\n\r\n if (typeof frameIncrementPointer === 'number') {\r\n frameIncrementPointer = frameIncrementPointer.toString(16);\r\n frameTime = this._dataSet.floatString('x0018' + frameIncrementPointer);\r\n }\r\n\r\n if (typeof frameTime === 'undefined' && typeof frameRate === 'number') {\r\n frameTime = 1000 / frameRate;\r\n }\r\n\r\n if (typeof frameTime === 'undefined') {\r\n frameTime = null;\r\n }\r\n\r\n return frameTime;\r\n }\r\n\r\n rows(frameIndex = 0) {\r\n let rows = this._dataSet.uint16('x00280010');\r\n\r\n if (typeof rows === 'undefined') {\r\n rows = null;\r\n // print warning at least...\r\n }\r\n\r\n return rows;\r\n }\r\n\r\n columns(frameIndex = 0) {\r\n let columns = this._dataSet.uint16('x00280011');\r\n\r\n if (typeof columns === 'undefined') {\r\n columns = null;\r\n // print warning at least...\r\n }\r\n\r\n return columns;\r\n }\r\n\r\n pixelType(frameIndex = 0) {\r\n // 0 integer, 1 float\r\n // dicom only support integers\r\n return 0;\r\n }\r\n\r\n pixelRepresentation(frameIndex = 0) {\r\n let pixelRepresentation = this._dataSet.uint16('x00280103');\r\n return pixelRepresentation;\r\n }\r\n\r\n pixelPaddingValue(frameIndex = 0) {\r\n let padding = this._dataSet.int16('x00280120');\r\n\r\n if (typeof padding === 'undefined') {\r\n padding = null;\r\n }\r\n\r\n return padding;\r\n }\r\n\r\n bitsAllocated(frameIndex = 0) {\r\n // expect frame index to start at 0!\r\n let bitsAllocated = this._dataSet.uint16('x00280100');\r\n return bitsAllocated;\r\n }\r\n\r\n highBit(frameIndex = 0) {\r\n // expect frame index to start at 0!\r\n let highBit = this._dataSet.uint16('x00280102');\r\n return highBit;\r\n }\r\n\r\n rescaleIntercept(frameIndex = 0) {\r\n return this._findFloatStringInFrameGroupSequence('x00289145', 'x00281052', frameIndex);\r\n }\r\n\r\n rescaleSlope(frameIndex = 0) {\r\n return this._findFloatStringInFrameGroupSequence('x00289145', 'x00281053', frameIndex);\r\n }\r\n\r\n windowCenter(frameIndex = 0) {\r\n return this._findFloatStringInFrameGroupSequence('x00289132', 'x00281050', frameIndex);\r\n }\r\n\r\n windowWidth(frameIndex = 0) {\r\n return this._findFloatStringInFrameGroupSequence('x00289132', 'x00281051', frameIndex);\r\n }\r\n\r\n sliceThickness(frameIndex = 0) {\r\n return this._findFloatStringInFrameGroupSequence('x00289110', 'x00180050', frameIndex);\r\n }\r\n\r\n spacingBetweenSlices(frameIndex = 0) {\r\n let spacing = this._dataSet.floatString('x00180088');\r\n\r\n if (typeof spacing === 'undefined') {\r\n spacing = null;\r\n }\r\n\r\n return spacing;\r\n }\r\n\r\n dimensionIndexValues(frameIndex = 0) {\r\n let dimensionIndexValues = null;\r\n\r\n // try to get it from enhanced MR images\r\n // per-frame functionnal group sequence\r\n let perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230;\r\n\r\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\r\n let frameContentSequence =\r\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x00209111;\r\n if (frameContentSequence !== undefined && frameContentSequence !== null) {\r\n frameContentSequence = frameContentSequence.items[0].dataSet;\r\n let dimensionIndexValuesElt = frameContentSequence.elements.x00209157;\r\n if (dimensionIndexValuesElt !== undefined && dimensionIndexValuesElt !== null) {\r\n // /4 because UL\r\n let nbValues = dimensionIndexValuesElt.length / 4;\r\n dimensionIndexValues = [];\r\n\r\n for (let i = 0; i < nbValues; i++) {\r\n dimensionIndexValues.push(frameContentSequence.uint32('x00209157', i));\r\n }\r\n }\r\n }\r\n }\r\n\r\n return dimensionIndexValues;\r\n }\r\n\r\n inStackPositionNumber(frameIndex = 0) {\r\n let inStackPositionNumber = null;\r\n\r\n // try to get it from enhanced MR images\r\n // per-frame functionnal group sequence\r\n let perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230;\r\n\r\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\r\n // NOT A PHILIPS TRICK!\r\n let philipsPrivateSequence =\r\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x00209111.items[0]\r\n .dataSet;\r\n inStackPositionNumber = philipsPrivateSequence.uint32('x00209057');\r\n } else {\r\n inStackPositionNumber = null;\r\n }\r\n\r\n return inStackPositionNumber;\r\n }\r\n\r\n stackID(frameIndex = 0) {\r\n let stackID = null;\r\n\r\n // try to get it from enhanced MR images\r\n // per-frame functionnal group sequence\r\n let perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230;\r\n\r\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\r\n // NOT A PHILIPS TRICK!\r\n let philipsPrivateSequence =\r\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x00209111.items[0]\r\n .dataSet;\r\n stackID = philipsPrivateSequence.intString('x00209056');\r\n } else {\r\n stackID = null;\r\n }\r\n\r\n return stackID;\r\n }\r\n\r\n extractPixelData(frameIndex = 0) {\r\n // decompress\r\n let decompressedData = this._decodePixelData(frameIndex);\r\n\r\n let numberOfChannels = this.numberOfChannels();\r\n\r\n if (numberOfChannels > 1) {\r\n return this._convertColorSpace(decompressedData);\r\n } else {\r\n return decompressedData;\r\n }\r\n }\r\n\r\n //\r\n // private methods\r\n //\r\n\r\n _findInGroupSequence(sequence, subsequence, index) {\r\n let functionalGroupSequence = this._dataSet.elements[sequence];\r\n\r\n if (typeof functionalGroupSequence !== 'undefined') {\r\n let inSequence = functionalGroupSequence.items[index].dataSet.elements[subsequence];\r\n\r\n if (typeof inSequence !== 'undefined') {\r\n return inSequence.items[0].dataSet;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _findStringInGroupSequence(sequence, subsequence, tag, index) {\r\n // index = 0 if shared!!!\r\n let dataSet = this._findInGroupSequence(sequence, subsequence, index);\r\n\r\n if (dataSet !== null) {\r\n return dataSet.string(tag);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _findStringInFrameGroupSequence(subsequence, tag, index) {\r\n return (\r\n this._findStringInGroupSequence('x52009229', subsequence, tag, 0) ||\r\n this._findStringInGroupSequence('x52009230', subsequence, tag, index)\r\n );\r\n }\r\n\r\n _findStringEverywhere(subsequence, tag, index) {\r\n let targetString = this._findStringInFrameGroupSequence(subsequence, tag, index);\r\n // PET MODULE\r\n if (targetString === null) {\r\n const petModule = 'x00540022';\r\n targetString = this._findStringInSequence(petModule, tag);\r\n }\r\n\r\n if (targetString === null) {\r\n targetString = this._dataSet.string(tag);\r\n }\r\n\r\n if (typeof targetString === 'undefined') {\r\n targetString = null;\r\n }\r\n\r\n return targetString;\r\n }\r\n\r\n _findStringInSequence(sequenceTag, tag, index) {\r\n const sequence = this._dataSet.elements[sequenceTag];\r\n\r\n let targetString;\r\n if (sequence) {\r\n targetString = sequence.items[0].dataSet.string(tag);\r\n }\r\n\r\n if (typeof targetString === 'undefined') {\r\n targetString = null;\r\n }\r\n\r\n return targetString;\r\n }\r\n\r\n _findFloatStringInGroupSequence(sequence, subsequence, tag, index) {\r\n let dataInGroupSequence = this._dataSet.floatString(tag);\r\n\r\n // try to get it from enhanced MR images\r\n // per-frame functionnal group\r\n if (typeof dataInGroupSequence === 'undefined') {\r\n dataInGroupSequence = this._findInGroupSequence(sequence, subsequence, index);\r\n\r\n if (dataInGroupSequence !== null) {\r\n return dataInGroupSequence.floatString(tag);\r\n }\r\n }\r\n\r\n return dataInGroupSequence;\r\n }\r\n\r\n _findFloatStringInFrameGroupSequence(subsequence, tag, index) {\r\n return (\r\n this._findFloatStringInGroupSequence('x52009229', subsequence, tag, 0) ||\r\n this._findFloatStringInGroupSequence('x52009230', subsequence, tag, index)\r\n );\r\n }\r\n\r\n _decodePixelData(frameIndex = 0) {\r\n // if compressed..?\r\n let transferSyntaxUID = this.transferSyntaxUID();\r\n console.log('transfer syntax uid', transferSyntaxUID);\r\n // find compression scheme\r\n if (\r\n transferSyntaxUID === '1.2.840.10008.1.2.4.90' ||\r\n // JPEG 2000 Lossless\r\n transferSyntaxUID === '1.2.840.10008.1.2.4.91'\r\n ) {\r\n // JPEG 2000 Lossy\r\n return this._decodeJ2K(frameIndex);\r\n } else if (\r\n transferSyntaxUID === '1.2.840.10008.1.2.5'\r\n // decodeRLE\r\n ) {\r\n return this._decodeRLE(frameIndex);\r\n } else if (\r\n transferSyntaxUID === '1.2.840.10008.1.2.4.57' ||\r\n // JPEG Lossless, Nonhierarchical (Processes 14)\r\n transferSyntaxUID === '1.2.840.10008.1.2.4.70'\r\n ) {\r\n // JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1])\r\n return this._decodeJPEGLossless(frameIndex);\r\n } else if (\r\n transferSyntaxUID === '1.2.840.10008.1.2.4.50' ||\r\n // JPEG Baseline lossy process 1 (8 bit)\r\n transferSyntaxUID === '1.2.840.10008.1.2.4.51'\r\n ) {\r\n // JPEG Baseline lossy process 2 & 4 (12 bit)\r\n return this._decodeJPEGBaseline(frameIndex);\r\n } else if (\r\n transferSyntaxUID === '1.2.840.10008.1.2' ||\r\n // Implicit VR Little Endian\r\n transferSyntaxUID === '1.2.840.10008.1.2.1'\r\n ) {\r\n // Explicit VR Little Endian\r\n return this._decodeUncompressed(frameIndex);\r\n } else if (transferSyntaxUID === '1.2.840.10008.1.2.2') {\r\n // Explicit VR Big Endian\r\n let frame = this._decodeUncompressed(frameIndex);\r\n // and sawp it!\r\n return this._swapFrame(frame);\r\n } else {\r\n throw {\r\n error: `no decoder for transfer syntax ${transferSyntaxUID}`,\r\n };\r\n }\r\n }\r\n\r\n // github.com/chafey/cornerstoneWADOImageLoader/blob/master/src/imageLoader/wadouri/getEncapsulatedImageFrame.js\r\n framesAreFragmented() {\r\n const numberOfFrames = this._dataSet.intString('x00280008');\r\n const pixelDataElement = this._dataSet.elements.x7fe00010;\r\n\r\n return numberOfFrames !== pixelDataElement.fragments.length;\r\n }\r\n\r\n getEncapsulatedImageFrame(frameIndex) {\r\n if (\r\n this._dataSet.elements.x7fe00010 &&\r\n this._dataSet.elements.x7fe00010.basicOffsetTable.length\r\n ) {\r\n // Basic Offset Table is not empty\r\n return DicomParser.readEncapsulatedImageFrame(\r\n this._dataSet,\r\n this._dataSet.elements.x7fe00010,\r\n frameIndex,\r\n );\r\n }\r\n\r\n if (this.framesAreFragmented()) {\r\n // Basic Offset Table is empty\r\n return DicomParser.readEncapsulatedImageFrame(\r\n this._dataSet,\r\n this._dataSet.elements.x7fe00010,\r\n frameIndex,\r\n DicomParser.createJPEGBasicOffsetTable(this._dataSet, this._dataSet.elements.x7fe00010),\r\n );\r\n }\r\n\r\n return DicomParser.readEncapsulatedPixelDataFromFragments(\r\n this._dataSet,\r\n this._dataSet.elements.x7fe00010,\r\n frameIndex,\r\n );\r\n }\r\n\r\n // used if OpenJPEG library isn't loaded (OHIF/image-JPEG2000 isn't supported and can't parse some images)\r\n _decodeJpx(frameIndex = 0) {\r\n const jpxImage = new Jpx();\r\n // https://github.com/OHIF/image-JPEG2000/issues/6\r\n // It currently returns either Int16 or Uint16 based on whether the codestream is signed or not.\r\n jpxImage.parse(this.getEncapsulatedImageFrame(frameIndex));\r\n\r\n if (jpxImage.componentsCount !== 1) {\r\n throw new Error(\r\n 'JPEG2000 decoder returned a componentCount of ${componentsCount}, when 1 is expected',\r\n );\r\n }\r\n\r\n if (jpxImage.tiles.length !== 1) {\r\n throw new Error('JPEG2000 decoder returned a tileCount of ${tileCount}, when 1 is expected');\r\n }\r\n\r\n return jpxImage.tiles[0].items;\r\n }\r\n\r\n _decodeOpenJPEG(frameIndex = 0) {\r\n const encodedPixelData = this.getEncapsulatedImageFrame(frameIndex);\r\n const bytesPerPixel = this.bitsAllocated(frameIndex) <= 8 ? 1 : 2;\r\n const signed = this.pixelRepresentation(frameIndex) === 1;\r\n const dataPtr = openJPEG._malloc(encodedPixelData.length);\r\n\r\n openJPEG.writeArrayToMemory(encodedPixelData, dataPtr);\r\n\r\n // create param outpout\r\n const imagePtrPtr = openJPEG._malloc(4);\r\n const imageSizePtr = openJPEG._malloc(4);\r\n const imageSizeXPtr = openJPEG._malloc(4);\r\n const imageSizeYPtr = openJPEG._malloc(4);\r\n const imageSizeCompPtr = openJPEG._malloc(4);\r\n const ret = openJPEG.ccall(\r\n 'jp2_decode',\r\n 'number',\r\n ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\r\n [\r\n dataPtr,\r\n encodedPixelData.length,\r\n imagePtrPtr,\r\n imageSizePtr,\r\n imageSizeXPtr,\r\n imageSizeYPtr,\r\n imageSizeCompPtr,\r\n ],\r\n );\r\n const imagePtr = openJPEG.getValue(imagePtrPtr, '*');\r\n\r\n if (ret !== 0) {\r\n console.log('[opj_decode] decoding failed!');\r\n openJPEG._free(dataPtr);\r\n openJPEG._free(imagePtr);\r\n openJPEG._free(imageSizeXPtr);\r\n openJPEG._free(imageSizeYPtr);\r\n openJPEG._free(imageSizePtr);\r\n openJPEG._free(imageSizeCompPtr);\r\n\r\n return;\r\n }\r\n\r\n // Copy the data from the EMSCRIPTEN heap into the correct type array\r\n const length =\r\n openJPEG.getValue(imageSizeXPtr, 'i32') *\r\n openJPEG.getValue(imageSizeYPtr, 'i32') *\r\n openJPEG.getValue(imageSizeCompPtr, 'i32');\r\n const src32 = new Int32Array(openJPEG.HEAP32.buffer, imagePtr, length);\r\n let pixelData;\r\n\r\n if (bytesPerPixel === 1) {\r\n if (Uint8Array.from) {\r\n pixelData = Uint8Array.from(src32);\r\n } else {\r\n pixelData = new Uint8Array(length);\r\n for (let i = 0; i < length; i++) {\r\n pixelData[i] = src32[i];\r\n }\r\n }\r\n } else if (signed) {\r\n if (Int16Array.from) {\r\n pixelData = Int16Array.from(src32);\r\n } else {\r\n pixelData = new Int16Array(length);\r\n for (let i = 0; i < length; i++) {\r\n pixelData[i] = src32[i];\r\n }\r\n }\r\n } else if (Uint16Array.from) {\r\n pixelData = Uint16Array.from(src32);\r\n } else {\r\n pixelData = new Uint16Array(length);\r\n for (let i = 0; i < length; i++) {\r\n pixelData[i] = src32[i];\r\n }\r\n }\r\n\r\n openJPEG._free(dataPtr);\r\n openJPEG._free(imagePtrPtr);\r\n openJPEG._free(imagePtr);\r\n openJPEG._free(imageSizePtr);\r\n openJPEG._free(imageSizeXPtr);\r\n openJPEG._free(imageSizeYPtr);\r\n openJPEG._free(imageSizeCompPtr);\r\n\r\n return pixelData;\r\n }\r\n\r\n // from cornerstone\r\n _decodeJ2K(frameIndex = 0) {\r\n if (typeof OpenJPEG === 'undefined') {\r\n // OpenJPEG decoder not loaded\r\n return this._decodeJpx(frameIndex);\r\n }\r\n\r\n if (!openJPEG) {\r\n openJPEG = OpenJPEG();\r\n if (!openJPEG || !openJPEG._jp2_decode) {\r\n // OpenJPEG failed to initialize\r\n return this._decodeJpx(frameIndex);\r\n }\r\n }\r\n\r\n return this._decodeOpenJPEG(frameIndex);\r\n }\r\n\r\n _decodeRLE(frameIndex = 0) {\r\n const bitsAllocated = this.bitsAllocated(frameIndex);\r\n const planarConfiguration = this.planarConfiguration();\r\n const columns = this.columns();\r\n const rows = this.rows();\r\n const samplesPerPixel = this.samplesPerPixel(frameIndex);\r\n const pixelRepresentation = this.pixelRepresentation(frameIndex);\r\n\r\n // format data for the RLE decoder\r\n const imageFrame = {\r\n pixelRepresentation,\r\n bitsAllocated,\r\n planarConfiguration,\r\n columns,\r\n rows,\r\n samplesPerPixel,\r\n };\r\n\r\n const pixelData = DicomParser.readEncapsulatedPixelDataFromFragments(\r\n this._dataSet,\r\n this._dataSet.elements.x7fe00010,\r\n frameIndex,\r\n );\r\n\r\n const decoded = RLEDecoder(imageFrame, pixelData);\r\n return decoded.pixelData;\r\n }\r\n\r\n // from cornerstone\r\n _decodeJPEGLossless(frameIndex = 0) {\r\n let encodedPixelData = this.getEncapsulatedImageFrame(frameIndex);\r\n let pixelRepresentation = this.pixelRepresentation(frameIndex);\r\n let bitsAllocated = this.bitsAllocated(frameIndex);\r\n let byteOutput = bitsAllocated <= 8 ? 1 : 2;\r\n let decoder = new Jpeg.lossless.Decoder();\r\n let decompressedData = decoder.decode(\r\n encodedPixelData.buffer,\r\n encodedPixelData.byteOffset,\r\n encodedPixelData.length,\r\n byteOutput,\r\n );\r\n\r\n if (pixelRepresentation === 0) {\r\n if (byteOutput === 2) {\r\n return new Uint16Array(decompressedData.buffer);\r\n } else {\r\n // untested!\r\n return new Uint8Array(decompressedData.buffer);\r\n }\r\n } else {\r\n return new Int16Array(decompressedData.buffer);\r\n }\r\n }\r\n\r\n _decodeJPEGBaseline(frameIndex = 0) {\r\n let encodedPixelData = this.getEncapsulatedImageFrame(frameIndex);\r\n let rows = this.rows(frameIndex);\r\n let columns = this.columns(frameIndex);\r\n let bitsAllocated = this.bitsAllocated(frameIndex);\r\n let jpegBaseline = new JpegBaseline();\r\n jpegBaseline.parse(encodedPixelData);\r\n\r\n if (bitsAllocated === 8) {\r\n return jpegBaseline.getData(columns, rows);\r\n } else if (bitsAllocated === 16) {\r\n return jpegBaseline.getData16(columns, rows);\r\n }\r\n }\r\n\r\n _decodeUncompressed(frameIndex = 0) {\r\n let pixelRepresentation = this.pixelRepresentation(frameIndex);\r\n let bitsAllocated = this.bitsAllocated(frameIndex);\r\n let pixelDataElement = this._dataSet.elements.x7fe00010;\r\n let pixelDataOffset = pixelDataElement.dataOffset;\r\n let numberOfChannels = this.numberOfChannels();\r\n let numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels;\r\n let frameOffset = 0;\r\n let buffer = this._dataSet.byteArray.buffer;\r\n\r\n if (pixelRepresentation === 0 && bitsAllocated === 8) {\r\n // unsigned 8 bit\r\n frameOffset = pixelDataOffset + frameIndex * numPixels;\r\n return new Uint8Array(buffer, frameOffset, numPixels);\r\n } else if (pixelRepresentation === 0 && bitsAllocated === 16) {\r\n // unsigned 16 bit\r\n frameOffset = pixelDataOffset + frameIndex * numPixels * 2;\r\n return new Uint16Array(buffer, frameOffset, numPixels);\r\n } else if (pixelRepresentation === 1 && bitsAllocated === 16) {\r\n // signed 16 bit\r\n frameOffset = pixelDataOffset + frameIndex * numPixels * 2;\r\n return new Int16Array(buffer, frameOffset, numPixels);\r\n } else if (pixelRepresentation === 0 && bitsAllocated === 32) {\r\n // unsigned 32 bit\r\n frameOffset = pixelDataOffset + frameIndex * numPixels * 4;\r\n return new Uint32Array(buffer, frameOffset, numPixels);\r\n } else if (pixelRepresentation === 0 && bitsAllocated === 1) {\r\n let newBuffer = new ArrayBuffer(numPixels);\r\n let newArray = new Uint8Array(newBuffer);\r\n\r\n frameOffset = pixelDataOffset + frameIndex * numPixels;\r\n let index = 0;\r\n\r\n let bitStart = frameIndex * numPixels;\r\n let bitEnd = frameIndex * numPixels + numPixels;\r\n\r\n let byteStart = Math.floor(bitStart / 8);\r\n let bitStartOffset = bitStart - byteStart * 8;\r\n let byteEnd = Math.ceil(bitEnd / 8);\r\n\r\n let targetBuffer = new Uint8Array(buffer, pixelDataOffset);\r\n\r\n for (let i = byteStart; i <= byteEnd; i++) {\r\n while (bitStartOffset < 8) {\r\n switch (bitStartOffset) {\r\n case 0:\r\n newArray[index] = targetBuffer[i] & 0x0001;\r\n break;\r\n case 1:\r\n newArray[index] = (targetBuffer[i] >>> 1) & 0x0001;\r\n break;\r\n case 2:\r\n newArray[index] = (targetBuffer[i] >>> 2) & 0x0001;\r\n break;\r\n case 3:\r\n newArray[index] = (targetBuffer[i] >>> 3) & 0x0001;\r\n break;\r\n case 4:\r\n newArray[index] = (targetBuffer[i] >>> 4) & 0x0001;\r\n break;\r\n case 5:\r\n newArray[index] = (targetBuffer[i] >>> 5) & 0x0001;\r\n break;\r\n case 6:\r\n newArray[index] = (targetBuffer[i] >>> 6) & 0x0001;\r\n break;\r\n case 7:\r\n newArray[index] = (targetBuffer[i] >>> 7) & 0x0001;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n bitStartOffset++;\r\n index++;\r\n // if return..\r\n if (index >= numPixels) {\r\n return newArray;\r\n }\r\n }\r\n bitStartOffset = 0;\r\n }\r\n }\r\n }\r\n\r\n _interpretAsRGB(photometricInterpretation) {\r\n const rgbLikeTypes = ['RGB', 'YBR_RCT', 'YBR_ICT', 'YBR_FULL_422'];\r\n\r\n return rgbLikeTypes.indexOf(photometricInterpretation) !== -1;\r\n }\r\n\r\n _convertColorSpace(uncompressedData) {\r\n let rgbData = null;\r\n let photometricInterpretation = this.photometricInterpretation();\r\n let planarConfiguration = this.planarConfiguration();\r\n\r\n const interpretAsRGB = this._interpretAsRGB(photometricInterpretation);\r\n if (interpretAsRGB && planarConfiguration === 0) {\r\n // ALL GOOD, ALREADY ORDERED\r\n // planar or non planar planarConfiguration\r\n rgbData = uncompressedData;\r\n } else if (interpretAsRGB && planarConfiguration === 1) {\r\n if (uncompressedData instanceof Int8Array) {\r\n rgbData = new Int8Array(uncompressedData.length);\r\n } else if (uncompressedData instanceof Uint8Array) {\r\n rgbData = new Uint8Array(uncompressedData.length);\r\n } else if (uncompressedData instanceof Int16Array) {\r\n rgbData = new Int16Array(uncompressedData.length);\r\n } else if (uncompressedData instanceof Uint16Array) {\r\n rgbData = new Uint16Array(uncompressedData.length);\r\n } else {\r\n const error = new Error(`unsuported typed array: ${uncompressedData}`);\r\n throw error;\r\n }\r\n\r\n let numPixels = uncompressedData.length / 3;\r\n let rgbaIndex = 0;\r\n let rIndex = 0;\r\n let gIndex = numPixels;\r\n let bIndex = numPixels * 2;\r\n for (let i = 0; i < numPixels; i++) {\r\n rgbData[rgbaIndex++] = uncompressedData[rIndex++]; // red\r\n rgbData[rgbaIndex++] = uncompressedData[gIndex++]; // green\r\n rgbData[rgbaIndex++] = uncompressedData[bIndex++]; // blue\r\n }\r\n } else if (photometricInterpretation === 'YBR_FULL') {\r\n if (uncompressedData instanceof Int8Array) {\r\n rgbData = new Int8Array(uncompressedData.length);\r\n } else if (uncompressedData instanceof Uint8Array) {\r\n rgbData = new Uint8Array(uncompressedData.length);\r\n } else if (uncompressedData instanceof Int16Array) {\r\n rgbData = new Int16Array(uncompressedData.length);\r\n } else if (uncompressedData instanceof Uint16Array) {\r\n rgbData = new Uint16Array(uncompressedData.length);\r\n } else {\r\n const error = new Error(`unsuported typed array: ${uncompressedData}`);\r\n throw error;\r\n }\r\n\r\n // https://github.com/chafey/cornerstoneWADOImageLoader/blob/master/src/decodeYBRFull.js\r\n let nPixels = uncompressedData.length / 3;\r\n let ybrIndex = 0;\r\n let rgbaIndex = 0;\r\n for (let i = 0; i < nPixels; i++) {\r\n let y = uncompressedData[ybrIndex++];\r\n let cb = uncompressedData[ybrIndex++];\r\n let cr = uncompressedData[ybrIndex++];\r\n rgbData[rgbaIndex++] = y + 1.402 * (cr - 128); // red\r\n rgbData[rgbaIndex++] = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green\r\n rgbData[rgbaIndex++] = y + 1.772 * (cb - 128); // blue\r\n // rgbData[rgbaIndex++] = 255; //alpha\r\n }\r\n } else {\r\n const error = new Error(\r\n `photometric interpolation not supported: ${photometricInterpretation}`,\r\n );\r\n throw error;\r\n }\r\n\r\n return rgbData;\r\n }\r\n\r\n /**\r\n * Swap bytes in frame.\r\n */\r\n _swapFrame(frame) {\r\n // swap bytes ( if 8bits (1byte), nothing to swap)\r\n let bitsAllocated = this.bitsAllocated();\r\n\r\n if (bitsAllocated === 16) {\r\n for (let i = 0; i < frame.length; i++) {\r\n frame[i] = this._swap16(frame[i]);\r\n }\r\n } else if (bitsAllocated === 32) {\r\n for (let i = 0; i < frame.length; i++) {\r\n frame[i] = this._swap32(frame[i]);\r\n }\r\n }\r\n\r\n return frame;\r\n }\r\n\r\n _getUnitsName(value) {\r\n const units = {\r\n 0: 'none',\r\n 1: 'percent',\r\n 2: 'dB',\r\n 3: 'cm',\r\n 4: 'seconds',\r\n 5: 'hertz',\r\n 6: 'dB/seconds',\r\n 7: 'cm/sec',\r\n 8: 'cm2',\r\n 9: 'cm2/sec',\r\n 10: 'cm3',\r\n 11: 'cm3/sec',\r\n 12: 'degrees',\r\n };\r\n\r\n return units.hasOwnProperty(value) ? units[value] : 'none';\r\n }\r\n}\r\n","import Dicom from './parsers.dicom';\r\nimport Mgh from './parsers.mgh';\r\nimport Nifti from './parsers.nifti';\r\nimport Nrrd from './parsers.nrrd';\r\n\r\nexport { Dicom as DicomParser, Mgh as MghParser, Nifti as NiftiParser, Nrrd as NrrdParser };\r\n","/** * Imports ***/\r\nimport ParsersVolume from './parsers.volume';\r\n\r\nimport { Vector3 } from 'three/src/math/Vector3';\r\n\r\n/**\r\n * @module parsers/mgh\r\n */\r\nexport default class ParsersMgh extends ParsersVolume {\r\n constructor(data, id) {\r\n super();\r\n\r\n /**\r\n * @member\r\n * @type {arraybuffer}\r\n */\r\n this._id = id;\r\n this._url = data.url;\r\n this._buffer = null;\r\n this._bufferPos = 0;\r\n this._dataPos = 0;\r\n this._pixelData = null;\r\n\r\n // Default MGH Header as described at:\r\n // https://surfer.nmr.mgh.harvard.edu/fswiki/FsTutorial/MghFormat\r\n // Image \"header\" with default values\r\n this._version = 1;\r\n this._width = 0;\r\n this._height = 0;\r\n this._depth = 0;\r\n this._nframes = 0;\r\n this._type = ParsersMgh.MRI_UCHAR; // 0-UCHAR, 4-SHORT, 1-INT, 3-FLOAT\r\n this._dof = 0;\r\n this._goodRASFlag = 0; // True: Use directional cosines, false assume CORONAL\r\n this._spacingXYZ = [1, 1, 1];\r\n this._Xras = [-1, 0, 0];\r\n this._Yras = [0, 0, -1];\r\n this._Zras = [0, 1, 0];\r\n this._Cras = [0, 0, 0];\r\n // Image \"footer\"\r\n this._tr = 0; // ms\r\n this._flipAngle = 0; // radians\r\n this._te = 0; // ms\r\n this._ti = 0; // ms\r\n this._fov = 0; // from doc: IGNORE THIS FIELD (data is inconsistent)\r\n this._tags = []; // Will then contain variable length char strings\r\n\r\n // Other misc\r\n this._origin = [0, 0, 0];\r\n this._imageOrient = [0, 0, 0, 0, 0, 0];\r\n\r\n // Read header\r\n // ArrayBuffer in data.buffer may need endian swap\r\n this._buffer = data.buffer;\r\n\r\n this._version = this._readInt();\r\n this._swapEndian = false;\r\n if (this._version == 1) {\r\n // Life is good\r\n } else if (this._version == 16777216) {\r\n this._swapEndian = true;\r\n this._version = this._swap32(this._version);\r\n } else {\r\n const error = new Error('MGH/MGZ parser: Unknown Endian. Version reports: ' + this._version);\r\n throw error;\r\n }\r\n this._width = this._readInt();\r\n this._height = this._readInt();\r\n this._depth = this._readInt(); // AMI calls this frames\r\n this._nframes = this._readInt();\r\n this._type = this._readInt();\r\n this._dof = this._readInt();\r\n this._goodRASFlag = this._readShort();\r\n this._spacingXYZ = this._readFloat(3);\r\n this._Xras = this._readFloat(3);\r\n this._Yras = this._readFloat(3);\r\n this._Zras = this._readFloat(3);\r\n this._Cras = this._readFloat(3);\r\n\r\n this._bufferPos = 284;\r\n let dataSize = this._width * this._height * this._depth * this._nframes;\r\n let vSize = this._width * this._height * this._depth;\r\n\r\n switch (this._type) {\r\n case ParsersMgh.MRI_UCHAR:\r\n this._pixelData = this._readUChar(dataSize);\r\n break;\r\n case ParsersMgh.MRI_INT:\r\n this._pixelData = this._readInt(dataSize);\r\n break;\r\n case ParsersMgh.MRI_FLOAT:\r\n this._pixelData = this._readFloat(dataSize);\r\n break;\r\n case ParsersMgh.MRI_SHORT:\r\n this._pixelData = this._readShort(dataSize);\r\n break;\r\n default:\r\n throw Error('MGH/MGZ parser: Unknown _type. _type reports: ' + this._type);\r\n }\r\n\r\n this._tr = this._readFloat(1);\r\n this._flipAngle = this._readFloat(1);\r\n this._te = this._readFloat(1);\r\n this._ti = this._readFloat(1);\r\n this._fov = this._readFloat(1);\r\n\r\n let enc = new TextDecoder();\r\n let t = this._tagReadStart();\r\n while (t[0] != undefined) {\r\n let tagType = t[0];\r\n let tagLen = t[1];\r\n let tagValue = undefined;\r\n\r\n switch (tagType) {\r\n case ParsersMgh.TAG_OLD_MGH_XFORM:\r\n case ParsersMgh.TAG_MGH_XFORM:\r\n tagValue = this._readChar(tagLen);\r\n break;\r\n default:\r\n tagValue = this._readChar(tagLen);\r\n }\r\n tagValue = enc.decode(tagValue);\r\n this._tags.push({ tagType: tagType, tagValue: tagValue });\r\n\r\n // read for next loop\r\n t = this._tagReadStart();\r\n }\r\n\r\n // detect if we are in a right handed coordinate system\r\n const first = new Vector3().fromArray(this._Xras);\r\n const second = new Vector3().fromArray(this._Yras);\r\n const crossFirstSecond = new Vector3().crossVectors(first, second);\r\n const third = new Vector3().fromArray(this._Zras);\r\n\r\n if (crossFirstSecond.angleTo(third) > Math.PI / 2) {\r\n this._rightHanded = false;\r\n }\r\n\r\n // - sign to move to LPS space\r\n this._imageOrient = [\r\n -this._Xras[0],\r\n -this._Xras[1],\r\n this._Xras[2],\r\n -this._Yras[0],\r\n -this._Yras[1],\r\n this._Yras[2],\r\n ];\r\n\r\n // Calculate origin\r\n let fcx = this._width / 2.0;\r\n let fcy = this._height / 2.0;\r\n let fcz = this._depth / 2.0;\r\n\r\n for (let ui = 0; ui < 3; ++ui) {\r\n this._origin[ui] =\r\n this._Cras[ui] -\r\n (this._Xras[ui] * this._spacingXYZ[0] * fcx +\r\n this._Yras[ui] * this._spacingXYZ[1] * fcy +\r\n this._Zras[ui] * this._spacingXYZ[2] * fcz);\r\n }\r\n\r\n // - sign to move to LPS space\r\n this._origin = [-this._origin[0], -this._origin[1], this._origin[2]];\r\n }\r\n\r\n seriesInstanceUID() {\r\n // use filename + timestamp..?\r\n return this._url;\r\n }\r\n\r\n numberOfFrames() {\r\n // AMI calls Z component frames, not T (_nframes)\r\n return this._depth;\r\n }\r\n\r\n sopInstanceUID(frameIndex = 0) {\r\n return frameIndex;\r\n }\r\n\r\n rows(frameIndex = 0) {\r\n return this._width;\r\n }\r\n\r\n columns(frameIndex = 0) {\r\n return this._height;\r\n }\r\n\r\n pixelType(frameIndex = 0) {\r\n // Return: 0 integer, 1 float\r\n switch (this._type) {\r\n case ParsersMgh.MRI_UCHAR:\r\n case ParsersMgh.MRI_INT:\r\n case ParsersMgh.MRI_SHORT:\r\n return 0;\r\n case ParsersMgh.MRI_FLOAT:\r\n return 1;\r\n default:\r\n throw Error('MGH/MGZ parser: Unknown _type. _type reports: ' + this._type);\r\n }\r\n }\r\n\r\n bitsAllocated(frameIndex = 0) {\r\n switch (this._type) {\r\n case ParsersMgh.MRI_UCHAR:\r\n return 8;\r\n case ParsersMgh.MRI_SHORT:\r\n return 16;\r\n case ParsersMgh.MRI_INT:\r\n case ParsersMgh.MRI_FLOAT:\r\n return 32;\r\n default:\r\n throw Error('MGH/MGZ parser: Unknown _type. _type reports: ' + this._type);\r\n }\r\n }\r\n\r\n pixelSpacing(frameIndex = 0) {\r\n return this._spacingXYZ;\r\n }\r\n\r\n imageOrientation(frameIndex = 0) {\r\n return this._imageOrient;\r\n }\r\n\r\n imagePosition(frameIndex = 0) {\r\n return this._origin;\r\n }\r\n\r\n extractPixelData(frameIndex = 0) {\r\n let sliceSize = this._width * this._height;\r\n return this._pixelData.slice(frameIndex * sliceSize, (frameIndex + 1) * sliceSize);\r\n }\r\n\r\n // signed int32\r\n _readInt(len = 1) {\r\n let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 4));\r\n this._bufferPos += len * 4;\r\n let v = undefined;\r\n if (len == 1) {\r\n v = tempBuff.getInt32(0, this._swapEndian);\r\n } else {\r\n v = new Int32Array(len);\r\n for (let i = 0; i < len; i++) {\r\n v[i] = tempBuff.getInt32(i * 4, this._swapEndian);\r\n }\r\n }\r\n return v;\r\n }\r\n\r\n // signed int16\r\n _readShort(len = 1) {\r\n let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 2));\r\n this._bufferPos += len * 2;\r\n let v = undefined;\r\n if (len == 1) {\r\n v = tempBuff.getInt16(0, this._swapEndian);\r\n } else {\r\n v = new Int16Array(len);\r\n for (let i = 0; i < len; i++) {\r\n v[i] = tempBuff.getInt16(i * 2, this._swapEndian);\r\n }\r\n }\r\n return v;\r\n }\r\n\r\n // signed int64\r\n _readLong(len = 1) {\r\n let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 8));\r\n this._bufferPos += len * 8;\r\n let v = new Uint16Array(len);\r\n for (let i = 0; i < len; i++) {\r\n /* DataView doesn't have Int64.\r\n * This work around based off Scalajs\r\n * (https://github.com/scala-js/scala-js/blob/master/library/src/main/scala/scala/scalajs/js/typedarray/DataViewExt.scala)\r\n * v[i]=tempBuff.getInt64(i*8,this._swapEndian);\r\n */\r\n let shiftHigh = 0;\r\n let shiftLow = 0;\r\n if (this._swapendian) {\r\n shiftHigh = 4;\r\n } else {\r\n shiftLow = 4;\r\n }\r\n let high = tempBuff.getInt32(i * 8 + shiftHigh, this._swapEndian);\r\n let low = tempBuff.getInt32(i * 8 + shiftLow, this._swapEndian);\r\n if (high != 0) {\r\n console.log('Unable to read Int64 with high word: ' + high + 'low word: ' + low);\r\n low = undefined;\r\n }\r\n v[i] = low;\r\n }\r\n if (len == 0) {\r\n return undefined;\r\n } else if (len == 1) {\r\n return v[0];\r\n } else {\r\n return v;\r\n }\r\n }\r\n\r\n // signed int8\r\n _readChar(len = 1) {\r\n let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len));\r\n this._bufferPos += len;\r\n let v = undefined;\r\n if (len == 1) {\r\n v = tempBuff.getInt8(0, this._swapEndian);\r\n } else {\r\n v = new Int8Array(len);\r\n for (let i = 0; i < len; i++) {\r\n v[i] = tempBuff.getInt8(i, this._swapEndian);\r\n }\r\n }\r\n return v;\r\n }\r\n\r\n // unsigned int8\r\n _readUChar(len = 1) {\r\n let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len));\r\n this._bufferPos += len;\r\n let v = undefined;\r\n if (len == 1) {\r\n v = tempBuff.getUint8(0, this._swapEndian);\r\n } else {\r\n v = new Uint8Array(len);\r\n for (let i = 0; i < len; i++) {\r\n v[i] = tempBuff.getUint8(i, this._swapEndian);\r\n }\r\n }\r\n return v;\r\n }\r\n\r\n // float32\r\n _readFloat(len = 1) {\r\n let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 4));\r\n this._bufferPos += len * 4;\r\n let v = undefined;\r\n if (len == 1) {\r\n v = tempBuff.getFloat32(0, this._swapEndian);\r\n } else {\r\n v = new Float32Array(len);\r\n for (let i = 0; i < len; i++) {\r\n v[i] = tempBuff.getFloat32(i * 4, this._swapEndian);\r\n }\r\n }\r\n return v;\r\n }\r\n\r\n _tagReadStart() {\r\n if (this._bufferPos >= this._buffer.byteLength) {\r\n return [undefined, undefined];\r\n }\r\n let tagType = this._readInt();\r\n let tagLen = undefined;\r\n switch (tagType) {\r\n case ParsersMgh.TAG_OLD_MGH_XFORM:\r\n tagLen = this._readInt();\r\n tagLen -= 1;\r\n break;\r\n case ParsersMgh.TAG_OLD_SURF_GEOM:\r\n case ParsersMgh.TAG_OLD_USEREALRAS:\r\n case ParsersMgh.TAG_OLD_COLORTABLE:\r\n tagLen = 0;\r\n break;\r\n default:\r\n tagLen = this._readLong();\r\n }\r\n if (tagLen == undefined) {\r\n tagType = undefined;\r\n }\r\n return [tagType, tagLen];\r\n }\r\n}\r\n\r\n// https://github.com/freesurfer/freesurfer/\r\n// See include/mri.h\r\nParsersMgh.MRI_UCHAR = 0;\r\nParsersMgh.MRI_INT = 1;\r\nParsersMgh.MRI_LONG = 2;\r\nParsersMgh.MRI_FLOAT = 3;\r\nParsersMgh.MRI_SHORT = 4;\r\nParsersMgh.MRI_BITMAP = 5;\r\nParsersMgh.MRI_TENSOR = 6;\r\nParsersMgh.MRI_FLOAT_COMPLEX = 7;\r\nParsersMgh.MRI_DOUBLE_COMPLEX = 8;\r\nParsersMgh.MRI_RGB = 9;\r\n\r\n// https://github.com/freesurfer/freesurfer/\r\n// See include/tags.h\r\nParsersMgh.TAG_OLD_COLORTABLE = 1;\r\nParsersMgh.TAG_OLD_USEREALRAS = 2;\r\nParsersMgh.TAG_CMDLINE = 3;\r\nParsersMgh.TAG_USEREALRAS = 4;\r\nParsersMgh.TAG_COLORTABLE = 5;\r\nParsersMgh.TAG_GCAMORPH_GEOM = 10;\r\nParsersMgh.TAG_GCAMORPH_TYPE = 11;\r\nParsersMgh.TAG_GCAMORPH_LABELS = 12;\r\nParsersMgh.TAG_OLD_SURF_GEOM = 20;\r\nParsersMgh.TAG_SURF_GEOM = 21;\r\nParsersMgh.TAG_OLD_MGH_XFORM = 30;\r\nParsersMgh.TAG_MGH_XFORM = 31;\r\nParsersMgh.TAG_GROUP_AVG_SURFACE_AREA = 32;\r\nParsersMgh.TAG_AUTO_ALIGN = 33;\r\nParsersMgh.TAG_SCALAR_DOUBLE = 40;\r\nParsersMgh.TAG_PEDIR = 41;\r\nParsersMgh.TAG_MRI_FRAME = 42;\r\nParsersMgh.TAG_FIELDSTRENGTH = 43;\r\n","/** * Imports ***/\r\nimport ParsersVolume from './parsers.volume';\r\n\r\nimport { Vector3 } from 'three/src/math/Vector3';\r\n\r\n/**\r\n * @module parsers/mhd\r\n */\r\nexport default class ParsersMHD extends ParsersVolume {\r\n constructor(data, id) {\r\n super();\r\n\r\n /**\r\n * @member\r\n * @type {arraybuffer}\r\n */\r\n this._id = id;\r\n this._url = data.url;\r\n this._header = {};\r\n this._buffer = null;\r\n\r\n try {\r\n // parse header (mhd) data\r\n let lines = new TextDecoder().decode(data.mhdBuffer).split('\\n');\r\n lines.forEach(line => {\r\n let keyvalue = line.split('=');\r\n if (keyvalue.length === 2) {\r\n this._header[keyvalue[0].trim()] = keyvalue[1].trim();\r\n }\r\n });\r\n\r\n this._header.DimSize = this._header.DimSize.split(' ');\r\n this._header.ElementSpacing = this._header.ElementSpacing.split(' ');\r\n this._header.TransformMatrix = this._header.TransformMatrix.split(' ');\r\n this._header.Offset = this._header.Offset.split(' ');\r\n //\r\n this._buffer = data.rawBuffer;\r\n } catch (error) {\r\n window.console.log('ooops... :(');\r\n }\r\n }\r\n\r\n rightHanded() {\r\n let anatomicalOrientation = this._header.AnatomicalOrientation;\r\n if (\r\n anatomicalOrientation === 'RAS' ||\r\n anatomicalOrientation === 'RPI' ||\r\n anatomicalOrientation === 'LPS' ||\r\n anatomicalOrientation === 'LAI'\r\n ) {\r\n this._rightHanded = true;\r\n } else {\r\n this._rightHanded = false;\r\n }\r\n\r\n return this._rightHanded;\r\n }\r\n\r\n seriesInstanceUID() {\r\n // use filename + timestamp..?\r\n return this._url;\r\n }\r\n\r\n numberOfFrames() {\r\n return parseInt(this._header.DimSize[2], 10);\r\n }\r\n\r\n sopInstanceUID(frameIndex = 0) {\r\n return frameIndex;\r\n }\r\n\r\n rows(frameIndex = 0) {\r\n return parseInt(this._header.DimSize[1], 10);\r\n }\r\n\r\n columns(frameIndex = 0) {\r\n return parseInt(this._header.DimSize[0], 10);\r\n }\r\n\r\n pixelType(frameIndex = 0) {\r\n // 0 - int\r\n // 1 - float\r\n let type = 0;\r\n if (this._header.ElementType === 'MET_UFLOAT' || this._header.ElementType === 'MET_FLOAT') {\r\n type = 1;\r\n }\r\n return type;\r\n }\r\n\r\n bitsAllocated(frameIndex = 0) {\r\n let bitsAllocated = 1;\r\n\r\n if (this._header.ElementType === 'MET_UCHAR' || this._header.ElementType === 'MET_CHAR') {\r\n bitsAllocated = 8;\r\n } else if (\r\n this._header.ElementType === 'MET_USHORT' ||\r\n this._header.ElementType === 'MET_SHORT'\r\n ) {\r\n bitsAllocated = 16;\r\n } else if (\r\n this._header.ElementType === 'MET_UINT' ||\r\n this._header.ElementType === 'MET_INT' ||\r\n this._header.ElementType === 'MET_UFLOAT' ||\r\n this._header.ElementType === 'MET_FLOAT'\r\n ) {\r\n bitsAllocated = 32;\r\n }\r\n\r\n return bitsAllocated;\r\n }\r\n\r\n /**\r\n * https://itk.org/Wiki/ITK/MetaIO/Documentation\r\n * ElementSpacing[0] spacing between elements along X axis (i.e. column spacing)\r\n * ElementSpacing[1] spacing between elements along Y axis (i.e. row spacing)\r\n *\r\n * @param {*} frameIndex\r\n */\r\n pixelSpacing(frameIndex = 0) {\r\n let x = parseFloat(this._header.ElementSpacing[1], 10);\r\n let y = parseFloat(this._header.ElementSpacing[0], 10);\r\n let z = parseFloat(this._header.ElementSpacing[2], 10);\r\n return [x, y, z];\r\n }\r\n\r\n imageOrientation(frameIndex = 0) {\r\n let invertX = this._header.AnatomicalOrientation.match(/L/) ? -1 : 1;\r\n let invertY = this._header.AnatomicalOrientation.match(/P/) ? -1 : 1;\r\n\r\n let x = new Vector3(\r\n parseFloat(this._header.TransformMatrix[0]) * invertX,\r\n parseFloat(this._header.TransformMatrix[1]) * invertY,\r\n parseFloat(this._header.TransformMatrix[2])\r\n );\r\n x.normalize();\r\n\r\n let y = new Vector3(\r\n parseFloat(this._header.TransformMatrix[3]) * invertX,\r\n parseFloat(this._header.TransformMatrix[4]) * invertY,\r\n parseFloat(this._header.TransformMatrix[5])\r\n );\r\n y.normalize();\r\n\r\n return [x.x, x.y, x.z, y.x, y.y, y.z];\r\n }\r\n\r\n imagePosition(frameIndex = 0) {\r\n return [\r\n parseFloat(this._header.Offset[0]),\r\n parseFloat(this._header.Offset[1]),\r\n parseFloat(this._header.Offset[2]),\r\n ];\r\n }\r\n\r\n extractPixelData(frameIndex = 0) {\r\n return this._decompressUncompressed(frameIndex);\r\n }\r\n\r\n _decompressUncompressed(frameIndex = 0) {\r\n let buffer = this._buffer;\r\n let numberOfChannels = this.numberOfChannels();\r\n let numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels;\r\n if (!this.rightHanded()) {\r\n frameIndex = this.numberOfFrames() - 1 - frameIndex;\r\n }\r\n let frameOffset = frameIndex * numPixels;\r\n\r\n if (this._header.ElementType === 'MET_CHAR') {\r\n return new Int8Array(buffer, frameOffset, numPixels);\r\n } else if (this._header.ElementType === 'MET_UCHAR') {\r\n return new Uint8Array(buffer, frameOffset, numPixels);\r\n } else if (this._header.ElementType === 'MET_SHORT') {\r\n frameOffset = frameOffset * 2;\r\n return new Int16Array(buffer, frameOffset, numPixels);\r\n } else if (this._header.ElementType === 'MET_USHORT') {\r\n frameOffset = frameOffset * 2;\r\n return new Uint16Array(buffer, frameOffset, numPixels);\r\n } else if (this._header.ElementType === 'MET_INT') {\r\n frameOffset = frameOffset * 4;\r\n return new Int32Array(buffer, frameOffset, numPixels);\r\n } else if (this._header.ElementType === 'MET_UINT') {\r\n frameOffset = frameOffset * 4;\r\n return new Uint32Array(buffer, frameOffset, numPixels);\r\n } else if (this._header.ElementType === 'MET_FLOAT') {\r\n frameOffset = frameOffset * 4;\r\n return new Float32Array(buffer, frameOffset, numPixels);\r\n }\r\n }\r\n}\r\n","/** * Imports ***/\r\nimport ParsersVolume from './parsers.volume';\r\n\r\nimport NiftiReader from 'nifti-reader-js/src/nifti';\r\n\r\n/**\r\n * @module parsers/nifti\r\n */\r\nexport default class ParsersNifti extends ParsersVolume {\r\n constructor(data, id) {\r\n super();\r\n\r\n /**\r\n * @member\r\n * @type {arraybuffer}\r\n */\r\n this._id = id;\r\n this._arrayBuffer = data.buffer;\r\n this._url = data.url;\r\n this._dataSet = null;\r\n this._niftiHeader = null;\r\n this._niftiImage = null;\r\n this._ordered = true;\r\n this._orderedData = null;\r\n\r\n //\r\n this._qfac = 1.0;\r\n\r\n if (NiftiReader.isNIFTI(this._arrayBuffer)) {\r\n this._dataSet = NiftiReader.readHeader(this._arrayBuffer);\r\n this._niftiImage = NiftiReader.readImage(this._dataSet, this._arrayBuffer);\r\n } else {\r\n const error = new Error('parsers.nifti could not parse the file');\r\n throw error;\r\n }\r\n }\r\n\r\n seriesInstanceUID() {\r\n // use filename + timestamp..?\r\n return this._url;\r\n }\r\n\r\n numberOfFrames() {\r\n return this._dataSet.dims[3];\r\n }\r\n\r\n numberOfChannels() {\r\n let numberOfChannels = 1;\r\n\r\n // can dims[0] >= 5 and not multi channels with RGB datatypecode?\r\n\r\n if (this._dataSet.dims[0] >= 5) {\r\n numberOfChannels = this._dataSet.dims[5];\r\n this._ordered = false;\r\n } else if (this._dataSet.datatypeCode === 128) {\r\n numberOfChannels = 3;\r\n } else if (this._dataSet.datatypeCode === 2304) {\r\n numberOfChannels = 4;\r\n }\r\n\r\n return numberOfChannels;\r\n }\r\n\r\n sopInstanceUID(frameIndex = 0) {\r\n return frameIndex;\r\n }\r\n\r\n rows(frameIndex = 0) {\r\n return this._dataSet.dims[2];\r\n }\r\n\r\n columns(frameIndex = 0) {\r\n return this._dataSet.dims[1];\r\n }\r\n\r\n pixelType(frameIndex = 0) {\r\n // papaya.volume.nifti.NIFTI_TYPE_UINT8 = 2;\r\n // papaya.volume.nifti.NIFTI_TYPE_INT16 = 4;\r\n // papaya.volume.nifti.NIFTI_TYPE_INT32 = 8;\r\n // papaya.volume.nifti.NIFTI_TYPE_FLOAT32 = 16;\r\n // papaya.volume.nifti.NIFTI_TYPE_COMPLEX64 = 32;\r\n // papaya.volume.nifti.NIFTI_TYPE_FLOAT64 = 64;\r\n // papaya.volume.nifti.NIFTI_TYPE_RGB24 = 128;\r\n // papaya.volume.nifti.NIFTI_TYPE_INT8 = 256;\r\n // papaya.volume.nifti.NIFTI_TYPE_UINT16 = 512;\r\n // papaya.volume.nifti.NIFTI_TYPE_UINT32 = 768;\r\n // papaya.volume.nifti.NIFTI_TYPE_INT64 = 1024;\r\n // papaya.volume.nifti.NIFTI_TYPE_UINT64 = 1280;\r\n // papaya.volume.nifti.NIFTI_TYPE_FLOAT128 = 1536;\r\n // papaya.volume.nifti.NIFTI_TYPE_COMPLEX128 = 1792;\r\n // papaya.volume.nifti.NIFTI_TYPE_COMPLEX256 = 2048;\r\n\r\n // 0 integer, 1 float\r\n\r\n let pixelType = 0;\r\n if (\r\n this._dataSet.datatypeCode === 16 ||\r\n this._dataSet.datatypeCode === 64 ||\r\n this._dataSet.datatypeCode === 1536\r\n ) {\r\n pixelType = 1;\r\n }\r\n return pixelType;\r\n }\r\n\r\n bitsAllocated(frameIndex = 0) {\r\n return this._dataSet.numBitsPerVoxel;\r\n }\r\n\r\n pixelSpacing(frameIndex = 0) {\r\n return [this._dataSet.pixDims[1], this._dataSet.pixDims[2], this._dataSet.pixDims[3]];\r\n }\r\n\r\n sliceThickness() {\r\n // should be a string...\r\n return null; // this._dataSet.pixDims[3].toString();\r\n }\r\n\r\n imageOrientation(frameIndex = 0) {\r\n // http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1.h\r\n // http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c\r\n if (this._dataSet.qform_code > 0) {\r\n // METHOD 2 (used when qform_code > 0, which should be the \"normal\" case):\r\n // ---------------------------------------------------------------------\r\n // The (x,y,z) coordinates are given by the pixdim[] scales, a rotation\r\n // matrix, and a shift. This method is intended to represent\r\n // \"scanner-anatomical\" coordinates, which are often embedded in the\r\n // image header (e.g., DICOM fields (0020,0032), (0020,0037), (0028,0030),\r\n // and (0018,0050)), and represent the nominal orientation and location of\r\n // the data. This method can also be used to represent \"aligned\"\r\n // coordinates, which would typically result from some post-acquisition\r\n // alignment of the volume to a standard orientation (e.g., the same\r\n // subject on another day, or a rigid rotation to true anatomical\r\n // orientation from the tilted position of the subject in the scanner).\r\n // The formula for (x,y,z) in terms of header parameters and (i,j,k) is:\r\n\r\n // [ x ] [ R11 R12 R13 ] [ pixdim[1] * i ] [ qoffset_x ]\r\n // [ y ] = [ R21 R22 R23 ] [ pixdim[2] * j ] + [ qoffset_y ]\r\n // [ z ] [ R31 R32 R33 ] [ qfac * pixdim[3] * k ] [ qoffset_z ]\r\n\r\n // The qoffset_* shifts are in the NIFTI-1 header. Note that the center\r\n // of the (i,j,k)=(0,0,0) voxel (first value in the dataset array) is\r\n // just (x,y,z)=(qoffset_x,qoffset_y,qoffset_z).\r\n\r\n // The rotation matrix R is calculated from the quatern_* parameters.\r\n // This calculation is described below.\r\n\r\n // The scaling factor qfac is either 1 or -1. The rotation matrix R\r\n // defined by the quaternion parameters is \"proper\" (has determinant 1).\r\n // This may not fit the needs of the data; for example, if the image\r\n // grid is\r\n // i increases from Left-to-Right\r\n // j increases from Anterior-to-Posterior\r\n // k increases from Inferior-to-Superior\r\n // Then (i,j,k) is a left-handed triple. In this example, if qfac=1,\r\n // the R matrix would have to be\r\n\r\n // [ 1 0 0 ]\r\n // [ 0 -1 0 ] which is \"improper\" (determinant = -1).\r\n // [ 0 0 1 ]\r\n\r\n // If we set qfac=-1, then the R matrix would be\r\n\r\n // [ 1 0 0 ]\r\n // [ 0 -1 0 ] which is proper.\r\n // [ 0 0 -1 ]\r\n\r\n // This R matrix is represented by quaternion [a,b,c,d] = [0,1,0,0]\r\n // (which encodes a 180 degree rotation about the x-axis).\r\n // https://github.com/Kitware/ITK/blob/master/Modules/IO/NIFTI/src/itkNiftiImageIO.cxx\r\n let a = 0.0;\r\n let b = this._dataSet.quatern_b;\r\n let c = this._dataSet.quatern_c;\r\n let d = this._dataSet.quatern_d;\r\n // compute a\r\n a = 1.0 - (b * b + c * c + d * d);\r\n if (a < 0.0000001) {\r\n /* special case */\r\n\r\n a = 1.0 / Math.sqrt(b * b + c * c + d * d);\r\n b *= a;\r\n c *= a;\r\n d *= a; /* normalize (b,c,d) vector */\r\n a = 0.0; /* a = 0 ==> 180 degree rotation */\r\n } else {\r\n a = Math.sqrt(a); /* angle = 2*arccos(a) */\r\n }\r\n\r\n if (this._dataSet.pixDims[0] < 0.0) {\r\n this._rightHanded = false;\r\n }\r\n\r\n return [\r\n -(a * a + b * b - c * c - d * d),\r\n -2 * (b * c + a * d),\r\n 2 * (b * d - a * c),\r\n -2 * (b * c - a * d),\r\n -(a * a + c * c - b * b - d * d),\r\n 2 * (c * d + a * b),\r\n ];\r\n } else if (this._dataSet.sform_code > 0) {\r\n // METHOD 3 (used when sform_code > 0):\r\n // -----------------------------------\r\n // The (x,y,z) coordinates are given by a general affine transformation\r\n // of the (i,j,k) indexes:\r\n\r\n // x = srow_x[0] * i + srow_x[1] * j + srow_x[2] * k + srow_x[3]\r\n // y = srow_y[0] * i + srow_y[1] * j + srow_y[2] * k + srow_y[3]\r\n // z = srow_z[0] * i + srow_z[1] * j + srow_z[2] * k + srow_z[3]\r\n\r\n // The srow_* vectors are in the NIFTI_1 header. Note that no use is\r\n // made of pixdim[] in this method.\r\n const rowX = [\r\n -this._dataSet.affine[0][0],\r\n -this._dataSet.affine[0][1],\r\n this._dataSet.affine[0][2],\r\n ];\r\n const rowY = [\r\n -this._dataSet.affine[1][0],\r\n -this._dataSet.affine[1][1],\r\n this._dataSet.affine[0][2],\r\n ];\r\n return [...rowX, ...rowY];\r\n } else if (this._dataSet.qform_code === 0) {\r\n // METHOD 1 (the \"old\" way, used only when qform_code = 0):\r\n // -------------------------------------------------------\r\n // The coordinate mapping from (i,j,k) to (x,y,z) is the ANALYZE\r\n // 7.5 way. This is a simple scaling relationship:\r\n // x = pixdim[1] * i\r\n // y = pixdim[2] * j\r\n // z = pixdim[3] * k\r\n // No particular spatial orientation is attached to these (x,y,z)\r\n // coordinates. (NIFTI-1 does not have the ANALYZE 7.5 orient field,\r\n // which is not general and is often not set properly.) This method\r\n // is not recommended, and is present mainly for compatibility with\r\n // ANALYZE 7.5 files.\r\n }\r\n return [1, 0, 0, 0, 1, 0];\r\n }\r\n\r\n imagePosition(frameIndex = 0) {\r\n // qoffset is RAS\r\n return [-this._dataSet.qoffset_x, -this._dataSet.qoffset_y, this._dataSet.qoffset_z];\r\n }\r\n\r\n dimensionIndexValues(frameIndex = 0) {\r\n return null;\r\n }\r\n\r\n instanceNumber(frameIndex = 0) {\r\n return frameIndex;\r\n }\r\n\r\n windowCenter(frameIndex = 0) {\r\n // calc min and calc max\r\n return null;\r\n }\r\n\r\n windowWidth(frameIndex = 0) {\r\n // calc min and calc max\r\n return null;\r\n }\r\n\r\n rescaleSlope(frameIndex = 0) {\r\n return this._dataSet.scl_slope;\r\n }\r\n\r\n rescaleIntercept(frameIndex = 0) {\r\n return this._dataSet.scl_inter;\r\n }\r\n\r\n extractPixelData(frameIndex = 0) {\r\n return this._decompressUncompressed(frameIndex);\r\n }\r\n\r\n _decompressUncompressed(frameIndex = 0) {\r\n // papaya.volume.nifti.NIFTI_TYPE_UINT8 = 2;\r\n // papaya.volume.nifti.NIFTI_TYPE_INT16 = 4;\r\n // papaya.volume.nifti.NIFTI_TYPE_INT32 = 8;\r\n // papaya.volume.nifti.NIFTI_TYPE_FLOAT32 = 16;\r\n // papaya.volume.nifti.NIFTI_TYPE_COMPLEX64 = 32;\r\n // papaya.volume.nifti.NIFTI_TYPE_FLOAT64 = 64;\r\n // papaya.volume.nifti.NIFTI_TYPE_RGB24 = 128;\r\n // papaya.volume.nifti.NIFTI_TYPE_INT8 = 256;\r\n // papaya.volume.nifti.NIFTI_TYPE_UINT16 = 512;\r\n // papaya.volume.nifti.NIFTI_TYPE_UINT32 = 768;\r\n // papaya.volume.nifti.NIFTI_TYPE_INT64 = 1024;\r\n // papaya.volume.nifti.NIFTI_TYPE_UINT64 = 1280;\r\n // papaya.volume.nifti.NIFTI_TYPE_FLOAT128 = 1536;\r\n // papaya.volume.nifti.NIFTI_TYPE_COMPLEX128 = 1792;\r\n // papaya.volume.nifti.NIFTI_TYPE_COMPLEX256 = 2048;\r\n\r\n let numberOfChannels = this.numberOfChannels();\r\n let numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels;\r\n // if( !this.rightHanded() ){\r\n // frameIndex = this.numberOfFrames() - 1 - frameIndex;\r\n // }\r\n let frameOffset = frameIndex * numPixels;\r\n let buffer = this._niftiImage;\r\n\r\n // use bits allocated && pixel reprensentation too\r\n if (!this._ordered && this._orderedData === null) {\r\n // order then\r\n this._reorderData();\r\n }\r\n\r\n if (this._orderedData !== null) {\r\n // just a slice...\r\n return this._orderedData.slice(frameOffset, frameOffset + numPixels);\r\n } else if (this._dataSet.datatypeCode === 2) {\r\n // unsigned int 8 bit\r\n return new Uint8Array(buffer, frameOffset, numPixels);\r\n } else if (this._dataSet.datatypeCode === 256) {\r\n // signed int 8 bit\r\n return new Int8Array(buffer, frameOffset, numPixels);\r\n } else if (this._dataSet.datatypeCode === 512) {\r\n // unsigned int 16 bit\r\n frameOffset = frameOffset * 2;\r\n return new Uint16Array(buffer, frameOffset, numPixels);\r\n } else if (this._dataSet.datatypeCode === 4) {\r\n // signed int 16 bit\r\n frameOffset = frameOffset * 2;\r\n return new Int16Array(buffer, frameOffset, numPixels);\r\n } else if (this._dataSet.datatypeCode === 8) {\r\n // signed int 32 bit\r\n frameOffset = frameOffset * 4;\r\n return new Int32Array(buffer, frameOffset, numPixels);\r\n } else if (this._dataSet.datatypeCode === 16) {\r\n // signed float 32 bit\r\n frameOffset = frameOffset * 4;\r\n const data = new Float32Array(buffer, frameOffset, numPixels);\r\n for (let i = 0; i < data.length; i++) {\r\n if (data[i] === Infinity || data[i] === -Infinity) {\r\n data[i] = 0;\r\n }\r\n }\r\n return data;\r\n } else {\r\n window.console.warn(`Unknown data type: datatypeCode : ${this._dataSet.datatypeCode}`);\r\n }\r\n }\r\n\r\n _reorderData() {\r\n let numberOfChannels = this.numberOfChannels();\r\n let numPixels = this.rows() * this.columns() * numberOfChannels;\r\n let buffer = this._niftiImage;\r\n\r\n let totalNumPixels = numPixels * this.numberOfFrames();\r\n let tmp = null;\r\n this._orderedData = null;\r\n\r\n if (this._dataSet.datatypeCode === 2) {\r\n // unsigned 8 bit\r\n tmp = new Uint8Array(buffer, 0, totalNumPixels);\r\n this._orderedData = new Uint8Array(tmp.length);\r\n } else if (this._dataSet.datatypeCode === 256) {\r\n // signed 8 bit\r\n tmp = new Int8Array(buffer, 0, totalNumPixels);\r\n this._orderedData = new Int8Array(tmp.length);\r\n } else if (this._dataSet.datatypeCode === 512) {\r\n tmp = new Uint16Array(buffer, 0, totalNumPixels);\r\n this._orderedData = new Uint16Array(tmp.length);\r\n } else if (this._dataSet.datatypeCode === 4) {\r\n tmp = new Int16Array(buffer, 0, totalNumPixels);\r\n this._orderedData = new Int16Array(tmp.length);\r\n } else if (this._dataSet.datatypeCode === 16) {\r\n tmp = new Float32Array(buffer, 0, totalNumPixels);\r\n this._orderedData = new Float32Array(tmp.length);\r\n }\r\n\r\n // re-order pixels...\r\n let numPixels2 = tmp.length / 3;\r\n let rgbaIndex = 0;\r\n let rIndex = 0;\r\n let gIndex = numPixels2;\r\n let bIndex = numPixels2 * 2;\r\n\r\n for (let i = 0; i < numPixels2; i++) {\r\n this._orderedData[rgbaIndex++] = tmp[rIndex++]; // red\r\n this._orderedData[rgbaIndex++] = tmp[gIndex++]; // green\r\n this._orderedData[rgbaIndex++] = tmp[bIndex++]; // blue\r\n }\r\n\r\n this._ordered = true;\r\n }\r\n}\r\n","/** * Imports ***/\r\nimport ParsersVolume from './parsers.volume';\r\nimport { Vector3 } from 'three/src/math/Vector3';\r\n\r\nlet pako = require('pako');\r\nlet NrrdReader = require('nrrd-js');\r\n/**\r\n * @module parsers/nifti\r\n */\r\nexport default class ParsersNifti extends ParsersVolume {\r\n /**\r\n * Constructor\r\n *\r\n * @param {*} data\r\n * @param {*} id\r\n */\r\n constructor(data, id) {\r\n super();\r\n\r\n /**\r\n * @member\r\n * @type {arraybuffer}\r\n */\r\n this._id = id;\r\n this._arrayBuffer = data.buffer;\r\n this._url = data.url;\r\n this._dataSet = null;\r\n this._unpackedData = null;\r\n\r\n try {\r\n this._dataSet = NrrdReader.parse(this._arrayBuffer);\r\n } catch (error) {\r\n window.console.log('ooops... :(');\r\n }\r\n }\r\n\r\n /**\r\n * Is the data right-handed\r\n *\r\n * @return {*}\r\n */\r\n rightHanded() {\r\n if (\r\n this._dataSet.space.match(/^right-anterior-superior/) ||\r\n this._dataSet.space.match(/^left-posterior-superior/)\r\n ) {\r\n this._rightHanded = true;\r\n } else {\r\n this._rightHanded = false;\r\n }\r\n\r\n return this._rightHanded;\r\n }\r\n\r\n /**\r\n * Series instance UID\r\n *\r\n * @return {*}\r\n */\r\n seriesInstanceUID() {\r\n // use filename + timestamp..?\r\n return this._url;\r\n }\r\n\r\n /**\r\n * Number of frames\r\n *\r\n * @return {*}\r\n */\r\n numberOfFrames() {\r\n return this._dataSet.sizes[2];\r\n }\r\n\r\n /**\r\n * Number of channels\r\n *\r\n * @return {*}\r\n */\r\n numberOfChannels() {\r\n return 1;\r\n }\r\n\r\n /**\r\n * SOP instance UID\r\n *\r\n * @param {*} frameIndex\r\n *\r\n * @return {*}\r\n */\r\n sopInstanceUID(frameIndex = 0) {\r\n return frameIndex;\r\n }\r\n\r\n /**\r\n * Rows\r\n *\r\n * @param {*} frameIndex\r\n *\r\n * @return {*}\r\n */\r\n rows(frameIndex = 0) {\r\n return this._dataSet.sizes[1];\r\n }\r\n\r\n /**\r\n * Columns\r\n *\r\n * @param {*} frameIndex\r\n *\r\n * @return {*}\r\n */\r\n columns(frameIndex = 0) {\r\n return this._dataSet.sizes[0];\r\n }\r\n\r\n /**\r\n * Pixel type\r\n *\r\n * @param {*} frameIndex\r\n *\r\n * @return {*}\r\n */\r\n pixelType(frameIndex = 0) {\r\n // 0 - int\r\n // 1 - float\r\n let pixelType = 0;\r\n if (this._dataSet.type === 'float') {\r\n pixelType = 1;\r\n }\r\n return pixelType;\r\n }\r\n\r\n /**\r\n * Bits allocated\r\n *\r\n * @param {*} frameIndex\r\n *\r\n * @return {*}\r\n */\r\n bitsAllocated(frameIndex = 0) {\r\n let bitsAllocated = 1;\r\n\r\n if (\r\n this._dataSet.type === 'int8' ||\r\n this._dataSet.type === 'uint8' ||\r\n this._dataSet.type === 'char'\r\n ) {\r\n bitsAllocated = 8;\r\n } else if (\r\n this._dataSet.type === 'int16' ||\r\n this._dataSet.type === 'uint16' ||\r\n this._dataSet.type === 'short'\r\n ) {\r\n bitsAllocated = 16;\r\n } else if (\r\n this._dataSet.type === 'int32' ||\r\n this._dataSet.type === 'uint32' ||\r\n this._dataSet.type === 'float'\r\n ) {\r\n bitsAllocated = 32;\r\n }\r\n\r\n return bitsAllocated;\r\n }\r\n\r\n /**\r\n * Pixel spacing\r\n *\r\n * @param {*} frameIndex\r\n *\r\n * @return {*}\r\n */\r\n pixelSpacing(frameIndex = 0) {\r\n const x = new Vector3(\r\n this._dataSet.spaceDirections[0][0],\r\n this._dataSet.spaceDirections[0][1],\r\n this._dataSet.spaceDirections[0][2]\r\n );\r\n\r\n const y = new Vector3(\r\n this._dataSet.spaceDirections[1][0],\r\n this._dataSet.spaceDirections[1][1],\r\n this._dataSet.spaceDirections[1][2]\r\n );\r\n\r\n const z = new Vector3(\r\n this._dataSet.spaceDirections[2][0],\r\n this._dataSet.spaceDirections[2][1],\r\n this._dataSet.spaceDirections[2][2]\r\n );\r\n\r\n return [x.length(), y.length(), z.length()];\r\n }\r\n\r\n /**\r\n * Image orientation\r\n *\r\n * @param {*} frameIndex\r\n *\r\n * @return {*}\r\n */\r\n imageOrientation(frameIndex = 0) {\r\n let invertX = this._dataSet.space.match(/right/) ? -1 : 1;\r\n let invertY = this._dataSet.space.match(/anterior/) ? -1 : 1;\r\n\r\n let x = new Vector3(\r\n this._dataSet.spaceDirections[0][0] * invertX,\r\n this._dataSet.spaceDirections[0][1] * invertY,\r\n this._dataSet.spaceDirections[0][2]\r\n );\r\n x.normalize();\r\n\r\n let y = new Vector3(\r\n this._dataSet.spaceDirections[1][0] * invertX,\r\n this._dataSet.spaceDirections[1][1] * invertY,\r\n this._dataSet.spaceDirections[1][2]\r\n );\r\n y.normalize();\r\n\r\n return [x.x, x.y, x.z, y.x, y.y, y.z];\r\n }\r\n\r\n /**\r\n * Image position\r\n *\r\n * @param {*} frameIndex\r\n *\r\n * @return {*}\r\n */\r\n imagePosition(frameIndex = 0) {\r\n return [\r\n this._dataSet.spaceOrigin[0],\r\n this._dataSet.spaceOrigin[1],\r\n this._dataSet.spaceOrigin[2],\r\n ];\r\n }\r\n\r\n /**\r\n * Extract pixel data ffrom array buffer\r\n *\r\n * @param {*} frameIndex\r\n *\r\n * @return {*}\r\n */\r\n extractPixelData(frameIndex = 0) {\r\n return this._decompressUncompressed(frameIndex);\r\n }\r\n\r\n /**\r\n * Decompress data from uncompressed array buffer\r\n *\r\n * @param {*} frameIndex\r\n *\r\n * @return {*}\r\n */\r\n _decompressUncompressed(frameIndex = 0) {\r\n let buffer = this._dataSet.buffer;\r\n const numberOfChannels = this.numberOfChannels();\r\n const numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels;\r\n if (!this.rightHanded()) {\r\n frameIndex = this.numberOfFrames() - 1 - frameIndex;\r\n }\r\n let frameOffset = frameIndex * numPixels;\r\n\r\n // unpack data if needed\r\n if (this._unpackedData === null && this._dataSet.encoding === 'gzip') {\r\n let unpackedData = pako.inflate(this._dataSet.buffer);\r\n this._unpackedData = unpackedData.buffer;\r\n buffer = this._unpackedData;\r\n } else if (this._dataSet.encoding === 'gzip') {\r\n buffer = this._unpackedData;\r\n }\r\n\r\n if (this._dataSet.type === 'int8' || this._dataSet.type === 'char') {\r\n return new Int8Array(buffer, frameOffset, numPixels);\r\n } else if (this._dataSet.type === 'uint8') {\r\n return new Uint8Array(buffer, frameOffset, numPixels);\r\n } else if (this._dataSet.type === 'int16' || this._dataSet.type === 'short') {\r\n frameOffset = frameOffset * 2;\r\n return new Int16Array(buffer, frameOffset, numPixels);\r\n } else if (this._dataSet.type === 'uint16') {\r\n frameOffset = frameOffset * 2;\r\n return new Uint16Array(buffer, frameOffset, numPixels);\r\n } else if (this._dataSet.type === 'int32') {\r\n frameOffset = frameOffset * 4;\r\n return new Int32Array(buffer, frameOffset, numPixels);\r\n } else if (this._dataSet.type === 'uint32') {\r\n frameOffset = frameOffset * 4;\r\n return new Uint32Array(buffer, frameOffset, numPixels);\r\n } else if (this._dataSet.type === 'float') {\r\n frameOffset = frameOffset * 4;\r\n return new Float32Array(buffer, frameOffset, numPixels);\r\n }\r\n }\r\n}\r\n","/**\r\n * @module parsers/volume\r\n */\r\nexport default class ParsersVolume {\r\n constructor() {\r\n this._rightHanded = true;\r\n }\r\n\r\n pixelRepresentation() {\r\n return 0;\r\n }\r\n\r\n pixelPaddingValue(frameIndex = 0) {\r\n return null;\r\n }\r\n\r\n modality() {\r\n return 'unknown';\r\n }\r\n\r\n segmentationType() {\r\n return 'unknown';\r\n }\r\n\r\n segmentationSegments() {\r\n return [];\r\n }\r\n\r\n referencedSegmentNumber(frameIndex) {\r\n return -1;\r\n }\r\n\r\n rightHanded() {\r\n return this._rightHanded;\r\n }\r\n\r\n spacingBetweenSlices() {\r\n return null;\r\n }\r\n\r\n numberOfChannels() {\r\n return 1;\r\n }\r\n\r\n sliceThickness() {\r\n return null;\r\n }\r\n\r\n dimensionIndexValues(frameIndex = 0) {\r\n return null;\r\n }\r\n\r\n instanceNumber(frameIndex = 0) {\r\n return frameIndex;\r\n }\r\n\r\n windowCenter(frameIndex = 0) {\r\n return null;\r\n }\r\n\r\n windowWidth(frameIndex = 0) {\r\n return null;\r\n }\r\n\r\n rescaleSlope(frameIndex = 0) {\r\n return 1;\r\n }\r\n\r\n rescaleIntercept(frameIndex = 0) {\r\n return 0;\r\n }\r\n\r\n ultrasoundRegions(frameIndex = 0) {\r\n return [];\r\n }\r\n\r\n frameTime(frameIndex = 0) {\r\n return null;\r\n }\r\n\r\n _decompressUncompressed() {}\r\n\r\n // http://stackoverflow.com/questions/5320439/how-do-i-swap-endian-ness-byte-order-of-a-variable-in-javascript\r\n _swap16(val) {\r\n return ((val & 0xff) << 8) | ((val >> 8) & 0xff);\r\n }\r\n\r\n _swap32(val) {\r\n return (\r\n ((val & 0xff) << 24) | ((val & 0xff00) << 8) | ((val >> 8) & 0xff00) | ((val >> 24) & 0xff)\r\n );\r\n }\r\n\r\n invert() {\r\n return false;\r\n }\r\n\r\n /**\r\n * Get the transfer syntax UID.\r\n * @return {*}\r\n */\r\n transferSyntaxUID() {\r\n return 'no value provided';\r\n }\r\n\r\n /**\r\n * Get the study date.\r\n * @return {*}\r\n */\r\n studyDate() {\r\n return 'no value provided';\r\n }\r\n\r\n /**\r\n * Get the study desciption.\r\n * @return {*}\r\n */\r\n studyDescription() {\r\n return 'no value provided';\r\n }\r\n\r\n /**\r\n * Get the series date.\r\n * @return {*}\r\n */\r\n seriesDate() {\r\n return 'no value provided';\r\n }\r\n\r\n /**\r\n * Get the series desciption.\r\n * @return {*}\r\n */\r\n seriesDescription() {\r\n return 'no value provided';\r\n }\r\n \r\n /**\r\n * Get the raw Header.\r\n * @return {*}\r\n */\r\n rawHeader() {\r\n return 'no value provided';\r\n }\r\n\r\n /**\r\n * Get the patient ID.\r\n * @return {*}\r\n */\r\n patientID() {\r\n return 'no value provided';\r\n }\r\n\r\n /**\r\n * Get the patient name.\r\n * @return {*}\r\n */\r\n patientName() {\r\n return 'no value provided';\r\n }\r\n\r\n /**\r\n * Get the patient age.\r\n * @return {*}\r\n */\r\n patientAge() {\r\n return 'no value provided';\r\n }\r\n\r\n /**\r\n * Get the patient birthdate.\r\n * @return {*}\r\n */\r\n patientBirthdate() {\r\n return 'no value provided';\r\n }\r\n\r\n /**\r\n * Get the patient sex.\r\n * @return {*}\r\n */\r\n patientSex() {\r\n return 'no value provided';\r\n }\r\n\r\n /**\r\n * Get min/max values in array\r\n *\r\n * @param {*} pixelData\r\n *\r\n * @return {*}\r\n */\r\n minMaxPixelData(pixelData = []) {\r\n let minMax = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY];\r\n let numPixels = pixelData.length;\r\n for (let index = 0; index < numPixels; index++) {\r\n let spv = pixelData[index];\r\n minMax[0] = Math.min(minMax[0], spv);\r\n minMax[1] = Math.max(minMax[1], spv);\r\n }\r\n\r\n return minMax;\r\n }\r\n}\r\n","import Segmentation from './presets.segmentation';\r\nexport { Segmentation as SegmentationPreset };\r\n","const segmentationFs = {\r\n 0: { color: [0, 0, 0], opacity: 0, label: 'Unknown' },\r\n 1: { color: [70, 130, 180], opacity: 1, label: 'Left-Cerebral-Exterior' },\r\n 2: { color: [245, 245, 245], opacity: 1, label: 'Left-Cerebral-White-Matter' },\r\n 3: { color: [205, 62, 78], opacity: 1, label: 'Left-Cerebral-Cortex' },\r\n 4: { color: [120, 18, 134], opacity: 1, label: 'Left-Lateral-Ventricle' },\r\n 5: { color: [196, 58, 250], opacity: 1, label: 'Left-Inf-Lat-Vent' },\r\n 6: { color: [0, 148, 0], opacity: 1, label: 'Left-Cerebellum-Exterior' },\r\n 7: { color: [220, 248, 164], opacity: 1, label: 'Left-Cerebellum-White-Matter' },\r\n 8: { color: [230, 148, 34], opacity: 1, label: 'Left-Cerebellum-Cortex' },\r\n 9: { color: [0, 118, 14], opacity: 1, label: 'Left-Thalamus' },\r\n 10: { color: [0, 118, 14], opacity: 1, label: 'Left-Thalamus-Proper' },\r\n 11: { color: [122, 186, 220], opacity: 1, label: 'Left-Caudate' },\r\n 12: { color: [236, 13, 176], opacity: 1, label: 'Left-Putamen' },\r\n 13: { color: [12, 48, 255], opacity: 1, label: 'Left-Pallidum' },\r\n 14: { color: [204, 182, 142], opacity: 1, label: '3rd-Ventricle' },\r\n 15: { color: [42, 204, 164], opacity: 1, label: '4th-Ventricle' },\r\n 16: { color: [119, 159, 176], opacity: 1, label: 'Brain-Stem' },\r\n 17: { color: [220, 216, 20], opacity: 1, label: 'Left-Hippocampus' },\r\n 18: { color: [103, 255, 255], opacity: 1, label: 'Left-Amygdala' },\r\n 19: { color: [80, 196, 98], opacity: 1, label: 'Left-Insula' },\r\n 20: { color: [60, 58, 210], opacity: 1, label: 'Left-Operculum' },\r\n 21: { color: [60, 58, 210], opacity: 1, label: 'Line-1' },\r\n 22: { color: [60, 58, 210], opacity: 1, label: 'Line-2' },\r\n 23: { color: [60, 58, 210], opacity: 1, label: 'Line-3' },\r\n 24: { color: [60, 60, 60], opacity: 1, label: 'CSF' },\r\n 25: { color: [255, 165, 0], opacity: 1, label: 'Left-Lesion' },\r\n 26: { color: [255, 165, 0], opacity: 1, label: 'Left-Accumbens-area' },\r\n 27: { color: [0, 255, 127], opacity: 1, label: 'Left-Substancia-Nigra' },\r\n 28: { color: [165, 42, 42], opacity: 1, label: 'Left-VentralDC' },\r\n 29: { color: [135, 206, 235], opacity: 1, label: 'Left-undetermined' },\r\n 30: { color: [160, 32, 240], opacity: 1, label: 'Left-vessel' },\r\n 31: { color: [0, 200, 200], opacity: 1, label: 'Left-choroid-plexus' },\r\n 32: { color: [100, 50, 100], opacity: 1, label: 'Left-F3orb' },\r\n 33: { color: [135, 50, 74], opacity: 1, label: 'Left-lOg' },\r\n 34: { color: [122, 135, 50], opacity: 1, label: 'Left-aOg' },\r\n 35: { color: [51, 50, 135], opacity: 1, label: 'Left-mOg' },\r\n 36: { color: [74, 155, 60], opacity: 1, label: 'Left-pOg' },\r\n 37: { color: [120, 62, 43], opacity: 1, label: 'Left-Stellate' },\r\n 38: { color: [74, 155, 60], opacity: 1, label: 'Left-Porg' },\r\n 39: { color: [122, 135, 50], opacity: 1, label: 'Left-Aorg' },\r\n 40: { color: [70, 130, 180], opacity: 1, label: 'Right-Cerebral-Exterior' },\r\n 41: { color: [245, 245, 245], opacity: 1, label: 'Right-Cerebral-White-Matter' },\r\n 42: { color: [205, 62, 78], opacity: 1, label: 'Right-Cerebral-Cortex' },\r\n 43: { color: [120, 18, 134], opacity: 1, label: 'Right-Lateral-Ventricle' },\r\n 44: { color: [196, 58, 250], opacity: 1, label: 'Right-Inf-Lat-Vent' },\r\n 45: { color: [0, 148, 0], opacity: 1, label: 'Right-Cerebellum-Exterior' },\r\n 46: { color: [220, 248, 164], opacity: 1, label: 'Right-Cerebellum-White-Matter' },\r\n 47: { color: [230, 148, 34], opacity: 1, label: 'Right-Cerebellum-Cortex' },\r\n 48: { color: [0, 118, 14], opacity: 1, label: 'Right-Thalamus' },\r\n 49: { color: [0, 118, 14], opacity: 1, label: 'Right-Thalamus-Proper' },\r\n 50: { color: [122, 186, 220], opacity: 1, label: 'Right-Caudate' },\r\n 51: { color: [236, 13, 176], opacity: 1, label: 'Right-Putamen' },\r\n 52: { color: [13, 48, 255], opacity: 1, label: 'Right-Pallidum' },\r\n 53: { color: [220, 216, 20], opacity: 1, label: 'Right-Hippocampus' },\r\n 54: { color: [103, 255, 255], opacity: 1, label: 'Right-Amygdala' },\r\n 55: { color: [80, 196, 98], opacity: 1, label: 'Right-Insula' },\r\n 56: { color: [60, 58, 210], opacity: 1, label: 'Right-Operculum' },\r\n 57: { color: [255, 165, 0], opacity: 1, label: 'Right-Lesion' },\r\n 58: { color: [255, 165, 0], opacity: 1, label: 'Right-Accumbens-area' },\r\n 59: { color: [0, 255, 127], opacity: 1, label: 'Right-Substancia-Nigra' },\r\n 60: { color: [165, 42, 42], opacity: 1, label: 'Right-VentralDC' },\r\n 61: { color: [135, 206, 235], opacity: 1, label: 'Right-undetermined' },\r\n 62: { color: [160, 32, 240], opacity: 1, label: 'Right-vessel' },\r\n 63: { color: [0, 200, 221], opacity: 1, label: 'Right-choroid-plexus' },\r\n 64: { color: [100, 50, 100], opacity: 1, label: 'Right-F3orb' },\r\n 65: { color: [135, 50, 74], opacity: 1, label: 'Right-lOg' },\r\n 66: { color: [122, 135, 50], opacity: 1, label: 'Right-aOg' },\r\n 67: { color: [51, 50, 135], opacity: 1, label: 'Right-mOg' },\r\n 68: { color: [74, 155, 60], opacity: 1, label: 'Right-pOg' },\r\n 69: { color: [120, 62, 43], opacity: 1, label: 'Right-Stellate' },\r\n 70: { color: [74, 155, 60], opacity: 1, label: 'Right-Porg' },\r\n 71: { color: [122, 135, 50], opacity: 1, label: 'Right-Aorg' },\r\n 72: { color: [120, 190, 150], opacity: 1, label: '5th-Ventricle' },\r\n 73: { color: [122, 135, 50], opacity: 1, label: 'Left-Interior' },\r\n 74: { color: [122, 135, 50], opacity: 1, label: 'Right-Interior' },\r\n 77: { color: [200, 70, 255], opacity: 1, label: 'WM-hypointensities' },\r\n 78: { color: [255, 148, 10], opacity: 1, label: 'Left-WM-hypointensities' },\r\n 79: { color: [255, 148, 10], opacity: 1, label: 'Right-WM-hypointensities' },\r\n 80: { color: [164, 108, 226], opacity: 1, label: 'non-WM-hypointensities' },\r\n 81: { color: [164, 108, 226], opacity: 1, label: 'Left-non-WM-hypointensities' },\r\n 82: { color: [164, 108, 226], opacity: 1, label: 'Right-non-WM-hypointensities' },\r\n 83: { color: [255, 218, 185], opacity: 1, label: 'Left-F1' },\r\n 84: { color: [255, 218, 185], opacity: 1, label: 'Right-F1' },\r\n 85: { color: [234, 169, 30], opacity: 1, label: 'Optic-Chiasm' },\r\n 192: { color: [250, 255, 50], opacity: 1, label: 'Corpus_Callosum' },\r\n 86: { color: [200, 120, 255], opacity: 1, label: 'Left_future_WMSA' },\r\n 87: { color: [200, 121, 255], opacity: 1, label: 'Right_future_WMSA' },\r\n 88: { color: [200, 122, 255], opacity: 1, label: 'future_WMSA' },\r\n 96: { color: [205, 10, 125], opacity: 1, label: 'Left-Amygdala-Anterior' },\r\n 97: { color: [205, 10, 125], opacity: 1, label: 'Right-Amygdala-Anterior' },\r\n 98: { color: [160, 32, 240], opacity: 1, label: 'Dura' },\r\n 100: { color: [124, 140, 178], opacity: 1, label: 'Left-wm-intensity-abnormality' },\r\n 101: { color: [125, 140, 178], opacity: 1, label: 'Left-caudate-intensity-abnormality' },\r\n 102: { color: [126, 140, 178], opacity: 1, label: 'Left-putamen-intensity-abnormality' },\r\n 103: { color: [127, 140, 178], opacity: 1, label: 'Left-accumbens-intensity-abnormality' },\r\n 104: { color: [124, 141, 178], opacity: 1, label: 'Left-pallidum-intensity-abnormality' },\r\n 105: { color: [124, 142, 178], opacity: 1, label: 'Left-amygdala-intensity-abnormality' },\r\n 106: { color: [124, 143, 178], opacity: 1, label: 'Left-hippocampus-intensity-abnormality' },\r\n 107: { color: [124, 144, 178], opacity: 1, label: 'Left-thalamus-intensity-abnormality' },\r\n 108: { color: [124, 140, 179], opacity: 1, label: 'Left-VDC-intensity-abnormality' },\r\n 109: { color: [124, 140, 178], opacity: 1, label: 'Right-wm-intensity-abnormality' },\r\n 110: { color: [125, 140, 178], opacity: 1, label: 'Right-caudate-intensity-abnormality' },\r\n 111: { color: [126, 140, 178], opacity: 1, label: 'Right-putamen-intensity-abnormality' },\r\n 112: { color: [127, 140, 178], opacity: 1, label: 'Right-accumbens-intensity-abnormality' },\r\n 113: { color: [124, 141, 178], opacity: 1, label: 'Right-pallidum-intensity-abnormality' },\r\n 114: { color: [124, 142, 178], opacity: 1, label: 'Right-amygdala-intensity-abnormality' },\r\n 115: { color: [124, 143, 178], opacity: 1, label: 'Right-hippocampus-intensity-abnormality' },\r\n 116: { color: [124, 144, 178], opacity: 1, label: 'Right-thalamus-intensity-abnormality' },\r\n 117: { color: [124, 140, 179], opacity: 1, label: 'Right-VDC-intensity-abnormality' },\r\n 118: { color: [255, 20, 147], opacity: 1, label: 'Epidermis' },\r\n 119: { color: [205, 179, 139], opacity: 1, label: 'Conn-Tissue' },\r\n 120: { color: [238, 238, 209], opacity: 1, label: 'SC-Fat-Muscle' },\r\n 121: { color: [200, 200, 200], opacity: 1, label: 'Cranium' },\r\n 122: { color: [74, 255, 74], opacity: 1, label: 'CSF-SA' },\r\n 123: { color: [238, 0, 0], opacity: 1, label: 'Muscle' },\r\n 124: { color: [0, 0, 139], opacity: 1, label: 'Ear' },\r\n 125: { color: [173, 255, 47], opacity: 1, label: 'Adipose' },\r\n 126: { color: [133, 203, 229], opacity: 1, label: 'Spinal-Cord' },\r\n 127: { color: [26, 237, 57], opacity: 1, label: 'Soft-Tissue' },\r\n 128: { color: [34, 139, 34], opacity: 1, label: 'Nerve' },\r\n 129: { color: [30, 144, 255], opacity: 1, label: 'Bone' },\r\n 130: { color: [147, 19, 173], opacity: 1, label: 'Air' },\r\n 131: { color: [238, 59, 59], opacity: 1, label: 'Orbital-Fat' },\r\n 132: { color: [221, 39, 200], opacity: 1, label: 'Tongue' },\r\n 133: { color: [238, 174, 238], opacity: 1, label: 'Nasal-Structures' },\r\n 134: { color: [255, 0, 0], opacity: 1, label: 'Globe' },\r\n 135: { color: [72, 61, 139], opacity: 1, label: 'Teeth' },\r\n 136: { color: [21, 39, 132], opacity: 1, label: 'Left-Caudate-Putamen' },\r\n 137: { color: [21, 39, 132], opacity: 1, label: 'Right-Caudate-Putamen' },\r\n 138: { color: [65, 135, 20], opacity: 1, label: 'Left-Claustrum' },\r\n 139: { color: [65, 135, 20], opacity: 1, label: 'Right-Claustrum' },\r\n 140: { color: [134, 4, 160], opacity: 1, label: 'Cornea' },\r\n 142: { color: [221, 226, 68], opacity: 1, label: 'Diploe' },\r\n 143: { color: [255, 255, 254], opacity: 1, label: 'Vitreous-Humor' },\r\n 144: { color: [52, 209, 226], opacity: 1, label: 'Lens' },\r\n 145: { color: [239, 160, 223], opacity: 1, label: 'Aqueous-Humor' },\r\n 146: { color: [70, 130, 180], opacity: 1, label: 'Outer-Table' },\r\n 147: { color: [70, 130, 181], opacity: 1, label: 'Inner-Table' },\r\n 148: { color: [139, 121, 94], opacity: 1, label: 'Periosteum' },\r\n 149: { color: [224, 224, 224], opacity: 1, label: 'Endosteum' },\r\n 150: { color: [255, 0, 0], opacity: 1, label: 'R-C-S' },\r\n 151: { color: [205, 205, 0], opacity: 1, label: 'Iris' },\r\n 152: { color: [238, 238, 209], opacity: 1, label: 'SC-Adipose-Muscle' },\r\n 153: { color: [139, 121, 94], opacity: 1, label: 'SC-Tissue' },\r\n 154: { color: [238, 59, 59], opacity: 1, label: 'Orbital-Adipose' },\r\n 155: { color: [238, 59, 59], opacity: 1, label: 'Left-IntCapsule-Ant' },\r\n 156: { color: [238, 59, 59], opacity: 1, label: 'Right-IntCapsule-Ant' },\r\n 157: { color: [62, 10, 205], opacity: 1, label: 'Left-IntCapsule-Pos' },\r\n 158: { color: [62, 10, 205], opacity: 1, label: 'Right-IntCapsule-Pos' },\r\n 159: { color: [0, 118, 14], opacity: 1, label: 'Left-Cerebral-WM-unmyelinated' },\r\n 160: { color: [0, 118, 14], opacity: 1, label: 'Right-Cerebral-WM-unmyelinated' },\r\n 161: { color: [220, 216, 21], opacity: 1, label: 'Left-Cerebral-WM-myelinated' },\r\n 162: { color: [220, 216, 21], opacity: 1, label: 'Right-Cerebral-WM-myelinated' },\r\n 163: { color: [122, 186, 220], opacity: 1, label: 'Left-Subcortical-Gray-Matter' },\r\n 164: { color: [122, 186, 220], opacity: 1, label: 'Right-Subcortical-Gray-Matter' },\r\n 165: { color: [120, 120, 120], opacity: 1, label: 'Skull' },\r\n 166: { color: [14, 48, 255], opacity: 1, label: 'Posterior-fossa' },\r\n 167: { color: [166, 42, 42], opacity: 1, label: 'Scalp' },\r\n 168: { color: [121, 18, 134], opacity: 1, label: 'Hematoma' },\r\n 169: { color: [236, 13, 127], opacity: 1, label: 'Left-Basal-Ganglia' },\r\n 176: { color: [236, 13, 126], opacity: 1, label: 'Right-Basal-Ganglia' },\r\n 170: { color: [119, 159, 176], opacity: 1, label: 'brainstem' },\r\n 171: { color: [119, 0, 176], opacity: 1, label: 'DCG' },\r\n 172: { color: [119, 100, 176], opacity: 1, label: 'Vermis' },\r\n 173: { color: [242, 104, 76], opacity: 1, label: 'Midbrain' },\r\n 174: { color: [206, 195, 58], opacity: 1, label: 'Pons' },\r\n 175: { color: [119, 159, 176], opacity: 1, label: 'Medulla' },\r\n 177: { color: [119, 50, 176], opacity: 1, label: 'Vermis-White-Matter' },\r\n 178: { color: [142, 182, 0], opacity: 1, label: 'SCP' },\r\n 179: { color: [19, 100, 176], opacity: 1, label: 'Floculus' },\r\n 180: { color: [73, 61, 139], opacity: 1, label: 'Left-Cortical-Dysplasia' },\r\n 181: { color: [73, 62, 139], opacity: 1, label: 'Right-Cortical-Dysplasia' },\r\n 182: { color: [10, 100, 176], opacity: 1, label: 'CblumNodulus' },\r\n 193: { color: [0, 196, 255], opacity: 1, label: 'Left-hippocampal_fissure' },\r\n 194: { color: [255, 164, 164], opacity: 1, label: 'Left-CADG-head' },\r\n 195: { color: [196, 196, 0], opacity: 1, label: 'Left-subiculum' },\r\n 196: { color: [0, 100, 255], opacity: 1, label: 'Left-fimbria' },\r\n 197: { color: [128, 196, 164], opacity: 1, label: 'Right-hippocampal_fissure' },\r\n 198: { color: [0, 126, 75], opacity: 1, label: 'Right-CADG-head' },\r\n 199: { color: [128, 96, 64], opacity: 1, label: 'Right-subiculum' },\r\n 200: { color: [0, 50, 128], opacity: 1, label: 'Right-fimbria' },\r\n 201: { color: [255, 204, 153], opacity: 1, label: 'alveus' },\r\n 202: { color: [255, 128, 128], opacity: 1, label: 'perforant_pathway' },\r\n 203: { color: [255, 255, 0], opacity: 1, label: 'parasubiculum' },\r\n 204: { color: [64, 0, 64], opacity: 1, label: 'presubiculum' },\r\n 205: { color: [0, 0, 255], opacity: 1, label: 'subiculum' },\r\n 206: { color: [255, 0, 0], opacity: 1, label: 'CA1' },\r\n 207: { color: [128, 128, 255], opacity: 1, label: 'CA2' },\r\n 208: { color: [0, 128, 0], opacity: 1, label: 'CA3' },\r\n 209: { color: [196, 160, 128], opacity: 1, label: 'CA4' },\r\n 210: { color: [32, 200, 255], opacity: 1, label: 'GC-DG' },\r\n 211: { color: [128, 255, 128], opacity: 1, label: 'HATA' },\r\n 212: { color: [204, 153, 204], opacity: 1, label: 'fimbria' },\r\n 213: { color: [121, 17, 136], opacity: 1, label: 'lateral_ventricle' },\r\n 214: { color: [128, 0, 0], opacity: 1, label: 'molecular_layer_HP' },\r\n 215: { color: [128, 32, 255], opacity: 1, label: 'hippocampal_fissure' },\r\n 216: { color: [255, 204, 102], opacity: 1, label: 'entorhinal_cortex' },\r\n 217: { color: [128, 128, 128], opacity: 1, label: 'molecular_layer_subiculum' },\r\n 218: { color: [104, 255, 255], opacity: 1, label: 'Amygdala' },\r\n 219: { color: [0, 226, 0], opacity: 1, label: 'Cerebral_White_Matter' },\r\n 220: { color: [205, 63, 78], opacity: 1, label: 'Cerebral_Cortex' },\r\n 221: { color: [197, 58, 250], opacity: 1, label: 'Inf_Lat_Vent' },\r\n 222: { color: [33, 150, 250], opacity: 1, label: 'Perirhinal' },\r\n 223: { color: [226, 0, 0], opacity: 1, label: 'Cerebral_White_Matter_Edge' },\r\n 224: { color: [100, 100, 100], opacity: 1, label: 'Background' },\r\n 225: { color: [197, 150, 250], opacity: 1, label: 'Ectorhinal' },\r\n 226: { color: [170, 170, 255], opacity: 1, label: 'HP_tail' },\r\n 250: { color: [255, 0, 0], opacity: 1, label: 'Fornix' },\r\n 251: { color: [0, 0, 64], opacity: 1, label: 'CC_Posterior' },\r\n 252: { color: [0, 0, 112], opacity: 1, label: 'CC_Mid_Posterior' },\r\n 253: { color: [0, 0, 160], opacity: 1, label: 'CC_Central' },\r\n 254: { color: [0, 0, 208], opacity: 1, label: 'CC_Mid_Anterior' },\r\n 255: { color: [0, 0, 255], opacity: 1, label: 'CC_Anterior' },\r\n 256: { color: [0, 0, 0], opacity: 1, label: 'Voxel-Unchanged' },\r\n 257: { color: [60, 60, 60], opacity: 1, label: 'CSF-ExtraCerebral' },\r\n 258: { color: [150, 150, 200], opacity: 1, label: 'Head-ExtraCerebral' },\r\n 259: { color: [120, 120, 120], opacity: 1, label: 'SkullApprox' },\r\n 260: { color: [119, 159, 176], opacity: 1, label: 'BoneOrAir' },\r\n 261: { color: [120, 18, 134], opacity: 1, label: 'PossibleFluid' },\r\n 262: { color: [119, 159, 176], opacity: 1, label: 'Sinus' },\r\n 263: { color: [119, 159, 176], opacity: 1, label: 'Left-Eustachian' },\r\n 264: { color: [119, 159, 176], opacity: 1, label: 'Right-Eustachian' },\r\n 331: { color: [255, 0, 0], opacity: 1, label: 'Aorta' },\r\n 332: { color: [255, 80, 0], opacity: 1, label: 'Left-Common-IliacA' },\r\n 333: { color: [255, 160, 0], opacity: 1, label: 'Right-Common-IliacA' },\r\n 334: { color: [255, 255, 0], opacity: 1, label: 'Left-External-IliacA' },\r\n 335: { color: [0, 255, 0], opacity: 1, label: 'Right-External-IliacA' },\r\n 336: { color: [255, 0, 160], opacity: 1, label: 'Left-Internal-IliacA' },\r\n 337: { color: [255, 0, 255], opacity: 1, label: 'Right-Internal-IliacA' },\r\n 338: { color: [255, 50, 80], opacity: 1, label: 'Left-Lateral-SacralA' },\r\n 339: { color: [80, 255, 50], opacity: 1, label: 'Right-Lateral-SacralA' },\r\n 340: { color: [160, 255, 50], opacity: 1, label: 'Left-ObturatorA' },\r\n 341: { color: [160, 200, 255], opacity: 1, label: 'Right-ObturatorA' },\r\n 342: { color: [0, 255, 160], opacity: 1, label: 'Left-Internal-PudendalA' },\r\n 343: { color: [0, 0, 255], opacity: 1, label: 'Right-Internal-PudendalA' },\r\n 344: { color: [80, 50, 255], opacity: 1, label: 'Left-UmbilicalA' },\r\n 345: { color: [160, 0, 255], opacity: 1, label: 'Right-UmbilicalA' },\r\n 346: { color: [255, 210, 0], opacity: 1, label: 'Left-Inf-RectalA' },\r\n 347: { color: [0, 160, 255], opacity: 1, label: 'Right-Inf-RectalA' },\r\n 348: { color: [255, 200, 80], opacity: 1, label: 'Left-Common-IliacV' },\r\n 349: { color: [255, 200, 160], opacity: 1, label: 'Right-Common-IliacV' },\r\n 350: { color: [255, 80, 200], opacity: 1, label: 'Left-External-IliacV' },\r\n 351: { color: [255, 160, 200], opacity: 1, label: 'Right-External-IliacV' },\r\n 352: { color: [30, 255, 80], opacity: 1, label: 'Left-Internal-IliacV' },\r\n 353: { color: [80, 200, 255], opacity: 1, label: 'Right-Internal-IliacV' },\r\n 354: { color: [80, 255, 200], opacity: 1, label: 'Left-ObturatorV' },\r\n 355: { color: [195, 255, 200], opacity: 1, label: 'Right-ObturatorV' },\r\n 356: { color: [120, 200, 20], opacity: 1, label: 'Left-Internal-PudendalV' },\r\n 357: { color: [170, 10, 200], opacity: 1, label: 'Right-Internal-PudendalV' },\r\n 358: { color: [20, 130, 180], opacity: 1, label: 'Pos-Lymph' },\r\n 359: { color: [20, 180, 130], opacity: 1, label: 'Neg-Lymph' },\r\n 400: { color: [206, 62, 78], opacity: 1, label: 'V1' },\r\n 401: { color: [121, 18, 134], opacity: 1, label: 'V2' },\r\n 402: { color: [199, 58, 250], opacity: 1, label: 'BA44' },\r\n 403: { color: [1, 148, 0], opacity: 1, label: 'BA45' },\r\n 404: { color: [221, 248, 164], opacity: 1, label: 'BA4a' },\r\n 405: { color: [231, 148, 34], opacity: 1, label: 'BA4p' },\r\n 406: { color: [1, 118, 14], opacity: 1, label: 'BA6' },\r\n 407: { color: [120, 118, 14], opacity: 1, label: 'BA2' },\r\n 408: { color: [123, 186, 221], opacity: 1, label: 'BA1_old' },\r\n 409: { color: [238, 13, 177], opacity: 1, label: 'BAun2' },\r\n 410: { color: [123, 186, 220], opacity: 1, label: 'BA1' },\r\n 411: { color: [138, 13, 206], opacity: 1, label: 'BA2b' },\r\n 412: { color: [238, 130, 176], opacity: 1, label: 'BA3a' },\r\n 413: { color: [218, 230, 76], opacity: 1, label: 'BA3b' },\r\n 414: { color: [38, 213, 176], opacity: 1, label: 'MT' },\r\n 415: { color: [1, 225, 176], opacity: 1, label: 'AIPS_AIP_l' },\r\n 416: { color: [1, 225, 176], opacity: 1, label: 'AIPS_AIP_r' },\r\n 417: { color: [200, 2, 100], opacity: 1, label: 'AIPS_VIP_l' },\r\n 418: { color: [200, 2, 100], opacity: 1, label: 'AIPS_VIP_r' },\r\n 419: { color: [5, 200, 90], opacity: 1, label: 'IPL_PFcm_l' },\r\n 420: { color: [5, 200, 90], opacity: 1, label: 'IPL_PFcm_r' },\r\n 421: { color: [100, 5, 200], opacity: 1, label: 'IPL_PF_l' },\r\n 422: { color: [25, 255, 100], opacity: 1, label: 'IPL_PFm_l' },\r\n 423: { color: [25, 255, 100], opacity: 1, label: 'IPL_PFm_r' },\r\n 424: { color: [230, 7, 100], opacity: 1, label: 'IPL_PFop_l' },\r\n 425: { color: [230, 7, 100], opacity: 1, label: 'IPL_PFop_r' },\r\n 426: { color: [100, 5, 200], opacity: 1, label: 'IPL_PF_r' },\r\n 427: { color: [150, 10, 200], opacity: 1, label: 'IPL_PFt_l' },\r\n 428: { color: [150, 10, 200], opacity: 1, label: 'IPL_PFt_r' },\r\n 429: { color: [175, 10, 176], opacity: 1, label: 'IPL_PGa_l' },\r\n 430: { color: [175, 10, 176], opacity: 1, label: 'IPL_PGa_r' },\r\n 431: { color: [10, 100, 255], opacity: 1, label: 'IPL_PGp_l' },\r\n 432: { color: [10, 100, 255], opacity: 1, label: 'IPL_PGp_r' },\r\n 433: { color: [150, 45, 70], opacity: 1, label: 'Visual_V3d_l' },\r\n 434: { color: [150, 45, 70], opacity: 1, label: 'Visual_V3d_r' },\r\n 435: { color: [45, 200, 15], opacity: 1, label: 'Visual_V4_l' },\r\n 436: { color: [45, 200, 15], opacity: 1, label: 'Visual_V4_r' },\r\n 437: { color: [227, 45, 100], opacity: 1, label: 'Visual_V5_b' },\r\n 438: { color: [227, 45, 100], opacity: 1, label: 'Visual_VP_l' },\r\n 439: { color: [227, 45, 100], opacity: 1, label: 'Visual_VP_r' },\r\n 498: { color: [143, 188, 143], opacity: 1, label: 'wmsa' },\r\n 499: { color: [255, 248, 220], opacity: 1, label: 'other_wmsa' },\r\n 500: { color: [17, 85, 136], opacity: 1, label: 'right_CA2_3' },\r\n 501: { color: [119, 187, 102], opacity: 1, label: 'right_alveus' },\r\n 502: { color: [204, 68, 34], opacity: 1, label: 'right_CA1' },\r\n 503: { color: [204, 0, 255], opacity: 1, label: 'right_fimbria' },\r\n 504: { color: [221, 187, 17], opacity: 1, label: 'right_presubiculum' },\r\n 505: { color: [153, 221, 238], opacity: 1, label: 'right_hippocampal_fissure' },\r\n 506: { color: [51, 17, 17], opacity: 1, label: 'right_CA4_DG' },\r\n 507: { color: [0, 119, 85], opacity: 1, label: 'right_subiculum' },\r\n 508: { color: [20, 100, 200], opacity: 1, label: 'right_fornix' },\r\n 550: { color: [17, 85, 137], opacity: 1, label: 'left_CA2_3' },\r\n 551: { color: [119, 187, 103], opacity: 1, label: 'left_alveus' },\r\n 552: { color: [204, 68, 35], opacity: 1, label: 'left_CA1' },\r\n 553: { color: [204, 0, 254], opacity: 1, label: 'left_fimbria' },\r\n 554: { color: [221, 187, 16], opacity: 1, label: 'left_presubiculum' },\r\n 555: { color: [153, 221, 239], opacity: 1, label: 'left_hippocampal_fissure' },\r\n 556: { color: [51, 17, 18], opacity: 1, label: 'left_CA4_DG' },\r\n 557: { color: [0, 119, 86], opacity: 1, label: 'left_subiculum' },\r\n 558: { color: [20, 100, 201], opacity: 1, label: 'left_fornix' },\r\n 600: { color: [254, 254, 254], opacity: 1, label: 'Tumor' },\r\n 601: { color: [70, 130, 180], opacity: 1, label: 'Cbm_Left_I_IV' },\r\n 602: { color: [245, 245, 245], opacity: 1, label: 'Cbm_Right_I_IV' },\r\n 603: { color: [205, 62, 78], opacity: 1, label: 'Cbm_Left_V' },\r\n 604: { color: [120, 18, 134], opacity: 1, label: 'Cbm_Right_V' },\r\n 605: { color: [196, 58, 250], opacity: 1, label: 'Cbm_Left_VI' },\r\n 606: { color: [0, 148, 0], opacity: 1, label: 'Cbm_Vermis_VI' },\r\n 607: { color: [220, 248, 164], opacity: 1, label: 'Cbm_Right_VI' },\r\n 608: { color: [230, 148, 34], opacity: 1, label: 'Cbm_Left_CrusI' },\r\n 609: { color: [0, 118, 14], opacity: 1, label: 'Cbm_Vermis_CrusI' },\r\n 610: { color: [0, 118, 14], opacity: 1, label: 'Cbm_Right_CrusI' },\r\n 611: { color: [122, 186, 220], opacity: 1, label: 'Cbm_Left_CrusII' },\r\n 612: { color: [236, 13, 176], opacity: 1, label: 'Cbm_Vermis_CrusII' },\r\n 613: { color: [12, 48, 255], opacity: 1, label: 'Cbm_Right_CrusII' },\r\n 614: { color: [204, 182, 142], opacity: 1, label: 'Cbm_Left_VIIb' },\r\n 615: { color: [42, 204, 164], opacity: 1, label: 'Cbm_Vermis_VIIb' },\r\n 616: { color: [119, 159, 176], opacity: 1, label: 'Cbm_Right_VIIb' },\r\n 617: { color: [220, 216, 20], opacity: 1, label: 'Cbm_Left_VIIIa' },\r\n 618: { color: [103, 255, 255], opacity: 1, label: 'Cbm_Vermis_VIIIa' },\r\n 619: { color: [80, 196, 98], opacity: 1, label: 'Cbm_Right_VIIIa' },\r\n 620: { color: [60, 58, 210], opacity: 1, label: 'Cbm_Left_VIIIb' },\r\n 621: { color: [60, 58, 210], opacity: 1, label: 'Cbm_Vermis_VIIIb' },\r\n 622: { color: [60, 58, 210], opacity: 1, label: 'Cbm_Right_VIIIb' },\r\n 623: { color: [60, 58, 210], opacity: 1, label: 'Cbm_Left_IX' },\r\n 624: { color: [60, 60, 60], opacity: 1, label: 'Cbm_Vermis_IX' },\r\n 625: { color: [255, 165, 0], opacity: 1, label: 'Cbm_Right_IX' },\r\n 626: { color: [255, 165, 0], opacity: 1, label: 'Cbm_Left_X' },\r\n 627: { color: [0, 255, 127], opacity: 1, label: 'Cbm_Vermis_X' },\r\n 628: { color: [165, 42, 42], opacity: 1, label: 'Cbm_Right_X' },\r\n 640: { color: [204, 0, 0], opacity: 1, label: 'Cbm_Right_I_V_med' },\r\n 641: { color: [255, 0, 0], opacity: 1, label: 'Cbm_Right_I_V_mid' },\r\n 642: { color: [0, 0, 255], opacity: 1, label: 'Cbm_Right_VI_med' },\r\n 643: { color: [30, 144, 255], opacity: 1, label: 'Cbm_Right_VI_mid' },\r\n 644: { color: [100, 212, 237], opacity: 1, label: 'Cbm_Right_VI_lat' },\r\n 645: { color: [218, 165, 32], opacity: 1, label: 'Cbm_Right_CrusI_med' },\r\n 646: { color: [255, 215, 0], opacity: 1, label: 'Cbm_Right_CrusI_mid' },\r\n 647: { color: [255, 255, 166], opacity: 1, label: 'Cbm_Right_CrusI_lat' },\r\n 648: { color: [153, 0, 204], opacity: 1, label: 'Cbm_Right_CrusII_med' },\r\n 649: { color: [153, 141, 209], opacity: 1, label: 'Cbm_Right_CrusII_mid' },\r\n 650: { color: [204, 204, 255], opacity: 1, label: 'Cbm_Right_CrusII_lat' },\r\n 651: { color: [31, 212, 194], opacity: 1, label: 'Cbm_Right_7med' },\r\n 652: { color: [3, 255, 237], opacity: 1, label: 'Cbm_Right_7mid' },\r\n 653: { color: [204, 255, 255], opacity: 1, label: 'Cbm_Right_7lat' },\r\n 654: { color: [86, 74, 147], opacity: 1, label: 'Cbm_Right_8med' },\r\n 655: { color: [114, 114, 190], opacity: 1, label: 'Cbm_Right_8mid' },\r\n 656: { color: [184, 178, 255], opacity: 1, label: 'Cbm_Right_8lat' },\r\n 657: { color: [126, 138, 37], opacity: 1, label: 'Cbm_Right_PUNs' },\r\n 658: { color: [189, 197, 117], opacity: 1, label: 'Cbm_Right_TONs' },\r\n 659: { color: [240, 230, 140], opacity: 1, label: 'Cbm_Right_FLOs' },\r\n 660: { color: [204, 0, 0], opacity: 1, label: 'Cbm_Left_I_V_med' },\r\n 661: { color: [255, 0, 0], opacity: 1, label: 'Cbm_Left_I_V_mid' },\r\n 662: { color: [0, 0, 255], opacity: 1, label: 'Cbm_Left_VI_med' },\r\n 663: { color: [30, 144, 255], opacity: 1, label: 'Cbm_Left_VI_mid' },\r\n 664: { color: [100, 212, 237], opacity: 1, label: 'Cbm_Left_VI_lat' },\r\n 665: { color: [218, 165, 32], opacity: 1, label: 'Cbm_Left_CrusI_med' },\r\n 666: { color: [255, 215, 0], opacity: 1, label: 'Cbm_Left_CrusI_mid' },\r\n 667: { color: [255, 255, 166], opacity: 1, label: 'Cbm_Left_CrusI_lat' },\r\n 668: { color: [153, 0, 204], opacity: 1, label: 'Cbm_Left_CrusII_med' },\r\n 669: { color: [153, 141, 209], opacity: 1, label: 'Cbm_Left_CrusII_mid' },\r\n 670: { color: [204, 204, 255], opacity: 1, label: 'Cbm_Left_CrusII_lat' },\r\n 671: { color: [31, 212, 194], opacity: 1, label: 'Cbm_Left_7med' },\r\n 672: { color: [3, 255, 237], opacity: 1, label: 'Cbm_Left_7mid' },\r\n 673: { color: [204, 255, 255], opacity: 1, label: 'Cbm_Left_7lat' },\r\n 674: { color: [86, 74, 147], opacity: 1, label: 'Cbm_Left_8med' },\r\n 675: { color: [114, 114, 190], opacity: 1, label: 'Cbm_Left_8mid' },\r\n 676: { color: [184, 178, 255], opacity: 1, label: 'Cbm_Left_8lat' },\r\n 677: { color: [126, 138, 37], opacity: 1, label: 'Cbm_Left_PUNs' },\r\n 678: { color: [189, 197, 117], opacity: 1, label: 'Cbm_Left_TONs' },\r\n 679: { color: [240, 230, 140], opacity: 1, label: 'Cbm_Left_FLOs' },\r\n 690: { color: [122, 135, 50], opacity: 1, label: 'CbmWM_Gyri_Left' },\r\n 691: { color: [122, 135, 50], opacity: 1, label: 'CbmWM_Gyri_Right' },\r\n 701: { color: [120, 18, 134], opacity: 1, label: 'CSF-FSL-FAST' },\r\n 702: { color: [205, 62, 78], opacity: 1, label: 'GrayMatter-FSL-FAST' },\r\n 703: { color: [0, 225, 0], opacity: 1, label: 'WhiteMatter-FSL-FAST' },\r\n 999: { color: [255, 100, 100], opacity: 1, label: 'SUSPICIOUS' },\r\n 1000: { color: [25, 5, 25], opacity: 1, label: 'ctx-lh-unknown' },\r\n 1001: { color: [25, 100, 40], opacity: 1, label: 'ctx-lh-bankssts' },\r\n 1002: { color: [125, 100, 160], opacity: 1, label: 'ctx-lh-caudalanteriorcingulate' },\r\n 1003: { color: [100, 25, 0], opacity: 1, label: 'ctx-lh-caudalmiddlefrontal' },\r\n 1004: { color: [120, 70, 50], opacity: 1, label: 'ctx-lh-corpuscallosum' },\r\n 1005: { color: [220, 20, 100], opacity: 1, label: 'ctx-lh-cuneus' },\r\n 1006: { color: [220, 20, 10], opacity: 1, label: 'ctx-lh-entorhinal' },\r\n 1007: { color: [180, 220, 140], opacity: 1, label: 'ctx-lh-fusiform' },\r\n 1008: { color: [220, 60, 220], opacity: 1, label: 'ctx-lh-inferiorparietal' },\r\n 1009: { color: [180, 40, 120], opacity: 1, label: 'ctx-lh-inferiortemporal' },\r\n 1010: { color: [140, 20, 140], opacity: 1, label: 'ctx-lh-isthmuscingulate' },\r\n 1011: { color: [20, 30, 140], opacity: 1, label: 'ctx-lh-lateraloccipital' },\r\n 1012: { color: [35, 75, 50], opacity: 1, label: 'ctx-lh-lateralorbitofrontal' },\r\n 1013: { color: [225, 140, 140], opacity: 1, label: 'ctx-lh-lingual' },\r\n 1014: { color: [200, 35, 75], opacity: 1, label: 'ctx-lh-medialorbitofrontal' },\r\n 1015: { color: [160, 100, 50], opacity: 1, label: 'ctx-lh-middletemporal' },\r\n 1016: { color: [20, 220, 60], opacity: 1, label: 'ctx-lh-parahippocampal' },\r\n 1017: { color: [60, 220, 60], opacity: 1, label: 'ctx-lh-paracentral' },\r\n 1018: { color: [220, 180, 140], opacity: 1, label: 'ctx-lh-parsopercularis' },\r\n 1019: { color: [20, 100, 50], opacity: 1, label: 'ctx-lh-parsorbitalis' },\r\n 1020: { color: [220, 60, 20], opacity: 1, label: 'ctx-lh-parstriangularis' },\r\n 1021: { color: [120, 100, 60], opacity: 1, label: 'ctx-lh-pericalcarine' },\r\n 1022: { color: [220, 20, 20], opacity: 1, label: 'ctx-lh-postcentral' },\r\n 1023: { color: [220, 180, 220], opacity: 1, label: 'ctx-lh-posteriorcingulate' },\r\n 1024: { color: [60, 20, 220], opacity: 1, label: 'ctx-lh-precentral' },\r\n 1025: { color: [160, 140, 180], opacity: 1, label: 'ctx-lh-precuneus' },\r\n 1026: { color: [80, 20, 140], opacity: 1, label: 'ctx-lh-rostralanteriorcingulate' },\r\n 1027: { color: [75, 50, 125], opacity: 1, label: 'ctx-lh-rostralmiddlefrontal' },\r\n 1028: { color: [20, 220, 160], opacity: 1, label: 'ctx-lh-superiorfrontal' },\r\n 1029: { color: [20, 180, 140], opacity: 1, label: 'ctx-lh-superiorparietal' },\r\n 1030: { color: [140, 220, 220], opacity: 1, label: 'ctx-lh-superiortemporal' },\r\n 1031: { color: [80, 160, 20], opacity: 1, label: 'ctx-lh-supramarginal' },\r\n 1032: { color: [100, 0, 100], opacity: 1, label: 'ctx-lh-frontalpole' },\r\n 1033: { color: [70, 70, 70], opacity: 1, label: 'ctx-lh-temporalpole' },\r\n 1034: { color: [150, 150, 200], opacity: 1, label: 'ctx-lh-transversetemporal' },\r\n 1035: { color: [255, 192, 32], opacity: 1, label: 'ctx-lh-insula' },\r\n 2000: { color: [25, 5, 25], opacity: 1, label: 'ctx-rh-unknown' },\r\n 2001: { color: [25, 100, 40], opacity: 1, label: 'ctx-rh-bankssts' },\r\n 2002: { color: [125, 100, 160], opacity: 1, label: 'ctx-rh-caudalanteriorcingulate' },\r\n 2003: { color: [100, 25, 0], opacity: 1, label: 'ctx-rh-caudalmiddlefrontal' },\r\n 2004: { color: [120, 70, 50], opacity: 1, label: 'ctx-rh-corpuscallosum' },\r\n 2005: { color: [220, 20, 100], opacity: 1, label: 'ctx-rh-cuneus' },\r\n 2006: { color: [220, 20, 10], opacity: 1, label: 'ctx-rh-entorhinal' },\r\n 2007: { color: [180, 220, 140], opacity: 1, label: 'ctx-rh-fusiform' },\r\n 2008: { color: [220, 60, 220], opacity: 1, label: 'ctx-rh-inferiorparietal' },\r\n 2009: { color: [180, 40, 120], opacity: 1, label: 'ctx-rh-inferiortemporal' },\r\n 2010: { color: [140, 20, 140], opacity: 1, label: 'ctx-rh-isthmuscingulate' },\r\n 2011: { color: [20, 30, 140], opacity: 1, label: 'ctx-rh-lateraloccipital' },\r\n 2012: { color: [35, 75, 50], opacity: 1, label: 'ctx-rh-lateralorbitofrontal' },\r\n 2013: { color: [225, 140, 140], opacity: 1, label: 'ctx-rh-lingual' },\r\n 2014: { color: [200, 35, 75], opacity: 1, label: 'ctx-rh-medialorbitofrontal' },\r\n 2015: { color: [160, 100, 50], opacity: 1, label: 'ctx-rh-middletemporal' },\r\n 2016: { color: [20, 220, 60], opacity: 1, label: 'ctx-rh-parahippocampal' },\r\n 2017: { color: [60, 220, 60], opacity: 1, label: 'ctx-rh-paracentral' },\r\n 2018: { color: [220, 180, 140], opacity: 1, label: 'ctx-rh-parsopercularis' },\r\n 2019: { color: [20, 100, 50], opacity: 1, label: 'ctx-rh-parsorbitalis' },\r\n 2020: { color: [220, 60, 20], opacity: 1, label: 'ctx-rh-parstriangularis' },\r\n 2021: { color: [120, 100, 60], opacity: 1, label: 'ctx-rh-pericalcarine' },\r\n 2022: { color: [220, 20, 20], opacity: 1, label: 'ctx-rh-postcentral' },\r\n 2023: { color: [220, 180, 220], opacity: 1, label: 'ctx-rh-posteriorcingulate' },\r\n 2024: { color: [60, 20, 220], opacity: 1, label: 'ctx-rh-precentral' },\r\n 2025: { color: [160, 140, 180], opacity: 1, label: 'ctx-rh-precuneus' },\r\n 2026: { color: [80, 20, 140], opacity: 1, label: 'ctx-rh-rostralanteriorcingulate' },\r\n 2027: { color: [75, 50, 125], opacity: 1, label: 'ctx-rh-rostralmiddlefrontal' },\r\n 2028: { color: [20, 220, 160], opacity: 1, label: 'ctx-rh-superiorfrontal' },\r\n 2029: { color: [20, 180, 140], opacity: 1, label: 'ctx-rh-superiorparietal' },\r\n 2030: { color: [140, 220, 220], opacity: 1, label: 'ctx-rh-superiortemporal' },\r\n 2031: { color: [80, 160, 20], opacity: 1, label: 'ctx-rh-supramarginal' },\r\n 2032: { color: [100, 0, 100], opacity: 1, label: 'ctx-rh-frontalpole' },\r\n 2033: { color: [70, 70, 70], opacity: 1, label: 'ctx-rh-temporalpole' },\r\n 2034: { color: [150, 150, 200], opacity: 1, label: 'ctx-rh-transversetemporal' },\r\n 2035: { color: [255, 192, 32], opacity: 1, label: 'ctx-rh-insula' },\r\n 3000: { color: [230, 250, 230], opacity: 1, label: 'wm-lh-unknown' },\r\n 3001: { color: [230, 155, 215], opacity: 1, label: 'wm-lh-bankssts' },\r\n 3002: { color: [130, 155, 95], opacity: 1, label: 'wm-lh-caudalanteriorcingulate' },\r\n 3003: { color: [155, 230, 255], opacity: 1, label: 'wm-lh-caudalmiddlefrontal' },\r\n 3004: { color: [135, 185, 205], opacity: 1, label: 'wm-lh-corpuscallosum' },\r\n 3005: { color: [35, 235, 155], opacity: 1, label: 'wm-lh-cuneus' },\r\n 3006: { color: [35, 235, 245], opacity: 1, label: 'wm-lh-entorhinal' },\r\n 3007: { color: [75, 35, 115], opacity: 1, label: 'wm-lh-fusiform' },\r\n 3008: { color: [35, 195, 35], opacity: 1, label: 'wm-lh-inferiorparietal' },\r\n 3009: { color: [75, 215, 135], opacity: 1, label: 'wm-lh-inferiortemporal' },\r\n 3010: { color: [115, 235, 115], opacity: 1, label: 'wm-lh-isthmuscingulate' },\r\n 3011: { color: [235, 225, 115], opacity: 1, label: 'wm-lh-lateraloccipital' },\r\n 3012: { color: [220, 180, 205], opacity: 1, label: 'wm-lh-lateralorbitofrontal' },\r\n 3013: { color: [30, 115, 115], opacity: 1, label: 'wm-lh-lingual' },\r\n 3014: { color: [55, 220, 180], opacity: 1, label: 'wm-lh-medialorbitofrontal' },\r\n 3015: { color: [95, 155, 205], opacity: 1, label: 'wm-lh-middletemporal' },\r\n 3016: { color: [235, 35, 195], opacity: 1, label: 'wm-lh-parahippocampal' },\r\n 3017: { color: [195, 35, 195], opacity: 1, label: 'wm-lh-paracentral' },\r\n 3018: { color: [35, 75, 115], opacity: 1, label: 'wm-lh-parsopercularis' },\r\n 3019: { color: [235, 155, 205], opacity: 1, label: 'wm-lh-parsorbitalis' },\r\n 3020: { color: [35, 195, 235], opacity: 1, label: 'wm-lh-parstriangularis' },\r\n 3021: { color: [135, 155, 195], opacity: 1, label: 'wm-lh-pericalcarine' },\r\n 3022: { color: [35, 235, 235], opacity: 1, label: 'wm-lh-postcentral' },\r\n 3023: { color: [35, 75, 35], opacity: 1, label: 'wm-lh-posteriorcingulate' },\r\n 3024: { color: [195, 235, 35], opacity: 1, label: 'wm-lh-precentral' },\r\n 3025: { color: [95, 115, 75], opacity: 1, label: 'wm-lh-precuneus' },\r\n 3026: { color: [175, 235, 115], opacity: 1, label: 'wm-lh-rostralanteriorcingulate' },\r\n 3027: { color: [180, 205, 130], opacity: 1, label: 'wm-lh-rostralmiddlefrontal' },\r\n 3028: { color: [235, 35, 95], opacity: 1, label: 'wm-lh-superiorfrontal' },\r\n 3029: { color: [235, 75, 115], opacity: 1, label: 'wm-lh-superiorparietal' },\r\n 3030: { color: [115, 35, 35], opacity: 1, label: 'wm-lh-superiortemporal' },\r\n 3031: { color: [175, 95, 235], opacity: 1, label: 'wm-lh-supramarginal' },\r\n 3032: { color: [155, 255, 155], opacity: 1, label: 'wm-lh-frontalpole' },\r\n 3033: { color: [185, 185, 185], opacity: 1, label: 'wm-lh-temporalpole' },\r\n 3034: { color: [105, 105, 55], opacity: 1, label: 'wm-lh-transversetemporal' },\r\n 3035: { color: [20, 220, 160], opacity: 1, label: 'wm-lh-insula' },\r\n 4000: { color: [230, 250, 230], opacity: 1, label: 'wm-rh-unknown' },\r\n 4001: { color: [230, 155, 215], opacity: 1, label: 'wm-rh-bankssts' },\r\n 4002: { color: [130, 155, 95], opacity: 1, label: 'wm-rh-caudalanteriorcingulate' },\r\n 4003: { color: [155, 230, 255], opacity: 1, label: 'wm-rh-caudalmiddlefrontal' },\r\n 4004: { color: [135, 185, 205], opacity: 1, label: 'wm-rh-corpuscallosum' },\r\n 4005: { color: [35, 235, 155], opacity: 1, label: 'wm-rh-cuneus' },\r\n 4006: { color: [35, 235, 245], opacity: 1, label: 'wm-rh-entorhinal' },\r\n 4007: { color: [75, 35, 115], opacity: 1, label: 'wm-rh-fusiform' },\r\n 4008: { color: [35, 195, 35], opacity: 1, label: 'wm-rh-inferiorparietal' },\r\n 4009: { color: [75, 215, 135], opacity: 1, label: 'wm-rh-inferiortemporal' },\r\n 4010: { color: [115, 235, 115], opacity: 1, label: 'wm-rh-isthmuscingulate' },\r\n 4011: { color: [235, 225, 115], opacity: 1, label: 'wm-rh-lateraloccipital' },\r\n 4012: { color: [220, 180, 205], opacity: 1, label: 'wm-rh-lateralorbitofrontal' },\r\n 4013: { color: [30, 115, 115], opacity: 1, label: 'wm-rh-lingual' },\r\n 4014: { color: [55, 220, 180], opacity: 1, label: 'wm-rh-medialorbitofrontal' },\r\n 4015: { color: [95, 155, 205], opacity: 1, label: 'wm-rh-middletemporal' },\r\n 4016: { color: [235, 35, 195], opacity: 1, label: 'wm-rh-parahippocampal' },\r\n 4017: { color: [195, 35, 195], opacity: 1, label: 'wm-rh-paracentral' },\r\n 4018: { color: [35, 75, 115], opacity: 1, label: 'wm-rh-parsopercularis' },\r\n 4019: { color: [235, 155, 205], opacity: 1, label: 'wm-rh-parsorbitalis' },\r\n 4020: { color: [35, 195, 235], opacity: 1, label: 'wm-rh-parstriangularis' },\r\n 4021: { color: [135, 155, 195], opacity: 1, label: 'wm-rh-pericalcarine' },\r\n 4022: { color: [35, 235, 235], opacity: 1, label: 'wm-rh-postcentral' },\r\n 4023: { color: [35, 75, 35], opacity: 1, label: 'wm-rh-posteriorcingulate' },\r\n 4024: { color: [195, 235, 35], opacity: 1, label: 'wm-rh-precentral' },\r\n 4025: { color: [95, 115, 75], opacity: 1, label: 'wm-rh-precuneus' },\r\n 4026: { color: [175, 235, 115], opacity: 1, label: 'wm-rh-rostralanteriorcingulate' },\r\n 4027: { color: [180, 205, 130], opacity: 1, label: 'wm-rh-rostralmiddlefrontal' },\r\n 4028: { color: [235, 35, 95], opacity: 1, label: 'wm-rh-superiorfrontal' },\r\n 4029: { color: [235, 75, 115], opacity: 1, label: 'wm-rh-superiorparietal' },\r\n 4030: { color: [115, 35, 35], opacity: 1, label: 'wm-rh-superiortemporal' },\r\n 4031: { color: [175, 95, 235], opacity: 1, label: 'wm-rh-supramarginal' },\r\n 4032: { color: [155, 255, 155], opacity: 1, label: 'wm-rh-frontalpole' },\r\n 4033: { color: [185, 185, 185], opacity: 1, label: 'wm-rh-temporalpole' },\r\n 4034: { color: [105, 105, 55], opacity: 1, label: 'wm-rh-transversetemporal' },\r\n 4035: { color: [20, 220, 160], opacity: 1, label: 'wm-rh-insula' },\r\n 3201: { color: [235, 35, 95], opacity: 1, label: 'wm-lh-frontal-lobe' },\r\n 3203: { color: [35, 75, 35], opacity: 1, label: 'wm-lh-cingulate-lobe' },\r\n 3204: { color: [135, 155, 195], opacity: 1, label: 'wm-lh-occiptal-lobe' },\r\n 3205: { color: [115, 35, 35], opacity: 1, label: 'wm-lh-temporal-lobe' },\r\n 3206: { color: [35, 195, 35], opacity: 1, label: 'wm-lh-parietal-lobe' },\r\n 3207: { color: [20, 220, 160], opacity: 1, label: 'wm-lh-insula-lobe' },\r\n 4201: { color: [235, 35, 95], opacity: 1, label: 'wm-rh-frontal-lobe' },\r\n 4203: { color: [35, 75, 35], opacity: 1, label: 'wm-rh-cingulate-lobe' },\r\n 4204: { color: [135, 155, 195], opacity: 1, label: 'wm-rh-occiptal-lobe' },\r\n 4205: { color: [115, 35, 35], opacity: 1, label: 'wm-rh-temporal-lobe' },\r\n 4206: { color: [35, 195, 35], opacity: 1, label: 'wm-rh-parietal-lobe' },\r\n 4207: { color: [20, 220, 160], opacity: 1, label: 'wm-rh-insula-lobe' },\r\n 1100: { color: [0, 0, 0], opacity: 1, label: 'ctx-lh-Unknown' },\r\n 1101: { color: [50, 50, 50], opacity: 1, label: 'ctx-lh-Corpus_callosum' },\r\n 1102: { color: [180, 20, 30], opacity: 1, label: 'ctx-lh-G_and_S_Insula_ONLY_AVERAGE' },\r\n 1103: { color: [60, 25, 25], opacity: 1, label: 'ctx-lh-G_cingulate-Isthmus' },\r\n 1104: { color: [25, 60, 60], opacity: 1, label: 'ctx-lh-G_cingulate-Main_part' },\r\n 1200: { color: [25, 60, 61], opacity: 1, label: 'ctx-lh-G_cingulate-caudal_ACC' },\r\n 1201: { color: [25, 90, 60], opacity: 1, label: 'ctx-lh-G_cingulate-rostral_ACC' },\r\n 1202: { color: [25, 120, 60], opacity: 1, label: 'ctx-lh-G_cingulate-posterior' },\r\n 1205: { color: [25, 150, 60], opacity: 1, label: 'ctx-lh-S_cingulate-caudal_ACC' },\r\n 1206: { color: [25, 180, 60], opacity: 1, label: 'ctx-lh-S_cingulate-rostral_ACC' },\r\n 1207: { color: [25, 210, 60], opacity: 1, label: 'ctx-lh-S_cingulate-posterior' },\r\n 1210: { color: [25, 150, 90], opacity: 1, label: 'ctx-lh-S_pericallosal-caudal' },\r\n 1211: { color: [25, 180, 90], opacity: 1, label: 'ctx-lh-S_pericallosal-rostral' },\r\n 1212: { color: [25, 210, 90], opacity: 1, label: 'ctx-lh-S_pericallosal-posterior' },\r\n 1105: { color: [180, 20, 20], opacity: 1, label: 'ctx-lh-G_cuneus' },\r\n 1106: { color: [220, 20, 100], opacity: 1, label: 'ctx-lh-G_frontal_inf-Opercular_part' },\r\n 1107: { color: [140, 60, 60], opacity: 1, label: 'ctx-lh-G_frontal_inf-Orbital_part' },\r\n 1108: { color: [180, 220, 140], opacity: 1, label: 'ctx-lh-G_frontal_inf-Triangular_part' },\r\n 1109: { color: [140, 100, 180], opacity: 1, label: 'ctx-lh-G_frontal_middle' },\r\n 1110: { color: [180, 20, 140], opacity: 1, label: 'ctx-lh-G_frontal_superior' },\r\n 1111: { color: [140, 20, 140], opacity: 1, label: 'ctx-lh-G_frontomarginal' },\r\n 1112: { color: [21, 10, 10], opacity: 1, label: 'ctx-lh-G_insular_long' },\r\n 1113: { color: [225, 140, 140], opacity: 1, label: 'ctx-lh-G_insular_short' },\r\n 1114: { color: [23, 60, 180], opacity: 1, label: 'ctx-lh-G_and_S_occipital_inferior' },\r\n 1115: { color: [180, 60, 180], opacity: 1, label: 'ctx-lh-G_occipital_middle' },\r\n 1116: { color: [20, 220, 60], opacity: 1, label: 'ctx-lh-G_occipital_superior' },\r\n 1117: { color: [60, 20, 140], opacity: 1, label: 'ctx-lh-G_occipit-temp_lat-Or_fusiform' },\r\n 1118: { color: [220, 180, 140], opacity: 1, label: 'ctx-lh-G_occipit-temp_med-Lingual_part' },\r\n 1119: {\r\n color: [65, 100, 20],\r\n opacity: 1,\r\n label: 'ctx-lh-G_occipit-temp_med-Parahippocampal_part',\r\n },\r\n 1120: { color: [220, 60, 20], opacity: 1, label: 'ctx-lh-G_orbital' },\r\n 1121: { color: [60, 100, 60], opacity: 1, label: 'ctx-lh-G_paracentral' },\r\n 1122: { color: [20, 60, 220], opacity: 1, label: 'ctx-lh-G_parietal_inferior-Angular_part' },\r\n 1123: {\r\n color: [100, 100, 60],\r\n opacity: 1,\r\n label: 'ctx-lh-G_parietal_inferior-Supramarginal_part',\r\n },\r\n 1124: { color: [220, 180, 220], opacity: 1, label: 'ctx-lh-G_parietal_superior' },\r\n 1125: { color: [20, 180, 140], opacity: 1, label: 'ctx-lh-G_postcentral' },\r\n 1126: { color: [60, 140, 180], opacity: 1, label: 'ctx-lh-G_precentral' },\r\n 1127: { color: [25, 20, 140], opacity: 1, label: 'ctx-lh-G_precuneus' },\r\n 1128: { color: [20, 60, 100], opacity: 1, label: 'ctx-lh-G_rectus' },\r\n 1129: { color: [60, 220, 20], opacity: 1, label: 'ctx-lh-G_subcallosal' },\r\n 1130: { color: [60, 20, 220], opacity: 1, label: 'ctx-lh-G_subcentral' },\r\n 1131: { color: [220, 220, 100], opacity: 1, label: 'ctx-lh-G_temporal_inferior' },\r\n 1132: { color: [180, 60, 60], opacity: 1, label: 'ctx-lh-G_temporal_middle' },\r\n 1133: { color: [60, 60, 220], opacity: 1, label: 'ctx-lh-G_temp_sup-G_temp_transv_and_interm_S' },\r\n 1134: { color: [220, 60, 220], opacity: 1, label: 'ctx-lh-G_temp_sup-Lateral_aspect' },\r\n 1135: { color: [65, 220, 60], opacity: 1, label: 'ctx-lh-G_temp_sup-Planum_polare' },\r\n 1136: { color: [25, 140, 20], opacity: 1, label: 'ctx-lh-G_temp_sup-Planum_tempolare' },\r\n 1137: { color: [13, 0, 250], opacity: 1, label: 'ctx-lh-G_and_S_transverse_frontopolar' },\r\n 1138: { color: [61, 20, 220], opacity: 1, label: 'ctx-lh-Lat_Fissure-ant_sgt-ramus_horizontal' },\r\n 1139: { color: [61, 20, 60], opacity: 1, label: 'ctx-lh-Lat_Fissure-ant_sgt-ramus_vertical' },\r\n 1140: { color: [61, 60, 100], opacity: 1, label: 'ctx-lh-Lat_Fissure-post_sgt' },\r\n 1141: { color: [25, 25, 25], opacity: 1, label: 'ctx-lh-Medial_wall' },\r\n 1142: { color: [140, 20, 60], opacity: 1, label: 'ctx-lh-Pole_occipital' },\r\n 1143: { color: [220, 180, 20], opacity: 1, label: 'ctx-lh-Pole_temporal' },\r\n 1144: { color: [63, 180, 180], opacity: 1, label: 'ctx-lh-S_calcarine' },\r\n 1145: { color: [221, 20, 10], opacity: 1, label: 'ctx-lh-S_central' },\r\n 1146: { color: [21, 220, 20], opacity: 1, label: 'ctx-lh-S_central_insula' },\r\n 1147: {\r\n color: [183, 100, 20],\r\n opacity: 1,\r\n label: 'ctx-lh-S_cingulate-Main_part_and_Intracingulate',\r\n },\r\n 1148: { color: [221, 20, 100], opacity: 1, label: 'ctx-lh-S_cingulate-Marginalis_part' },\r\n 1149: { color: [221, 60, 140], opacity: 1, label: 'ctx-lh-S_circular_insula_anterior' },\r\n 1150: { color: [221, 20, 220], opacity: 1, label: 'ctx-lh-S_circular_insula_inferior' },\r\n 1151: { color: [61, 220, 220], opacity: 1, label: 'ctx-lh-S_circular_insula_superior' },\r\n 1152: { color: [100, 200, 200], opacity: 1, label: 'ctx-lh-S_collateral_transverse_ant' },\r\n 1153: { color: [10, 200, 200], opacity: 1, label: 'ctx-lh-S_collateral_transverse_post' },\r\n 1154: { color: [221, 220, 20], opacity: 1, label: 'ctx-lh-S_frontal_inferior' },\r\n 1155: { color: [141, 20, 100], opacity: 1, label: 'ctx-lh-S_frontal_middle' },\r\n 1156: { color: [61, 220, 100], opacity: 1, label: 'ctx-lh-S_frontal_superior' },\r\n 1157: { color: [21, 220, 60], opacity: 1, label: 'ctx-lh-S_frontomarginal' },\r\n 1158: { color: [141, 60, 20], opacity: 1, label: 'ctx-lh-S_intermedius_primus-Jensen' },\r\n 1159: {\r\n color: [143, 20, 220],\r\n opacity: 1,\r\n label: 'ctx-lh-S_intraparietal-and_Parietal_transverse',\r\n },\r\n 1160: { color: [61, 20, 180], opacity: 1, label: 'ctx-lh-S_occipital_anterior' },\r\n 1161: { color: [101, 60, 220], opacity: 1, label: 'ctx-lh-S_occipital_middle_and_Lunatus' },\r\n 1162: {\r\n color: [21, 20, 140],\r\n opacity: 1,\r\n label: 'ctx-lh-S_occipital_superior_and_transversalis',\r\n },\r\n 1163: { color: [221, 140, 20], opacity: 1, label: 'ctx-lh-S_occipito-temporal_lateral' },\r\n 1164: {\r\n color: [141, 100, 220],\r\n opacity: 1,\r\n label: 'ctx-lh-S_occipito-temporal_medial_and_S_Lingual',\r\n },\r\n 1165: { color: [101, 20, 20], opacity: 1, label: 'ctx-lh-S_orbital-H_shapped' },\r\n 1166: { color: [221, 100, 20], opacity: 1, label: 'ctx-lh-S_orbital_lateral' },\r\n 1167: { color: [181, 200, 20], opacity: 1, label: 'ctx-lh-S_orbital_medial-Or_olfactory' },\r\n 1168: { color: [21, 180, 140], opacity: 1, label: 'ctx-lh-S_paracentral' },\r\n 1169: { color: [101, 100, 180], opacity: 1, label: 'ctx-lh-S_parieto_occipital' },\r\n 1170: { color: [181, 220, 20], opacity: 1, label: 'ctx-lh-S_pericallosal' },\r\n 1171: { color: [21, 140, 200], opacity: 1, label: 'ctx-lh-S_postcentral' },\r\n 1172: { color: [21, 20, 240], opacity: 1, label: 'ctx-lh-S_precentral-Inferior-part' },\r\n 1173: { color: [21, 20, 200], opacity: 1, label: 'ctx-lh-S_precentral-Superior-part' },\r\n 1174: { color: [61, 180, 60], opacity: 1, label: 'ctx-lh-S_subcentral_ant' },\r\n 1175: { color: [61, 180, 250], opacity: 1, label: 'ctx-lh-S_subcentral_post' },\r\n 1176: { color: [21, 20, 60], opacity: 1, label: 'ctx-lh-S_suborbital' },\r\n 1177: { color: [101, 60, 60], opacity: 1, label: 'ctx-lh-S_subparietal' },\r\n 1178: { color: [21, 220, 220], opacity: 1, label: 'ctx-lh-S_supracingulate' },\r\n 1179: { color: [21, 180, 180], opacity: 1, label: 'ctx-lh-S_temporal_inferior' },\r\n 1180: { color: [223, 220, 60], opacity: 1, label: 'ctx-lh-S_temporal_superior' },\r\n 1181: { color: [221, 60, 60], opacity: 1, label: 'ctx-lh-S_temporal_transverse' },\r\n 2100: { color: [0, 0, 0], opacity: 1, label: 'ctx-rh-Unknown' },\r\n 2101: { color: [50, 50, 50], opacity: 1, label: 'ctx-rh-Corpus_callosum' },\r\n 2102: { color: [180, 20, 30], opacity: 1, label: 'ctx-rh-G_and_S_Insula_ONLY_AVERAGE' },\r\n 2103: { color: [60, 25, 25], opacity: 1, label: 'ctx-rh-G_cingulate-Isthmus' },\r\n 2104: { color: [25, 60, 60], opacity: 1, label: 'ctx-rh-G_cingulate-Main_part' },\r\n 2105: { color: [180, 20, 20], opacity: 1, label: 'ctx-rh-G_cuneus' },\r\n 2106: { color: [220, 20, 100], opacity: 1, label: 'ctx-rh-G_frontal_inf-Opercular_part' },\r\n 2107: { color: [140, 60, 60], opacity: 1, label: 'ctx-rh-G_frontal_inf-Orbital_part' },\r\n 2108: { color: [180, 220, 140], opacity: 1, label: 'ctx-rh-G_frontal_inf-Triangular_part' },\r\n 2109: { color: [140, 100, 180], opacity: 1, label: 'ctx-rh-G_frontal_middle' },\r\n 2110: { color: [180, 20, 140], opacity: 1, label: 'ctx-rh-G_frontal_superior' },\r\n 2111: { color: [140, 20, 140], opacity: 1, label: 'ctx-rh-G_frontomarginal' },\r\n 2112: { color: [21, 10, 10], opacity: 1, label: 'ctx-rh-G_insular_long' },\r\n 2113: { color: [225, 140, 140], opacity: 1, label: 'ctx-rh-G_insular_short' },\r\n 2114: { color: [23, 60, 180], opacity: 1, label: 'ctx-rh-G_and_S_occipital_inferior' },\r\n 2115: { color: [180, 60, 180], opacity: 1, label: 'ctx-rh-G_occipital_middle' },\r\n 2116: { color: [20, 220, 60], opacity: 1, label: 'ctx-rh-G_occipital_superior' },\r\n 2117: { color: [60, 20, 140], opacity: 1, label: 'ctx-rh-G_occipit-temp_lat-Or_fusiform' },\r\n 2118: { color: [220, 180, 140], opacity: 1, label: 'ctx-rh-G_occipit-temp_med-Lingual_part' },\r\n 2119: {\r\n color: [65, 100, 20],\r\n opacity: 1,\r\n label: 'ctx-rh-G_occipit-temp_med-Parahippocampal_part',\r\n },\r\n 2120: { color: [220, 60, 20], opacity: 1, label: 'ctx-rh-G_orbital' },\r\n 2121: { color: [60, 100, 60], opacity: 1, label: 'ctx-rh-G_paracentral' },\r\n 2122: { color: [20, 60, 220], opacity: 1, label: 'ctx-rh-G_parietal_inferior-Angular_part' },\r\n 2123: {\r\n color: [100, 100, 60],\r\n opacity: 1,\r\n label: 'ctx-rh-G_parietal_inferior-Supramarginal_part',\r\n },\r\n 2124: { color: [220, 180, 220], opacity: 1, label: 'ctx-rh-G_parietal_superior' },\r\n 2125: { color: [20, 180, 140], opacity: 1, label: 'ctx-rh-G_postcentral' },\r\n 2126: { color: [60, 140, 180], opacity: 1, label: 'ctx-rh-G_precentral' },\r\n 2127: { color: [25, 20, 140], opacity: 1, label: 'ctx-rh-G_precuneus' },\r\n 2128: { color: [20, 60, 100], opacity: 1, label: 'ctx-rh-G_rectus' },\r\n 2129: { color: [60, 220, 20], opacity: 1, label: 'ctx-rh-G_subcallosal' },\r\n 2130: { color: [60, 20, 220], opacity: 1, label: 'ctx-rh-G_subcentral' },\r\n 2131: { color: [220, 220, 100], opacity: 1, label: 'ctx-rh-G_temporal_inferior' },\r\n 2132: { color: [180, 60, 60], opacity: 1, label: 'ctx-rh-G_temporal_middle' },\r\n 2133: { color: [60, 60, 220], opacity: 1, label: 'ctx-rh-G_temp_sup-G_temp_transv_and_interm_S' },\r\n 2134: { color: [220, 60, 220], opacity: 1, label: 'ctx-rh-G_temp_sup-Lateral_aspect' },\r\n 2135: { color: [65, 220, 60], opacity: 1, label: 'ctx-rh-G_temp_sup-Planum_polare' },\r\n 2136: { color: [25, 140, 20], opacity: 1, label: 'ctx-rh-G_temp_sup-Planum_tempolare' },\r\n 2137: { color: [13, 0, 250], opacity: 1, label: 'ctx-rh-G_and_S_transverse_frontopolar' },\r\n 2138: { color: [61, 20, 220], opacity: 1, label: 'ctx-rh-Lat_Fissure-ant_sgt-ramus_horizontal' },\r\n 2139: { color: [61, 20, 60], opacity: 1, label: 'ctx-rh-Lat_Fissure-ant_sgt-ramus_vertical' },\r\n 2140: { color: [61, 60, 100], opacity: 1, label: 'ctx-rh-Lat_Fissure-post_sgt' },\r\n 2141: { color: [25, 25, 25], opacity: 1, label: 'ctx-rh-Medial_wall' },\r\n 2142: { color: [140, 20, 60], opacity: 1, label: 'ctx-rh-Pole_occipital' },\r\n 2143: { color: [220, 180, 20], opacity: 1, label: 'ctx-rh-Pole_temporal' },\r\n 2144: { color: [63, 180, 180], opacity: 1, label: 'ctx-rh-S_calcarine' },\r\n 2145: { color: [221, 20, 10], opacity: 1, label: 'ctx-rh-S_central' },\r\n 2146: { color: [21, 220, 20], opacity: 1, label: 'ctx-rh-S_central_insula' },\r\n 2147: {\r\n color: [183, 100, 20],\r\n opacity: 1,\r\n label: 'ctx-rh-S_cingulate-Main_part_and_Intracingulate',\r\n },\r\n 2148: { color: [221, 20, 100], opacity: 1, label: 'ctx-rh-S_cingulate-Marginalis_part' },\r\n 2149: { color: [221, 60, 140], opacity: 1, label: 'ctx-rh-S_circular_insula_anterior' },\r\n 2150: { color: [221, 20, 220], opacity: 1, label: 'ctx-rh-S_circular_insula_inferior' },\r\n 2151: { color: [61, 220, 220], opacity: 1, label: 'ctx-rh-S_circular_insula_superior' },\r\n 2152: { color: [100, 200, 200], opacity: 1, label: 'ctx-rh-S_collateral_transverse_ant' },\r\n 2153: { color: [10, 200, 200], opacity: 1, label: 'ctx-rh-S_collateral_transverse_post' },\r\n 2154: { color: [221, 220, 20], opacity: 1, label: 'ctx-rh-S_frontal_inferior' },\r\n 2155: { color: [141, 20, 100], opacity: 1, label: 'ctx-rh-S_frontal_middle' },\r\n 2156: { color: [61, 220, 100], opacity: 1, label: 'ctx-rh-S_frontal_superior' },\r\n 2157: { color: [21, 220, 60], opacity: 1, label: 'ctx-rh-S_frontomarginal' },\r\n 2158: { color: [141, 60, 20], opacity: 1, label: 'ctx-rh-S_intermedius_primus-Jensen' },\r\n 2159: {\r\n color: [143, 20, 220],\r\n opacity: 1,\r\n label: 'ctx-rh-S_intraparietal-and_Parietal_transverse',\r\n },\r\n 2160: { color: [61, 20, 180], opacity: 1, label: 'ctx-rh-S_occipital_anterior' },\r\n 2161: { color: [101, 60, 220], opacity: 1, label: 'ctx-rh-S_occipital_middle_and_Lunatus' },\r\n 2162: {\r\n color: [21, 20, 140],\r\n opacity: 1,\r\n label: 'ctx-rh-S_occipital_superior_and_transversalis',\r\n },\r\n 2163: { color: [221, 140, 20], opacity: 1, label: 'ctx-rh-S_occipito-temporal_lateral' },\r\n 2164: {\r\n color: [141, 100, 220],\r\n opacity: 1,\r\n label: 'ctx-rh-S_occipito-temporal_medial_and_S_Lingual',\r\n },\r\n 2165: { color: [101, 20, 20], opacity: 1, label: 'ctx-rh-S_orbital-H_shapped' },\r\n 2166: { color: [221, 100, 20], opacity: 1, label: 'ctx-rh-S_orbital_lateral' },\r\n 2167: { color: [181, 200, 20], opacity: 1, label: 'ctx-rh-S_orbital_medial-Or_olfactory' },\r\n 2168: { color: [21, 180, 140], opacity: 1, label: 'ctx-rh-S_paracentral' },\r\n 2169: { color: [101, 100, 180], opacity: 1, label: 'ctx-rh-S_parieto_occipital' },\r\n 2170: { color: [181, 220, 20], opacity: 1, label: 'ctx-rh-S_pericallosal' },\r\n 2171: { color: [21, 140, 200], opacity: 1, label: 'ctx-rh-S_postcentral' },\r\n 2172: { color: [21, 20, 240], opacity: 1, label: 'ctx-rh-S_precentral-Inferior-part' },\r\n 2173: { color: [21, 20, 200], opacity: 1, label: 'ctx-rh-S_precentral-Superior-part' },\r\n 2174: { color: [61, 180, 60], opacity: 1, label: 'ctx-rh-S_subcentral_ant' },\r\n 2175: { color: [61, 180, 250], opacity: 1, label: 'ctx-rh-S_subcentral_post' },\r\n 2176: { color: [21, 20, 60], opacity: 1, label: 'ctx-rh-S_suborbital' },\r\n 2177: { color: [101, 60, 60], opacity: 1, label: 'ctx-rh-S_subparietal' },\r\n 2178: { color: [21, 220, 220], opacity: 1, label: 'ctx-rh-S_supracingulate' },\r\n 2179: { color: [21, 180, 180], opacity: 1, label: 'ctx-rh-S_temporal_inferior' },\r\n 2180: { color: [223, 220, 60], opacity: 1, label: 'ctx-rh-S_temporal_superior' },\r\n 2181: { color: [221, 60, 60], opacity: 1, label: 'ctx-rh-S_temporal_transverse' },\r\n 2200: { color: [25, 60, 61], opacity: 1, label: 'ctx-rh-G_cingulate-caudal_ACC' },\r\n 2201: { color: [25, 90, 60], opacity: 1, label: 'ctx-rh-G_cingulate-rostral_ACC' },\r\n 2202: { color: [25, 120, 60], opacity: 1, label: 'ctx-rh-G_cingulate-posterior' },\r\n 2205: { color: [25, 150, 60], opacity: 1, label: 'ctx-rh-S_cingulate-caudal_ACC' },\r\n 2206: { color: [25, 180, 60], opacity: 1, label: 'ctx-rh-S_cingulate-rostral_ACC' },\r\n 2207: { color: [25, 210, 60], opacity: 1, label: 'ctx-rh-S_cingulate-posterior' },\r\n 2210: { color: [25, 150, 90], opacity: 1, label: 'ctx-rh-S_pericallosal-caudal' },\r\n 2211: { color: [25, 180, 90], opacity: 1, label: 'ctx-rh-S_pericallosal-rostral' },\r\n 2212: { color: [25, 210, 90], opacity: 1, label: 'ctx-rh-S_pericallosal-posterior' },\r\n 3100: { color: [0, 0, 0], opacity: 1, label: 'wm-lh-Unknown' },\r\n 3101: { color: [50, 50, 50], opacity: 1, label: 'wm-lh-Corpus_callosum' },\r\n 3102: { color: [180, 20, 30], opacity: 1, label: 'wm-lh-G_and_S_Insula_ONLY_AVERAGE' },\r\n 3103: { color: [60, 25, 25], opacity: 1, label: 'wm-lh-G_cingulate-Isthmus' },\r\n 3104: { color: [25, 60, 60], opacity: 1, label: 'wm-lh-G_cingulate-Main_part' },\r\n 3105: { color: [180, 20, 20], opacity: 1, label: 'wm-lh-G_cuneus' },\r\n 3106: { color: [220, 20, 100], opacity: 1, label: 'wm-lh-G_frontal_inf-Opercular_part' },\r\n 3107: { color: [140, 60, 60], opacity: 1, label: 'wm-lh-G_frontal_inf-Orbital_part' },\r\n 3108: { color: [180, 220, 140], opacity: 1, label: 'wm-lh-G_frontal_inf-Triangular_part' },\r\n 3109: { color: [140, 100, 180], opacity: 1, label: 'wm-lh-G_frontal_middle' },\r\n 3110: { color: [180, 20, 140], opacity: 1, label: 'wm-lh-G_frontal_superior' },\r\n 3111: { color: [140, 20, 140], opacity: 1, label: 'wm-lh-G_frontomarginal' },\r\n 3112: { color: [21, 10, 10], opacity: 1, label: 'wm-lh-G_insular_long' },\r\n 3113: { color: [225, 140, 140], opacity: 1, label: 'wm-lh-G_insular_short' },\r\n 3114: { color: [23, 60, 180], opacity: 1, label: 'wm-lh-G_and_S_occipital_inferior' },\r\n 3115: { color: [180, 60, 180], opacity: 1, label: 'wm-lh-G_occipital_middle' },\r\n 3116: { color: [20, 220, 60], opacity: 1, label: 'wm-lh-G_occipital_superior' },\r\n 3117: { color: [60, 20, 140], opacity: 1, label: 'wm-lh-G_occipit-temp_lat-Or_fusiform' },\r\n 3118: { color: [220, 180, 140], opacity: 1, label: 'wm-lh-G_occipit-temp_med-Lingual_part' },\r\n 3119: {\r\n color: [65, 100, 20],\r\n opacity: 1,\r\n label: 'wm-lh-G_occipit-temp_med-Parahippocampal_part',\r\n },\r\n 3120: { color: [220, 60, 20], opacity: 1, label: 'wm-lh-G_orbital' },\r\n 3121: { color: [60, 100, 60], opacity: 1, label: 'wm-lh-G_paracentral' },\r\n 3122: { color: [20, 60, 220], opacity: 1, label: 'wm-lh-G_parietal_inferior-Angular_part' },\r\n 3123: {\r\n color: [100, 100, 60],\r\n opacity: 1,\r\n label: 'wm-lh-G_parietal_inferior-Supramarginal_part',\r\n },\r\n 3124: { color: [220, 180, 220], opacity: 1, label: 'wm-lh-G_parietal_superior' },\r\n 3125: { color: [20, 180, 140], opacity: 1, label: 'wm-lh-G_postcentral' },\r\n 3126: { color: [60, 140, 180], opacity: 1, label: 'wm-lh-G_precentral' },\r\n 3127: { color: [25, 20, 140], opacity: 1, label: 'wm-lh-G_precuneus' },\r\n 3128: { color: [20, 60, 100], opacity: 1, label: 'wm-lh-G_rectus' },\r\n 3129: { color: [60, 220, 20], opacity: 1, label: 'wm-lh-G_subcallosal' },\r\n 3130: { color: [60, 20, 220], opacity: 1, label: 'wm-lh-G_subcentral' },\r\n 3131: { color: [220, 220, 100], opacity: 1, label: 'wm-lh-G_temporal_inferior' },\r\n 3132: { color: [180, 60, 60], opacity: 1, label: 'wm-lh-G_temporal_middle' },\r\n 3133: { color: [60, 60, 220], opacity: 1, label: 'wm-lh-G_temp_sup-G_temp_transv_and_interm_S' },\r\n 3134: { color: [220, 60, 220], opacity: 1, label: 'wm-lh-G_temp_sup-Lateral_aspect' },\r\n 3135: { color: [65, 220, 60], opacity: 1, label: 'wm-lh-G_temp_sup-Planum_polare' },\r\n 3136: { color: [25, 140, 20], opacity: 1, label: 'wm-lh-G_temp_sup-Planum_tempolare' },\r\n 3137: { color: [13, 0, 250], opacity: 1, label: 'wm-lh-G_and_S_transverse_frontopolar' },\r\n 3138: { color: [61, 20, 220], opacity: 1, label: 'wm-lh-Lat_Fissure-ant_sgt-ramus_horizontal' },\r\n 3139: { color: [61, 20, 60], opacity: 1, label: 'wm-lh-Lat_Fissure-ant_sgt-ramus_vertical' },\r\n 3140: { color: [61, 60, 100], opacity: 1, label: 'wm-lh-Lat_Fissure-post_sgt' },\r\n 3141: { color: [25, 25, 25], opacity: 1, label: 'wm-lh-Medial_wall' },\r\n 3142: { color: [140, 20, 60], opacity: 1, label: 'wm-lh-Pole_occipital' },\r\n 3143: { color: [220, 180, 20], opacity: 1, label: 'wm-lh-Pole_temporal' },\r\n 3144: { color: [63, 180, 180], opacity: 1, label: 'wm-lh-S_calcarine' },\r\n 3145: { color: [221, 20, 10], opacity: 1, label: 'wm-lh-S_central' },\r\n 3146: { color: [21, 220, 20], opacity: 1, label: 'wm-lh-S_central_insula' },\r\n 3147: {\r\n color: [183, 100, 20],\r\n opacity: 1,\r\n label: 'wm-lh-S_cingulate-Main_part_and_Intracingulate',\r\n },\r\n 3148: { color: [221, 20, 100], opacity: 1, label: 'wm-lh-S_cingulate-Marginalis_part' },\r\n 3149: { color: [221, 60, 140], opacity: 1, label: 'wm-lh-S_circular_insula_anterior' },\r\n 3150: { color: [221, 20, 220], opacity: 1, label: 'wm-lh-S_circular_insula_inferior' },\r\n 3151: { color: [61, 220, 220], opacity: 1, label: 'wm-lh-S_circular_insula_superior' },\r\n 3152: { color: [100, 200, 200], opacity: 1, label: 'wm-lh-S_collateral_transverse_ant' },\r\n 3153: { color: [10, 200, 200], opacity: 1, label: 'wm-lh-S_collateral_transverse_post' },\r\n 3154: { color: [221, 220, 20], opacity: 1, label: 'wm-lh-S_frontal_inferior' },\r\n 3155: { color: [141, 20, 100], opacity: 1, label: 'wm-lh-S_frontal_middle' },\r\n 3156: { color: [61, 220, 100], opacity: 1, label: 'wm-lh-S_frontal_superior' },\r\n 3157: { color: [21, 220, 60], opacity: 1, label: 'wm-lh-S_frontomarginal' },\r\n 3158: { color: [141, 60, 20], opacity: 1, label: 'wm-lh-S_intermedius_primus-Jensen' },\r\n 3159: {\r\n color: [143, 20, 220],\r\n opacity: 1,\r\n label: 'wm-lh-S_intraparietal-and_Parietal_transverse',\r\n },\r\n 3160: { color: [61, 20, 180], opacity: 1, label: 'wm-lh-S_occipital_anterior' },\r\n 3161: { color: [101, 60, 220], opacity: 1, label: 'wm-lh-S_occipital_middle_and_Lunatus' },\r\n 3162: { color: [21, 20, 140], opacity: 1, label: 'wm-lh-S_occipital_superior_and_transversalis' },\r\n 3163: { color: [221, 140, 20], opacity: 1, label: 'wm-lh-S_occipito-temporal_lateral' },\r\n 3164: {\r\n color: [141, 100, 220],\r\n opacity: 1,\r\n label: 'wm-lh-S_occipito-temporal_medial_and_S_Lingual',\r\n },\r\n 3165: { color: [101, 20, 20], opacity: 1, label: 'wm-lh-S_orbital-H_shapped' },\r\n 3166: { color: [221, 100, 20], opacity: 1, label: 'wm-lh-S_orbital_lateral' },\r\n 3167: { color: [181, 200, 20], opacity: 1, label: 'wm-lh-S_orbital_medial-Or_olfactory' },\r\n 3168: { color: [21, 180, 140], opacity: 1, label: 'wm-lh-S_paracentral' },\r\n 3169: { color: [101, 100, 180], opacity: 1, label: 'wm-lh-S_parieto_occipital' },\r\n 3170: { color: [181, 220, 20], opacity: 1, label: 'wm-lh-S_pericallosal' },\r\n 3171: { color: [21, 140, 200], opacity: 1, label: 'wm-lh-S_postcentral' },\r\n 3172: { color: [21, 20, 240], opacity: 1, label: 'wm-lh-S_precentral-Inferior-part' },\r\n 3173: { color: [21, 20, 200], opacity: 1, label: 'wm-lh-S_precentral-Superior-part' },\r\n 3174: { color: [61, 180, 60], opacity: 1, label: 'wm-lh-S_subcentral_ant' },\r\n 3175: { color: [61, 180, 250], opacity: 1, label: 'wm-lh-S_subcentral_post' },\r\n 3176: { color: [21, 20, 60], opacity: 1, label: 'wm-lh-S_suborbital' },\r\n 3177: { color: [101, 60, 60], opacity: 1, label: 'wm-lh-S_subparietal' },\r\n 3178: { color: [21, 220, 220], opacity: 1, label: 'wm-lh-S_supracingulate' },\r\n 3179: { color: [21, 180, 180], opacity: 1, label: 'wm-lh-S_temporal_inferior' },\r\n 3180: { color: [223, 220, 60], opacity: 1, label: 'wm-lh-S_temporal_superior' },\r\n 3181: { color: [221, 60, 60], opacity: 1, label: 'wm-lh-S_temporal_transverse' },\r\n 4100: { color: [0, 0, 0], opacity: 1, label: 'wm-rh-Unknown' },\r\n 4101: { color: [50, 50, 50], opacity: 1, label: 'wm-rh-Corpus_callosum' },\r\n 4102: { color: [180, 20, 30], opacity: 1, label: 'wm-rh-G_and_S_Insula_ONLY_AVERAGE' },\r\n 4103: { color: [60, 25, 25], opacity: 1, label: 'wm-rh-G_cingulate-Isthmus' },\r\n 4104: { color: [25, 60, 60], opacity: 1, label: 'wm-rh-G_cingulate-Main_part' },\r\n 4105: { color: [180, 20, 20], opacity: 1, label: 'wm-rh-G_cuneus' },\r\n 4106: { color: [220, 20, 100], opacity: 1, label: 'wm-rh-G_frontal_inf-Opercular_part' },\r\n 4107: { color: [140, 60, 60], opacity: 1, label: 'wm-rh-G_frontal_inf-Orbital_part' },\r\n 4108: { color: [180, 220, 140], opacity: 1, label: 'wm-rh-G_frontal_inf-Triangular_part' },\r\n 4109: { color: [140, 100, 180], opacity: 1, label: 'wm-rh-G_frontal_middle' },\r\n 4110: { color: [180, 20, 140], opacity: 1, label: 'wm-rh-G_frontal_superior' },\r\n 4111: { color: [140, 20, 140], opacity: 1, label: 'wm-rh-G_frontomarginal' },\r\n 4112: { color: [21, 10, 10], opacity: 1, label: 'wm-rh-G_insular_long' },\r\n 4113: { color: [225, 140, 140], opacity: 1, label: 'wm-rh-G_insular_short' },\r\n 4114: { color: [23, 60, 180], opacity: 1, label: 'wm-rh-G_and_S_occipital_inferior' },\r\n 4115: { color: [180, 60, 180], opacity: 1, label: 'wm-rh-G_occipital_middle' },\r\n 4116: { color: [20, 220, 60], opacity: 1, label: 'wm-rh-G_occipital_superior' },\r\n 4117: { color: [60, 20, 140], opacity: 1, label: 'wm-rh-G_occipit-temp_lat-Or_fusiform' },\r\n 4118: { color: [220, 180, 140], opacity: 1, label: 'wm-rh-G_occipit-temp_med-Lingual_part' },\r\n 4119: {\r\n color: [65, 100, 20],\r\n opacity: 1,\r\n label: 'wm-rh-G_occipit-temp_med-Parahippocampal_part',\r\n },\r\n 4120: { color: [220, 60, 20], opacity: 1, label: 'wm-rh-G_orbital' },\r\n 4121: { color: [60, 100, 60], opacity: 1, label: 'wm-rh-G_paracentral' },\r\n 4122: { color: [20, 60, 220], opacity: 1, label: 'wm-rh-G_parietal_inferior-Angular_part' },\r\n 4123: {\r\n color: [100, 100, 60],\r\n opacity: 1,\r\n label: 'wm-rh-G_parietal_inferior-Supramarginal_part',\r\n },\r\n 4124: { color: [220, 180, 220], opacity: 1, label: 'wm-rh-G_parietal_superior' },\r\n 4125: { color: [20, 180, 140], opacity: 1, label: 'wm-rh-G_postcentral' },\r\n 4126: { color: [60, 140, 180], opacity: 1, label: 'wm-rh-G_precentral' },\r\n 4127: { color: [25, 20, 140], opacity: 1, label: 'wm-rh-G_precuneus' },\r\n 4128: { color: [20, 60, 100], opacity: 1, label: 'wm-rh-G_rectus' },\r\n 4129: { color: [60, 220, 20], opacity: 1, label: 'wm-rh-G_subcallosal' },\r\n 4130: { color: [60, 20, 220], opacity: 1, label: 'wm-rh-G_subcentral' },\r\n 4131: { color: [220, 220, 100], opacity: 1, label: 'wm-rh-G_temporal_inferior' },\r\n 4132: { color: [180, 60, 60], opacity: 1, label: 'wm-rh-G_temporal_middle' },\r\n 4133: { color: [60, 60, 220], opacity: 1, label: 'wm-rh-G_temp_sup-G_temp_transv_and_interm_S' },\r\n 4134: { color: [220, 60, 220], opacity: 1, label: 'wm-rh-G_temp_sup-Lateral_aspect' },\r\n 4135: { color: [65, 220, 60], opacity: 1, label: 'wm-rh-G_temp_sup-Planum_polare' },\r\n 4136: { color: [25, 140, 20], opacity: 1, label: 'wm-rh-G_temp_sup-Planum_tempolare' },\r\n 4137: { color: [13, 0, 250], opacity: 1, label: 'wm-rh-G_and_S_transverse_frontopolar' },\r\n 4138: { color: [61, 20, 220], opacity: 1, label: 'wm-rh-Lat_Fissure-ant_sgt-ramus_horizontal' },\r\n 4139: { color: [61, 20, 60], opacity: 1, label: 'wm-rh-Lat_Fissure-ant_sgt-ramus_vertical' },\r\n 4140: { color: [61, 60, 100], opacity: 1, label: 'wm-rh-Lat_Fissure-post_sgt' },\r\n 4141: { color: [25, 25, 25], opacity: 1, label: 'wm-rh-Medial_wall' },\r\n 4142: { color: [140, 20, 60], opacity: 1, label: 'wm-rh-Pole_occipital' },\r\n 4143: { color: [220, 180, 20], opacity: 1, label: 'wm-rh-Pole_temporal' },\r\n 4144: { color: [63, 180, 180], opacity: 1, label: 'wm-rh-S_calcarine' },\r\n 4145: { color: [221, 20, 10], opacity: 1, label: 'wm-rh-S_central' },\r\n 4146: { color: [21, 220, 20], opacity: 1, label: 'wm-rh-S_central_insula' },\r\n 4147: {\r\n color: [183, 100, 20],\r\n opacity: 1,\r\n label: 'wm-rh-S_cingulate-Main_part_and_Intracingulate',\r\n },\r\n 4148: { color: [221, 20, 100], opacity: 1, label: 'wm-rh-S_cingulate-Marginalis_part' },\r\n 4149: { color: [221, 60, 140], opacity: 1, label: 'wm-rh-S_circular_insula_anterior' },\r\n 4150: { color: [221, 20, 220], opacity: 1, label: 'wm-rh-S_circular_insula_inferior' },\r\n 4151: { color: [61, 220, 220], opacity: 1, label: 'wm-rh-S_circular_insula_superior' },\r\n 4152: { color: [100, 200, 200], opacity: 1, label: 'wm-rh-S_collateral_transverse_ant' },\r\n 4153: { color: [10, 200, 200], opacity: 1, label: 'wm-rh-S_collateral_transverse_post' },\r\n 4154: { color: [221, 220, 20], opacity: 1, label: 'wm-rh-S_frontal_inferior' },\r\n 4155: { color: [141, 20, 100], opacity: 1, label: 'wm-rh-S_frontal_middle' },\r\n 4156: { color: [61, 220, 100], opacity: 1, label: 'wm-rh-S_frontal_superior' },\r\n 4157: { color: [21, 220, 60], opacity: 1, label: 'wm-rh-S_frontomarginal' },\r\n 4158: { color: [141, 60, 20], opacity: 1, label: 'wm-rh-S_intermedius_primus-Jensen' },\r\n 4159: {\r\n color: [143, 20, 220],\r\n opacity: 1,\r\n label: 'wm-rh-S_intraparietal-and_Parietal_transverse',\r\n },\r\n 4160: { color: [61, 20, 180], opacity: 1, label: 'wm-rh-S_occipital_anterior' },\r\n 4161: { color: [101, 60, 220], opacity: 1, label: 'wm-rh-S_occipital_middle_and_Lunatus' },\r\n 4162: { color: [21, 20, 140], opacity: 1, label: 'wm-rh-S_occipital_superior_and_transversalis' },\r\n 4163: { color: [221, 140, 20], opacity: 1, label: 'wm-rh-S_occipito-temporal_lateral' },\r\n 4164: {\r\n color: [141, 100, 220],\r\n opacity: 1,\r\n label: 'wm-rh-S_occipito-temporal_medial_and_S_Lingual',\r\n },\r\n 4165: { color: [101, 20, 20], opacity: 1, label: 'wm-rh-S_orbital-H_shapped' },\r\n 4166: { color: [221, 100, 20], opacity: 1, label: 'wm-rh-S_orbital_lateral' },\r\n 4167: { color: [181, 200, 20], opacity: 1, label: 'wm-rh-S_orbital_medial-Or_olfactory' },\r\n 4168: { color: [21, 180, 140], opacity: 1, label: 'wm-rh-S_paracentral' },\r\n 4169: { color: [101, 100, 180], opacity: 1, label: 'wm-rh-S_parieto_occipital' },\r\n 4170: { color: [181, 220, 20], opacity: 1, label: 'wm-rh-S_pericallosal' },\r\n 4171: { color: [21, 140, 200], opacity: 1, label: 'wm-rh-S_postcentral' },\r\n 4172: { color: [21, 20, 240], opacity: 1, label: 'wm-rh-S_precentral-Inferior-part' },\r\n 4173: { color: [21, 20, 200], opacity: 1, label: 'wm-rh-S_precentral-Superior-part' },\r\n 4174: { color: [61, 180, 60], opacity: 1, label: 'wm-rh-S_subcentral_ant' },\r\n 4175: { color: [61, 180, 250], opacity: 1, label: 'wm-rh-S_subcentral_post' },\r\n 4176: { color: [21, 20, 60], opacity: 1, label: 'wm-rh-S_suborbital' },\r\n 4177: { color: [101, 60, 60], opacity: 1, label: 'wm-rh-S_subparietal' },\r\n 4178: { color: [21, 220, 220], opacity: 1, label: 'wm-rh-S_supracingulate' },\r\n 4179: { color: [21, 180, 180], opacity: 1, label: 'wm-rh-S_temporal_inferior' },\r\n 4180: { color: [223, 220, 60], opacity: 1, label: 'wm-rh-S_temporal_superior' },\r\n 4181: { color: [221, 60, 60], opacity: 1, label: 'wm-rh-S_temporal_transverse' },\r\n 5001: { color: [20, 30, 40], opacity: 1, label: 'Left-UnsegmentedWhiteMatter' },\r\n 5002: { color: [20, 30, 40], opacity: 1, label: 'Right-UnsegmentedWhiteMatter' },\r\n 5100: { color: [204, 102, 102], opacity: 1, label: 'fmajor' },\r\n 5101: { color: [204, 102, 102], opacity: 1, label: 'fminor' },\r\n 5102: { color: [255, 255, 102], opacity: 1, label: 'lh.atr' },\r\n 5103: { color: [153, 204, 0], opacity: 1, label: 'lh.cab' },\r\n 5104: { color: [0, 153, 153], opacity: 1, label: 'lh.ccg' },\r\n 5105: { color: [204, 153, 255], opacity: 1, label: 'lh.cst' },\r\n 5106: { color: [255, 153, 51], opacity: 1, label: 'lh.ilf' },\r\n 5107: { color: [204, 204, 204], opacity: 1, label: 'lh.slfp' },\r\n 5108: { color: [153, 255, 255], opacity: 1, label: 'lh.slft' },\r\n 5109: { color: [102, 153, 255], opacity: 1, label: 'lh.unc' },\r\n 5110: { color: [255, 255, 102], opacity: 1, label: 'rh.atr' },\r\n 5111: { color: [153, 204, 0], opacity: 1, label: 'rh.cab' },\r\n 5112: { color: [0, 153, 153], opacity: 1, label: 'rh.ccg' },\r\n 5113: { color: [204, 153, 255], opacity: 1, label: 'rh.cst' },\r\n 5114: { color: [255, 153, 51], opacity: 1, label: 'rh.ilf' },\r\n 5115: { color: [204, 204, 204], opacity: 1, label: 'rh.slfp' },\r\n 5116: { color: [153, 255, 255], opacity: 1, label: 'rh.slft' },\r\n 5117: { color: [102, 153, 255], opacity: 1, label: 'rh.unc' },\r\n 5200: { color: [204, 102, 102], opacity: 1, label: 'CC-ForcepsMajor' },\r\n 5201: { color: [204, 102, 102], opacity: 1, label: 'CC-ForcepsMinor' },\r\n 5202: { color: [255, 255, 102], opacity: 1, label: 'LAntThalRadiation' },\r\n 5203: { color: [153, 204, 0], opacity: 1, label: 'LCingulumAngBundle' },\r\n 5204: { color: [0, 153, 153], opacity: 1, label: 'LCingulumCingGyrus' },\r\n 5205: { color: [204, 153, 255], opacity: 1, label: 'LCorticospinalTract' },\r\n 5206: { color: [255, 153, 51], opacity: 1, label: 'LInfLongFas' },\r\n 5207: { color: [204, 204, 204], opacity: 1, label: 'LSupLongFasParietal' },\r\n 5208: { color: [153, 255, 255], opacity: 1, label: 'LSupLongFasTemporal' },\r\n 5209: { color: [102, 153, 255], opacity: 1, label: 'LUncinateFas' },\r\n 5210: { color: [255, 255, 102], opacity: 1, label: 'RAntThalRadiation' },\r\n 5211: { color: [153, 204, 0], opacity: 1, label: 'RCingulumAngBundle' },\r\n 5212: { color: [0, 153, 153], opacity: 1, label: 'RCingulumCingGyrus' },\r\n 5213: { color: [204, 153, 255], opacity: 1, label: 'RCorticospinalTract' },\r\n 5214: { color: [255, 153, 51], opacity: 1, label: 'RInfLongFas' },\r\n 5215: { color: [204, 204, 204], opacity: 1, label: 'RSupLongFasParietal' },\r\n 5216: { color: [153, 255, 255], opacity: 1, label: 'RSupLongFasTemporal' },\r\n 5217: { color: [102, 153, 255], opacity: 1, label: 'RUncinateFas' },\r\n 6000: { color: [0, 255, 0], opacity: 1, label: 'CST-orig' },\r\n 6001: { color: [255, 255, 0], opacity: 1, label: 'CST-hammer' },\r\n 6002: { color: [0, 255, 255], opacity: 1, label: 'CST-CVS' },\r\n 6003: { color: [0, 0, 255], opacity: 1, label: 'CST-flirt' },\r\n 6010: { color: [236, 16, 231], opacity: 1, label: 'Left-SLF1' },\r\n 6020: { color: [237, 18, 232], opacity: 1, label: 'Right-SLF1' },\r\n 6030: { color: [236, 13, 227], opacity: 1, label: 'Left-SLF3' },\r\n 6040: { color: [236, 17, 228], opacity: 1, label: 'Right-SLF3' },\r\n 6050: { color: [1, 255, 1], opacity: 1, label: 'Left-CST' },\r\n 6060: { color: [2, 255, 1], opacity: 1, label: 'Right-CST' },\r\n 6070: { color: [236, 14, 230], opacity: 1, label: 'Left-SLF2' },\r\n 6080: { color: [237, 14, 230], opacity: 1, label: 'Right-SLF2' },\r\n 7001: { color: [72, 132, 181], opacity: 1, label: 'Lateral-nucleus' },\r\n 7002: { color: [243, 243, 243], opacity: 1, label: 'Basolateral-nucleus' },\r\n 7003: { color: [207, 63, 79], opacity: 1, label: 'Basal-nucleus' },\r\n 7004: { color: [121, 20, 135], opacity: 1, label: 'Centromedial-nucleus' },\r\n 7005: { color: [197, 60, 248], opacity: 1, label: 'Central-nucleus' },\r\n 7006: { color: [2, 149, 2], opacity: 1, label: 'Medial-nucleus' },\r\n 7007: { color: [221, 249, 166], opacity: 1, label: 'Cortical-nucleus' },\r\n 7008: { color: [232, 146, 35], opacity: 1, label: 'Accessory-Basal-nucleus' },\r\n 7009: { color: [20, 60, 120], opacity: 1, label: 'Corticoamygdaloid-transitio' },\r\n 7010: { color: [250, 250, 0], opacity: 1, label: 'Anterior-amygdaloid-area-AAA' },\r\n 7011: { color: [122, 187, 222], opacity: 1, label: 'Fusion-amygdala-HP-FAH' },\r\n 7012: { color: [237, 12, 177], opacity: 1, label: 'Hippocampal-amygdala-transition-HATA' },\r\n 7013: { color: [10, 49, 255], opacity: 1, label: 'Endopiriform-nucleus' },\r\n 7014: { color: [205, 184, 144], opacity: 1, label: 'Lateral-nucleus-olfactory-tract' },\r\n 7015: { color: [45, 205, 165], opacity: 1, label: 'Paralaminar-nucleus' },\r\n 7016: { color: [117, 160, 175], opacity: 1, label: 'Intercalated-nucleus' },\r\n 7017: { color: [221, 217, 21], opacity: 1, label: 'Prepiriform-cortex' },\r\n 7018: { color: [20, 60, 120], opacity: 1, label: 'Periamygdaloid-cortex' },\r\n 7019: { color: [141, 21, 100], opacity: 1, label: 'Envelope-Amygdala' },\r\n 7020: { color: [225, 140, 141], opacity: 1, label: 'Extranuclear-Amydala' },\r\n 7100: { color: [42, 201, 168], opacity: 1, label: 'Brainstem-inferior-colliculus' },\r\n 7101: { color: [168, 104, 162], opacity: 1, label: 'Brainstem-cochlear-nucleus' },\r\n 8001: { color: [74, 130, 181], opacity: 1, label: 'Thalamus-Anterior' },\r\n 8002: { color: [242, 241, 240], opacity: 1, label: 'Thalamus-Ventral-anterior' },\r\n 8003: { color: [206, 65, 78], opacity: 1, label: 'Thalamus-Lateral-dorsal' },\r\n 8004: { color: [120, 21, 133], opacity: 1, label: 'Thalamus-Lateral-posterior' },\r\n 8005: { color: [195, 61, 246], opacity: 1, label: 'Thalamus-Ventral-lateral' },\r\n 8006: { color: [3, 147, 6], opacity: 1, label: 'Thalamus-Ventral-posterior-medial' },\r\n 8007: { color: [220, 251, 163], opacity: 1, label: 'Thalamus-Ventral-posterior-lateral' },\r\n 8008: { color: [232, 146, 33], opacity: 1, label: 'Thalamus-intralaminar' },\r\n 8009: { color: [4, 114, 14], opacity: 1, label: 'Thalamus-centromedian' },\r\n 8010: { color: [121, 184, 220], opacity: 1, label: 'Thalamus-mediodorsal' },\r\n 8011: { color: [235, 11, 175], opacity: 1, label: 'Thalamus-medial' },\r\n 8012: { color: [12, 46, 250], opacity: 1, label: 'Thalamus-pulvinar' },\r\n 8013: { color: [203, 182, 143], opacity: 1, label: 'Thalamus-lateral-geniculate' },\r\n 8014: { color: [42, 204, 167], opacity: 1, label: 'Thalamus-medial-geniculate' },\r\n 9000: { color: [50, 100, 30], opacity: 1, label: 'ctx-lh-prefrontal' },\r\n 9001: { color: [30, 100, 45], opacity: 1, label: 'ctx-lh-primary-motor' },\r\n 9002: { color: [130, 100, 165], opacity: 1, label: 'ctx-lh-premotor' },\r\n 9003: { color: [105, 25, 5], opacity: 1, label: 'ctx-lh-temporal' },\r\n 9004: { color: [125, 70, 55], opacity: 1, label: 'ctx-lh-posterior-parietal' },\r\n 9005: { color: [225, 20, 105], opacity: 1, label: 'ctx-lh-prim-sec-somatosensory' },\r\n 9006: { color: [225, 20, 15], opacity: 1, label: 'ctx-lh-occipital' },\r\n 9500: { color: [50, 200, 30], opacity: 1, label: 'ctx-rh-prefrontal' },\r\n 9501: { color: [30, 150, 45], opacity: 1, label: 'ctx-rh-primary-motor' },\r\n 9502: { color: [130, 150, 165], opacity: 1, label: 'ctx-rh-premotor' },\r\n 9503: { color: [105, 75, 5], opacity: 1, label: 'ctx-rh-temporal' },\r\n 9504: { color: [125, 120, 55], opacity: 1, label: 'ctx-rh-posterior-parietal' },\r\n 9505: { color: [225, 70, 105], opacity: 1, label: 'ctx-rh-prim-sec-somatosensory' },\r\n 9506: { color: [225, 70, 15], opacity: 1, label: 'ctx-rh-occipital' },\r\n 11100: { color: [0, 0, 0], opacity: 1, label: 'ctx_lh_Unknown' },\r\n 11101: { color: [23, 220, 60], opacity: 1, label: 'ctx_lh_G_and_S_frontomargin' },\r\n 11102: { color: [23, 60, 180], opacity: 1, label: 'ctx_lh_G_and_S_occipital_inf' },\r\n 11103: { color: [63, 100, 60], opacity: 1, label: 'ctx_lh_G_and_S_paracentral' },\r\n 11104: { color: [63, 20, 220], opacity: 1, label: 'ctx_lh_G_and_S_subcentral' },\r\n 11105: { color: [13, 0, 250], opacity: 1, label: 'ctx_lh_G_and_S_transv_frontopol' },\r\n 11106: { color: [26, 60, 0], opacity: 1, label: 'ctx_lh_G_and_S_cingul-Ant' },\r\n 11107: { color: [26, 60, 75], opacity: 1, label: 'ctx_lh_G_and_S_cingul-Mid-Ant' },\r\n 11108: { color: [26, 60, 150], opacity: 1, label: 'ctx_lh_G_and_S_cingul-Mid-Post' },\r\n 11109: { color: [25, 60, 250], opacity: 1, label: 'ctx_lh_G_cingul-Post-dorsal' },\r\n 11110: { color: [60, 25, 25], opacity: 1, label: 'ctx_lh_G_cingul-Post-ventral' },\r\n 11111: { color: [180, 20, 20], opacity: 1, label: 'ctx_lh_G_cuneus' },\r\n 11112: { color: [220, 20, 100], opacity: 1, label: 'ctx_lh_G_front_inf-Opercular' },\r\n 11113: { color: [140, 60, 60], opacity: 1, label: 'ctx_lh_G_front_inf-Orbital' },\r\n 11114: { color: [180, 220, 140], opacity: 1, label: 'ctx_lh_G_front_inf-Triangul' },\r\n 11115: { color: [140, 100, 180], opacity: 1, label: 'ctx_lh_G_front_middle' },\r\n 11116: { color: [180, 20, 140], opacity: 1, label: 'ctx_lh_G_front_sup' },\r\n 11117: { color: [23, 10, 10], opacity: 1, label: 'ctx_lh_G_Ins_lg_and_S_cent_ins' },\r\n 11118: { color: [225, 140, 140], opacity: 1, label: 'ctx_lh_G_insular_short' },\r\n 11119: { color: [180, 60, 180], opacity: 1, label: 'ctx_lh_G_occipital_middle' },\r\n 11120: { color: [20, 220, 60], opacity: 1, label: 'ctx_lh_G_occipital_sup' },\r\n 11121: { color: [60, 20, 140], opacity: 1, label: 'ctx_lh_G_oc-temp_lat-fusifor' },\r\n 11122: { color: [220, 180, 140], opacity: 1, label: 'ctx_lh_G_oc-temp_med-Lingual' },\r\n 11123: { color: [65, 100, 20], opacity: 1, label: 'ctx_lh_G_oc-temp_med-Parahip' },\r\n 11124: { color: [220, 60, 20], opacity: 1, label: 'ctx_lh_G_orbital' },\r\n 11125: { color: [20, 60, 220], opacity: 1, label: 'ctx_lh_G_pariet_inf-Angular' },\r\n 11126: { color: [100, 100, 60], opacity: 1, label: 'ctx_lh_G_pariet_inf-Supramar' },\r\n 11127: { color: [220, 180, 220], opacity: 1, label: 'ctx_lh_G_parietal_sup' },\r\n 11128: { color: [20, 180, 140], opacity: 1, label: 'ctx_lh_G_postcentral' },\r\n 11129: { color: [60, 140, 180], opacity: 1, label: 'ctx_lh_G_precentral' },\r\n 11130: { color: [25, 20, 140], opacity: 1, label: 'ctx_lh_G_precuneus' },\r\n 11131: { color: [20, 60, 100], opacity: 1, label: 'ctx_lh_G_rectus' },\r\n 11132: { color: [60, 220, 20], opacity: 1, label: 'ctx_lh_G_subcallosal' },\r\n 11133: { color: [60, 60, 220], opacity: 1, label: 'ctx_lh_G_temp_sup-G_T_transv' },\r\n 11134: { color: [220, 60, 220], opacity: 1, label: 'ctx_lh_G_temp_sup-Lateral' },\r\n 11135: { color: [65, 220, 60], opacity: 1, label: 'ctx_lh_G_temp_sup-Plan_polar' },\r\n 11136: { color: [25, 140, 20], opacity: 1, label: 'ctx_lh_G_temp_sup-Plan_tempo' },\r\n 11137: { color: [220, 220, 100], opacity: 1, label: 'ctx_lh_G_temporal_inf' },\r\n 11138: { color: [180, 60, 60], opacity: 1, label: 'ctx_lh_G_temporal_middle' },\r\n 11139: { color: [61, 20, 220], opacity: 1, label: 'ctx_lh_Lat_Fis-ant-Horizont' },\r\n 11140: { color: [61, 20, 60], opacity: 1, label: 'ctx_lh_Lat_Fis-ant-Vertical' },\r\n 11141: { color: [61, 60, 100], opacity: 1, label: 'ctx_lh_Lat_Fis-post' },\r\n 11142: { color: [25, 25, 25], opacity: 1, label: 'ctx_lh_Medial_wall' },\r\n 11143: { color: [140, 20, 60], opacity: 1, label: 'ctx_lh_Pole_occipital' },\r\n 11144: { color: [220, 180, 20], opacity: 1, label: 'ctx_lh_Pole_temporal' },\r\n 11145: { color: [63, 180, 180], opacity: 1, label: 'ctx_lh_S_calcarine' },\r\n 11146: { color: [221, 20, 10], opacity: 1, label: 'ctx_lh_S_central' },\r\n 11147: { color: [221, 20, 100], opacity: 1, label: 'ctx_lh_S_cingul-Marginalis' },\r\n 11148: { color: [221, 60, 140], opacity: 1, label: 'ctx_lh_S_circular_insula_ant' },\r\n 11149: { color: [221, 20, 220], opacity: 1, label: 'ctx_lh_S_circular_insula_inf' },\r\n 11150: { color: [61, 220, 220], opacity: 1, label: 'ctx_lh_S_circular_insula_sup' },\r\n 11151: { color: [100, 200, 200], opacity: 1, label: 'ctx_lh_S_collat_transv_ant' },\r\n 11152: { color: [10, 200, 200], opacity: 1, label: 'ctx_lh_S_collat_transv_post' },\r\n 11153: { color: [221, 220, 20], opacity: 1, label: 'ctx_lh_S_front_inf' },\r\n 11154: { color: [141, 20, 100], opacity: 1, label: 'ctx_lh_S_front_middle' },\r\n 11155: { color: [61, 220, 100], opacity: 1, label: 'ctx_lh_S_front_sup' },\r\n 11156: { color: [141, 60, 20], opacity: 1, label: 'ctx_lh_S_interm_prim-Jensen' },\r\n 11157: { color: [143, 20, 220], opacity: 1, label: 'ctx_lh_S_intrapariet_and_P_trans' },\r\n 11158: { color: [101, 60, 220], opacity: 1, label: 'ctx_lh_S_oc_middle_and_Lunatus' },\r\n 11159: { color: [21, 20, 140], opacity: 1, label: 'ctx_lh_S_oc_sup_and_transversal' },\r\n 11160: { color: [61, 20, 180], opacity: 1, label: 'ctx_lh_S_occipital_ant' },\r\n 11161: { color: [221, 140, 20], opacity: 1, label: 'ctx_lh_S_oc-temp_lat' },\r\n 11162: { color: [141, 100, 220], opacity: 1, label: 'ctx_lh_S_oc-temp_med_and_Lingual' },\r\n 11163: { color: [221, 100, 20], opacity: 1, label: 'ctx_lh_S_orbital_lateral' },\r\n 11164: { color: [181, 200, 20], opacity: 1, label: 'ctx_lh_S_orbital_med-olfact' },\r\n 11165: { color: [101, 20, 20], opacity: 1, label: 'ctx_lh_S_orbital-H_Shaped' },\r\n 11166: { color: [101, 100, 180], opacity: 1, label: 'ctx_lh_S_parieto_occipital' },\r\n 11167: { color: [181, 220, 20], opacity: 1, label: 'ctx_lh_S_pericallosal' },\r\n 11168: { color: [21, 140, 200], opacity: 1, label: 'ctx_lh_S_postcentral' },\r\n 11169: { color: [21, 20, 240], opacity: 1, label: 'ctx_lh_S_precentral-inf-part' },\r\n 11170: { color: [21, 20, 200], opacity: 1, label: 'ctx_lh_S_precentral-sup-part' },\r\n 11171: { color: [21, 20, 60], opacity: 1, label: 'ctx_lh_S_suborbital' },\r\n 11172: { color: [101, 60, 60], opacity: 1, label: 'ctx_lh_S_subparietal' },\r\n 11173: { color: [21, 180, 180], opacity: 1, label: 'ctx_lh_S_temporal_inf' },\r\n 11174: { color: [223, 220, 60], opacity: 1, label: 'ctx_lh_S_temporal_sup' },\r\n 11175: { color: [221, 60, 60], opacity: 1, label: 'ctx_lh_S_temporal_transverse' },\r\n 12100: { color: [0, 0, 0], opacity: 1, label: 'ctx_rh_Unknown' },\r\n 12101: { color: [23, 220, 60], opacity: 1, label: 'ctx_rh_G_and_S_frontomargin' },\r\n 12102: { color: [23, 60, 180], opacity: 1, label: 'ctx_rh_G_and_S_occipital_inf' },\r\n 12103: { color: [63, 100, 60], opacity: 1, label: 'ctx_rh_G_and_S_paracentral' },\r\n 12104: { color: [63, 20, 220], opacity: 1, label: 'ctx_rh_G_and_S_subcentral' },\r\n 12105: { color: [13, 0, 250], opacity: 1, label: 'ctx_rh_G_and_S_transv_frontopol' },\r\n 12106: { color: [26, 60, 0], opacity: 1, label: 'ctx_rh_G_and_S_cingul-Ant' },\r\n 12107: { color: [26, 60, 75], opacity: 1, label: 'ctx_rh_G_and_S_cingul-Mid-Ant' },\r\n 12108: { color: [26, 60, 150], opacity: 1, label: 'ctx_rh_G_and_S_cingul-Mid-Post' },\r\n 12109: { color: [25, 60, 250], opacity: 1, label: 'ctx_rh_G_cingul-Post-dorsal' },\r\n 12110: { color: [60, 25, 25], opacity: 1, label: 'ctx_rh_G_cingul-Post-ventral' },\r\n 12111: { color: [180, 20, 20], opacity: 1, label: 'ctx_rh_G_cuneus' },\r\n 12112: { color: [220, 20, 100], opacity: 1, label: 'ctx_rh_G_front_inf-Opercular' },\r\n 12113: { color: [140, 60, 60], opacity: 1, label: 'ctx_rh_G_front_inf-Orbital' },\r\n 12114: { color: [180, 220, 140], opacity: 1, label: 'ctx_rh_G_front_inf-Triangul' },\r\n 12115: { color: [140, 100, 180], opacity: 1, label: 'ctx_rh_G_front_middle' },\r\n 12116: { color: [180, 20, 140], opacity: 1, label: 'ctx_rh_G_front_sup' },\r\n 12117: { color: [23, 10, 10], opacity: 1, label: 'ctx_rh_G_Ins_lg_and_S_cent_ins' },\r\n 12118: { color: [225, 140, 140], opacity: 1, label: 'ctx_rh_G_insular_short' },\r\n 12119: { color: [180, 60, 180], opacity: 1, label: 'ctx_rh_G_occipital_middle' },\r\n 12120: { color: [20, 220, 60], opacity: 1, label: 'ctx_rh_G_occipital_sup' },\r\n 12121: { color: [60, 20, 140], opacity: 1, label: 'ctx_rh_G_oc-temp_lat-fusifor' },\r\n 12122: { color: [220, 180, 140], opacity: 1, label: 'ctx_rh_G_oc-temp_med-Lingual' },\r\n 12123: { color: [65, 100, 20], opacity: 1, label: 'ctx_rh_G_oc-temp_med-Parahip' },\r\n 12124: { color: [220, 60, 20], opacity: 1, label: 'ctx_rh_G_orbital' },\r\n 12125: { color: [20, 60, 220], opacity: 1, label: 'ctx_rh_G_pariet_inf-Angular' },\r\n 12126: { color: [100, 100, 60], opacity: 1, label: 'ctx_rh_G_pariet_inf-Supramar' },\r\n 12127: { color: [220, 180, 220], opacity: 1, label: 'ctx_rh_G_parietal_sup' },\r\n 12128: { color: [20, 180, 140], opacity: 1, label: 'ctx_rh_G_postcentral' },\r\n 12129: { color: [60, 140, 180], opacity: 1, label: 'ctx_rh_G_precentral' },\r\n 12130: { color: [25, 20, 140], opacity: 1, label: 'ctx_rh_G_precuneus' },\r\n 12131: { color: [20, 60, 100], opacity: 1, label: 'ctx_rh_G_rectus' },\r\n 12132: { color: [60, 220, 20], opacity: 1, label: 'ctx_rh_G_subcallosal' },\r\n 12133: { color: [60, 60, 220], opacity: 1, label: 'ctx_rh_G_temp_sup-G_T_transv' },\r\n 12134: { color: [220, 60, 220], opacity: 1, label: 'ctx_rh_G_temp_sup-Lateral' },\r\n 12135: { color: [65, 220, 60], opacity: 1, label: 'ctx_rh_G_temp_sup-Plan_polar' },\r\n 12136: { color: [25, 140, 20], opacity: 1, label: 'ctx_rh_G_temp_sup-Plan_tempo' },\r\n 12137: { color: [220, 220, 100], opacity: 1, label: 'ctx_rh_G_temporal_inf' },\r\n 12138: { color: [180, 60, 60], opacity: 1, label: 'ctx_rh_G_temporal_middle' },\r\n 12139: { color: [61, 20, 220], opacity: 1, label: 'ctx_rh_Lat_Fis-ant-Horizont' },\r\n 12140: { color: [61, 20, 60], opacity: 1, label: 'ctx_rh_Lat_Fis-ant-Vertical' },\r\n 12141: { color: [61, 60, 100], opacity: 1, label: 'ctx_rh_Lat_Fis-post' },\r\n 12142: { color: [25, 25, 25], opacity: 1, label: 'ctx_rh_Medial_wall' },\r\n 12143: { color: [140, 20, 60], opacity: 1, label: 'ctx_rh_Pole_occipital' },\r\n 12144: { color: [220, 180, 20], opacity: 1, label: 'ctx_rh_Pole_temporal' },\r\n 12145: { color: [63, 180, 180], opacity: 1, label: 'ctx_rh_S_calcarine' },\r\n 12146: { color: [221, 20, 10], opacity: 1, label: 'ctx_rh_S_central' },\r\n 12147: { color: [221, 20, 100], opacity: 1, label: 'ctx_rh_S_cingul-Marginalis' },\r\n 12148: { color: [221, 60, 140], opacity: 1, label: 'ctx_rh_S_circular_insula_ant' },\r\n 12149: { color: [221, 20, 220], opacity: 1, label: 'ctx_rh_S_circular_insula_inf' },\r\n 12150: { color: [61, 220, 220], opacity: 1, label: 'ctx_rh_S_circular_insula_sup' },\r\n 12151: { color: [100, 200, 200], opacity: 1, label: 'ctx_rh_S_collat_transv_ant' },\r\n 12152: { color: [10, 200, 200], opacity: 1, label: 'ctx_rh_S_collat_transv_post' },\r\n 12153: { color: [221, 220, 20], opacity: 1, label: 'ctx_rh_S_front_inf' },\r\n 12154: { color: [141, 20, 100], opacity: 1, label: 'ctx_rh_S_front_middle' },\r\n 12155: { color: [61, 220, 100], opacity: 1, label: 'ctx_rh_S_front_sup' },\r\n 12156: { color: [141, 60, 20], opacity: 1, label: 'ctx_rh_S_interm_prim-Jensen' },\r\n 12157: { color: [143, 20, 220], opacity: 1, label: 'ctx_rh_S_intrapariet_and_P_trans' },\r\n 12158: { color: [101, 60, 220], opacity: 1, label: 'ctx_rh_S_oc_middle_and_Lunatus' },\r\n 12159: { color: [21, 20, 140], opacity: 1, label: 'ctx_rh_S_oc_sup_and_transversal' },\r\n 12160: { color: [61, 20, 180], opacity: 1, label: 'ctx_rh_S_occipital_ant' },\r\n 12161: { color: [221, 140, 20], opacity: 1, label: 'ctx_rh_S_oc-temp_lat' },\r\n 12162: { color: [141, 100, 220], opacity: 1, label: 'ctx_rh_S_oc-temp_med_and_Lingual' },\r\n 12163: { color: [221, 100, 20], opacity: 1, label: 'ctx_rh_S_orbital_lateral' },\r\n 12164: { color: [181, 200, 20], opacity: 1, label: 'ctx_rh_S_orbital_med-olfact' },\r\n 12165: { color: [101, 20, 20], opacity: 1, label: 'ctx_rh_S_orbital-H_Shaped' },\r\n 12166: { color: [101, 100, 180], opacity: 1, label: 'ctx_rh_S_parieto_occipital' },\r\n 12167: { color: [181, 220, 20], opacity: 1, label: 'ctx_rh_S_pericallosal' },\r\n 12168: { color: [21, 140, 200], opacity: 1, label: 'ctx_rh_S_postcentral' },\r\n 12169: { color: [21, 20, 240], opacity: 1, label: 'ctx_rh_S_precentral-inf-part' },\r\n 12170: { color: [21, 20, 200], opacity: 1, label: 'ctx_rh_S_precentral-sup-part' },\r\n 12171: { color: [21, 20, 60], opacity: 1, label: 'ctx_rh_S_suborbital' },\r\n 12172: { color: [101, 60, 60], opacity: 1, label: 'ctx_rh_S_subparietal' },\r\n 12173: { color: [21, 180, 180], opacity: 1, label: 'ctx_rh_S_temporal_inf' },\r\n 12174: { color: [223, 220, 60], opacity: 1, label: 'ctx_rh_S_temporal_sup' },\r\n 12175: { color: [221, 60, 60], opacity: 1, label: 'ctx_rh_S_temporal_transverse' },\r\n 13100: { color: [0, 0, 0], opacity: 1, label: 'wm_lh_Unknown' },\r\n 13101: { color: [23, 220, 60], opacity: 1, label: 'wm_lh_G_and_S_frontomargin' },\r\n 13102: { color: [23, 60, 180], opacity: 1, label: 'wm_lh_G_and_S_occipital_inf' },\r\n 13103: { color: [63, 100, 60], opacity: 1, label: 'wm_lh_G_and_S_paracentral' },\r\n 13104: { color: [63, 20, 220], opacity: 1, label: 'wm_lh_G_and_S_subcentral' },\r\n 13105: { color: [13, 0, 250], opacity: 1, label: 'wm_lh_G_and_S_transv_frontopol' },\r\n 13106: { color: [26, 60, 0], opacity: 1, label: 'wm_lh_G_and_S_cingul-Ant' },\r\n 13107: { color: [26, 60, 75], opacity: 1, label: 'wm_lh_G_and_S_cingul-Mid-Ant' },\r\n 13108: { color: [26, 60, 150], opacity: 1, label: 'wm_lh_G_and_S_cingul-Mid-Post' },\r\n 13109: { color: [25, 60, 250], opacity: 1, label: 'wm_lh_G_cingul-Post-dorsal' },\r\n 13110: { color: [60, 25, 25], opacity: 1, label: 'wm_lh_G_cingul-Post-ventral' },\r\n 13111: { color: [180, 20, 20], opacity: 1, label: 'wm_lh_G_cuneus' },\r\n 13112: { color: [220, 20, 100], opacity: 1, label: 'wm_lh_G_front_inf-Opercular' },\r\n 13113: { color: [140, 60, 60], opacity: 1, label: 'wm_lh_G_front_inf-Orbital' },\r\n 13114: { color: [180, 220, 140], opacity: 1, label: 'wm_lh_G_front_inf-Triangul' },\r\n 13115: { color: [140, 100, 180], opacity: 1, label: 'wm_lh_G_front_middle' },\r\n 13116: { color: [180, 20, 140], opacity: 1, label: 'wm_lh_G_front_sup' },\r\n 13117: { color: [23, 10, 10], opacity: 1, label: 'wm_lh_G_Ins_lg_and_S_cent_ins' },\r\n 13118: { color: [225, 140, 140], opacity: 1, label: 'wm_lh_G_insular_short' },\r\n 13119: { color: [180, 60, 180], opacity: 1, label: 'wm_lh_G_occipital_middle' },\r\n 13120: { color: [20, 220, 60], opacity: 1, label: 'wm_lh_G_occipital_sup' },\r\n 13121: { color: [60, 20, 140], opacity: 1, label: 'wm_lh_G_oc-temp_lat-fusifor' },\r\n 13122: { color: [220, 180, 140], opacity: 1, label: 'wm_lh_G_oc-temp_med-Lingual' },\r\n 13123: { color: [65, 100, 20], opacity: 1, label: 'wm_lh_G_oc-temp_med-Parahip' },\r\n 13124: { color: [220, 60, 20], opacity: 1, label: 'wm_lh_G_orbital' },\r\n 13125: { color: [20, 60, 220], opacity: 1, label: 'wm_lh_G_pariet_inf-Angular' },\r\n 13126: { color: [100, 100, 60], opacity: 1, label: 'wm_lh_G_pariet_inf-Supramar' },\r\n 13127: { color: [220, 180, 220], opacity: 1, label: 'wm_lh_G_parietal_sup' },\r\n 13128: { color: [20, 180, 140], opacity: 1, label: 'wm_lh_G_postcentral' },\r\n 13129: { color: [60, 140, 180], opacity: 1, label: 'wm_lh_G_precentral' },\r\n 13130: { color: [25, 20, 140], opacity: 1, label: 'wm_lh_G_precuneus' },\r\n 13131: { color: [20, 60, 100], opacity: 1, label: 'wm_lh_G_rectus' },\r\n 13132: { color: [60, 220, 20], opacity: 1, label: 'wm_lh_G_subcallosal' },\r\n 13133: { color: [60, 60, 220], opacity: 1, label: 'wm_lh_G_temp_sup-G_T_transv' },\r\n 13134: { color: [220, 60, 220], opacity: 1, label: 'wm_lh_G_temp_sup-Lateral' },\r\n 13135: { color: [65, 220, 60], opacity: 1, label: 'wm_lh_G_temp_sup-Plan_polar' },\r\n 13136: { color: [25, 140, 20], opacity: 1, label: 'wm_lh_G_temp_sup-Plan_tempo' },\r\n 13137: { color: [220, 220, 100], opacity: 1, label: 'wm_lh_G_temporal_inf' },\r\n 13138: { color: [180, 60, 60], opacity: 1, label: 'wm_lh_G_temporal_middle' },\r\n 13139: { color: [61, 20, 220], opacity: 1, label: 'wm_lh_Lat_Fis-ant-Horizont' },\r\n 13140: { color: [61, 20, 60], opacity: 1, label: 'wm_lh_Lat_Fis-ant-Vertical' },\r\n 13141: { color: [61, 60, 100], opacity: 1, label: 'wm_lh_Lat_Fis-post' },\r\n 13142: { color: [25, 25, 25], opacity: 1, label: 'wm_lh_Medial_wall' },\r\n 13143: { color: [140, 20, 60], opacity: 1, label: 'wm_lh_Pole_occipital' },\r\n 13144: { color: [220, 180, 20], opacity: 1, label: 'wm_lh_Pole_temporal' },\r\n 13145: { color: [63, 180, 180], opacity: 1, label: 'wm_lh_S_calcarine' },\r\n 13146: { color: [221, 20, 10], opacity: 1, label: 'wm_lh_S_central' },\r\n 13147: { color: [221, 20, 100], opacity: 1, label: 'wm_lh_S_cingul-Marginalis' },\r\n 13148: { color: [221, 60, 140], opacity: 1, label: 'wm_lh_S_circular_insula_ant' },\r\n 13149: { color: [221, 20, 220], opacity: 1, label: 'wm_lh_S_circular_insula_inf' },\r\n 13150: { color: [61, 220, 220], opacity: 1, label: 'wm_lh_S_circular_insula_sup' },\r\n 13151: { color: [100, 200, 200], opacity: 1, label: 'wm_lh_S_collat_transv_ant' },\r\n 13152: { color: [10, 200, 200], opacity: 1, label: 'wm_lh_S_collat_transv_post' },\r\n 13153: { color: [221, 220, 20], opacity: 1, label: 'wm_lh_S_front_inf' },\r\n 13154: { color: [141, 20, 100], opacity: 1, label: 'wm_lh_S_front_middle' },\r\n 13155: { color: [61, 220, 100], opacity: 1, label: 'wm_lh_S_front_sup' },\r\n 13156: { color: [141, 60, 20], opacity: 1, label: 'wm_lh_S_interm_prim-Jensen' },\r\n 13157: { color: [143, 20, 220], opacity: 1, label: 'wm_lh_S_intrapariet_and_P_trans' },\r\n 13158: { color: [101, 60, 220], opacity: 1, label: 'wm_lh_S_oc_middle_and_Lunatus' },\r\n 13159: { color: [21, 20, 140], opacity: 1, label: 'wm_lh_S_oc_sup_and_transversal' },\r\n 13160: { color: [61, 20, 180], opacity: 1, label: 'wm_lh_S_occipital_ant' },\r\n 13161: { color: [221, 140, 20], opacity: 1, label: 'wm_lh_S_oc-temp_lat' },\r\n 13162: { color: [141, 100, 220], opacity: 1, label: 'wm_lh_S_oc-temp_med_and_Lingual' },\r\n 13163: { color: [221, 100, 20], opacity: 1, label: 'wm_lh_S_orbital_lateral' },\r\n 13164: { color: [181, 200, 20], opacity: 1, label: 'wm_lh_S_orbital_med-olfact' },\r\n 13165: { color: [101, 20, 20], opacity: 1, label: 'wm_lh_S_orbital-H_Shaped' },\r\n 13166: { color: [101, 100, 180], opacity: 1, label: 'wm_lh_S_parieto_occipital' },\r\n 13167: { color: [181, 220, 20], opacity: 1, label: 'wm_lh_S_pericallosal' },\r\n 13168: { color: [21, 140, 200], opacity: 1, label: 'wm_lh_S_postcentral' },\r\n 13169: { color: [21, 20, 240], opacity: 1, label: 'wm_lh_S_precentral-inf-part' },\r\n 13170: { color: [21, 20, 200], opacity: 1, label: 'wm_lh_S_precentral-sup-part' },\r\n 13171: { color: [21, 20, 60], opacity: 1, label: 'wm_lh_S_suborbital' },\r\n 13172: { color: [101, 60, 60], opacity: 1, label: 'wm_lh_S_subparietal' },\r\n 13173: { color: [21, 180, 180], opacity: 1, label: 'wm_lh_S_temporal_inf' },\r\n 13174: { color: [223, 220, 60], opacity: 1, label: 'wm_lh_S_temporal_sup' },\r\n 13175: { color: [221, 60, 60], opacity: 1, label: 'wm_lh_S_temporal_transverse' },\r\n 14100: { color: [0, 0, 0], opacity: 1, label: 'wm_rh_Unknown' },\r\n 14101: { color: [23, 220, 60], opacity: 1, label: 'wm_rh_G_and_S_frontomargin' },\r\n 14102: { color: [23, 60, 180], opacity: 1, label: 'wm_rh_G_and_S_occipital_inf' },\r\n 14103: { color: [63, 100, 60], opacity: 1, label: 'wm_rh_G_and_S_paracentral' },\r\n 14104: { color: [63, 20, 220], opacity: 1, label: 'wm_rh_G_and_S_subcentral' },\r\n 14105: { color: [13, 0, 250], opacity: 1, label: 'wm_rh_G_and_S_transv_frontopol' },\r\n 14106: { color: [26, 60, 0], opacity: 1, label: 'wm_rh_G_and_S_cingul-Ant' },\r\n 14107: { color: [26, 60, 75], opacity: 1, label: 'wm_rh_G_and_S_cingul-Mid-Ant' },\r\n 14108: { color: [26, 60, 150], opacity: 1, label: 'wm_rh_G_and_S_cingul-Mid-Post' },\r\n 14109: { color: [25, 60, 250], opacity: 1, label: 'wm_rh_G_cingul-Post-dorsal' },\r\n 14110: { color: [60, 25, 25], opacity: 1, label: 'wm_rh_G_cingul-Post-ventral' },\r\n 14111: { color: [180, 20, 20], opacity: 1, label: 'wm_rh_G_cuneus' },\r\n 14112: { color: [220, 20, 100], opacity: 1, label: 'wm_rh_G_front_inf-Opercular' },\r\n 14113: { color: [140, 60, 60], opacity: 1, label: 'wm_rh_G_front_inf-Orbital' },\r\n 14114: { color: [180, 220, 140], opacity: 1, label: 'wm_rh_G_front_inf-Triangul' },\r\n 14115: { color: [140, 100, 180], opacity: 1, label: 'wm_rh_G_front_middle' },\r\n 14116: { color: [180, 20, 140], opacity: 1, label: 'wm_rh_G_front_sup' },\r\n 14117: { color: [23, 10, 10], opacity: 1, label: 'wm_rh_G_Ins_lg_and_S_cent_ins' },\r\n 14118: { color: [225, 140, 140], opacity: 1, label: 'wm_rh_G_insular_short' },\r\n 14119: { color: [180, 60, 180], opacity: 1, label: 'wm_rh_G_occipital_middle' },\r\n 14120: { color: [20, 220, 60], opacity: 1, label: 'wm_rh_G_occipital_sup' },\r\n 14121: { color: [60, 20, 140], opacity: 1, label: 'wm_rh_G_oc-temp_lat-fusifor' },\r\n 14122: { color: [220, 180, 140], opacity: 1, label: 'wm_rh_G_oc-temp_med-Lingual' },\r\n 14123: { color: [65, 100, 20], opacity: 1, label: 'wm_rh_G_oc-temp_med-Parahip' },\r\n 14124: { color: [220, 60, 20], opacity: 1, label: 'wm_rh_G_orbital' },\r\n 14125: { color: [20, 60, 220], opacity: 1, label: 'wm_rh_G_pariet_inf-Angular' },\r\n 14126: { color: [100, 100, 60], opacity: 1, label: 'wm_rh_G_pariet_inf-Supramar' },\r\n 14127: { color: [220, 180, 220], opacity: 1, label: 'wm_rh_G_parietal_sup' },\r\n 14128: { color: [20, 180, 140], opacity: 1, label: 'wm_rh_G_postcentral' },\r\n 14129: { color: [60, 140, 180], opacity: 1, label: 'wm_rh_G_precentral' },\r\n 14130: { color: [25, 20, 140], opacity: 1, label: 'wm_rh_G_precuneus' },\r\n 14131: { color: [20, 60, 100], opacity: 1, label: 'wm_rh_G_rectus' },\r\n 14132: { color: [60, 220, 20], opacity: 1, label: 'wm_rh_G_subcallosal' },\r\n 14133: { color: [60, 60, 220], opacity: 1, label: 'wm_rh_G_temp_sup-G_T_transv' },\r\n 14134: { color: [220, 60, 220], opacity: 1, label: 'wm_rh_G_temp_sup-Lateral' },\r\n 14135: { color: [65, 220, 60], opacity: 1, label: 'wm_rh_G_temp_sup-Plan_polar' },\r\n 14136: { color: [25, 140, 20], opacity: 1, label: 'wm_rh_G_temp_sup-Plan_tempo' },\r\n 14137: { color: [220, 220, 100], opacity: 1, label: 'wm_rh_G_temporal_inf' },\r\n 14138: { color: [180, 60, 60], opacity: 1, label: 'wm_rh_G_temporal_middle' },\r\n 14139: { color: [61, 20, 220], opacity: 1, label: 'wm_rh_Lat_Fis-ant-Horizont' },\r\n 14140: { color: [61, 20, 60], opacity: 1, label: 'wm_rh_Lat_Fis-ant-Vertical' },\r\n 14141: { color: [61, 60, 100], opacity: 1, label: 'wm_rh_Lat_Fis-post' },\r\n 14142: { color: [25, 25, 25], opacity: 1, label: 'wm_rh_Medial_wall' },\r\n 14143: { color: [140, 20, 60], opacity: 1, label: 'wm_rh_Pole_occipital' },\r\n 14144: { color: [220, 180, 20], opacity: 1, label: 'wm_rh_Pole_temporal' },\r\n 14145: { color: [63, 180, 180], opacity: 1, label: 'wm_rh_S_calcarine' },\r\n 14146: { color: [221, 20, 10], opacity: 1, label: 'wm_rh_S_central' },\r\n 14147: { color: [221, 20, 100], opacity: 1, label: 'wm_rh_S_cingul-Marginalis' },\r\n 14148: { color: [221, 60, 140], opacity: 1, label: 'wm_rh_S_circular_insula_ant' },\r\n 14149: { color: [221, 20, 220], opacity: 1, label: 'wm_rh_S_circular_insula_inf' },\r\n 14150: { color: [61, 220, 220], opacity: 1, label: 'wm_rh_S_circular_insula_sup' },\r\n 14151: { color: [100, 200, 200], opacity: 1, label: 'wm_rh_S_collat_transv_ant' },\r\n 14152: { color: [10, 200, 200], opacity: 1, label: 'wm_rh_S_collat_transv_post' },\r\n 14153: { color: [221, 220, 20], opacity: 1, label: 'wm_rh_S_front_inf' },\r\n 14154: { color: [141, 20, 100], opacity: 1, label: 'wm_rh_S_front_middle' },\r\n 14155: { color: [61, 220, 100], opacity: 1, label: 'wm_rh_S_front_sup' },\r\n 14156: { color: [141, 60, 20], opacity: 1, label: 'wm_rh_S_interm_prim-Jensen' },\r\n 14157: { color: [143, 20, 220], opacity: 1, label: 'wm_rh_S_intrapariet_and_P_trans' },\r\n 14158: { color: [101, 60, 220], opacity: 1, label: 'wm_rh_S_oc_middle_and_Lunatus' },\r\n 14159: { color: [21, 20, 140], opacity: 1, label: 'wm_rh_S_oc_sup_and_transversal' },\r\n 14160: { color: [61, 20, 180], opacity: 1, label: 'wm_rh_S_occipital_ant' },\r\n 14161: { color: [221, 140, 20], opacity: 1, label: 'wm_rh_S_oc-temp_lat' },\r\n 14162: { color: [141, 100, 220], opacity: 1, label: 'wm_rh_S_oc-temp_med_and_Lingual' },\r\n 14163: { color: [221, 100, 20], opacity: 1, label: 'wm_rh_S_orbital_lateral' },\r\n 14164: { color: [181, 200, 20], opacity: 1, label: 'wm_rh_S_orbital_med-olfact' },\r\n 14165: { color: [101, 20, 20], opacity: 1, label: 'wm_rh_S_orbital-H_Shaped' },\r\n 14166: { color: [101, 100, 180], opacity: 1, label: 'wm_rh_S_parieto_occipital' },\r\n 14167: { color: [181, 220, 20], opacity: 1, label: 'wm_rh_S_pericallosal' },\r\n 14168: { color: [21, 140, 200], opacity: 1, label: 'wm_rh_S_postcentral' },\r\n 14169: { color: [21, 20, 240], opacity: 1, label: 'wm_rh_S_precentral-inf-part' },\r\n 14170: { color: [21, 20, 200], opacity: 1, label: 'wm_rh_S_precentral-sup-part' },\r\n 14171: { color: [21, 20, 60], opacity: 1, label: 'wm_rh_S_suborbital' },\r\n 14172: { color: [101, 60, 60], opacity: 1, label: 'wm_rh_S_subparietal' },\r\n 14173: { color: [21, 180, 180], opacity: 1, label: 'wm_rh_S_temporal_inf' },\r\n 14174: { color: [223, 220, 60], opacity: 1, label: 'wm_rh_S_temporal_sup' },\r\n 14175: { color: [221, 60, 60], opacity: 1, label: 'wm_rh_S_temporal_transverse' },\r\n};\r\n\r\nexport default segmentationFs;\r\n","/**\r\n * @module presets/segmentation\r\n */\r\n\r\nimport freesurferSegmentation from './presets.segmentation.freesurfer';\r\n\r\nexport default class PresetsSegmentation {\r\n constructor(presetID = 'Freesurfer') {\r\n this._presetID = presetID;\r\n this._presets = this.presetSegs();\r\n }\r\n\r\n set preset(targetPreset) {\r\n this._presetID = targetPreset;\r\n }\r\n\r\n get preset() {\r\n return this.fetchPreset(this._presetID);\r\n }\r\n\r\n fetchPreset(presetID) {\r\n let presets = this._presets;\r\n return presets[presetID];\r\n }\r\n\r\n addPreset(presetObj) {\r\n this._presets.push(presetObj);\r\n }\r\n\r\n presetsAvailable(type = 'segmentation') {\r\n let available = [];\r\n let presets = this._presets;\r\n\r\n for (let i in presets) {\r\n available.push(i);\r\n }\r\n\r\n return available;\r\n }\r\n\r\n presetSegs() {\r\n return {\r\n Freesurfer: freesurferSegmentation,\r\n };\r\n }\r\n}\r\n","import ShadersBase from '../shaders.base';\r\n\r\nclass IntersectBox extends ShadersBase {\r\n constructor() {\r\n super();\r\n this.name = 'intersectBox';\r\n\r\n // default properties names\r\n this._rayOrigin = 'rayOrigin';\r\n this._rayDirection = 'rayDirection';\r\n this._aabbMin = 'aabbMin';\r\n this._aabbMax = 'aabbMax';\r\n this._tNear = 'tNear';\r\n this._tFar = 'tFar';\r\n this._intersect = 'intersect';\r\n }\r\n\r\n api(\r\n baseFragment = this._base,\r\n rayOrigin = this._rayOrigin,\r\n rayDirection = this._rayDirection,\r\n aabbMin = this._aabbMin,\r\n aabbMax = this._aabbMax,\r\n tNear = this._tNear,\r\n tFar = this._tFar,\r\n intersect = this._intersect\r\n ) {\r\n this._base = baseFragment;\r\n return this.compute(rayOrigin, rayDirection, aabbMin, aabbMax, tNear, tFar, intersect);\r\n }\r\n\r\n compute(rayOrigin, rayDirection, aabbMin, aabbMax, tNear, tFar, intersect) {\r\n this.computeDefinition();\r\n this._base._functions[this._name] = this._definition;\r\n return `${\r\n this._name\r\n }(${rayOrigin}, ${rayDirection}, ${aabbMin}, ${aabbMax}, ${tNear}, ${tFar}, ${intersect});`;\r\n }\r\n\r\n computeDefinition() {\r\n this._definition = `\r\nvoid ${\r\n this._name\r\n }(vec3 rayOrigin, vec3 rayDirection, vec3 boxMin, vec3 boxMax, out float tNear, out float tFar, out bool intersect){\r\n // compute intersection of ray with all six bbox planes\r\n vec3 invRay = vec3(1.) / rayDirection;\r\n vec3 tBot = invRay * (boxMin - rayOrigin);\r\n vec3 tTop = invRay * (boxMax - rayOrigin);\r\n // re-order intersections to find smallest and largest on each axis\r\n vec3 tMin = min(tTop, tBot);\r\n vec3 tMax = max(tTop, tBot);\r\n // find the largest tMin and the smallest tMax\r\n float largest_tMin = max(max(tMin.x, tMin.y), max(tMin.x, tMin.z));\r\n float smallest_tMax = min(min(tMax.x, tMax.y), min(tMax.x, tMax.z));\r\n tNear = largest_tMin;\r\n tFar = smallest_tMax;\r\n intersect = smallest_tMax > largest_tMin;\r\n}\r\n\r\n `;\r\n }\r\n}\r\n\r\nexport default new IntersectBox();\r\n","import ShadersBase from '../shaders.base';\r\n\r\nclass Texture3d extends ShadersBase {\r\n constructor() {\r\n super();\r\n this.name = 'texture3d';\r\n\r\n // default properties names\r\n this._dataCoordinates = 'dataCoordinates';\r\n this._dataValue = 'dataValue';\r\n this._offset = 'offset';\r\n }\r\n\r\n api(\r\n baseFragment = this._base,\r\n dataCoordinates = this._dataCoordinates,\r\n dataValue = this._dataValue,\r\n offset = this._offset\r\n ) {\r\n this._base = baseFragment;\r\n return this.compute(dataCoordinates, dataValue, offset);\r\n }\r\n\r\n compute(dataCoordinates, dataValue, offset) {\r\n this.computeDefinition();\r\n this._base._functions[this._name] = this._definition;\r\n return `${this._name}(${dataCoordinates}, ${dataValue}, ${offset});`;\r\n }\r\n\r\n computeDefinition() {\r\n let content = `\r\n step( abs( textureIndexF - 0.0 ), 0.0 ) * texture2D(uTextureContainer[0], uv) +\r\n step( abs( textureIndexF - 1.0 ), 0.0 ) * texture2D(uTextureContainer[1], uv) +\r\n step( abs( textureIndexF - 2.0 ), 0.0 ) * texture2D(uTextureContainer[2], uv) +\r\n step( abs( textureIndexF - 3.0 ), 0.0 ) * texture2D(uTextureContainer[3], uv) +\r\n step( abs( textureIndexF - 4.0 ), 0.0 ) * texture2D(uTextureContainer[4], uv) +\r\n step( abs( textureIndexF - 5.0 ), 0.0 ) * texture2D(uTextureContainer[5], uv) +\r\n step( abs( textureIndexF - 6.0 ), 0.0 ) * texture2D(uTextureContainer[6], uv)`;\r\n\r\n if (this._base._uniforms.uTextureContainer.length === 14) {\r\n content += ` +\r\n step( abs( textureIndexF - 7.0 ), 0.0 ) * texture2D(uTextureContainer[7], uv) +\r\n step( abs( textureIndexF - 8.0 ), 0.0 ) * texture2D(uTextureContainer[8], uv) +\r\n step( abs( textureIndexF - 9.0 ), 0.0 ) * texture2D(uTextureContainer[9], uv) +\r\n step( abs( textureIndexF - 10.0 ), 0.0 ) * texture2D(uTextureContainer[10], uv) +\r\n step( abs( textureIndexF - 11.0 ), 0.0 ) * texture2D(uTextureContainer[11], uv) +\r\n step( abs( textureIndexF - 12.0 ), 0.0 ) * texture2D(uTextureContainer[12], uv) +\r\n step( abs( textureIndexF - 13.0 ), 0.0 ) * texture2D(uTextureContainer[13], uv)`;\r\n }\r\n\r\n this._definition = `\r\nvoid ${this._name}(in ivec3 dataCoordinates, out vec4 dataValue, out int offset){\r\n float textureSizeF = float(uTextureSize);\r\n int voxelsPerTexture = uTextureSize*uTextureSize;\r\n\r\n int index = dataCoordinates.x\r\n + dataCoordinates.y * uDataDimensions.x\r\n + dataCoordinates.z * uDataDimensions.y * uDataDimensions.x;\r\n \r\n // dividing an integer by an integer will give you an integer result, rounded down\r\n // can not get float numbers to work :(\r\n int packedIndex = index/uPackedPerPixel;\r\n offset = index - uPackedPerPixel*packedIndex;\r\n\r\n // Map data index to right sampler2D texture\r\n int textureIndex = packedIndex/voxelsPerTexture;\r\n int inTextureIndex = packedIndex - voxelsPerTexture*textureIndex;\r\n\r\n // Get row and column in the texture\r\n int rowIndex = inTextureIndex/uTextureSize;\r\n float rowIndexF = float(rowIndex);\r\n float colIndex = float(inTextureIndex - uTextureSize * rowIndex);\r\n\r\n // Map row and column to uv\r\n vec2 uv = vec2(0,0);\r\n uv.x = (0.5 + colIndex) / textureSizeF;\r\n uv.y = 1. - (0.5 + rowIndexF) / textureSizeF;\r\n\r\n float textureIndexF = float(textureIndex);\r\n dataValue = vec4(0.) + ${content};\r\n}\r\n `;\r\n }\r\n}\r\n\r\nexport default new Texture3d();\r\n","import ShadersBase from '../shaders.base';\r\n\r\n/**\r\n * Set of methods to unpack values from [r][b][g][a] -> float\r\n */\r\nclass Unpack extends ShadersBase {\r\n /**\r\n * Constructor\r\n */\r\n constructor() {\r\n super();\r\n this.name = 'unpack';\r\n\r\n // default properties names\r\n this._packedData = 'packedData';\r\n this._offset = 'offset';\r\n this._unpackedData = 'unpackedData';\r\n\r\n this._base._uniforms = {\r\n uNumberOfChannels: {\r\n value: 1,\r\n },\r\n uBitsAllocated: {\r\n value: 16,\r\n },\r\n uPixelType: {\r\n value: 0,\r\n },\r\n };\r\n }\r\n\r\n api(\r\n baseFragment = this._base,\r\n packedData = this._packedData,\r\n offset = this._offset,\r\n unpackedData = this._unpackedData\r\n ) {\r\n this._base = baseFragment;\r\n return this.compute(packedData, offset, unpackedData);\r\n }\r\n\r\n compute(packedData, offset, unpackedData) {\r\n this.computeDefinition();\r\n this._base._functions[this._name] = this._definition;\r\n return `${this._name}(${packedData}, ${offset}, ${unpackedData});`;\r\n }\r\n\r\n computeDefinition() {\r\n // fun stuff\r\n let content = '';\r\n if (this._base._uniforms.uNumberOfChannels.value === 1) {\r\n switch (this._base._uniforms.uBitsAllocated.value) {\r\n case 1:\r\n case 8:\r\n content = this.upack8();\r\n break;\r\n\r\n case 16:\r\n content = this.upack16();\r\n break;\r\n\r\n case 32:\r\n content = this.upack32();\r\n break;\r\n\r\n default:\r\n content = this.upackIdentity();\r\n break;\r\n }\r\n } else {\r\n content = this.upackIdentity();\r\n }\r\n\r\n this._definition = `\r\nvoid ${this._name}(in vec4 packedData, in int offset, out vec4 unpackedData){\r\n\r\n${content}\r\n\r\n} \r\n `;\r\n }\r\n\r\n upack8() {\r\n this._base._functions['uInt8'] = this.uInt8();\r\n\r\n return `\r\nfloat floatedOffset = float(offset);\r\nfloat floatedOffsetSquared = floatedOffset * floatedOffset;\r\nuInt8(\r\n step( floatedOffsetSquared , 0.0 ) * packedData.r +\r\n step( floatedOffsetSquared - 2. * floatedOffset + 1., 0.0 ) * packedData.g +\r\n step( floatedOffsetSquared - 2. * 2. * floatedOffset + 4., 0.0 ) * packedData.b +\r\n step( floatedOffsetSquared - 2. * 3. * floatedOffset + 9., 0.0 ) * packedData.a\r\n ,\r\n unpackedData.x);\r\n `;\r\n }\r\n\r\n upack16() {\r\n this._base._functions['uInt16'] = this.uInt16();\r\n\r\n return `\r\nfloat floatedOffset = float(offset);\r\nuInt16(\r\n packedData.r * (1. - floatedOffset) + packedData.b * floatedOffset,\r\n packedData.g * (1. - floatedOffset) + packedData.a * floatedOffset,\r\n unpackedData.x);\r\n `;\r\n }\r\n\r\n upack32() {\r\n if (this._base._uniforms.uPixelType.value === 0) {\r\n this._base._functions['uInt32'] = this.uInt32();\r\n\r\n return `\r\nuInt32(\r\n packedData.r,\r\n packedData.g,\r\n packedData.b,\r\n packedData.a,\r\n unpackedData.x);\r\n `;\r\n } else {\r\n this._base._functions['uFloat32'] = this.uFloat32();\r\n\r\n return `\r\nuFloat32(\r\n packedData.r,\r\n packedData.g,\r\n packedData.b,\r\n packedData.a,\r\n unpackedData.x);\r\n `;\r\n }\r\n }\r\n\r\n upackIdentity() {\r\n return `\r\nunpackedData = packedData;\r\n `;\r\n }\r\n\r\n uInt8() {\r\n return `\r\nvoid uInt8(in float r, out float value){\r\n value = r * 255.;\r\n}\r\n `;\r\n }\r\n\r\n uInt16() {\r\n return `\r\nvoid uInt16(in float r, in float a, out float value){\r\n value = r * 255. + a * 255. * 256.;\r\n}\r\n `;\r\n }\r\n\r\n uInt32() {\r\n return `\r\nvoid uInt32(in float r, in float g, in float b, in float a, out float value){\r\n value = r * 255. + g * 255. * 256. + b * 255. * 256. * 256. + a * 255. * 256. * 256. * 256.;\r\n // value = r * 255. + g * 65025. + b * 16581375. + a * 4228250625.;\r\n}\r\n `;\r\n }\r\n\r\n uFloat32() {\r\n return `\r\nvoid uFloat32(in float r, in float g, in float b, in float a, out float value){\r\n\r\n // create arrays containing bits for rgba values\r\n // value between 0 and 255\r\n value = r * 255.;\r\n int bytemeR[8];\r\n bytemeR[0] = int(floor(value / 128.));\r\n value -= float(bytemeR[0] * 128);\r\n bytemeR[1] = int(floor(value / 64.));\r\n value -= float(bytemeR[1] * 64);\r\n bytemeR[2] = int(floor(value / 32.));\r\n value -= float(bytemeR[2] * 32);\r\n bytemeR[3] = int(floor(value / 16.));\r\n value -= float(bytemeR[3] * 16);\r\n bytemeR[4] = int(floor(value / 8.));\r\n value -= float(bytemeR[4] * 8);\r\n bytemeR[5] = int(floor(value / 4.));\r\n value -= float(bytemeR[5] * 4);\r\n bytemeR[6] = int(floor(value / 2.));\r\n value -= float(bytemeR[6] * 2);\r\n bytemeR[7] = int(floor(value));\r\n\r\n value = g * 255.;\r\n int bytemeG[8];\r\n bytemeG[0] = int(floor(value / 128.));\r\n value -= float(bytemeG[0] * 128);\r\n bytemeG[1] = int(floor(value / 64.));\r\n value -= float(bytemeG[1] * 64);\r\n bytemeG[2] = int(floor(value / 32.));\r\n value -= float(bytemeG[2] * 32);\r\n bytemeG[3] = int(floor(value / 16.));\r\n value -= float(bytemeG[3] * 16);\r\n bytemeG[4] = int(floor(value / 8.));\r\n value -= float(bytemeG[4] * 8);\r\n bytemeG[5] = int(floor(value / 4.));\r\n value -= float(bytemeG[5] * 4);\r\n bytemeG[6] = int(floor(value / 2.));\r\n value -= float(bytemeG[6] * 2);\r\n bytemeG[7] = int(floor(value));\r\n\r\n value = b * 255.;\r\n int bytemeB[8];\r\n bytemeB[0] = int(floor(value / 128.));\r\n value -= float(bytemeB[0] * 128);\r\n bytemeB[1] = int(floor(value / 64.));\r\n value -= float(bytemeB[1] * 64);\r\n bytemeB[2] = int(floor(value / 32.));\r\n value -= float(bytemeB[2] * 32);\r\n bytemeB[3] = int(floor(value / 16.));\r\n value -= float(bytemeB[3] * 16);\r\n bytemeB[4] = int(floor(value / 8.));\r\n value -= float(bytemeB[4] * 8);\r\n bytemeB[5] = int(floor(value / 4.));\r\n value -= float(bytemeB[5] * 4);\r\n bytemeB[6] = int(floor(value / 2.));\r\n value -= float(bytemeB[6] * 2);\r\n bytemeB[7] = int(floor(value));\r\n\r\n value = a * 255.;\r\n int bytemeA[8];\r\n bytemeA[0] = int(floor(value / 128.));\r\n value -= float(bytemeA[0] * 128);\r\n bytemeA[1] = int(floor(value / 64.));\r\n value -= float(bytemeA[1] * 64);\r\n bytemeA[2] = int(floor(value / 32.));\r\n value -= float(bytemeA[2] * 32);\r\n bytemeA[3] = int(floor(value / 16.));\r\n value -= float(bytemeA[3] * 16);\r\n bytemeA[4] = int(floor(value / 8.));\r\n value -= float(bytemeA[4] * 8);\r\n bytemeA[5] = int(floor(value / 4.));\r\n value -= float(bytemeA[5] * 4);\r\n bytemeA[6] = int(floor(value / 2.));\r\n value -= float(bytemeA[6] * 2);\r\n bytemeA[7] = int(floor(value));\r\n\r\n // compute float32 value from bit arrays\r\n\r\n // sign\r\n int issigned = 1 - 2 * bytemeR[0];\r\n // issigned = int(pow(-1., float(bytemeR[0])));\r\n\r\n // exponent\r\n int exponent = 0;\r\n\r\n exponent += bytemeR[1] * int(pow(2., 7.));\r\n exponent += bytemeR[2] * int(pow(2., 6.));\r\n exponent += bytemeR[3] * int(pow(2., 5.));\r\n exponent += bytemeR[4] * int(pow(2., 4.));\r\n exponent += bytemeR[5] * int(pow(2., 3.));\r\n exponent += bytemeR[6] * int(pow(2., 2.));\r\n exponent += bytemeR[7] * int(pow(2., 1.));\r\n\r\n exponent += bytemeG[0];\r\n\r\n\r\n // fraction\r\n float fraction = 0.;\r\n\r\n fraction = float(bytemeG[1]) * pow(2., -1.);\r\n fraction += float(bytemeG[2]) * pow(2., -2.);\r\n fraction += float(bytemeG[3]) * pow(2., -3.);\r\n fraction += float(bytemeG[4]) * pow(2., -4.);\r\n fraction += float(bytemeG[5]) * pow(2., -5.);\r\n fraction += float(bytemeG[6]) * pow(2., -6.);\r\n fraction += float(bytemeG[7]) * pow(2., -7.);\r\n\r\n fraction += float(bytemeB[0]) * pow(2., -8.);\r\n fraction += float(bytemeB[1]) * pow(2., -9.);\r\n fraction += float(bytemeB[2]) * pow(2., -10.);\r\n fraction += float(bytemeB[3]) * pow(2., -11.);\r\n fraction += float(bytemeB[4]) * pow(2., -12.);\r\n fraction += float(bytemeB[5]) * pow(2., -13.);\r\n fraction += float(bytemeB[6]) * pow(2., -14.);\r\n fraction += float(bytemeB[7]) * pow(2., -15.);\r\n\r\n fraction += float(bytemeA[0]) * pow(2., -16.);\r\n fraction += float(bytemeA[1]) * pow(2., -17.);\r\n fraction += float(bytemeA[2]) * pow(2., -18.);\r\n fraction += float(bytemeA[3]) * pow(2., -19.);\r\n fraction += float(bytemeA[4]) * pow(2., -20.);\r\n fraction += float(bytemeA[5]) * pow(2., -21.);\r\n fraction += float(bytemeA[6]) * pow(2., -22.);\r\n fraction += float(bytemeA[7]) * pow(2., -23.);\r\n\r\n value = float(issigned) * pow( 2., float(exponent - 127)) * (1. + fraction);\r\n}\r\n `;\r\n }\r\n}\r\n\r\nexport default new Unpack();\r\n","import ShadersBase from '../shaders.base';\r\nimport Unpack from '../helpers/shaders.helpers.unpack';\r\nimport Texture3d from '../helpers/shaders.helpers.texture3d';\r\n\r\nclass InterpolationIdentity extends ShadersBase {\r\n constructor() {\r\n super();\r\n this.name = 'interpolationIdentity';\r\n\r\n // default properties names\r\n this._currentVoxel = 'currentVoxel';\r\n this._dataValue = 'dataValue';\r\n }\r\n\r\n api(baseFragment = this._base, currentVoxel = this._currentVoxel, dataValue = this._dataValue) {\r\n this._base = baseFragment;\r\n return this.compute(currentVoxel, dataValue);\r\n }\r\n\r\n compute(currentVoxel, dataValue) {\r\n this.computeDefinition();\r\n this._base._functions[this._name] = this._definition;\r\n return `${this._name}(${currentVoxel}, ${dataValue});`;\r\n }\r\n\r\n computeDefinition() {\r\n this._definition = `\r\nvoid ${this._name}(in vec3 currentVoxel, out vec4 dataValue){\r\n // lower bound\r\n vec3 rcurrentVoxel = vec3(floor(currentVoxel.x + 0.5 ), floor(currentVoxel.y + 0.5 ), floor(currentVoxel.z + 0.5 ));\r\n ivec3 voxel = ivec3(int(rcurrentVoxel.x), int(rcurrentVoxel.y), int(rcurrentVoxel.z));\r\n\r\n vec4 tmp = vec4(0., 0., 0., 0.);\r\n int offset = 0;\r\n\r\n ${Texture3d.api(this._base, 'voxel', 'tmp', 'offset')}\r\n ${Unpack.api(this._base, 'tmp', 'offset', 'dataValue')}\r\n}\r\n `;\r\n }\r\n}\r\n\r\nexport default new InterpolationIdentity();\r\n","import InterpolationIdentity from './shaders.interpolation.identity';\r\nimport InterpolationTrilinear from './shaders.interpolation.trilinear';\r\n\r\nfunction shadersInterpolation(baseFragment, currentVoxel, dataValue, gradient) {\r\n switch (baseFragment._uniforms.uInterpolation.value) {\r\n case 0:\r\n // no interpolation\r\n return InterpolationIdentity.api(baseFragment, currentVoxel, dataValue);\r\n\r\n case 1:\r\n // trilinear interpolation\r\n return InterpolationTrilinear.api(baseFragment, currentVoxel, dataValue, gradient);\r\n\r\n default:\r\n return InterpolationIdentity.api(baseFragment, currentVoxel, dataValue);\r\n }\r\n}\r\n\r\nexport default shadersInterpolation;\r\n","import ShadersBase from '../shaders.base';\r\nimport InterpolationIdentity from './shaders.interpolation.identity';\r\n\r\nclass InterpolationTrilinear extends ShadersBase {\r\n constructor() {\r\n super();\r\n this.name = 'interpolationTrilinear';\r\n\r\n // default properties names\r\n this._currentVoxel = 'currentVoxel';\r\n this._dataValue = 'dataValue';\r\n this._gradient = 'gradient';\r\n }\r\n\r\n api(\r\n baseFragment = this._base,\r\n currentVoxel = this._currentVoxel,\r\n dataValue = this._dataValue,\r\n gradient = this._gradient\r\n ) {\r\n this._base = baseFragment;\r\n return this.compute(currentVoxel, dataValue, gradient);\r\n }\r\n\r\n compute(currentVoxel, dataValue, gradient) {\r\n this.computeDefinition();\r\n this._base._functions[this._name] = this._definition;\r\n return `${this._name}(${currentVoxel}, ${dataValue}, ${gradient});`;\r\n }\r\n\r\n computeDefinition() {\r\n this._definition = `\r\nvoid trilinearInterpolation(\r\n in vec3 normalizedPosition,\r\n out vec4 interpolatedValue,\r\n in vec4 v000, in vec4 v100,\r\n in vec4 v001, in vec4 v101,\r\n in vec4 v010, in vec4 v110,\r\n in vec4 v011, in vec4 v111) {\r\n // https://en.wikipedia.org/wiki/Trilinear_interpolation\r\n vec4 c00 = v000 * ( 1.0 - normalizedPosition.x ) + v100 * normalizedPosition.x;\r\n vec4 c01 = v001 * ( 1.0 - normalizedPosition.x ) + v101 * normalizedPosition.x;\r\n vec4 c10 = v010 * ( 1.0 - normalizedPosition.x ) + v110 * normalizedPosition.x;\r\n vec4 c11 = v011 * ( 1.0 - normalizedPosition.x ) + v111 * normalizedPosition.x;\r\n\r\n // c0 and c1\r\n vec4 c0 = c00 * ( 1.0 - normalizedPosition.y) + c10 * normalizedPosition.y;\r\n vec4 c1 = c01 * ( 1.0 - normalizedPosition.y) + c11 * normalizedPosition.y;\r\n\r\n // c\r\n vec4 c = c0 * ( 1.0 - normalizedPosition.z) + c1 * normalizedPosition.z;\r\n interpolatedValue = c;\r\n}\r\n\r\nvoid ${this._name}(in vec3 currentVoxel, out vec4 dataValue, out vec3 gradient){\r\n\r\n vec3 lower_bound = floor(currentVoxel);\r\n lower_bound = max(vec3(0.), lower_bound);\r\n \r\n vec3 higher_bound = lower_bound + vec3(1.);\r\n\r\n vec3 normalizedPosition = (currentVoxel - lower_bound);\r\n normalizedPosition = max(vec3(0.), normalizedPosition);\r\n\r\n vec4 interpolatedValue = vec4(0.);\r\n\r\n //\r\n // fetch values required for interpolation\r\n //\r\n vec4 v000 = vec4(0.0, 0.0, 0.0, 0.0);\r\n vec3 c000 = vec3(lower_bound.x, lower_bound.y, lower_bound.z);\r\n ${InterpolationIdentity.api(this._base, 'c000', 'v000')}\r\n\r\n //\r\n vec4 v100 = vec4(0.0, 0.0, 0.0, 0.0);\r\n vec3 c100 = vec3(higher_bound.x, lower_bound.y, lower_bound.z);\r\n ${InterpolationIdentity.api(this._base, 'c100', 'v100')}\r\n\r\n //\r\n vec4 v001 = vec4(0.0, 0.0, 0.0, 0.0);\r\n vec3 c001 = vec3(lower_bound.x, lower_bound.y, higher_bound.z);\r\n ${InterpolationIdentity.api(this._base, 'c001', 'v001')}\r\n\r\n //\r\n vec4 v101 = vec4(0.0, 0.0, 0.0, 0.0);\r\n vec3 c101 = vec3(higher_bound.x, lower_bound.y, higher_bound.z);\r\n ${InterpolationIdentity.api(this._base, 'c101', 'v101')}\r\n \r\n //\r\n vec4 v010 = vec4(0.0, 0.0, 0.0, 0.0);\r\n vec3 c010 = vec3(lower_bound.x, higher_bound.y, lower_bound.z);\r\n ${InterpolationIdentity.api(this._base, 'c010', 'v010')}\r\n\r\n vec4 v110 = vec4(0.0, 0.0, 0.0, 0.0);\r\n vec3 c110 = vec3(higher_bound.x, higher_bound.y, lower_bound.z);\r\n ${InterpolationIdentity.api(this._base, 'c110', 'v110')}\r\n\r\n //\r\n vec4 v011 = vec4(0.0, 0.0, 0.0, 0.0);\r\n vec3 c011 = vec3(lower_bound.x, higher_bound.y, higher_bound.z);\r\n ${InterpolationIdentity.api(this._base, 'c011', 'v011')}\r\n\r\n vec4 v111 = vec4(0.0, 0.0, 0.0, 0.0);\r\n vec3 c111 = vec3(higher_bound.x, higher_bound.y, higher_bound.z);\r\n ${InterpolationIdentity.api(this._base, 'c111', 'v111')}\r\n\r\n // compute interpolation at position\r\n trilinearInterpolation(normalizedPosition, interpolatedValue ,v000, v100, v001, v101, v010,v110, v011,v111);\r\n dataValue = interpolatedValue;\r\n\r\n // That breaks shading in volume rendering\r\n // if (gradient.x == 1.) { // skip gradient calculation for slice helper\r\n // return;\r\n // }\r\n\r\n // compute gradient\r\n float gradientStep = 0.005;\r\n\r\n // x axis\r\n vec3 g100 = vec3(1., 0., 0.);\r\n vec3 ng100 = normalizedPosition + g100 * gradientStep;\r\n ng100.x = min(1., ng100.x);\r\n\r\n vec4 vg100 = vec4(0.);\r\n trilinearInterpolation(ng100, vg100 ,v000, v100, v001, v101, v010,v110, v011,v111);\r\n\r\n vec3 go100 = -g100;\r\n vec3 ngo100 = normalizedPosition + go100 * gradientStep;\r\n ngo100.x = max(0., ngo100.x);\r\n\r\n vec4 vgo100 = vec4(0.);\r\n trilinearInterpolation(ngo100, vgo100 ,v000, v100, v001, v101, v010,v110, v011,v111);\r\n\r\n gradient.x = (g100.x * vg100.x + go100.x * vgo100.x);\r\n\r\n // y axis\r\n vec3 g010 = vec3(0., 1., 0.);\r\n vec3 ng010 = normalizedPosition + g010 * gradientStep;\r\n ng010.y = min(1., ng010.y);\r\n\r\n vec4 vg010 = vec4(0.);\r\n trilinearInterpolation(ng010, vg010 ,v000, v100, v001, v101, v010,v110, v011,v111);\r\n\r\n vec3 go010 = -g010;\r\n vec3 ngo010 = normalizedPosition + go010 * gradientStep;\r\n ngo010.y = max(0., ngo010.y);\r\n\r\n vec4 vgo010 = vec4(0.);\r\n trilinearInterpolation(ngo010, vgo010 ,v000, v100, v001, v101, v010,v110, v011,v111);\r\n\r\n gradient.y = (g010.y * vg010.x + go010.y * vgo010.x);\r\n\r\n // z axis\r\n vec3 g001 = vec3(0., 0., 1.);\r\n vec3 ng001 = normalizedPosition + g001 * gradientStep;\r\n ng001.z = min(1., ng001.z);\r\n\r\n vec4 vg001 = vec4(0.);\r\n trilinearInterpolation(ng001, vg001 ,v000, v100, v001, v101, v010,v110, v011,v111);\r\n\r\n vec3 go001 = -g001;\r\n vec3 ngo001 = normalizedPosition + go001 * gradientStep;\r\n ngo001.z = max(0., ngo001.z);\r\n\r\n vec4 vgo001 = vec4(0.);\r\n trilinearInterpolation(ngo001, vgo001 ,v000, v100, v001, v101, v010,v110, v011,v111);\r\n\r\n gradient.z = (g001.z * vg001.x + go001.z * vgo001.x);\r\n\r\n // normalize gradient\r\n // +0.0001 instead of if?\r\n float gradientMagnitude = length(gradient);\r\n if (gradientMagnitude > 0.0) {\r\n gradient = -(1. / gradientMagnitude) * gradient;\r\n }\r\n}\r\n `;\r\n }\r\n}\r\n\r\nexport default new InterpolationTrilinear();\r\n","export default class ShadersBase {\r\n constructor() {\r\n this._name = 'shadersBase';\r\n this._base = {\r\n _functions: {},\r\n _uniforms: {},\r\n };\r\n this._definition = '';\r\n }\r\n\r\n get name() {\r\n return this._name;\r\n }\r\n\r\n set name(name) {\r\n this._name = name;\r\n }\r\n}\r\n","export default class ShadersFragment {\r\n // pass uniforms object\r\n constructor(uniforms) {\r\n this._uniforms = uniforms;\r\n this._functions = {};\r\n this._main = '';\r\n }\r\n\r\n functions() {\r\n if (this._main === '') {\r\n // if main is empty, functions can not have been computed\r\n this.main();\r\n }\r\n\r\n let content = '';\r\n for (let property in this._functions) {\r\n content += this._functions[property] + '\\n';\r\n }\r\n\r\n return content;\r\n }\r\n\r\n uniforms() {\r\n let content = '';\r\n for (let property in this._uniforms) {\r\n let uniform = this._uniforms[property];\r\n content += `uniform ${uniform.typeGLSL} ${property}`;\r\n\r\n if (uniform && uniform.length) {\r\n content += `[${uniform.length}]`;\r\n }\r\n\r\n content += ';\\n';\r\n }\r\n\r\n return content;\r\n }\r\n\r\n main() {\r\n // need to pre-call main to fill up the functions list\r\n this._main = `\r\n\r\nfloat luma (vec3 rgb) {\r\n return (rgb.r + rgb.g + rgb.b)/3.0;\r\n}\r\n\r\nconst float T = 0.04;\r\nconst float M = 1.0;\r\nconst float L = 0.002;\r\n\r\nvoid main(void) {\r\n\r\n vec2 texCoord = vec2(((vProjectedCoords.x / vProjectedCoords.w) + 1.0 ) / 2.0,\r\n ((vProjectedCoords.y / vProjectedCoords.w) + 1.0 ) / 2.0 );\r\n\r\n float borderWidth = uWidth; // in px\r\n float step_u = borderWidth * 1.0 / uCanvasWidth;\r\n float step_v = borderWidth * 1.0 / uCanvasHeight;\r\n vec4 centerPixel = texture2D(uTextureFilled, texCoord);\r\n\r\n vec4 rightPixel = texture2D(uTextureFilled, texCoord + vec2(step_u, 0.0));\r\n vec4 bottomPixel = texture2D(uTextureFilled, texCoord + vec2(0.0, step_v));\r\n\r\n // now manually compute the derivatives\r\n float _dFdX = length(rightPixel - centerPixel) / step_u;\r\n float _dFdY = length(bottomPixel - centerPixel) / step_v;\r\n\r\n // gl_FragColor.r = _dFdX;\r\n // gl_FragColor.g = _dFdY;\r\n gl_FragColor.r = max(max(centerPixel.r, rightPixel.r), bottomPixel.r);\r\n gl_FragColor.g = max(max(centerPixel.g, rightPixel.g), bottomPixel.g);\r\n gl_FragColor.b = max(max(centerPixel.b, rightPixel.b), bottomPixel.b);\r\n float maxDerivative = max(_dFdX, _dFdY);\r\n float clampedDerivative = clamp(maxDerivative, 0., 1.);\r\n gl_FragColor.a = uOpacity * clampedDerivative;\r\n\r\n return;\r\n // float h = 1./uCanvasHeight;\r\n // float w = 1./uCanvasWidth;\r\n // vec4 n[9];\r\n // n[0] = texture2D(uTextureFilled, vProjectedTextCoords + vec2( -w, -h));\r\n // n[1] = texture2D(uTextureFilled, vProjectedTextCoords + vec2(0.0, -h));\r\n // n[2] = texture2D(uTextureFilled, vProjectedTextCoords + vec2( w, -h));\r\n // n[3] = texture2D(uTextureFilled, vProjectedTextCoords + vec2( -w, 0.0));\r\n // n[4] = texture2D(uTextureFilled, vProjectedTextCoords);\r\n // n[5] = texture2D(uTextureFilled, texCoord + vec2( w, 0.0));\r\n // n[6] = texture2D(uTextureFilled, texCoord + vec2( -w, h));\r\n // n[7] = texture2D(uTextureFilled, texCoord + vec2(0.0, h));\r\n // n[8] = texture2D(uTextureFilled, texCoord + vec2( w, h));\r\n // vec4 sobel_horizEdge = n[2] + (2.0*n[5]) + n[8] - (n[0] + (2.0*n[3]) + n[6]);\r\n // vec4 sobel_vertEdge = n[0] + (2.0*n[1]) + n[2] - (n[6] + (2.0*n[7]) + n[8]);\r\n // vec3 sobel = sqrt((sobel_horizEdge.rgb * sobel_horizEdge.rgb) + (sobel_vertEdge.rgb * sobel_vertEdge.rgb));\r\n // gl_FragColor = vec4( sobel, max(max(sobel.r, sobel.g), sobel.b) );\r\n\r\n // return;\r\n}\r\n `;\r\n }\r\n\r\n compute() {\r\n let shaderInterpolation = '';\r\n // shaderInterpolation.inline(args) //true/false\r\n // shaderInterpolation.functions(args)\r\n\r\n return `\r\n// uniforms\r\n${this.uniforms()}\r\n\r\n// varying (should fetch it from vertex directly)\r\nvarying vec4 vProjectedCoords;\r\n\r\n// tailored functions\r\n${this.functions()}\r\n\r\n// main loop\r\n${this._main}\r\n `;\r\n }\r\n}\r\n","/**\r\n * @module shaders/data\r\n */\r\nexport default class ShadersUniform {\r\n static uniforms() {\r\n return {\r\n uCanvasWidth: {\r\n type: 'f',\r\n value: 0,\r\n typeGLSL: 'float',\r\n },\r\n uCanvasHeight: {\r\n type: 'f',\r\n value: 0,\r\n typeGLSL: 'float',\r\n },\r\n uWidth: {\r\n type: 'f',\r\n value: 1,\r\n typeGLSL: 'float',\r\n },\r\n uOpacity: {\r\n type: 'f',\r\n value: 1,\r\n typeGLSL: 'float',\r\n },\r\n uTextureFilled: {\r\n type: 't',\r\n value: [],\r\n typeGLSL: 'sampler2D',\r\n },\r\n };\r\n }\r\n}\r\n","export default class ShadersVertex {\r\n compute() {\r\n return `\r\nvarying vec4 vProjectedCoords;\r\n\r\n//\r\n// main\r\n//\r\nvoid main() {\r\n\r\n vec4 vPos = modelMatrix * vec4(position, 1.0 );\r\n mat4 vProjectionViewMatrix = projectionMatrix * viewMatrix;\r\n vProjectedCoords = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\r\n\r\n}\r\n `;\r\n }\r\n}\r\n","import shadersInterpolation from './interpolation/shaders.interpolation';\r\n\r\nexport default class ShadersFragment {\r\n // pass uniforms object\r\n constructor(uniforms) {\r\n this._uniforms = uniforms;\r\n this._functions = {};\r\n this._main = '';\r\n }\r\n\r\n functions() {\r\n if (this._main === '') {\r\n // if main is empty, functions can not have been computed\r\n this.main();\r\n }\r\n\r\n let content = '';\r\n for (let property in this._functions) {\r\n content += this._functions[property] + '\\n';\r\n }\r\n\r\n return content;\r\n }\r\n\r\n uniforms() {\r\n let content = '';\r\n for (let property in this._uniforms) {\r\n let uniform = this._uniforms[property];\r\n content += `uniform ${uniform.typeGLSL} ${property}`;\r\n\r\n if (uniform && uniform.length) {\r\n content += `[${uniform.length}]`;\r\n }\r\n\r\n content += ';\\n';\r\n }\r\n\r\n return content;\r\n }\r\n\r\n main() {\r\n // need to pre-call main to fill up the functions list\r\n this._main = `\r\nvoid main(void) {\r\n\r\n // draw border if slice is cropped\r\n // float uBorderDashLength = 10.;\r\n\r\n if( uCanvasWidth > 0. &&\r\n ((gl_FragCoord.x > uBorderMargin && (gl_FragCoord.x - uBorderMargin) < uBorderWidth) ||\r\n (gl_FragCoord.x < (uCanvasWidth - uBorderMargin) && (gl_FragCoord.x + uBorderMargin) > (uCanvasWidth - uBorderWidth) ))){\r\n float valueY = mod(gl_FragCoord.y, 2. * uBorderDashLength);\r\n if( valueY < uBorderDashLength && gl_FragCoord.y > uBorderMargin && gl_FragCoord.y < (uCanvasHeight - uBorderMargin) ){\r\n gl_FragColor = vec4(uBorderColor, 1.);\r\n return;\r\n }\r\n }\r\n\r\n if( uCanvasHeight > 0. &&\r\n ((gl_FragCoord.y > uBorderMargin && (gl_FragCoord.y - uBorderMargin) < uBorderWidth) ||\r\n (gl_FragCoord.y < (uCanvasHeight - uBorderMargin) && (gl_FragCoord.y + uBorderMargin) > (uCanvasHeight - uBorderWidth) ))){\r\n float valueX = mod(gl_FragCoord.x, 2. * uBorderDashLength);\r\n if( valueX < uBorderDashLength && gl_FragCoord.x > uBorderMargin && gl_FragCoord.x < (uCanvasWidth - uBorderMargin) ){\r\n gl_FragColor = vec4(uBorderColor, 1.);\r\n return;\r\n }\r\n }\r\n\r\n // get texture coordinates of current pixel\r\n vec4 dataValue = vec4(0.);\r\n vec3 gradient = vec3(1.); // gradient calculations will be skipped if it is equal to vec3(1.) \r\n float steps = floor(uThickness / uSpacing + 0.5);\r\n\r\n if (steps > 1.) {\r\n vec3 origin = vPos - uThickness * 0.5 * vNormal;\r\n vec4 dataValueAcc = vec4(0.);\r\n for (float step = 0.; step < 128.; step++) {\r\n if (step >= steps) {\r\n break;\r\n }\r\n\r\n vec4 dataCoordinates = uWorldToData * vec4(origin + step * uSpacing * vNormal, 1.);\r\n vec3 currentVoxel = dataCoordinates.xyz;\r\n ${shadersInterpolation(this, 'currentVoxel', 'dataValueAcc', 'gradient')};\r\n\r\n if (step == 0.) {\r\n dataValue.r = dataValueAcc.r;\r\n continue;\r\n }\r\n\r\n if (uThicknessMethod == 0) {\r\n dataValue.r = max(dataValueAcc.r, dataValue.r);\r\n }\r\n if (uThicknessMethod == 1) {\r\n dataValue.r += dataValueAcc.r;\r\n }\r\n if (uThicknessMethod == 2) {\r\n dataValue.r = min(dataValueAcc.r, dataValue.r);\r\n }\r\n }\r\n\r\n if (uThicknessMethod == 1) {\r\n dataValue.r /= steps;\r\n }\r\n } else {\r\n vec4 dataCoordinates = uWorldToData * vec4(vPos, 1.);\r\n vec3 currentVoxel = dataCoordinates.xyz;\r\n ${shadersInterpolation(this, 'currentVoxel', 'dataValue', 'gradient')}\r\n }\r\n\r\n if(uNumberOfChannels == 1){\r\n // rescale/slope\r\n float realIntensity = dataValue.r * uRescaleSlopeIntercept[0] + uRescaleSlopeIntercept[1];\r\n \r\n // threshold\r\n if (realIntensity < uLowerUpperThreshold[0] || realIntensity > uLowerUpperThreshold[1]) {\r\n discard;\r\n }\r\n \r\n // normalize\r\n float windowMin = uWindowCenterWidth[0] - uWindowCenterWidth[1] * 0.5;\r\n float normalizedIntensity =\r\n ( realIntensity - windowMin ) / uWindowCenterWidth[1];\r\n dataValue.r = dataValue.g = dataValue.b = normalizedIntensity;\r\n dataValue.a = 1.;\r\n\r\n // apply LUT\r\n if(uLut == 1){\r\n // should opacity be grabbed there?\r\n dataValue = texture2D( uTextureLUT, vec2( normalizedIntensity , 1.0) );\r\n }\r\n \r\n // apply segmentation\r\n if(uLutSegmentation == 1){\r\n // should opacity be grabbed there?\r\n //\r\n float textureWidth = 256.;\r\n float textureHeight = 128.;\r\n float min = 0.;\r\n // start at 0!\r\n int adjustedIntensity = int(floor(realIntensity + 0.5));\r\n \r\n // Get row and column in the texture\r\n int colIndex = int(mod(float(adjustedIntensity), textureWidth));\r\n int rowIndex = int(floor(float(adjustedIntensity)/textureWidth));\r\n \r\n float texWidth = 1./textureWidth;\r\n float texHeight = 1./textureHeight;\r\n \r\n // Map row and column to uv\r\n vec2 uv = vec2(0,0);\r\n uv.x = 0.5 * texWidth + (texWidth * float(colIndex));\r\n uv.y = 1. - (0.5 * texHeight + float(rowIndex) * texHeight);\r\n \r\n dataValue = texture2D( uTextureLUTSegmentation, uv );\r\n }\r\n }\r\n\r\n if(uInvert == 1){\r\n dataValue.xyz = vec3(1.) - dataValue.xyz;\r\n }\r\n\r\n dataValue.a = dataValue.a*uOpacity;\r\n\r\n gl_FragColor = dataValue;\r\n}\r\n `;\r\n }\r\n\r\n compute() {\r\n return `\r\n// uniforms\r\n${this.uniforms()}\r\n\r\n// varying (should fetch it from vertex directly)\r\nvarying vec3 vPos;\r\nvarying vec3 vNormal;\r\n\r\n// tailored functions\r\n${this.functions()}\r\n\r\n// main loop\r\n${this._main}\r\n `;\r\n }\r\n}\r\n","import { Matrix4 } from 'three/src/math/Matrix4';\r\n\r\n/**\r\n * @module shaders/data\r\n */\r\nexport default class ShadersUniform {\r\n /**\r\n * Shaders data uniforms\r\n */\r\n static uniforms() {\r\n return {\r\n uTextureSize: {\r\n type: 'i',\r\n value: 0,\r\n typeGLSL: 'int',\r\n },\r\n uTextureContainer: {\r\n type: 'tv',\r\n value: [],\r\n typeGLSL: 'sampler2D',\r\n length: 7,\r\n },\r\n uDataDimensions: {\r\n type: 'iv',\r\n value: [0, 0, 0],\r\n typeGLSL: 'ivec3',\r\n },\r\n uWorldToData: {\r\n type: 'm4',\r\n value: new Matrix4(),\r\n typeGLSL: 'mat4',\r\n },\r\n uWindowCenterWidth: {\r\n type: 'fv1',\r\n value: [0.0, 0.0],\r\n typeGLSL: 'float',\r\n length: 2,\r\n },\r\n uLowerUpperThreshold: {\r\n type: 'fv1',\r\n value: [0.0, 0.0],\r\n typeGLSL: 'float',\r\n length: 2,\r\n },\r\n uRescaleSlopeIntercept: {\r\n type: 'fv1',\r\n value: [0.0, 0.0],\r\n typeGLSL: 'float',\r\n length: 2,\r\n },\r\n uNumberOfChannels: {\r\n type: 'i',\r\n value: 1,\r\n typeGLSL: 'int',\r\n },\r\n uBitsAllocated: {\r\n type: 'i',\r\n value: 8,\r\n typeGLSL: 'int',\r\n },\r\n uInvert: {\r\n type: 'i',\r\n value: 0,\r\n typeGLSL: 'int',\r\n },\r\n uLut: {\r\n type: 'i',\r\n value: 0,\r\n typeGLSL: 'int',\r\n },\r\n uTextureLUT: {\r\n type: 't',\r\n value: [],\r\n typeGLSL: 'sampler2D',\r\n },\r\n uLutSegmentation: {\r\n type: 'i',\r\n value: 0,\r\n typeGLSL: 'int',\r\n },\r\n uTextureLUTSegmentation: {\r\n type: 't',\r\n value: [],\r\n typeGLSL: 'sampler2D',\r\n },\r\n uPixelType: {\r\n type: 'i',\r\n value: 0,\r\n typeGLSL: 'int',\r\n },\r\n uPackedPerPixel: {\r\n type: 'i',\r\n value: 1,\r\n typeGLSL: 'int',\r\n },\r\n uInterpolation: {\r\n type: 'i',\r\n value: 1,\r\n typeGLSL: 'int',\r\n },\r\n uCanvasWidth: {\r\n type: 'f',\r\n value: 0,\r\n typeGLSL: 'float',\r\n },\r\n uCanvasHeight: {\r\n type: 'f',\r\n value: 0,\r\n typeGLSL: 'float',\r\n },\r\n uBorderColor: {\r\n type: 'v3',\r\n value: [1.0, 0.0, 0.5],\r\n typeGLSL: 'vec3',\r\n },\r\n uBorderWidth: {\r\n type: 'f',\r\n value: 2,\r\n typeGLSL: 'float',\r\n },\r\n uBorderMargin: {\r\n type: 'f',\r\n value: 2,\r\n typeGLSL: 'float',\r\n },\r\n uBorderDashLength: {\r\n type: 'f',\r\n value: 10,\r\n typeGLSL: 'float',\r\n },\r\n uOpacity: {\r\n type: 'f',\r\n value: 1.0,\r\n typeGLSL: 'float',\r\n },\r\n uSpacing: {\r\n type: 'f',\r\n value: 0,\r\n typeGLSL: 'float',\r\n },\r\n uThickness: {\r\n type: 'f',\r\n value: 0,\r\n typeGLSL: 'float',\r\n },\r\n uThicknessMethod: {\r\n type: 'i',\r\n value: 0,\r\n typeGLSL: 'int',\r\n },\r\n };\r\n }\r\n}\r\n","export default class ShadersVertex {\r\n compute() {\r\n return `\r\nvarying vec3 vPos;\r\nvarying vec3 vNormal;\r\n\r\nvoid main() {\r\n vNormal = normal;\r\n vPos = (modelMatrix * vec4(position, 1.0 )).xyz;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\r\n\r\n}\r\n `;\r\n }\r\n}\r\n","import ContourUniform from './shaders.contour.uniform';\r\nimport ContourFragment from './shaders.contour.fragment';\r\nimport ContourVertex from './shaders.contour.vertex';\r\n\r\nimport DataUniform from './shaders.data.uniform';\r\nimport DataFragment from './shaders.data.fragment';\r\nimport DataVertex from './shaders.data.vertex';\r\n\r\nimport VRUniform from './shaders.vr.uniform';\r\nimport VRFragment from './shaders.vr.fragment';\r\nimport VRVertex from './shaders.vr.vertex';\r\n\r\nimport LayerUniform from './shaders.layer.uniform';\r\nimport LayerFragment from './shaders.layer.fragment';\r\nimport LayerVertex from './shaders.layer.vertex';\r\n\r\nimport LocalizerUniform from './shaders.localizer.uniform';\r\nimport LocalizerFragment from './shaders.localizer.fragment';\r\nimport LocalizerVertex from './shaders.localizer.vertex';\r\n\r\nexport {\r\n ContourUniform as ContourUniformShader,\r\n ContourFragment as ContourFragmentShader,\r\n ContourVertex as ContourVertexShader,\r\n DataUniform as DataUniformShader,\r\n DataFragment as DataFragmentShader,\r\n DataVertex as DataVertexShader,\r\n VRUniform as VRUniformShader,\r\n VRFragment as VRFragmentShader,\r\n VRVertex as VRVertexShader,\r\n LayerUniform as LayerUniformShader,\r\n LayerFragment as LayerFragmentShader,\r\n LayerVertex as LayerVertexShader,\r\n LocalizerUniform as LocalizerUniformShader,\r\n LocalizerFragment as LocalizerFragmentShader,\r\n LocalizerVertex as LocalizerVertexShader,\r\n};\r\n","export default class ShadersFragment {\r\n // pass uniforms object\r\n constructor(uniforms) {\r\n this._uniforms = uniforms;\r\n this._functions = {};\r\n this._main = '';\r\n }\r\n\r\n functions() {\r\n if (this._main === '') {\r\n // if main is empty, functions can not have been computed\r\n this.main();\r\n }\r\n\r\n let content = '';\r\n for (let property in this._functions) {\r\n content += this._functions[property] + '\\n';\r\n }\r\n\r\n return content;\r\n }\r\n\r\n uniforms() {\r\n let content = '';\r\n for (let property in this._uniforms) {\r\n let uniform = this._uniforms[property];\r\n content += `uniform ${uniform.typeGLSL} ${property}`;\r\n\r\n if (uniform && uniform.length) {\r\n content += `[${uniform.length}]`;\r\n }\r\n\r\n content += ';\\n';\r\n }\r\n\r\n return content;\r\n }\r\n\r\n main() {\r\n // need to pre-call main to fill up the functions list\r\n this._main = `\r\nvoid main(void) {\r\n\r\n vec2 texc = vec2(((vProjectedCoords.x / vProjectedCoords.w) + 1.0 ) / 2.0,\r\n ((vProjectedCoords.y / vProjectedCoords.w) + 1.0 ) / 2.0 );\r\n\r\n // just silence warning for\r\n // vec4 dummy = vPos;\r\n\r\n //The back position is the world space position stored in the texture.\r\n vec4 baseColor0 = texture2D(uTextureBackTest0, texc);\r\n vec4 baseColor1 = texture2D(uTextureBackTest1, texc);\r\n\r\n if( uTrackMouse == 1 ){\r\n\r\n if( vProjectedCoords.x < uMouse.x ){\r\n\r\n gl_FragColor = baseColor0;\r\n\r\n }\r\n else{\r\n\r\n gl_FragColor = mix( baseColor0, baseColor1, uOpacity1 );\r\n\r\n }\r\n\r\n }\r\n else{\r\n\r\n if( uType1 == 0 ){\r\n\r\n //merge an image into\r\n gl_FragColor = mix( baseColor0, baseColor1, uOpacity1 );\r\n\r\n }\r\n else{\r\n\r\n float opacity = baseColor1.a;\r\n gl_FragColor = mix( baseColor0, baseColor1, opacity * uOpacity1 );\r\n\r\n }\r\n\r\n }\r\n\r\n return;\r\n}\r\n `;\r\n }\r\n\r\n compute() {\r\n let shaderInterpolation = '';\r\n // shaderInterpolation.inline(args) //true/false\r\n // shaderInterpolation.functions(args)\r\n\r\n return `\r\n// uniforms\r\n${this.uniforms()}\r\n\r\n// varying (should fetch it from vertex directly)\r\n// varying vec4 vPos;\r\nvarying vec4 vProjectedCoords;\r\n\r\n// tailored functions\r\n${this.functions()}\r\n\r\n// main loop\r\n${this._main}\r\n `;\r\n }\r\n}\r\n","import { Vector2 } from 'three/src/math/Vector2';\r\n\r\n/**\r\n * @module shaders/data\r\n */\r\nexport default class ShadersUniform {\r\n static uniforms() {\r\n return {\r\n uTextureBackTest0: {\r\n type: 't',\r\n value: [],\r\n typeGLSL: 'sampler2D',\r\n },\r\n uTextureBackTest1: {\r\n type: 't',\r\n value: [],\r\n typeGLSL: 'sampler2D',\r\n },\r\n uOpacity0: {\r\n type: 'f',\r\n value: 1.0,\r\n typeGLSL: 'float',\r\n },\r\n uOpacity1: {\r\n type: 'f',\r\n value: 1.0,\r\n typeGLSL: 'float',\r\n },\r\n uType0: {\r\n type: 'i',\r\n value: 0,\r\n typeGLSL: 'int',\r\n },\r\n uType1: {\r\n type: 'i',\r\n value: 1,\r\n typeGLSL: 'int',\r\n },\r\n uTrackMouse: {\r\n type: 'i',\r\n value: 0,\r\n typeGLSL: 'int',\r\n },\r\n uMouse: {\r\n type: 'v2',\r\n value: new Vector2(),\r\n typeGLSL: 'vec2',\r\n },\r\n };\r\n }\r\n}\r\n","export default class ShadersVertex {\r\n compute() {\r\n return `\r\n// varying vec4 vPos;\r\nvarying vec4 vProjectedCoords;\r\n\r\n//\r\n// main\r\n//\r\nvoid main() {\r\n\r\n vec4 vPos = modelMatrix * vec4(position, 1.0 );\r\n vProjectedCoords = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\r\n\r\n}\r\n `;\r\n }\r\n}\r\n","/**\r\n * Localizer fragment shader\r\n */\r\nexport default class {\r\n /**\r\n *\r\n */\r\n constructor(uniforms) {\r\n this._uniforms = uniforms;\r\n this._functions = {};\r\n this._main = '';\r\n }\r\n\r\n /**\r\n *\r\n */\r\n functions() {\r\n if (this._main === '') {\r\n // if main is empty, functions can not have been computed\r\n this.main();\r\n }\r\n\r\n let content = '';\r\n for (let property in this._functions) {\r\n content += this._functions[property] + '\\n';\r\n }\r\n\r\n return content;\r\n }\r\n\r\n /**\r\n *\r\n */\r\n uniforms() {\r\n let content = '';\r\n for (let property in this._uniforms) {\r\n let uniform = this._uniforms[property];\r\n content += `uniform ${uniform.typeGLSL} ${property}`;\r\n\r\n if (uniform && uniform.length) {\r\n content += `[${uniform.length}]`;\r\n }\r\n\r\n content += ';\\n';\r\n }\r\n\r\n return content;\r\n }\r\n\r\n /**\r\n *\r\n */\r\n main() {\r\n // need to pre-call main to fill up the functions list\r\n this._main = `\r\nvoid intersectionProjection(\r\n in vec4 plane,\r\n in vec4 slice,\r\n out vec3 intersectionProjection){\r\n\r\n vec3 intersectionDirection = normalize(cross(plane.xyz, slice.xyz));\r\n vec3 intersectionPoint = \r\n cross(intersectionDirection,slice.xyz) * plane.w +\r\n cross(plane.xyz, intersectionDirection) * slice.w;\r\n\r\n intersectionProjection =\r\n intersectionPoint.xyz +\r\n (dot(vPos.xyz - intersectionPoint, intersectionDirection)\r\n * intersectionDirection);\r\n\r\n}\r\n\r\nvoid main(void) {\r\n vec4 c1 = vec4(0., 0., 0., 0.);\r\n vec4 c2 = vec4(0., 0., 0., 0.);\r\n vec4 c3 = vec4(0., 0., 0., 0.);\r\n\r\n // localizer #1\r\n // must be normalized!\r\n if(length(uPlane1.xyz) > 0.5) {\r\n vec3 projection1 = vec3(1.);\r\n intersectionProjection(\r\n uPlane1,\r\n uSlice,\r\n projection1\r\n );\r\n\r\n vec4 projInter1 = (vProjectionViewMatrix * vec4(projection1, 1.));\r\n vec3 ndc1 = projInter1.xyz / projInter1.w;\r\n vec2 screenSpace1 = (ndc1.xy * .5 + .5) * vec2(uCanvasWidth, uCanvasHeight);\r\n\r\n float d1 = distance(gl_FragCoord.xy, screenSpace1.xy);\r\n c1 = vec4(uPlaneColor1, 1. - smoothstep(.5, .7, d1));\r\n }\r\n\r\n // localizer #2\r\n if(length(uPlane2.xyz) > 0.5) {\r\n vec3 projection2 = vec3(1.);\r\n intersectionProjection(\r\n uPlane2,\r\n uSlice,\r\n projection2\r\n );\r\n\r\n vec4 projInter2 = (vProjectionViewMatrix * vec4(projection2, 1.));\r\n vec3 ndc2 = projInter2.xyz / projInter2.w;\r\n vec2 screenSpace2 = (ndc2.xy * .5 + .5) * vec2(uCanvasWidth, uCanvasHeight);\r\n\r\n float d2 = distance(gl_FragCoord.xy, screenSpace2.xy);\r\n c2 = vec4(uPlaneColor2, 1. - smoothstep(.5, .7, d2));\r\n }\r\n\r\n // localizer #3\r\n if(length(uPlane3.xyz) > 0.5) {\r\n vec3 projection3 = vec3(1.);\r\n intersectionProjection(\r\n uPlane3,\r\n uSlice,\r\n projection3\r\n );\r\n\r\n vec4 projInter3 = (vProjectionViewMatrix * vec4(projection3, 1.));\r\n vec3 ndc3 = projInter3.xyz / projInter3.w;\r\n vec2 screenSpace3 = (ndc3.xy * .5 + .5) * vec2(uCanvasWidth, uCanvasHeight);\r\n\r\n float d3 = distance(gl_FragCoord.xy, screenSpace3.xy);\r\n c3 = vec4(uPlaneColor3, 1. - smoothstep(.5, .7, d3));\r\n }\r\n\r\n // float uBorderDashLength = 10.0;\r\n // float uBorderWidth = 2.0;\r\n // float valueX = mod(gl_FragCoord.x, 2. * uBorderDashLength);\r\n // float valueY = mod(gl_FragCoord.y, 2. * uBorderDashLength);\r\n // if( valueX < uBorderDashLength || valueY < uBorderDashLength ){\r\n vec3 colorMix = c1.xyz*c1.w + c2.xyz*c2.w + c3.xyz*c3.w;\r\n gl_FragColor = vec4(colorMix, max(max(c1.w, c2.w),c3.w)*0.5);\r\n return;\r\n // }\r\n \r\n // gl_FragColor = vec4(0., 0., 0., 0.);\r\n // return;\r\n}\r\n `;\r\n }\r\n\r\n /**\r\n *\r\n */\r\n compute() {\r\n return `\r\n// uniforms\r\n${this.uniforms()}\r\n\r\n// varying (should fetch it from vertex directly)\r\nvarying vec4 vPos;\r\nvarying mat4 vProjectionViewMatrix;\r\n\r\n// tailored functions\r\n${this.functions()}\r\n\r\n// main loop\r\n${this._main}\r\n `;\r\n }\r\n}\r\n","/**\r\n * @module shaders/localizer/uniforms\r\n */\r\n\r\nexport default class {\r\n /**\r\n * Shaders data uniforms\r\n */\r\n static uniforms() {\r\n return {\r\n uCanvasWidth: {\r\n type: 'f',\r\n value: 0,\r\n typeGLSL: 'float',\r\n },\r\n uCanvasHeight: {\r\n type: 'f',\r\n value: 0,\r\n typeGLSL: 'float',\r\n },\r\n uSlice: {\r\n type: 'v4',\r\n value: [0.0, 0.0, 0.0, 0.0],\r\n typeGLSL: 'vec4',\r\n },\r\n uPlane1: {\r\n type: 'v4',\r\n value: [0.0, 0.0, 0.0, 0.0],\r\n typeGLSL: 'vec4',\r\n },\r\n uPlaneColor1: {\r\n type: 'v3',\r\n value: [1.0, 1.0, 0.0],\r\n typeGLSL: 'vec3',\r\n },\r\n uPlane2: {\r\n type: 'v4',\r\n value: [0.0, 0.0, 0.0, 0.0],\r\n typeGLSL: 'vec4',\r\n },\r\n uPlaneColor2: {\r\n type: 'v3',\r\n value: [1.0, 1.0, 0.0],\r\n typeGLSL: 'vec3',\r\n },\r\n uPlane3: {\r\n type: 'v4',\r\n value: [0.0, 0.0, 0.0, 0.0],\r\n typeGLSL: 'vec4',\r\n },\r\n uPlaneColor3: {\r\n type: 'v3',\r\n value: [1.0, 1.0, 0.0],\r\n typeGLSL: 'vec3',\r\n },\r\n };\r\n }\r\n}\r\n","/**\r\n *\r\n */\r\nexport default class {\r\n /**\r\n *\r\n */\r\n compute() {\r\n return `\r\nvarying vec4 vPos;\r\nvarying mat4 vProjectionViewMatrix;\r\n\r\n//\r\n// main\r\n//\r\nvoid main() {\r\n\r\n vPos = modelMatrix * vec4(position, 1.0 );\r\n vProjectionViewMatrix = projectionMatrix * viewMatrix;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\r\n\r\n}\r\n `;\r\n }\r\n}\r\n","import shadersInterpolation from './interpolation/shaders.interpolation';\r\nimport shadersIntersectBox from './helpers/shaders.helpers.intersectBox';\r\n\r\nexport default class ShadersFragment {\r\n // pass uniforms object\r\n constructor(uniforms) {\r\n this._uniforms = uniforms;\r\n this._functions = {};\r\n this._main = '';\r\n }\r\n\r\n functions() {\r\n if (this._main === '') {\r\n // if main is empty, functions can not have been computed\r\n this.main();\r\n }\r\n\r\n let content = '';\r\n for (let property in this._functions) {\r\n content += this._functions[property] + '\\n';\r\n }\r\n\r\n return content;\r\n }\r\n\r\n uniforms() {\r\n let content = '';\r\n for (let property in this._uniforms) {\r\n let uniform = this._uniforms[property];\r\n content += `uniform ${uniform.typeGLSL} ${property}`;\r\n\r\n if (uniform && uniform.length) {\r\n content += `[${uniform.length}]`;\r\n }\r\n\r\n content += ';\\n';\r\n }\r\n\r\n return content;\r\n }\r\n\r\n main() {\r\n // need to pre-call main to fill up the functions list\r\n this._main = `\r\nvoid getIntensity(in vec3 dataCoordinates, out float intensity, out vec3 gradient){\r\n\r\n vec4 dataValue = vec4(0., 0., 0., 0.);\r\n ${shadersInterpolation(this, 'dataCoordinates', 'dataValue', 'gradient')}\r\n\r\n intensity = dataValue.r;\r\n\r\n // rescale/slope\r\n intensity = intensity*uRescaleSlopeIntercept[0] + uRescaleSlopeIntercept[1];\r\n // window level\r\n float windowMin = uWindowCenterWidth[0] - uWindowCenterWidth[1] * 0.5;\r\n intensity = ( intensity - windowMin ) / uWindowCenterWidth[1];\r\n}\r\n\r\nmat4 inverse(mat4 m) {\r\n float\r\n a00 = m[0][0], a01 = m[0][1], a02 = m[0][2], a03 = m[0][3],\r\n a10 = m[1][0], a11 = m[1][1], a12 = m[1][2], a13 = m[1][3],\r\n a20 = m[2][0], a21 = m[2][1], a22 = m[2][2], a23 = m[2][3],\r\n a30 = m[3][0], a31 = m[3][1], a32 = m[3][2], a33 = m[3][3],\r\n\r\n b00 = a00 * a11 - a01 * a10,\r\n b01 = a00 * a12 - a02 * a10,\r\n b02 = a00 * a13 - a03 * a10,\r\n b03 = a01 * a12 - a02 * a11,\r\n b04 = a01 * a13 - a03 * a11,\r\n b05 = a02 * a13 - a03 * a12,\r\n b06 = a20 * a31 - a21 * a30,\r\n b07 = a20 * a32 - a22 * a30,\r\n b08 = a20 * a33 - a23 * a30,\r\n b09 = a21 * a32 - a22 * a31,\r\n b10 = a21 * a33 - a23 * a31,\r\n b11 = a22 * a33 - a23 * a32,\r\n\r\n det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\r\n\r\n return mat4(\r\n a11 * b11 - a12 * b10 + a13 * b09,\r\n a02 * b10 - a01 * b11 - a03 * b09,\r\n a31 * b05 - a32 * b04 + a33 * b03,\r\n a22 * b04 - a21 * b05 - a23 * b03,\r\n a12 * b08 - a10 * b11 - a13 * b07,\r\n a00 * b11 - a02 * b08 + a03 * b07,\r\n a32 * b02 - a30 * b05 - a33 * b01,\r\n a20 * b05 - a22 * b02 + a23 * b01,\r\n a10 * b10 - a11 * b08 + a13 * b06,\r\n a01 * b08 - a00 * b10 - a03 * b06,\r\n a30 * b04 - a31 * b02 + a33 * b00,\r\n a21 * b02 - a20 * b04 - a23 * b00,\r\n a11 * b07 - a10 * b09 - a12 * b06,\r\n a00 * b09 - a01 * b07 + a02 * b06,\r\n a31 * b01 - a30 * b03 - a32 * b00,\r\n a20 * b03 - a21 * b01 + a22 * b00) / det;\r\n}\r\n\r\n/**\r\n * Adapted from original sources\r\n * \r\n * Original code: \r\n * http://jamie-wong.com/2016/07/15/ray-marching-signed-distance-functions/\r\n * https://www.shadertoy.com/view/lt33z7\r\n * \r\n * The vec3 returned is the RGB color of the light's contribution.\r\n *\r\n * k_a: Ambient color\r\n * k_d: Diffuse color\r\n * k_s: Specular color\r\n * alpha: Shininess coefficient\r\n * p: position of point being lit\r\n * eye: the position of the camera\r\n * lightPos: the position of the light\r\n * lightIntensity: color/intensity of the light\r\n *\r\n * See https://en.wikipedia.org/wiki/Phong_reflection_model#Description\r\n */\r\nvec3 phongShading(vec3 k_a, vec3 k_d, vec3 k_s, float shininess, vec3 p, vec3 eye,\r\n vec3 lightPos, vec3 lightIntensity, vec3 normal) {\r\n vec3 N = normal;\r\n vec3 L = lightPos - p;\r\n if (length(L) > 0.) {\r\n L = L / length(L);\r\n }\r\n vec3 V = eye - p;\r\n if (length(V) > 0.) {\r\n V = V / length(V);\r\n }\r\n vec3 R = reflect(-L, N);\r\n if (length(R) > 0.) {\r\n R = R / length(R);\r\n }\r\n\r\n // https://en.wikipedia.org/wiki/Blinn%E2%80%93Phong_shading_model\r\n vec3 h = L + V;\r\n vec3 H = h;\r\n if (length(h) > 0.) {\r\n H = H / length(h);\r\n }\r\n\r\n float dotLN = dot(L, N);\r\n float dotRV = dot(R, V);\r\n\r\n if (dotLN < 0.) {\r\n // Light not visible from this point on the surface\r\n return k_a;\r\n } \r\n\r\n if (dotRV < 0.) {\r\n // Light reflection in opposite direction as viewer, apply only diffuse\r\n // component\r\n return k_a + lightIntensity * (k_d * dotLN);\r\n }\r\n\r\n float specAngle = max(dot(H, normal), 0.0);\r\n float specular = pow(dotRV, shininess); //pow(specAngle, shininess); // \r\n return k_a + lightIntensity * (k_d * dotLN + k_s * specular);\r\n}\r\n\r\nfloat PI = 3.14159265358979323846264 * 00000.1; // PI\r\n\r\n// expects values in the range of [0,1]x[0,1], returns values in the [0,1] range.\r\n// do not collapse into a single function per: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\r\nhighp float rand( const in vec2 uv) {\r\n const highp float a = 12.9898;\r\n const highp float b = 78.233;\r\n const highp float c = 43758.5453;\r\n highp float dt = dot(uv.xy, vec2(a, b)), sn = mod(dt, PI);\r\n return fract(sin(sn) * c);\r\n}\r\n\r\nvoid main(void) {\r\n const int maxSteps = 1024;\r\n\r\n // the ray\r\n vec3 rayOrigin = cameraPosition;\r\n vec3 rayDirection = normalize(vPos.xyz - rayOrigin);\r\n\r\n vec3 lightOrigin = uLightPositionInCamera == 1 ? cameraPosition : uLightPosition;\r\n\r\n // the Axe-Aligned B-Box\r\n vec3 AABBMin = vec3(uWorldBBox[0], uWorldBBox[2], uWorldBBox[4]);\r\n vec3 AABBMax = vec3(uWorldBBox[1], uWorldBBox[3], uWorldBBox[5]);\r\n\r\n // Intersection ray/bbox\r\n float tNear, tFar;\r\n bool intersect = false;\r\n ${shadersIntersectBox.api(\r\n this,\r\n 'rayOrigin',\r\n 'rayDirection',\r\n 'AABBMin',\r\n 'AABBMax',\r\n 'tNear',\r\n 'tFar',\r\n 'intersect'\r\n )}\r\n if (tNear < 0.0) tNear = 0.0;\r\n\r\n // x / y should be within o-1\r\n // should\r\n float offset = rand(gl_FragCoord.xy);\r\n\r\n // init the ray marching\r\n float tStep = (tFar - tNear) / float(uSteps);\r\n float tCurrent = tNear + offset * tStep;\r\n vec4 accumulatedColor = vec4(0.0);\r\n float accumulatedAlpha = 0.0;\r\n\r\n // MIP volume rendering\r\n float maxIntensity = 0.0;\r\n\r\n mat4 dataToWorld = inverse(uWorldToData);\r\n\r\n // rayOrigin -= rayDirection * 0.1; // gold_noise(vPos.xz, vPos.y) / 100.; \r\n\r\n for(int rayStep = 0; rayStep < maxSteps; rayStep++){\r\n vec3 currentPosition = rayOrigin + rayDirection * tCurrent;\r\n // some non-linear FUN\r\n // some occlusion issue to be fixed\r\n vec3 transformedPosition = currentPosition; //transformPoint(currentPosition, uAmplitude, uFrequence);\r\n // world to data coordinates\r\n // rounding trick\r\n // first center of first voxel in data space is CENTERED on (0,0,0)\r\n vec4 dataCoordinatesRaw = uWorldToData * vec4(transformedPosition, 1.0);\r\n vec3 currentVoxel = vec3(dataCoordinatesRaw.x, dataCoordinatesRaw.y, dataCoordinatesRaw.z);\r\n float intensity = 0.0;\r\n vec3 gradient = vec3(0., 0., 0.);\r\n getIntensity(currentVoxel, intensity, gradient);\r\n // map gradient to world space and normalize before using\r\n // we avoid to call \"normalize\" as it may be undefined if vector length == 0.\r\n gradient = (vec3(dataToWorld * vec4(gradient, 0.)));\r\n if (length(gradient) > 0.0) {\r\n gradient = normalize(gradient);\r\n }\r\n\r\n vec4 colorSample;\r\n float alphaSample;\r\n if(uLut == 1){\r\n vec4 colorFromLUT = texture2D( uTextureLUT, vec2( intensity, 1.0) );\r\n // 256 colors\r\n colorSample = colorFromLUT;\r\n alphaSample = colorFromLUT.a;\r\n }\r\n else{\r\n alphaSample = intensity;\r\n colorSample.r = colorSample.g = colorSample.b = intensity;\r\n }\r\n\r\n // ray marching algorithm\r\n // shading on\r\n // interpolation on\r\n if (uAlgorithm == 0 && uShading == 1 && uInterpolation != 0) {\r\n // && alphaSample > .3\r\n vec3 ambientComponent = uSampleColorToAmbient == 1 ? colorSample.xyz : uAmbientColor;\r\n ambientComponent *= uAmbient;\r\n vec3 diffuseComponent = uSampleColorToDiffuse == 1 ? colorSample.xyz : uDiffuseColor;\r\n diffuseComponent *= uDiffuse;\r\n vec3 specularComponent = uSpecular * uSpecularColor;\r\n float shininess = uShininess;\r\n vec3 vIntensity = uIntensity;\r\n\r\n colorSample.xyz += phongShading(\r\n ambientComponent,\r\n diffuseComponent,\r\n specularComponent,\r\n shininess,\r\n currentPosition.xyz,\r\n rayOrigin.xyz,\r\n lightOrigin.xyz,\r\n vIntensity,\r\n gradient);\r\n }\r\n\r\n alphaSample = 1.0 - pow((1.0- alphaSample),tStep*uAlphaCorrection);\r\n alphaSample *= (1.0 - accumulatedAlpha);\r\n\r\n accumulatedColor += alphaSample * colorSample;\r\n accumulatedAlpha += alphaSample;\r\n\r\n tCurrent += tStep;\r\n\r\n if (tCurrent > tFar || (uAlgorithm == 0 && accumulatedAlpha >= 1.0)) break;\r\n\r\n if (uAlgorithm == 1 && (intensity >= maxIntensity)) {\r\n maxIntensity = intensity;\r\n accumulatedColor = colorSample;\r\n accumulatedAlpha = 1.;\r\n }\r\n }\r\n\r\n gl_FragColor = vec4(accumulatedColor.xyz, accumulatedAlpha);\r\n}\r\n `;\r\n }\r\n\r\n compute() {\r\n let shaderInterpolation = '';\r\n // shaderInterpolation.inline(args) //true/false\r\n // shaderInterpolation.functions(args)\r\n\r\n return `\r\n// uniforms\r\n${this.uniforms()}\r\n\r\n// varying (should fetch it from vertex directly)\r\nvarying vec4 vPos;\r\n\r\n// tailored functions\r\n${this.functions()}\r\n\r\n// main loop\r\n${this._main}\r\n `;\r\n }\r\n}\r\n","import { Matrix4 } from 'three/src/math/Matrix4';\r\n\r\n/**\r\n * @module shaders/data\r\n */\r\nexport default class ShadersUniform {\r\n static uniforms() {\r\n return {\r\n uTextureSize: {\r\n type: 'i',\r\n value: 0,\r\n typeGLSL: 'int',\r\n },\r\n uTextureContainer: {\r\n type: 'tv',\r\n value: [],\r\n typeGLSL: 'sampler2D',\r\n length: 7,\r\n },\r\n uDataDimensions: {\r\n type: 'iv',\r\n value: [0, 0, 0],\r\n typeGLSL: 'ivec3',\r\n },\r\n uWorldToData: {\r\n type: 'm4',\r\n value: new Matrix4(),\r\n typeGLSL: 'mat4',\r\n },\r\n uWindowCenterWidth: {\r\n type: 'fv1',\r\n value: [0.0, 0.0],\r\n typeGLSL: 'float',\r\n length: 2,\r\n },\r\n uRescaleSlopeIntercept: {\r\n type: 'fv1',\r\n value: [0.0, 0.0],\r\n typeGLSL: 'float',\r\n length: 2,\r\n },\r\n uNumberOfChannels: {\r\n type: 'i',\r\n value: 1,\r\n typeGLSL: 'int',\r\n },\r\n uBitsAllocated: {\r\n type: 'i',\r\n value: 8,\r\n typeGLSL: 'int',\r\n },\r\n uInvert: {\r\n type: 'i',\r\n value: 0,\r\n typeGLSL: 'int',\r\n },\r\n uLut: {\r\n type: 'i',\r\n value: 0,\r\n typeGLSL: 'int',\r\n },\r\n uTextureLUT: {\r\n type: 't',\r\n value: [],\r\n typeGLSL: 'sampler2D',\r\n },\r\n uPixelType: {\r\n type: 'i',\r\n value: 0,\r\n typeGLSL: 'int',\r\n },\r\n uPackedPerPixel: {\r\n type: 'i',\r\n value: 1,\r\n typeGLSL: 'int',\r\n },\r\n uInterpolation: {\r\n type: 'i',\r\n value: 1,\r\n typeGLSL: 'int',\r\n },\r\n uWorldBBox: {\r\n type: 'fv1',\r\n value: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],\r\n typeGLSL: 'float',\r\n length: 6,\r\n },\r\n uSteps: {\r\n type: 'i',\r\n value: 256,\r\n typeGLSL: 'int',\r\n },\r\n uAlphaCorrection: {\r\n type: 'f',\r\n value: 0.5,\r\n typeGLSL: 'float',\r\n },\r\n uFrequence: {\r\n type: 'f',\r\n value: 0,\r\n typeGLSL: 'float',\r\n },\r\n uAmplitude: {\r\n type: 'f',\r\n value: 0,\r\n typeGLSL: 'float',\r\n },\r\n uShading: {\r\n type: 'i',\r\n value: 1,\r\n typeGLSL: 'int',\r\n },\r\n uAmbient: {\r\n type: 'f',\r\n value: 0.1,\r\n typeGLSL: 'float',\r\n },\r\n uAmbientColor: {\r\n type: 'v3',\r\n value: [1.0, 1.0, 0.0],\r\n typeGLSL: 'vec3',\r\n },\r\n uSampleColorToAmbient: {\r\n type: 'i',\r\n value: 1,\r\n typeGLSL: 'int',\r\n },\r\n uSpecular: {\r\n type: 'f',\r\n value: 1,\r\n typeGLSL: 'float',\r\n },\r\n uSpecularColor: {\r\n type: 'v3',\r\n value: [1.0, 1.0, 1.0],\r\n typeGLSL: 'vec3',\r\n },\r\n uDiffuse: {\r\n type: 'f',\r\n value: 0.3,\r\n typeGLSL: 'float',\r\n },\r\n uDiffuseColor: {\r\n type: 'v3',\r\n value: [1.0, 1.0, 0.0],\r\n typeGLSL: 'vec3',\r\n },\r\n uSampleColorToDiffuse: {\r\n type: 'i',\r\n value: 1,\r\n typeGLSL: 'int',\r\n },\r\n uShininess: {\r\n type: 'f',\r\n value: 5,\r\n typeGLSL: 'float',\r\n },\r\n uLightPosition: {\r\n type: 'v3',\r\n value: [0.0, 0.0, 0.0],\r\n typeGLSL: 'vec3',\r\n },\r\n uLightPositionInCamera: {\r\n type: 'i',\r\n value: 1,\r\n typeGLSL: 'int',\r\n },\r\n uIntensity: {\r\n type: 'v3',\r\n value: [0.8, 0.8, 0.8],\r\n typeGLSL: 'vec3',\r\n },\r\n uAlgorithm: {\r\n type: 'i',\r\n value: 0,\r\n typeGLSL: 'int',\r\n },\r\n };\r\n }\r\n}\r\n","export default class ShadersVertex {\r\n compute() {\r\n return `\r\nvarying vec4 vPos;\r\n\r\n//\r\n// main\r\n//\r\nvoid main() {\r\n\r\n vPos = modelMatrix * vec4(position, 1.0 );\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\r\n\r\n}\r\n `;\r\n }\r\n}\r\n","import UtilsCore from '../core/core.utils';\r\nimport * as OpenJPEG from 'OpenJPEG.js/dist/openJPEG-DynamicMemory-browser';\r\nimport {RLEDecoder} from '../decoders/decoders.rle';\r\nimport {getNumberString, getNumberValue, getValue} from './index';\r\nimport getNumberValues from './getNumberValues';\r\n\r\nexport default class CornerstoneDataParser {\r\n constructor(metaData) {\r\n this.metaData = metaData;\r\n }\r\n\r\n /**\r\n * Series instance UID (0020,000e)\r\n *\r\n * @return {String}\r\n */\r\n seriesInstanceUID() {\r\n return getValue(this.metaData['0020000e']);\r\n }\r\n\r\n /**\r\n * Study instance UID (0020,000d)\r\n *\r\n * @return {String}\r\n */\r\n studyInstanceUID() {\r\n return getValue(this.metaData['0020000d']);\r\n }\r\n\r\n /**\r\n * Get modality (0008,0060)\r\n *\r\n * @return {String}\r\n */\r\n modality() {\r\n return getValue(this.metaData['00080060']);\r\n }\r\n\r\n /**\r\n * Segmentation type (0062,0001)\r\n *\r\n * @return {String}\r\n */\r\n segmentationType() {\r\n return getValue(this.metaData['00620001']);\r\n }\r\n\r\n /**\r\n * Segmentation segments\r\n * -> Sequence of segments (0062,0002)\r\n * -> Recommended Display CIELab\r\n * -> Segmentation Code\r\n * -> Segment Number (0062,0004)\r\n * -> Segment Label (0062,0005)\r\n * -> Algorithm Type (0062,0008)\r\n *\r\n * @return {*}\r\n */\r\n segmentationSegments() {\r\n let segmentationSegments = [];\r\n let segmentSequence = this.metaData['00620002'];\r\n console.log('parse segmentSequence', segmentSequence);\r\n\r\n if (!segmentSequence) {\r\n return segmentationSegments;\r\n }\r\n try {\r\n for (let i = 0; i < segmentSequence.items.length; i++) {\r\n let recommendedDisplayCIELab = this._recommendedDisplayCIELab(segmentSequence.items[i]);\r\n let segmentationCode = this._segmentationCode(segmentSequence.items[i]);\r\n let segmentNumber = getNumberValue(segmentSequence.items[i].dataSet['00620004']);\r\n let segmentLabel = getValue(segmentSequence.items[i].dataSet['00620005']);\r\n let segmentAlgorithmType = getValue(segmentSequence.items[i].dataSet['00620008']);\r\n\r\n segmentationSegments.push({\r\n recommendedDisplayCIELab,\r\n segmentationCodeDesignator: segmentationCode['segmentationCodeDesignator'],\r\n segmentationCodeValue: segmentationCode['segmentationCodeValue'],\r\n segmentationCodeMeaning: segmentationCode['segmentationCodeMeaning'],\r\n segmentNumber,\r\n segmentLabel,\r\n segmentAlgorithmType,\r\n });\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n\r\n return segmentationSegments;\r\n }\r\n\r\n /**\r\n * Segmentation code\r\n * -> Code designator (0008,0102)\r\n * -> Code value (0008,0200)\r\n * -> Code Meaning Type (0008,0104)\r\n *\r\n * @param {*} segment\r\n *\r\n * @return {*}\r\n */\r\n _segmentationCode(segment) {\r\n let segmentationCodeDesignator = 'unknown';\r\n let segmentationCodeValue = 'unknown';\r\n let segmentationCodeMeaning = 'unknown';\r\n let element = segment.dataSet['00082218'];\r\n\r\n if (element && element.items && element.items.length > 0) {\r\n segmentationCodeDesignator = getValue(element.items[0].dataSet['00080102']);\r\n segmentationCodeValue = getValue(element.items[0].dataSet['00080100']);\r\n segmentationCodeMeaning = getValue(element.items[0].dataSet['00080104']);\r\n }\r\n\r\n return {\r\n segmentationCodeDesignator,\r\n segmentationCodeValue,\r\n segmentationCodeMeaning,\r\n };\r\n }\r\n\r\n /**\r\n * Recommended display CIELab\r\n *\r\n * @param {*} segment\r\n *\r\n * @return {*}\r\n */\r\n _recommendedDisplayCIELab(segment) {\r\n if (!segment.dataSet['0062000d']) {\r\n return null;\r\n }\r\n\r\n let offset = segment.dataSet['0062000d'].dataOffset;\r\n let length = segment.dataSet['0062000d'].length;\r\n let byteArray = segment.dataSet.byteArray.slice(offset, offset + length);\r\n\r\n // https://www.dabsoft.ch/dicom/3/C.10.7.1.1/\r\n let CIELabScaled = new Uint16Array(length / 2);\r\n for (let i = 0; i < length / 2; i++) {\r\n CIELabScaled[i] = (byteArray[2 * i + 1] << 8) + byteArray[2 * i];\r\n }\r\n\r\n let CIELabNormalized = [\r\n (CIELabScaled[0] / 65535) * 100,\r\n (CIELabScaled[1] / 65535) * 255 - 128,\r\n (CIELabScaled[2] / 65535) * 255 - 128,\r\n ];\r\n\r\n return CIELabNormalized;\r\n }\r\n\r\n /**\r\n * Raw dataset\r\n *\r\n * @return {*}\r\n */\r\n rawHeader() {\r\n return this.metaData;\r\n }\r\n\r\n /**\r\n * SOP Instance UID\r\n *\r\n * @param {*} frameIndex\r\n *\r\n * @return {*}\r\n */\r\n sopInstanceUID(frameIndex = 0) {\r\n return getValue(this.metaData['00080018']);\r\n }\r\n\r\n /**\r\n * Transfer syntax UID\r\n *\r\n * @return {*}\r\n */\r\n transferSyntaxUID() {\r\n return getValue(this.metaData['00020010']);\r\n }\r\n\r\n /**\r\n * Study date\r\n *\r\n * @return {*}\r\n */\r\n studyDate() {\r\n return getValue(this.metaData['00080020']);\r\n }\r\n\r\n /**\r\n * Study description\r\n *\r\n * @return {*}\r\n */\r\n studyDescription() {\r\n return getValue(this.metaData['00081030']);\r\n }\r\n\r\n /**\r\n * Series date\r\n *\r\n * @return {*}\r\n */\r\n seriesDate() {\r\n return getValue(this.metaData['00080021']);\r\n }\r\n\r\n /**\r\n * Series description\r\n *\r\n * @return {*}\r\n */\r\n seriesDescription() {\r\n return getValue(this.metaData['0008103e']);\r\n }\r\n\r\n /**\r\n * Patient name\r\n *\r\n * @return {*}\r\n */\r\n patientName() {\r\n return getValue(this.metaData['00100010']);\r\n }\r\n\r\n /**\r\n * Patient ID\r\n *\r\n * @return {*}\r\n */\r\n patientID() {\r\n return getValue(this.metaData['00100020']);\r\n }\r\n\r\n /**\r\n * Patient birthdate\r\n *\r\n * @return {*}\r\n */\r\n patientBirthdate() {\r\n return getValue(this.metaData['00100030']);\r\n }\r\n\r\n /**\r\n * Patient sex\r\n *\r\n * @return {*}\r\n */\r\n patientSex() {\r\n return getValue(this.metaData['00100040']);\r\n }\r\n\r\n /**\r\n * Patient age\r\n *\r\n * @return {*}\r\n */\r\n patientAge() {\r\n return getValue(this.metaData['00101010']);\r\n }\r\n\r\n /**\r\n * Photometric interpretation\r\n *\r\n * @return {*}\r\n */\r\n photometricInterpretation() {\r\n return getValue(this.metaData['00280004']);\r\n }\r\n\r\n planarConfiguration() {\r\n let planarConfiguration = this.metaData.uint16('00280006');\r\n\r\n if (typeof planarConfiguration === 'undefined') {\r\n planarConfiguration = null;\r\n }\r\n\r\n return planarConfiguration;\r\n }\r\n\r\n samplesPerPixel() {\r\n return this.metaData.uint16('00280002');\r\n }\r\n\r\n numberOfFrames() {\r\n let numberOfFrames = getNumberValue(this.metaData['00280008']);\r\n\r\n // need something smarter!\r\n if (typeof numberOfFrames === 'undefined') {\r\n numberOfFrames = null;\r\n }\r\n\r\n return numberOfFrames;\r\n }\r\n\r\n numberOfChannels() {\r\n let numberOfChannels = 1;\r\n let photometricInterpretation = this.photometricInterpretation();\r\n\r\n if (\r\n !(\r\n photometricInterpretation !== 'RGB' &&\r\n photometricInterpretation !== 'PALETTE COLOR' &&\r\n photometricInterpretation !== 'YBR_FULL' &&\r\n photometricInterpretation !== 'YBR_FULL_422' &&\r\n photometricInterpretation !== 'YBR_PARTIAL_422' &&\r\n photometricInterpretation !== 'YBR_PARTIAL_420' &&\r\n photometricInterpretation !== 'YBR_RCT'\r\n )\r\n ) {\r\n numberOfChannels = 3;\r\n }\r\n\r\n // make sure we return a number! (not a string!)\r\n return numberOfChannels;\r\n }\r\n\r\n invert() {\r\n let photometricInterpretation = this.photometricInterpretation();\r\n return photometricInterpretation === 'MONOCHROME1';\r\n }\r\n\r\n imageOrientation(frameIndex = 0) {\r\n return getNumberValues(this.metaData['00200037'], 6);\r\n }\r\n\r\n referencedSegmentNumber(frameIndex = 0) {\r\n let referencedSegmentNumber = -1;\r\n let referencedSegmentNumberElement = this._findInGroupSequence('52009230', '0062000a', frameIndex);\r\n\r\n if (referencedSegmentNumberElement !== null) {\r\n referencedSegmentNumber = getNumberValue(referencedSegmentNumberElement['0062000b']);\r\n }\r\n\r\n return referencedSegmentNumber;\r\n }\r\n\r\n pixelAspectRatio() {\r\n return getNumberValues(this.metaData['00280034'], 2);\r\n }\r\n\r\n imagePosition(frameIndex = 0) {\r\n return getNumberValues(this.metaData['00200032'], 3);\r\n }\r\n\r\n instanceNumber(frameIndex = 0) {\r\n let instanceNumber = null;\r\n // first look for frame!\r\n // per frame functionnal group sequence\r\n let perFrameFunctionnalGroupSequence = this.metaData['52009230'];\r\n\r\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\r\n if (perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['2005140f']) {\r\n let planeOrientationSequence =\r\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['2005140f'].items[0]\r\n .dataSet;\r\n instanceNumber = getNumberValue(planeOrientationSequence['00200013']);\r\n } else {\r\n instanceNumber = getNumberValue(this.metaData['00200013']);\r\n\r\n if (typeof instanceNumber === 'undefined') {\r\n instanceNumber = null;\r\n }\r\n }\r\n } else {\r\n // should we default to undefined??\r\n // default orientation\r\n instanceNumber = getNumberValue(this.metaData['00200013']);\r\n\r\n if (typeof instanceNumber === 'undefined') {\r\n instanceNumber = null;\r\n }\r\n }\r\n\r\n return instanceNumber;\r\n }\r\n\r\n pixelSpacing(frameIndex = 0) {\r\n return getNumberValues(this.metaData['00280030'], 2);\r\n }\r\n\r\n ultrasoundRegions(frameIndex = 0) {\r\n const sequence = this.metaData['00186011'];\r\n\r\n if (!sequence || !sequence.items) {\r\n return [];\r\n }\r\n\r\n const ultrasoundRegions = [];\r\n\r\n sequence.items.forEach(item => {\r\n ultrasoundRegions.push({\r\n x0: item.dataSet.uint32('00186018'),\r\n y0: item.dataSet.uint32('0018601a'),\r\n x1: item.dataSet.uint32('0018601c'),\r\n y1: item.dataSet.uint32('0018601e'),\r\n axisX: item.dataSet.int32('00186020') || null, // optional\r\n axisY: item.dataSet.int32('00186022') || null, // optional\r\n unitsX: this._getUnitsName(item.dataSet.uint16('00186024')),\r\n unitsY: this._getUnitsName(item.dataSet.uint16('00186026')),\r\n deltaX: item.dataSet.double('0018602c'),\r\n deltaY: item.dataSet.double('0018602e'),\r\n });\r\n });\r\n\r\n return ultrasoundRegions;\r\n }\r\n\r\n frameTime(frameIndex = 0) {\r\n let frameIncrementPointer = getNumberString(this.metaData['00280009']);\r\n let frameRate = getNumberString(this.metaData['00082144']);\r\n let frameTime;\r\n\r\n if (typeof frameIncrementPointer === 'number') {\r\n frameIncrementPointer = frameIncrementPointer.toString(16);\r\n frameTime = getNumberString(this.metaData['0018' + frameIncrementPointer]);\r\n }\r\n\r\n if (typeof frameTime === 'undefined' && typeof frameRate === 'number') {\r\n frameTime = 1000 / frameRate;\r\n }\r\n\r\n if (typeof frameTime === 'undefined') {\r\n frameTime = null;\r\n }\r\n\r\n return frameTime;\r\n }\r\n\r\n rows(frameIndex = 0) {\r\n let rows = getNumberString(this.metaData['00280010']);\r\n\r\n if (typeof rows === 'undefined') {\r\n rows = null;\r\n // print warning at least...\r\n }\r\n\r\n return rows;\r\n }\r\n\r\n columns(frameIndex = 0) {\r\n let columns = getNumberString(this.metaData['00280011']);\r\n\r\n if (typeof columns === 'undefined') {\r\n columns = null;\r\n // print warning at least...\r\n }\r\n\r\n return columns;\r\n }\r\n\r\n pixelType(frameIndex = 0) {\r\n // 0 integer, 1 float\r\n // dicom only support integers\r\n return 0;\r\n }\r\n\r\n pixelRepresentation(frameIndex = 0) {\r\n return getNumberValue(this.metaData['00280103']);\r\n }\r\n\r\n pixelPaddingValue(frameIndex = 0) {\r\n let padding = getNumberValue(this.metaData['00280120']);\r\n\r\n if (typeof padding === 'undefined') {\r\n padding = null;\r\n }\r\n\r\n return padding;\r\n }\r\n\r\n bitsAllocated(frameIndex = 0) {\r\n // expect frame index to start at 0!\r\n return getNumberString(this.metaData['00280100']);\r\n }\r\n\r\n highBit(frameIndex = 0) {\r\n // expect frame index to start at 0!\r\n return getNumberValue(this.metaData['00280102']);\r\n }\r\n\r\n rescaleIntercept(frameIndex = 0) {\r\n return getNumberValue(this.metaData['00281052']);\r\n }\r\n\r\n rescaleSlope(frameIndex = 0) {\r\n return getNumberValue(this.metaData['00281053']);\r\n }\r\n\r\n windowCenter(frameIndex = 0) {\r\n return this._findFloatStringInFrameGroupSequence('00289132', '00281050', frameIndex);\r\n }\r\n\r\n windowWidth(frameIndex = 0) {\r\n return this._findFloatStringInFrameGroupSequence('00289132', '00281051', frameIndex);\r\n }\r\n\r\n sliceThickness(frameIndex = 0) {\r\n return getNumberValue(this.metaData['00180050']);\r\n }\r\n\r\n spacingBetweenSlices(frameIndex = 0) {\r\n let spacing = getNumberValue(this.metaData['00180088']);\r\n\r\n if (typeof spacing === 'undefined') {\r\n spacing = null;\r\n }\r\n\r\n return spacing;\r\n }\r\n\r\n dimensionIndexValues(frameIndex = 0) {\r\n let dimensionIndexValues = null;\r\n\r\n // try to get it from enhanced MR images\r\n // per-frame functionnal group sequence\r\n let perFrameFunctionnalGroupSequence = this.metaData['52009230'];\r\n\r\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\r\n let frameContentSequence =\r\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['00209111'];\r\n if (frameContentSequence !== undefined && frameContentSequence !== null) {\r\n frameContentSequence = frameContentSequence.items[0].dataSet;\r\n let dimensionIndexValuesElt = frameContentSequence['00209157'];\r\n if (dimensionIndexValuesElt !== undefined && dimensionIndexValuesElt !== null) {\r\n // /4 because UL\r\n let nbValues = dimensionIndexValuesElt.length / 4;\r\n dimensionIndexValues = [];\r\n\r\n for (let i = 0; i < nbValues; i++) {\r\n dimensionIndexValues.push(getNumberValue(frameContentSequence['00209157'], i));\r\n }\r\n }\r\n }\r\n }\r\n\r\n return dimensionIndexValues;\r\n }\r\n\r\n inStackPositionNumber(frameIndex = 0) {\r\n let inStackPositionNumber = null;\r\n\r\n // try to get it from enhanced MR images\r\n // per-frame functionnal group sequence\r\n let perFrameFunctionnalGroupSequence = this.metaData['52009230'];\r\n\r\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\r\n // NOT A PHILIPS TRICK!\r\n let philipsPrivateSequence =\r\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['00209111'].items[0]\r\n .dataSet;\r\n inStackPositionNumber = getNumberValue(philipsPrivateSequence['00209057']);\r\n } else {\r\n inStackPositionNumber = null;\r\n }\r\n\r\n return inStackPositionNumber;\r\n }\r\n\r\n stackID(frameIndex = 0) {\r\n let stackID = null;\r\n\r\n // try to get it from enhanced MR images\r\n // per-frame functionnal group sequence\r\n let perFrameFunctionnalGroupSequence = this.metaData['52009230'];\r\n\r\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\r\n // NOT A PHILIPS TRICK!\r\n let philipsPrivateSequence =\r\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['00209111'].items[0]\r\n .dataSet;\r\n stackID = getNumberValue(philipsPrivateSequence['00209056']);\r\n } else {\r\n stackID = null;\r\n }\r\n\r\n return stackID;\r\n }\r\n\r\n extractPixelData(frameIndex = 0) {\r\n // decompress\r\n let decompressedData = this._decodePixelData(frameIndex);\r\n\r\n let numberOfChannels = this.numberOfChannels();\r\n\r\n if (numberOfChannels > 1) {\r\n return this._convertColorSpace(decompressedData);\r\n } else {\r\n return decompressedData;\r\n }\r\n }\r\n\r\n //\r\n // private methods\r\n //\r\n\r\n _findInGroupSequence(sequence, subsequence, index) {\r\n let functionalGroupSequence = this.metaData[sequence];\r\n console.log('_findInGroupSequence', functionalGroupSequence, sequence);\r\n\r\n if (typeof functionalGroupSequence !== 'undefined') {\r\n let inSequence = functionalGroupSequence.items[index].dataSet[subsequence];\r\n\r\n if (typeof inSequence !== 'undefined') {\r\n return inSequence.items[0].dataSet;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _findStringInGroupSequence(sequence, subsequence, tag, index) {\r\n // index = 0 if shared!!!\r\n let dataSet = this._findInGroupSequence(sequence, subsequence, index);\r\n console.log('_findStringInGroupSequence', dataSet);\r\n\r\n if (dataSet !== null) {\r\n return getValue(dataSet[tag]);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _findStringInFrameGroupSequence(subsequence, tag, index) {\r\n return (\r\n this._findStringInGroupSequence('52009229', subsequence, tag, 0) ||\r\n this._findStringInGroupSequence('52009230', subsequence, tag, index)\r\n );\r\n }\r\n\r\n // _findStringEverywhere(subsequence, tag, index) {\r\n // let targetString = this._findStringInFrameGroupSequence(subsequence, tag, index);\r\n // // PET MODULE\r\n // if (targetString === null) {\r\n // const petModule = '00540022';\r\n // targetString = this._findStringInSequence(petModule, tag);\r\n // }\r\n //\r\n // if (targetString === null) {\r\n // targetString = getValue(this.metaData[tag]);\r\n // }\r\n //\r\n // if (typeof targetString === 'undefined') {\r\n // targetString = null;\r\n // }\r\n //\r\n // return targetString;\r\n // }\r\n\r\n _findStringInSequence(sequenceTag, tag, index) {\r\n const sequence = this.metaData[sequenceTag];\r\n\r\n let targetString;\r\n if (sequence) {\r\n targetString = getValue(sequence.items[0].dataSet[tag]);\r\n }\r\n\r\n if (typeof targetString === 'undefined') {\r\n targetString = null;\r\n }\r\n\r\n return targetString;\r\n }\r\n\r\n _findFloatStringInGroupSequence(sequence, subsequence, tag, index) {\r\n let dataInGroupSequence = getNumberValue(this.metaData[tag]);\r\n\r\n // try to get it from enhanced MR images\r\n // per-frame functionnal group\r\n if (typeof dataInGroupSequence === 'undefined') {\r\n dataInGroupSequence = this._findInGroupSequence(sequence, subsequence, index);\r\n\r\n if (dataInGroupSequence !== null) {\r\n return getNumberValue(dataInGroupSequence[tag]);\r\n }\r\n }\r\n\r\n return dataInGroupSequence;\r\n }\r\n\r\n _findFloatStringInFrameGroupSequence(subsequence, tag, index) {\r\n return (\r\n this._findFloatStringInGroupSequence('52009229', subsequence, tag, 0) ||\r\n this._findFloatStringInGroupSequence('52009230', subsequence, tag, index)\r\n );\r\n }\r\n\r\n _decodePixelData(frameIndex = 0) {\r\n // if compressed..?\r\n let transferSyntaxUID = this.transferSyntaxUID();\r\n console.log('transfer syntax uid', transferSyntaxUID);\r\n // find compression scheme\r\n if (\r\n transferSyntaxUID === '1.2.840.10008.1.2.4.90' ||\r\n // JPEG 2000 Lossless\r\n transferSyntaxUID === '1.2.840.10008.1.2.4.91'\r\n ) {\r\n // JPEG 2000 Lossy\r\n return this._decodeJ2K(frameIndex);\r\n } else if (\r\n transferSyntaxUID === '1.2.840.10008.1.2.5'\r\n // decodeRLE\r\n ) {\r\n return this._decodeRLE(frameIndex);\r\n } else if (\r\n transferSyntaxUID === '1.2.840.10008.1.2.4.57' ||\r\n // JPEG Lossless, Nonhierarchical (Processes 14)\r\n transferSyntaxUID === '1.2.840.10008.1.2.4.70'\r\n ) {\r\n // JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1])\r\n return this._decodeJPEGLossless(frameIndex);\r\n } else if (\r\n transferSyntaxUID === '1.2.840.10008.1.2.4.50' ||\r\n // JPEG Baseline lossy process 1 (8 bit)\r\n transferSyntaxUID === '1.2.840.10008.1.2.4.51'\r\n ) {\r\n // JPEG Baseline lossy process 2 & 4 (12 bit)\r\n return this._decodeJPEGBaseline(frameIndex);\r\n } else if (\r\n transferSyntaxUID === '1.2.840.10008.1.2' ||\r\n // Implicit VR Little Endian\r\n transferSyntaxUID === '1.2.840.10008.1.2.1'\r\n ) {\r\n // Explicit VR Little Endian\r\n return this._decodeUncompressed(frameIndex);\r\n } else if (transferSyntaxUID === '1.2.840.10008.1.2.2') {\r\n // Explicit VR Big Endian\r\n let frame = this._decodeUncompressed(frameIndex);\r\n // and sawp it!\r\n return this._swapFrame(frame);\r\n } else {\r\n throw {\r\n error: `no decoder for transfer syntax ${transferSyntaxUID}`,\r\n };\r\n }\r\n }\r\n\r\n // github.com/chafey/cornerstoneWADOImageLoader/blob/master/src/imageLoader/wadouri/getEncapsulatedImageFrame.js\r\n framesAreFragmented() {\r\n const numberOfFrames = getValue(this.metaData['00280008']);\r\n const pixelDataElement = this.metaData['7fe00010'];\r\n\r\n return numberOfFrames !== pixelDataElement.fragments.length;\r\n }\r\n\r\n getEncapsulatedImageFrame(frameIndex) {\r\n if (\r\n this.metaData['7fe00010'] &&\r\n this.metaData['7fe00010'].basicOffsetTable.length\r\n ) {\r\n // Basic Offset Table is not empty\r\n return DicomParser.readEncapsulatedImageFrame(\r\n this.metaData,\r\n this.metaData['7fe00010'],\r\n frameIndex,\r\n );\r\n }\r\n\r\n if (this.framesAreFragmented()) {\r\n // Basic Offset Table is empty\r\n return DicomParser.readEncapsulatedImageFrame(\r\n this.metaData,\r\n this.metaData['7fe00010'],\r\n frameIndex,\r\n DicomParser.createJPEGBasicOffsetTable(this.metaData, this.metaData['7fe00010']),\r\n );\r\n }\r\n\r\n return DicomParser.readEncapsulatedPixelDataFromFragments(\r\n this.metaData,\r\n this.metaData['7fe00010'],\r\n frameIndex,\r\n );\r\n }\r\n\r\n // used if OpenJPEG library isn't loaded (OHIF/image-JPEG2000 isn't supported and can't parse some images)\r\n _decodeJpx(frameIndex = 0) {\r\n const jpxImage = new Jpx();\r\n // https://github.com/OHIF/image-JPEG2000/issues/6\r\n // It currently returns either Int16 or Uint16 based on whether the codestream is signed or not.\r\n jpxImage.parse(this.getEncapsulatedImageFrame(frameIndex));\r\n\r\n if (jpxImage.componentsCount !== 1) {\r\n throw new Error(\r\n 'JPEG2000 decoder returned a componentCount of ${componentsCount}, when 1 is expected',\r\n );\r\n }\r\n\r\n if (jpxImage.tiles.length !== 1) {\r\n throw new Error('JPEG2000 decoder returned a tileCount of ${tileCount}, when 1 is expected');\r\n }\r\n\r\n return jpxImage.tiles[0].items;\r\n }\r\n\r\n _decodeOpenJPEG(frameIndex = 0) {\r\n const encodedPixelData = this.getEncapsulatedImageFrame(frameIndex);\r\n const bytesPerPixel = this.bitsAllocated(frameIndex) <= 8 ? 1 : 2;\r\n const signed = this.pixelRepresentation(frameIndex) === 1;\r\n const dataPtr = openJPEG._malloc(encodedPixelData.length);\r\n\r\n openJPEG.writeArrayToMemory(encodedPixelData, dataPtr);\r\n\r\n // create param outpout\r\n const imagePtrPtr = openJPEG._malloc(4);\r\n const imageSizePtr = openJPEG._malloc(4);\r\n const imageSizeXPtr = openJPEG._malloc(4);\r\n const imageSizeYPtr = openJPEG._malloc(4);\r\n const imageSizeCompPtr = openJPEG._malloc(4);\r\n const ret = openJPEG.ccall(\r\n 'jp2_decode',\r\n 'number',\r\n ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\r\n [\r\n dataPtr,\r\n encodedPixelData.length,\r\n imagePtrPtr,\r\n imageSizePtr,\r\n imageSizeXPtr,\r\n imageSizeYPtr,\r\n imageSizeCompPtr,\r\n ],\r\n );\r\n const imagePtr = openJPEG.getValue(imagePtrPtr, '*');\r\n\r\n if (ret !== 0) {\r\n console.log('[opj_decode] decoding failed!');\r\n openJPEG._free(dataPtr);\r\n openJPEG._free(imagePtr);\r\n openJPEG._free(imageSizeXPtr);\r\n openJPEG._free(imageSizeYPtr);\r\n openJPEG._free(imageSizePtr);\r\n openJPEG._free(imageSizeCompPtr);\r\n\r\n return;\r\n }\r\n\r\n // Copy the data from the EMSCRIPTEN heap into the correct type array\r\n const length =\r\n openJPEG.getValue(imageSizeXPtr, 'i32') *\r\n openJPEG.getValue(imageSizeYPtr, 'i32') *\r\n openJPEG.getValue(imageSizeCompPtr, 'i32');\r\n const src32 = new Int32Array(openJPEG.HEAP32.buffer, imagePtr, length);\r\n let pixelData;\r\n\r\n if (bytesPerPixel === 1) {\r\n if (Uint8Array.from) {\r\n pixelData = Uint8Array.from(src32);\r\n } else {\r\n pixelData = new Uint8Array(length);\r\n for (let i = 0; i < length; i++) {\r\n pixelData[i] = src32[i];\r\n }\r\n }\r\n } else if (signed) {\r\n if (Int16Array.from) {\r\n pixelData = Int16Array.from(src32);\r\n } else {\r\n pixelData = new Int16Array(length);\r\n for (let i = 0; i < length; i++) {\r\n pixelData[i] = src32[i];\r\n }\r\n }\r\n } else if (Uint16Array.from) {\r\n pixelData = Uint16Array.from(src32);\r\n } else {\r\n pixelData = new Uint16Array(length);\r\n for (let i = 0; i < length; i++) {\r\n pixelData[i] = src32[i];\r\n }\r\n }\r\n\r\n openJPEG._free(dataPtr);\r\n openJPEG._free(imagePtrPtr);\r\n openJPEG._free(imagePtr);\r\n openJPEG._free(imageSizePtr);\r\n openJPEG._free(imageSizeXPtr);\r\n openJPEG._free(imageSizeYPtr);\r\n openJPEG._free(imageSizeCompPtr);\r\n\r\n return pixelData;\r\n }\r\n\r\n // from cornerstone\r\n _decodeJ2K(frameIndex = 0) {\r\n if (typeof OpenJPEG === 'undefined') {\r\n // OpenJPEG decoder not loaded\r\n return this._decodeJpx(frameIndex);\r\n }\r\n\r\n if (!openJPEG) {\r\n openJPEG = OpenJPEG();\r\n if (!openJPEG || !openJPEG._jp2_decode) {\r\n // OpenJPEG failed to initialize\r\n return this._decodeJpx(frameIndex);\r\n }\r\n }\r\n\r\n return this._decodeOpenJPEG(frameIndex);\r\n }\r\n\r\n _decodeRLE(frameIndex = 0) {\r\n const bitsAllocated = this.bitsAllocated(frameIndex);\r\n const planarConfiguration = this.planarConfiguration();\r\n const columns = this.columns();\r\n const rows = this.rows();\r\n const samplesPerPixel = this.samplesPerPixel(frameIndex);\r\n const pixelRepresentation = this.pixelRepresentation(frameIndex);\r\n\r\n // format data for the RLE decoder\r\n const imageFrame = {\r\n pixelRepresentation,\r\n bitsAllocated,\r\n planarConfiguration,\r\n columns,\r\n rows,\r\n samplesPerPixel,\r\n };\r\n\r\n const pixelData = DicomParser.readEncapsulatedPixelDataFromFragments(\r\n this.metaData,\r\n this.metaData['7fe00010'],\r\n frameIndex,\r\n );\r\n\r\n const decoded = RLEDecoder(imageFrame, pixelData);\r\n return decoded.pixelData;\r\n }\r\n\r\n // from cornerstone\r\n _decodeJPEGLossless(frameIndex = 0) {\r\n let encodedPixelData = this.getEncapsulatedImageFrame(frameIndex);\r\n let pixelRepresentation = this.pixelRepresentation(frameIndex);\r\n let bitsAllocated = this.bitsAllocated(frameIndex);\r\n let byteOutput = bitsAllocated <= 8 ? 1 : 2;\r\n let decoder = new Jpeg.lossless.Decoder();\r\n let decompressedData = decoder.decode(\r\n encodedPixelData.buffer,\r\n encodedPixelData.byteOffset,\r\n encodedPixelData.length,\r\n byteOutput,\r\n );\r\n\r\n if (pixelRepresentation === 0) {\r\n if (byteOutput === 2) {\r\n return new Uint16Array(decompressedData.buffer);\r\n } else {\r\n // untested!\r\n return new Uint8Array(decompressedData.buffer);\r\n }\r\n } else {\r\n return new Int16Array(decompressedData.buffer);\r\n }\r\n }\r\n\r\n _decodeJPEGBaseline(frameIndex = 0) {\r\n let encodedPixelData = this.getEncapsulatedImageFrame(frameIndex);\r\n let rows = this.rows(frameIndex);\r\n let columns = this.columns(frameIndex);\r\n let bitsAllocated = this.bitsAllocated(frameIndex);\r\n let jpegBaseline = new JpegBaseline();\r\n jpegBaseline.parse(encodedPixelData);\r\n\r\n if (bitsAllocated === 8) {\r\n return jpegBaseline.getData(columns, rows);\r\n } else if (bitsAllocated === 16) {\r\n return jpegBaseline.getData16(columns, rows);\r\n }\r\n }\r\n\r\n _decodeUncompressed(frameIndex = 0) {\r\n let pixelRepresentation = this.pixelRepresentation(frameIndex);\r\n let bitsAllocated = this.bitsAllocated(frameIndex);\r\n let pixelDataElement = this.metaData['7fe00010'];\r\n let pixelDataOffset = pixelDataElement.dataOffset;\r\n let numberOfChannels = this.numberOfChannels();\r\n let numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels;\r\n let frameOffset = 0;\r\n let buffer = this.metaData.byteArray.buffer;\r\n\r\n if (pixelRepresentation === 0 && bitsAllocated === 8) {\r\n // unsigned 8 bit\r\n frameOffset = pixelDataOffset + frameIndex * numPixels;\r\n return new Uint8Array(buffer, frameOffset, numPixels);\r\n } else if (pixelRepresentation === 0 && bitsAllocated === 16) {\r\n // unsigned 16 bit\r\n frameOffset = pixelDataOffset + frameIndex * numPixels * 2;\r\n return new Uint16Array(buffer, frameOffset, numPixels);\r\n } else if (pixelRepresentation === 1 && bitsAllocated === 16) {\r\n // signed 16 bit\r\n frameOffset = pixelDataOffset + frameIndex * numPixels * 2;\r\n return new Int16Array(buffer, frameOffset, numPixels);\r\n } else if (pixelRepresentation === 0 && bitsAllocated === 32) {\r\n // unsigned 32 bit\r\n frameOffset = pixelDataOffset + frameIndex * numPixels * 4;\r\n return new Uint32Array(buffer, frameOffset, numPixels);\r\n } else if (pixelRepresentation === 0 && bitsAllocated === 1) {\r\n let newBuffer = new ArrayBuffer(numPixels);\r\n let newArray = new Uint8Array(newBuffer);\r\n\r\n frameOffset = pixelDataOffset + frameIndex * numPixels;\r\n let index = 0;\r\n\r\n let bitStart = frameIndex * numPixels;\r\n let bitEnd = frameIndex * numPixels + numPixels;\r\n\r\n let byteStart = Math.floor(bitStart / 8);\r\n let bitStartOffset = bitStart - byteStart * 8;\r\n let byteEnd = Math.ceil(bitEnd / 8);\r\n\r\n let targetBuffer = new Uint8Array(buffer, pixelDataOffset);\r\n\r\n for (let i = byteStart; i <= byteEnd; i++) {\r\n while (bitStartOffset < 8) {\r\n switch (bitStartOffset) {\r\n case 0:\r\n newArray[index] = targetBuffer[i] & 0x0001;\r\n break;\r\n case 1:\r\n newArray[index] = (targetBuffer[i] >>> 1) & 0x0001;\r\n break;\r\n case 2:\r\n newArray[index] = (targetBuffer[i] >>> 2) & 0x0001;\r\n break;\r\n case 3:\r\n newArray[index] = (targetBuffer[i] >>> 3) & 0x0001;\r\n break;\r\n case 4:\r\n newArray[index] = (targetBuffer[i] >>> 4) & 0x0001;\r\n break;\r\n case 5:\r\n newArray[index] = (targetBuffer[i] >>> 5) & 0x0001;\r\n break;\r\n case 6:\r\n newArray[index] = (targetBuffer[i] >>> 6) & 0x0001;\r\n break;\r\n case 7:\r\n newArray[index] = (targetBuffer[i] >>> 7) & 0x0001;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n bitStartOffset++;\r\n index++;\r\n // if return..\r\n if (index >= numPixels) {\r\n return newArray;\r\n }\r\n }\r\n bitStartOffset = 0;\r\n }\r\n }\r\n }\r\n\r\n _interpretAsRGB(photometricInterpretation) {\r\n const rgbLikeTypes = ['RGB', 'YBR_RCT', 'YBR_ICT', 'YBR_FULL_422'];\r\n\r\n return rgbLikeTypes.indexOf(photometricInterpretation) !== -1;\r\n }\r\n\r\n _convertColorSpace(uncompressedData) {\r\n let rgbData = null;\r\n let photometricInterpretation = this.photometricInterpretation();\r\n let planarConfiguration = this.planarConfiguration();\r\n\r\n const interpretAsRGB = this._interpretAsRGB(photometricInterpretation);\r\n if (interpretAsRGB && planarConfiguration === 0) {\r\n // ALL GOOD, ALREADY ORDERED\r\n // planar or non planar planarConfiguration\r\n rgbData = uncompressedData;\r\n } else if (interpretAsRGB && planarConfiguration === 1) {\r\n if (uncompressedData instanceof Int8Array) {\r\n rgbData = new Int8Array(uncompressedData.length);\r\n } else if (uncompressedData instanceof Uint8Array) {\r\n rgbData = new Uint8Array(uncompressedData.length);\r\n } else if (uncompressedData instanceof Int16Array) {\r\n rgbData = new Int16Array(uncompressedData.length);\r\n } else if (uncompressedData instanceof Uint16Array) {\r\n rgbData = new Uint16Array(uncompressedData.length);\r\n } else {\r\n const error = new Error(`unsuported typed array: ${uncompressedData}`);\r\n throw error;\r\n }\r\n\r\n let numPixels = uncompressedData.length / 3;\r\n let rgbaIndex = 0;\r\n let rIndex = 0;\r\n let gIndex = numPixels;\r\n let bIndex = numPixels * 2;\r\n for (let i = 0; i < numPixels; i++) {\r\n rgbData[rgbaIndex++] = uncompressedData[rIndex++]; // red\r\n rgbData[rgbaIndex++] = uncompressedData[gIndex++]; // green\r\n rgbData[rgbaIndex++] = uncompressedData[bIndex++]; // blue\r\n }\r\n } else if (photometricInterpretation === 'YBR_FULL') {\r\n if (uncompressedData instanceof Int8Array) {\r\n rgbData = new Int8Array(uncompressedData.length);\r\n } else if (uncompressedData instanceof Uint8Array) {\r\n rgbData = new Uint8Array(uncompressedData.length);\r\n } else if (uncompressedData instanceof Int16Array) {\r\n rgbData = new Int16Array(uncompressedData.length);\r\n } else if (uncompressedData instanceof Uint16Array) {\r\n rgbData = new Uint16Array(uncompressedData.length);\r\n } else {\r\n const error = new Error(`unsuported typed array: ${uncompressedData}`);\r\n throw error;\r\n }\r\n\r\n // https://github.com/chafey/cornerstoneWADOImageLoader/blob/master/src/decodeYBRFull.js\r\n let nPixels = uncompressedData.length / 3;\r\n let ybrIndex = 0;\r\n let rgbaIndex = 0;\r\n for (let i = 0; i < nPixels; i++) {\r\n let y = uncompressedData[ybrIndex++];\r\n let cb = uncompressedData[ybrIndex++];\r\n let cr = uncompressedData[ybrIndex++];\r\n rgbData[rgbaIndex++] = y + 1.402 * (cr - 128); // red\r\n rgbData[rgbaIndex++] = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green\r\n rgbData[rgbaIndex++] = y + 1.772 * (cb - 128); // blue\r\n // rgbData[rgbaIndex++] = 255; //alpha\r\n }\r\n } else {\r\n const error = new Error(\r\n `photometric interpolation not supported: ${photometricInterpretation}`,\r\n );\r\n throw error;\r\n }\r\n\r\n return rgbData;\r\n }\r\n\r\n /**\r\n * Swap bytes in frame.\r\n */\r\n _swapFrame(frame) {\r\n // swap bytes ( if 8bits (1byte), nothing to swap)\r\n let bitsAllocated = this.bitsAllocated();\r\n\r\n if (bitsAllocated === 16) {\r\n for (let i = 0; i < frame.length; i++) {\r\n frame[i] = this._swap16(frame[i]);\r\n }\r\n } else if (bitsAllocated === 32) {\r\n for (let i = 0; i < frame.length; i++) {\r\n frame[i] = this._swap32(frame[i]);\r\n }\r\n }\r\n\r\n return frame;\r\n }\r\n\r\n _getUnitsName(value) {\r\n const units = {\r\n 0: 'none',\r\n 1: 'percent',\r\n 2: 'dB',\r\n 3: 'cm',\r\n 4: 'seconds',\r\n 5: 'hertz',\r\n 6: 'dB/seconds',\r\n 7: 'cm/sec',\r\n 8: 'cm2',\r\n 9: 'cm2/sec',\r\n 10: 'cm3',\r\n 11: 'cm3/sec',\r\n 12: 'degrees',\r\n };\r\n\r\n return units.hasOwnProperty(value) ? units[value] : 'none';\r\n }\r\n\r\n minMaxPixelData(pixelData = []) {\r\n let minMax = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY];\r\n let numPixels = pixelData.length;\r\n for (let index = 0; index < numPixels; index++) {\r\n let spv = pixelData[index];\r\n minMax[0] = Math.min(minMax[0], spv);\r\n minMax[1] = Math.max(minMax[1], spv);\r\n }\r\n\r\n return minMax;\r\n }\r\n}\r\n","import getValue from './getValue.js';\r\n\r\n/**\r\n * Returns the first string value as a Javascript number\r\n *\r\n * @param element - The javascript object for the specified element in the metadata\r\n * @param [index] - the index of the value in a multi-valued element, default is 0\r\n * @param [defaultValue] - The default value to return if the element does not exist\r\n * @returns {*}\r\n */\r\nfunction getNumberString (element, index, defaultValue) {\r\n const value = getValue(element, index, defaultValue);\r\n\r\n if (value === undefined) {\r\n return;\r\n }\r\n\r\n return parseFloat(value);\r\n}\r\n\r\nexport default getNumberString;\r\n","import getValue from './getValue.js';\r\n\r\nfunction getNumberValue (element, index) {\r\n const value = getValue(element, index);\r\n\r\n if (value === undefined) {\r\n return;\r\n }\r\n\r\n return parseFloat(value);\r\n}\r\n\r\nexport default getNumberValue;\r\n","\r\n\r\n/**\r\n * Returns the values as an array of javascript numbers\r\n *\r\n * @param element - The javascript object for the specified element in the metadata\r\n * @param [minimumLength] - the minimum number of values\r\n * @returns {*}\r\n */\r\nfunction getNumberValues (element, minimumLength) {\r\n if (!element) {\r\n return;\r\n }\r\n // Value is not present if the attribute has a zero length value\r\n if (!element.Value) {\r\n return;\r\n }\r\n // make sure we have the expected length\r\n if (minimumLength && element.Value.length < minimumLength) {\r\n return;\r\n }\r\n\r\n const values = [];\r\n\r\n for (let i = 0; i < element.Value.length; i++) {\r\n values.push(parseFloat(element.Value[i]));\r\n }\r\n\r\n return values;\r\n}\r\n\r\nexport default getNumberValues;\r\n","\r\n\r\n/**\r\n * Returns the raw value\r\n *\r\n * @param element - The javascript object for the specified element in the metadata\r\n * @param [index] - the index of the value in a multi-valued element, default is 0\r\n * @param [defaultValue] - The default value to return if the element does not exist\r\n * @returns {*}\r\n */\r\nfunction getValue (element, index, defaultValue) {\r\n index = index || 0;\r\n if (!element) {\r\n return defaultValue;\r\n }\r\n // Value is not present if the attribute has a zero length value\r\n if (!element.Value) {\r\n return defaultValue;\r\n }\r\n // make sure we have the specified index\r\n if (element.Value.length <= index) {\r\n return defaultValue;\r\n }\r\n\r\n return element.Value[index];\r\n}\r\n\r\nexport default getValue;\r\n","import _getNumberString from './getNumberString';\r\nimport _getNumberValue from './getNumberValue';\r\nimport _getNumberValues from './getNumberValues';\r\nimport _getValue from './getValue';\r\nimport _CornerstoneDataParser from './cornerstoneDataParser';\r\n\r\nexport {_getNumberString as getNumberString}\r\nexport {_getNumberValue as getNumberValue}\r\nexport {_getNumberValues as getNumberValues}\r\nexport {_getValue as getValue}\r\nexport {_CornerstoneDataParser as CornerstoneDataParser}\r\n","import { widgetsBase } from './widgets.base';\r\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\r\n\r\n/**\r\n * @module widgets/angle\r\n */\r\nconst widgetsAngle = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'Angle';\r\n\r\n // incoming parameters (optional: worldPosition)\r\n\r\n // outgoing values\r\n this._opangle = null;\r\n\r\n this._moving = false;\r\n this._domHovered = false;\r\n this._defaultAngle = true;\r\n\r\n // mesh stuff\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n\r\n // dom stuff\r\n this._line = null;\r\n this._line2 = null;\r\n this._label = null;\r\n\r\n // add handles\r\n this._handles = [];\r\n\r\n let handle;\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n for (let i = 0; i < 3; i++) {\r\n handle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(handle);\r\n this._handles.push(handle);\r\n }\r\n this._handles[1].active = true;\r\n this._handles[1].tracking = true;\r\n this._handles[2].active = true;\r\n this._handles[2].tracking = true;\r\n\r\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(this._moveHandle);\r\n this._handles.push(this._moveHandle);\r\n this._moveHandle.hide();\r\n\r\n this.create();\r\n\r\n this.onMove = this.onMove.bind(this);\r\n this.onHover = this.onHover.bind(this);\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n this._container.addEventListener('wheel', this.onMove);\r\n\r\n this._line.addEventListener('mouseenter', this.onHover);\r\n this._line.addEventListener('mouseleave', this.onHover);\r\n this._line2.addEventListener('mouseenter', this.onHover);\r\n this._line2.addEventListener('mouseleave', this.onHover);\r\n this._label.addEventListener('mouseenter', this.onHover);\r\n this._label.addEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n removeEventListeners() {\r\n this._container.removeEventListener('wheel', this.onMove);\r\n\r\n this._line.removeEventListener('mouseenter', this.onHover);\r\n this._line.removeEventListener('mouseleave', this.onHover);\r\n this._line2.removeEventListener('mouseenter', this.onHover);\r\n this._line2.removeEventListener('mouseleave', this.onHover);\r\n this._label.removeEventListener('mouseenter', this.onHover);\r\n this._label.removeEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n onHover(evt) {\r\n if (evt) {\r\n this.hoverDom(evt);\r\n }\r\n\r\n this.hoverMesh();\r\n\r\n this._hovered =\r\n this._handles[0].hovered ||\r\n this._handles[1].hovered ||\r\n this._handles[2].hovered ||\r\n this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n }\r\n\r\n hoverMesh() {\r\n // check raycast intersection, do we want to hover on mesh or just css?\r\n }\r\n\r\n hoverDom(evt) {\r\n this._domHovered = evt.type === 'mouseenter';\r\n }\r\n\r\n onStart(evt) {\r\n this._moveHandle.onMove(evt, true);\r\n\r\n this._handles[0].onStart(evt);\r\n this._handles[1].onStart(evt);\r\n this._handles[2].onStart(evt);\r\n\r\n this._active =\r\n this._handles[0].active ||\r\n this._handles[1].active ||\r\n this._handles[2].active ||\r\n this._domHovered;\r\n\r\n if (this._domHovered && !this._handles[1].tracking && !this._handles[2].tracking) {\r\n this._moving = true;\r\n this._controls.enabled = false;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n onMove(evt) {\r\n if (this._active) {\r\n const prevPosition = this._moveHandle.worldPosition.clone();\r\n\r\n this._dragged = true;\r\n this._moveHandle.onMove(evt, true);\r\n\r\n if (this._moving) {\r\n this._handles.slice(0, -1).forEach(handle => {\r\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\r\n });\r\n }\r\n } else {\r\n this.onHover(null);\r\n }\r\n\r\n this._handles[0].onMove(evt);\r\n this._handles[1].onMove(evt);\r\n this._handles[2].onMove(evt);\r\n\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n this._handles[0].onEnd(); // First Handle\r\n\r\n if (\r\n (this._handles[1].tracking &&\r\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10) ||\r\n (!this._handles[1].tracking &&\r\n this._handles[2].tracking &&\r\n this._handles[1].screenPosition.distanceTo(this._handles[2].screenPosition) < 10)\r\n ) {\r\n return;\r\n }\r\n\r\n if (!this._dragged && this._active && !this._handles[2].tracking) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n this._handles[0].selected = this._selected;\r\n }\r\n\r\n // Third Handle\r\n if (this._handles[1].active) {\r\n this._handles[2].onEnd();\r\n } else if (this._dragged || !this._handles[2].tracking) {\r\n this._handles[2].tracking = false;\r\n this._handles[2].onEnd();\r\n } else {\r\n this._handles[2].tracking = false;\r\n }\r\n this._handles[2].selected = this._selected;\r\n\r\n // Second Handle\r\n if (this._dragged || !this._handles[1].tracking) {\r\n this._handles[1].tracking = false;\r\n this._handles[1].onEnd();\r\n } else {\r\n this._handles[1].tracking = false;\r\n }\r\n this._handles[1].selected = this._selected;\r\n\r\n this._active = this._handles[0].active || this._handles[1].active || this._handles[2].active;\r\n this._dragged = this._handles[2].tracking;\r\n this._moving = false;\r\n this.update();\r\n }\r\n\r\n create() {\r\n this.createMesh();\r\n this.createDOM();\r\n }\r\n\r\n createMesh() {\r\n // geometry\r\n this._geometry = new three.Geometry();\r\n this._geometry.vertices = [\r\n this._handles[0].worldPosition,\r\n this._handles[1].worldPosition,\r\n this._handles[1].worldPosition,\r\n this._handles[2].worldPosition,\r\n ];\r\n\r\n // material\r\n this._material = new three.LineBasicMaterial();\r\n\r\n this.updateMeshColor();\r\n\r\n // mesh\r\n this._mesh = new three.LineSegments(this._geometry, this._material);\r\n this._mesh.visible = true;\r\n this.add(this._mesh);\r\n }\r\n\r\n createDOM() {\r\n this._line = document.createElement('div');\r\n this._line.className = 'widgets-line';\r\n this._container.appendChild(this._line);\r\n\r\n this._line2 = document.createElement('div');\r\n this._line2.className = 'widgets-line';\r\n this._container.appendChild(this._line2);\r\n\r\n this._label = document.createElement('div');\r\n this._label.className = 'widgets-label';\r\n this._container.appendChild(this._label);\r\n\r\n this.updateDOMColor();\r\n }\r\n\r\n hideDOM() {\r\n this._line.style.display = 'none';\r\n this._line2.style.display = 'none';\r\n this._label.style.display = 'none';\r\n\r\n this._handles.forEach(elem => elem.hideDOM());\r\n }\r\n\r\n showDOM() {\r\n this._line.style.display = '';\r\n this._line2.style.display = '';\r\n this._label.style.display = '';\r\n\r\n this._handles[0].showDOM();\r\n this._handles[1].showDOM();\r\n this._handles[2].showDOM();\r\n }\r\n\r\n update() {\r\n this.updateColor();\r\n\r\n this._handles[0].update();\r\n this._handles[1].update();\r\n this._handles[2].update();\r\n\r\n // calculate values\r\n this._opangle =\r\n (this._handles[1].worldPosition\r\n .clone()\r\n .sub(this._handles[0].worldPosition)\r\n .angleTo(this._handles[1].worldPosition.clone().sub(this._handles[2].worldPosition)) *\r\n 180) /\r\n Math.PI || 0.0;\r\n this._opangle = this._defaultAngle ? this._opangle : 360 - this._opangle;\r\n\r\n this.updateMeshColor();\r\n this.updateMeshPosition();\r\n\r\n this.updateDOM();\r\n }\r\n\r\n updateMeshColor() {\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n updateMeshPosition() {\r\n if (this._geometry) {\r\n this._geometry.verticesNeedUpdate = true;\r\n }\r\n }\r\n\r\n updateDOM() {\r\n this.updateDOMColor();\r\n\r\n // update first line\r\n const lineData = this.getLineData(\r\n this._handles[1].screenPosition,\r\n this._handles[0].screenPosition\r\n );\r\n\r\n this._line.style.transform = `translate3D(${lineData.transformX}px, ${\r\n lineData.transformY\r\n }px, 0)\r\n rotate(${lineData.transformAngle}rad)`;\r\n this._line.style.width = lineData.length + 'px';\r\n\r\n // update second line\r\n const line2Data = this.getLineData(\r\n this._handles[1].screenPosition,\r\n this._handles[2].screenPosition\r\n );\r\n\r\n this._line2.style.transform = `translate3D(${line2Data.transformX}px, ${\r\n line2Data.transformY\r\n }px, 0)\r\n rotate(${line2Data.transformAngle}rad)`;\r\n this._line2.style.width = line2Data.length + 'px';\r\n\r\n // update angle and label\r\n this._label.innerHTML = `${this._opangle.toFixed(2)}°`;\r\n\r\n let paddingNormVector = lineData.line\r\n .clone()\r\n .add(line2Data.line)\r\n .normalize()\r\n .negate();\r\n let normAngle = paddingNormVector.angleTo(new three.Vector3(1, 0, 0));\r\n\r\n if (normAngle > Math.PI / 2) {\r\n normAngle = Math.PI - normAngle;\r\n }\r\n\r\n const labelPadding =\r\n Math.tan(normAngle) < this._label.offsetHeight / this._label.offsetWidth\r\n ? this._label.offsetWidth / 2 / Math.cos(normAngle) + 15 // 15px padding\r\n : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - normAngle) + 15;\r\n const paddingPoint = this._handles[1].screenPosition\r\n .clone()\r\n .add(paddingNormVector.multiplyScalar(labelPadding));\r\n const transform = this.adjustLabelTransform(this._label, paddingPoint);\r\n\r\n this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`;\r\n }\r\n\r\n updateDOMColor() {\r\n this._line.style.backgroundColor = this._color;\r\n this._line2.style.backgroundColor = this._color;\r\n this._label.style.borderColor = this._color;\r\n }\r\n\r\n free() {\r\n this.removeEventListeners();\r\n\r\n this._handles.forEach(h => {\r\n this.remove(h);\r\n h.free();\r\n });\r\n this._handles = [];\r\n\r\n this._container.removeChild(this._line);\r\n this._container.removeChild(this._line2);\r\n this._container.removeChild(this._label);\r\n\r\n // mesh, geometry, material\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n super.free();\r\n }\r\n\r\n toggleDefaultAngle() {\r\n this._defaultAngle = !this._defaultAngle;\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh) {\r\n this._targetMesh = targetMesh;\r\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition) {\r\n this._handles[0].worldPosition.copy(worldPosition);\r\n this._handles[1].worldPosition.copy(worldPosition);\r\n this._handles[2].worldPosition.copy(worldPosition);\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n\r\n get angle() {\r\n return this._opangle;\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsAngle };\r\nexport default widgetsAngle();\r\n","import { widgetsBase } from './widgets.base';\r\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\r\n\r\n/**\r\n * @module widgets/annotation\r\n * @todo: add option to show only label (without mesh, dots and lines)\r\n */\r\nconst widgetsAnnotation = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'Annotation';\r\n\r\n // incoming parameters (optional: worldPosition)\r\n\r\n this._initialized = false; // set to true when the name of the label is entered\r\n this._movinglabel = null; // bool that turns true when the label is moving with the mouse\r\n this._labelmoved = false; // bool that turns true once the label is moved by the user (at least once)\r\n this._labelhovered = false;\r\n this._manuallabeldisplay = false; // Make true to force the label to be displayed\r\n\r\n // mesh stuff\r\n this._material = null;\r\n this._geometry = null;\r\n this._meshline = null;\r\n this._cone = null;\r\n\r\n // dom stuff\r\n this._line = null;\r\n this._dashline = null;\r\n this._label = null;\r\n this._labeltext = null;\r\n\r\n // var\r\n this._labelOffset = new three.Vector3(); // difference between label center and second handle\r\n this._mouseLabelOffset = new three.Vector3(); // difference between mouse coordinates and label center\r\n\r\n // add handles\r\n this._handles = [];\r\n\r\n let handle;\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n for (let i = 0; i < 2; i++) {\r\n handle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(handle);\r\n this._handles.push(handle);\r\n }\r\n this._handles[1].active = true;\r\n\r\n this.create();\r\n this.initOffsets();\r\n\r\n this.onResize = this.onResize.bind(this);\r\n this.onMove = this.onMove.bind(this);\r\n this.onHoverlabel = this.onHoverlabel.bind(this);\r\n this.notonHoverlabel = this.notonHoverlabel.bind(this);\r\n this.changelabeltext = this.changelabeltext.bind(this);\r\n\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n window.addEventListener('resize', this.onResize);\r\n\r\n this._label.addEventListener('mouseenter', this.onHoverlabel);\r\n this._label.addEventListener('mouseleave', this.notonHoverlabel);\r\n this._label.addEventListener('dblclick', this.changelabeltext);\r\n\r\n this._container.addEventListener('wheel', this.onMove);\r\n }\r\n\r\n removeEventListeners() {\r\n window.removeEventListener('resize', this.onResize);\r\n\r\n this._label.removeEventListener('mouseenter', this.onHoverlabel);\r\n this._label.removeEventListener('mouseleave', this.notonHoverlabel);\r\n this._label.removeEventListener('dblclick', this.changelabeltext);\r\n\r\n this._container.removeEventListener('wheel', this.onMove);\r\n }\r\n\r\n onResize() {\r\n this.initOffsets();\r\n }\r\n\r\n onHoverlabel() {\r\n // this function is called when mouse enters the label with \"mouseenter\" event\r\n this._labelhovered = true;\r\n this._container.style.cursor = 'pointer';\r\n }\r\n\r\n notonHoverlabel() {\r\n // this function is called when mouse leaves the label with \"mouseleave\" event\r\n this._labelhovered = false;\r\n this._container.style.cursor = 'default';\r\n }\r\n\r\n onStart(evt) {\r\n if (this._labelhovered) {\r\n // if label hovered then it should be moved\r\n // save mouse coordinates offset from label center\r\n const offsets = this.getMouseOffsets(evt, this._container);\r\n const paddingPoint = this._handles[1].screenPosition.clone().sub(this._labelOffset);\r\n\r\n this._mouseLabelOffset = new three.Vector3(\r\n offsets.screenX - paddingPoint.x,\r\n offsets.screenY - paddingPoint.y,\r\n 0\r\n );\r\n this._movinglabel = true;\r\n this._labelmoved = true;\r\n }\r\n\r\n this._handles[0].onStart(evt);\r\n this._handles[1].onStart(evt);\r\n\r\n this._active = this._handles[0].active || this._handles[1].active || this._labelhovered;\r\n\r\n this.update();\r\n }\r\n\r\n onMove(evt) {\r\n if (this._movinglabel) {\r\n const offsets = this.getMouseOffsets(evt, this._container);\r\n\r\n this._labelOffset = new three.Vector3(\r\n this._handles[1].screenPosition.x - offsets.screenX + this._mouseLabelOffset.x,\r\n this._handles[1].screenPosition.y - offsets.screenY + this._mouseLabelOffset.y,\r\n 0\r\n );\r\n this._controls.enabled = false;\r\n }\r\n\r\n if (this._active) {\r\n this._dragged = true;\r\n }\r\n\r\n this._handles[0].onMove(evt);\r\n this._handles[1].onMove(evt);\r\n\r\n this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._labelhovered;\r\n\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n this._handles[0].onEnd(); // First Handle\r\n\r\n // Second Handle\r\n if (this._dragged || !this._handles[1].tracking) {\r\n this._handles[1].tracking = false;\r\n this._handles[1].onEnd();\r\n } else {\r\n this._handles[1].tracking = false;\r\n }\r\n\r\n if (!this._dragged && this._active && this._initialized) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n this._handles[0].selected = this._selected;\r\n this._handles[1].selected = this._selected;\r\n }\r\n\r\n if (!this._initialized) {\r\n this._labelOffset = this._handles[1].screenPosition\r\n .clone()\r\n .sub(this._handles[0].screenPosition)\r\n .multiplyScalar(0.5);\r\n this.setlabeltext();\r\n this._initialized = true;\r\n }\r\n\r\n this._active = this._handles[0].active || this._handles[1].active;\r\n this._dragged = false;\r\n this._movinglabel = false;\r\n this.update();\r\n }\r\n\r\n setlabeltext() {\r\n // called when the user creates a new arrow\r\n while (!this._labeltext) {\r\n this._labeltext = prompt('Please enter the annotation text', '');\r\n }\r\n this.displaylabel();\r\n }\r\n\r\n changelabeltext() {\r\n // called when the user does double click in the label\r\n this._labeltext = prompt('Please enter a new annotation text', this._label.innerHTML);\r\n this.displaylabel();\r\n }\r\n\r\n displaylabel() {\r\n this._label.innerHTML =\r\n typeof this._labeltext === 'string' && this._labeltext.length > 0 // avoid error\r\n ? this._labeltext\r\n : ''; // empty string is passed or Cancel is pressed\r\n // show the label (in css an empty string is used to revert display=none)\r\n this._label.style.display = '';\r\n this._dashline.style.display = '';\r\n this._label.style.transform = `translate3D(\r\n ${this._handles[1].screenPosition.x - this._labelOffset.x - this._label.offsetWidth / 2}px,\r\n ${this._handles[1].screenPosition.y -\r\n this._labelOffset.y -\r\n this._label.offsetHeight / 2 -\r\n this._container.offsetHeight}px, 0)`;\r\n }\r\n\r\n create() {\r\n this.createMesh();\r\n this.createDOM();\r\n }\r\n\r\n createMesh() {\r\n // material\r\n this._material = new three.LineBasicMaterial();\r\n\r\n this.updateMeshColor();\r\n\r\n // line geometry\r\n this._geometry = new three.Geometry();\r\n this._geometry.vertices.push(this._handles[0].worldPosition);\r\n this._geometry.vertices.push(this._handles[1].worldPosition);\r\n\r\n // line mesh\r\n this._meshline = new three.Line(this._geometry, this._material);\r\n this._meshline.visible = true;\r\n\r\n this.add(this._meshline);\r\n\r\n // cone geometry\r\n this._conegeometry = new three.CylinderGeometry(0, 2, 10);\r\n this._conegeometry.translate(0, -5, 0);\r\n this._conegeometry.rotateX(-Math.PI / 2);\r\n\r\n // cone mesh\r\n this._cone = new three.Mesh(this._conegeometry, this._material);\r\n this._cone.visible = true;\r\n\r\n this.add(this._cone);\r\n }\r\n\r\n createDOM() {\r\n this._line = document.createElement('div');\r\n this._line.className = 'widgets-line';\r\n this._container.appendChild(this._line);\r\n\r\n this._dashline = document.createElement('div');\r\n this._dashline.className = 'widgets-dashline';\r\n this._dashline.style.display = 'none';\r\n this._container.appendChild(this._dashline);\r\n\r\n this._label = document.createElement('div');\r\n this._label.className = 'widgets-label';\r\n this._label.style.display = 'none';\r\n this._container.appendChild(this._label);\r\n\r\n this.updateDOMColor();\r\n }\r\n\r\n update() {\r\n this.updateColor();\r\n\r\n this._handles[0].update();\r\n this._handles[1].update();\r\n\r\n this.updateMeshColor();\r\n this.updateMeshPosition();\r\n\r\n this.updateDOM();\r\n }\r\n\r\n updateMeshColor() {\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n updateMeshPosition() {\r\n if (this._geometry) {\r\n this._geometry.verticesNeedUpdate = true;\r\n }\r\n\r\n if (this._cone) {\r\n this._cone.position.copy(this._handles[1].worldPosition);\r\n this._cone.lookAt(this._handles[0].worldPosition);\r\n }\r\n }\r\n\r\n updateDOM() {\r\n this.updateDOMColor();\r\n\r\n // update line\r\n const lineData = this.getLineData(\r\n this._handles[0].screenPosition,\r\n this._handles[1].screenPosition\r\n );\r\n\r\n this._line.style.transform = `translate3D(${lineData.transformX}px, ${\r\n lineData.transformY\r\n }px, 0)\r\n rotate(${lineData.transformAngle}rad)`;\r\n this._line.style.width = lineData.length + 'px';\r\n\r\n // update label\r\n const paddingVector = lineData.line.multiplyScalar(0.5);\r\n const paddingPoint = this._handles[1].screenPosition.clone().sub(\r\n this._labelmoved\r\n ? this._labelOffset // if the label is moved, then its position is defined by labelOffset\r\n : paddingVector\r\n ); // otherwise it's placed in the center of the line\r\n const labelPosition = this.adjustLabelTransform(this._label, paddingPoint);\r\n\r\n this._label.style.transform = `translate3D(${labelPosition.x}px, ${labelPosition.y}px, 0)`;\r\n\r\n // create the label without the interaction of the user. Useful when we need to create the label manually\r\n if (this._manuallabeldisplay) {\r\n this.displaylabel();\r\n }\r\n\r\n // update dash line\r\n let minLine = this.getLineData(this._handles[0].screenPosition, paddingPoint);\r\n let lineCL = this.getLineData(lineData.center, paddingPoint);\r\n let line1L = this.getLineData(this._handles[1].screenPosition, paddingPoint);\r\n\r\n if (minLine.length > lineCL.length) {\r\n minLine = lineCL;\r\n }\r\n if (minLine.length > line1L.length) {\r\n minLine = line1L;\r\n }\r\n\r\n this._dashline.style.transform = `translate3D(${minLine.transformX}px, ${\r\n minLine.transformY\r\n }px, 0)\r\n rotate(${minLine.transformAngle}rad)`;\r\n this._dashline.style.width = minLine.length + 'px';\r\n }\r\n\r\n updateDOMColor() {\r\n this._line.style.backgroundColor = this._color;\r\n this._dashline.style.borderTop = '1.5px dashed ' + this._color;\r\n this._label.style.borderColor = this._color;\r\n }\r\n\r\n hideDOM() {\r\n this._line.style.display = 'none';\r\n this._dashline.style.display = 'none';\r\n this._label.style.display = 'none';\r\n this._handles.forEach(elem => elem.hideDOM());\r\n }\r\n\r\n showDOM() {\r\n this._line.style.display = '';\r\n this._dashline.style.display = '';\r\n this._label.style.display = '';\r\n this._handles.forEach(elem => elem.showDOM());\r\n }\r\n\r\n free() {\r\n this.removeEventListeners();\r\n\r\n this._handles.forEach(h => {\r\n this.remove(h);\r\n h.free();\r\n });\r\n this._handles = [];\r\n\r\n this._container.removeChild(this._line);\r\n this._container.removeChild(this._dashline);\r\n this._container.removeChild(this._label);\r\n\r\n // mesh, geometry, material\r\n this.remove(this._meshline);\r\n this._meshline.geometry.dispose();\r\n this._meshline.geometry = null;\r\n this._meshline.material.dispose();\r\n this._meshline.material = null;\r\n this._meshline = null;\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n this.remove(this._cone);\r\n this._cone.geometry.dispose();\r\n this._cone.geometry = null;\r\n this._cone.material.dispose();\r\n this._cone.material = null;\r\n this._cone = null;\r\n this._conegeometry.dispose();\r\n this._conegeometry = null;\r\n\r\n super.free();\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh) {\r\n this._targetMesh = targetMesh;\r\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition) {\r\n this._handles[0].worldPosition.copy(worldPosition);\r\n this._handles[1].worldPosition.copy(worldPosition);\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsAnnotation };\r\nexport default widgetsAnnotation();\r\n","import WidgetsCss from './widgets.css';\r\n\r\nimport {COLORS} from '../core/core.colors';\r\nimport CoreUtils from '../core/core.utils';\r\n\r\ninterface WidgetParameter {\r\n calibrationFactor: number;\r\n frameIndex: number;\r\n hideMesh: boolean;\r\n hideHandleMesh: boolean;\r\n ijk2LPS: THREE.Matrix4;\r\n lps2IJK: THREE.Matrix4;\r\n pixelSpacing: number;\r\n stack: {};\r\n ultrasoundRegions: Array<{}>;\r\n worldPosition: THREE.Vector3;\r\n}\r\n\r\ninterface USRegion {\r\n x0: number;\r\n x1: number;\r\n y0: number;\r\n y1: number;\r\n axisX: number;\r\n axisY: number;\r\n deltaX: number;\r\n deltaY: number;\r\n}\r\n\r\n/**\r\n * @module Abstract Widget\r\n */\r\n// tslint:disable-next-line\r\nconst widgetsBase = (three = (window as any).THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = three.Object3D;\r\n return class extends Constructor {\r\n constructor(targetMesh: THREE.Mesh, controls: THREE.OrbitControls, params: WidgetParameter) {\r\n super();\r\n\r\n this._widgetType = 'Base';\r\n\r\n this._params = params;\r\n if (params.hideMesh === true) {\r\n this.visible = false;\r\n }\r\n\r\n const elementStyle = document.getElementById('ami-widgets');\r\n if (elementStyle === null) {\r\n const styleEl = document.createElement('style');\r\n styleEl.id = 'ami-widgets';\r\n styleEl.innerHTML = WidgetsCss.code;\r\n document.head.appendChild(styleEl);\r\n }\r\n\r\n this._enabled = true;\r\n this._selected = false;\r\n this._hovered = true;\r\n this._active = true;\r\n\r\n this._colors = {\r\n default: COLORS.blue,\r\n active: COLORS.yellow,\r\n hover: COLORS.red,\r\n select: COLORS.green,\r\n text: COLORS.white,\r\n error: COLORS.lightRed,\r\n };\r\n this._color = this._colors.default;\r\n\r\n this._dragged = false;\r\n // can not call it visible because it conflicts with THREE.Object3D\r\n this._displayed = true;\r\n\r\n this._targetMesh = targetMesh;\r\n this._controls = controls;\r\n this._camera = controls.object;\r\n this._container = controls.domElement;\r\n\r\n this._worldPosition = new three.Vector3(); // LPS position\r\n if (params.worldPosition) {\r\n this._worldPosition.copy(params.worldPosition);\r\n } else if (this._targetMesh !== null) {\r\n this._worldPosition.copy(this._targetMesh.position);\r\n }\r\n }\r\n\r\n public initOffsets() {\r\n const box = this._container.getBoundingClientRect();\r\n\r\n const body = document.body;\r\n const docEl = document.documentElement;\r\n\r\n const scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\r\n const scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\r\n\r\n const clientTop = docEl.clientTop || body.clientTop || 0;\r\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\r\n\r\n this._offsets = {\r\n top: Math.round(box.top + scrollTop - clientTop),\r\n left: Math.round(box.left + scrollLeft - clientLeft),\r\n };\r\n }\r\n\r\n public getMouseOffsets(event: MouseEvent, container: HTMLDivElement) {\r\n return {\r\n x: ((event.clientX - this._offsets.left) / container.offsetWidth) * 2 - 1,\r\n y: -((event.clientY - this._offsets.top) / container.offsetHeight) * 2 + 1,\r\n screenX: event.clientX - this._offsets.left,\r\n screenY: event.clientY - this._offsets.top,\r\n };\r\n }\r\n\r\n /**\r\n * Get area of polygon.\r\n *\r\n * @param {Array} points Ordered vertices' coordinates\r\n *\r\n * @returns {Number}\r\n */\r\n public getArea(points: THREE.Vector3[]) {\r\n let area = 0;\r\n let j = points.length - 1; // the last vertex is the 'previous' one to the first\r\n\r\n for (let i = 0; i < points.length; i++) {\r\n area += (points[j].x + points[i].x) * (points[j].y - points[i].y);\r\n j = i; // j is the previous vertex to i\r\n }\r\n\r\n return Math.abs(area / 2);\r\n }\r\n\r\n /**\r\n * Get index of ultrasound region by data coordinates.\r\n *\r\n * @param {Array} regions US regions\r\n * @param {Vector3} point Data coordinates\r\n *\r\n * @returns {Number|null}\r\n */\r\n public getRegionByXY(regions: USRegion[], point: THREE.Vector3) {\r\n let result = null;\r\n\r\n regions.some((region, ind) => {\r\n if (\r\n point.x >= region.x0 &&\r\n point.x <= region.x1 &&\r\n point.y >= region.y0 &&\r\n point.y <= region.y1\r\n ) {\r\n result = ind;\r\n\r\n return true;\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get point inside ultrasound region by data coordinates.\r\n *\r\n * @param {Object} region US region data\r\n * @param {Vector3} point Data coordinates\r\n *\r\n * @returns {Vector2|null}\r\n */\r\n public getPointInRegion(region: USRegion, point: THREE.Vector3) {\r\n if (!region) {\r\n return null;\r\n }\r\n\r\n return new three.Vector2(\r\n (point.x - region.x0 - (region.axisX || 0)) * region.deltaX,\r\n (point.y - region.y0 - (region.axisY || 0)) * region.deltaY\r\n );\r\n }\r\n\r\n /**\r\n * Get point's ultrasound coordinates by data coordinates.\r\n *\r\n * @param {Array} regions US regions\r\n * @param {Vector3} point Data coordinates\r\n *\r\n * @returns {Vector2|null}\r\n */\r\n public getUsPoint(regions: USRegion[], point: THREE.Vector3) {\r\n return this.getPointInRegion(regions[this.getRegionByXY(regions, point)], point);\r\n }\r\n\r\n /**\r\n * Get distance between points inside ultrasound region.\r\n *\r\n * @param {Vector3} pointA Begin data coordinates\r\n * @param {Vector3} pointB End data coordinates\r\n *\r\n * @returns {Number|null}\r\n */\r\n public getUsDistance(pointA: THREE.Vector3, pointB: THREE.Vector3) {\r\n const regions = this._params.ultrasoundRegions || [];\r\n\r\n if (regions.length < 1) {\r\n return null;\r\n }\r\n\r\n const regionA = this.getRegionByXY(regions, pointA);\r\n const regionB = this.getRegionByXY(regions, pointB);\r\n\r\n if (\r\n regionA === null ||\r\n regionB === null ||\r\n regionA !== regionB ||\r\n regions[regionA].unitsX !== 'cm' ||\r\n regions[regionA].unitsY !== 'cm'\r\n ) {\r\n return null;\r\n }\r\n\r\n return this.getPointInRegion(regions[regionA], pointA).distanceTo(\r\n this.getPointInRegion(regions[regionA], pointB)\r\n );\r\n }\r\n\r\n /**\r\n * Get distance between points\r\n *\r\n * @param {Vector3} pointA Begin world coordinates\r\n * @param {Vector3} pointB End world coordinates\r\n * @param {number} cf Calibration factor\r\n *\r\n * @returns {Object}\r\n */\r\n public getDistanceData(pointA: THREE.Vector3, pointB: THREE.Vector3, calibrationFactor: number) {\r\n let distance = null;\r\n let units = null;\r\n\r\n if (calibrationFactor) {\r\n distance = pointA.distanceTo(pointB) * calibrationFactor;\r\n } else if (this._params.ultrasoundRegions && this._params.lps2IJK) {\r\n const usDistance = this.getUsDistance(\r\n CoreUtils.worldToData(this._params.lps2IJK, pointA),\r\n CoreUtils.worldToData(this._params.lps2IJK, pointB)\r\n );\r\n\r\n if (usDistance !== null) {\r\n distance = usDistance * 10;\r\n units = 'mm';\r\n } else {\r\n distance = pointA.distanceTo(pointB);\r\n units = this._params.pixelSpacing ? 'mm' : 'units';\r\n }\r\n } else {\r\n distance = pointA.distanceTo(pointB);\r\n }\r\n\r\n return {\r\n distance,\r\n units,\r\n };\r\n }\r\n\r\n public getLineData(pointA: THREE.Vector3, pointB: THREE.Vector3) {\r\n const line = pointB.clone().sub(pointA);\r\n const center = pointB\r\n .clone()\r\n .add(pointA)\r\n .multiplyScalar(0.5);\r\n const length = line.length();\r\n const angle = line.angleTo(new three.Vector3(1, 0, 0));\r\n\r\n return {\r\n line,\r\n length,\r\n transformX: center.x - length / 2,\r\n transformY: center.y - this._container.offsetHeight,\r\n transformAngle: pointA.y < pointB.y ? angle : -angle,\r\n center,\r\n };\r\n }\r\n\r\n public getRectData(pointA: THREE.Vector3, pointB: THREE.Vector3) {\r\n const line = pointB.clone().sub(pointA);\r\n const vertical = line.clone().projectOnVector(new three.Vector3(0, 1, 0));\r\n const min = pointA.clone().min(pointB); // coordinates of the top left corner\r\n\r\n return {\r\n width: line\r\n .clone()\r\n .projectOnVector(new three.Vector3(1, 0, 0))\r\n .length(),\r\n height: vertical.length(),\r\n transformX: min.x,\r\n transformY: min.y - this._container.offsetHeight,\r\n paddingVector: vertical.clone().normalize(),\r\n };\r\n }\r\n\r\n /**\r\n * @param {HTMLElement} label\r\n * @param {Vector3} point label's center coordinates (default)\r\n * @param {Boolean} corner if true, then point is the label's top left corner coordinates\r\n */\r\n public adjustLabelTransform(label: HTMLDivElement, point: THREE.Vector3, corner: boolean) {\r\n let x = Math.round(point.x - (corner ? 0 : label.offsetWidth / 2));\r\n let y =\r\n Math.round(point.y - (corner ? 0 : label.offsetHeight / 2)) - this._container.offsetHeight;\r\n\r\n if (x < 0) {\r\n x = x > -label.offsetWidth ? 0 : x + label.offsetWidth;\r\n } else if (x > this._container.offsetWidth - label.offsetWidth) {\r\n x =\r\n x < this._container.offsetWidth\r\n ? this._container.offsetWidth - label.offsetWidth\r\n : x - label.offsetWidth;\r\n }\r\n\r\n if (y < -this._container.offsetHeight) {\r\n y =\r\n y > -this._container.offsetHeight - label.offsetHeight\r\n ? -this._container.offsetHeight\r\n : y + label.offsetHeight;\r\n } else if (y > -label.offsetHeight) {\r\n y = y < 0 ? -label.offsetHeight : y - label.offsetHeight;\r\n }\r\n\r\n return new three.Vector2(x, y);\r\n }\r\n\r\n public worldToScreen(worldCoordinate: THREE.Vector3) {\r\n const screenCoordinates = worldCoordinate.clone();\r\n screenCoordinates.project(this._camera);\r\n\r\n screenCoordinates.x = Math.round(\r\n ((screenCoordinates.x + 1) * this._container.offsetWidth) / 2\r\n );\r\n screenCoordinates.y = Math.round(\r\n ((-screenCoordinates.y + 1) * this._container.offsetHeight) / 2\r\n );\r\n screenCoordinates.z = 0;\r\n\r\n return screenCoordinates;\r\n }\r\n\r\n public update() {\r\n // to be overloaded\r\n window.console.log('update() should be overloaded!');\r\n }\r\n\r\n public updateColor() {\r\n if (this._active) {\r\n this._color = this._colors.active;\r\n } else if (this._hovered) {\r\n this._color = this._colors.hover;\r\n } else if (this._selected) {\r\n this._color = this._colors.select;\r\n } else {\r\n this._color = this._colors.default;\r\n }\r\n }\r\n\r\n // tslint:disable-next-line\r\n public setDefaultColor(color: any) {\r\n this._colors.default = color;\r\n if (this._handles) {\r\n this._handles.forEach(elem => (elem._colors.default = color));\r\n }\r\n this.update();\r\n }\r\n\r\n public show() {\r\n this.showDOM();\r\n this.showMesh();\r\n this.update();\r\n this._displayed = true;\r\n }\r\n\r\n public hide() {\r\n this.hideDOM();\r\n this.hideMesh();\r\n this._displayed = false;\r\n }\r\n\r\n public hideDOM() {\r\n // to be overloaded\r\n window.console.log('hideDOM() should be overloaded!');\r\n }\r\n\r\n public showDOM() {\r\n // to be overloaded\r\n window.console.log('showDOM() should be overloaded!');\r\n }\r\n\r\n public hideMesh() {\r\n this.visible = false;\r\n }\r\n\r\n public showMesh() {\r\n if (this._params.hideMesh === true) {\r\n return;\r\n }\r\n\r\n this.visible = true;\r\n }\r\n\r\n public free() {\r\n this._camera = null;\r\n this._container = null;\r\n this._controls = null;\r\n this._params = null;\r\n this._targetMesh = null;\r\n }\r\n\r\n get widgetType() {\r\n return this._widgetType;\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh: THREE.Mesh) {\r\n this._targetMesh = targetMesh;\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition: THREE.Vector3) {\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n\r\n set enabled(enabled: boolean) {\r\n this._enabled = enabled;\r\n this.update();\r\n }\r\n\r\n get selected() {\r\n return this._selected;\r\n }\r\n\r\n set selected(selected: boolean) {\r\n this._selected = selected;\r\n this.update();\r\n }\r\n\r\n get hovered() {\r\n return this._hovered;\r\n }\r\n\r\n set hovered(hovered: boolean) {\r\n this._hovered = hovered;\r\n this.update();\r\n }\r\n\r\n get dragged() {\r\n return this._dragged;\r\n }\r\n\r\n set dragged(dragged: boolean) {\r\n this._dragged = dragged;\r\n this.update();\r\n }\r\n\r\n get displayed() {\r\n return this._displayed;\r\n }\r\n\r\n set displayed(displayed: boolean) {\r\n this._displayed = displayed;\r\n this.update();\r\n }\r\n\r\n get active() {\r\n return this._active;\r\n }\r\n\r\n set active(active: boolean) {\r\n this._active = active;\r\n this.update();\r\n }\r\n\r\n get color() {\r\n return this._color;\r\n }\r\n\r\n // tslint:disable-next-line\r\n set color(color: any) {\r\n this._color = color;\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsBase };\r\nexport default widgetsBase();\r\n","import { widgetsBase } from './widgets.base';\r\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\r\n\r\n/**\r\n * @module widgets/biruler\r\n */\r\nconst widgetsBiruler = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'BiRuler';\r\n\r\n // incoming parameters (optional: lps2IJK, pixelSpacing, ultrasoundRegions, worldPosition)\r\n this._calibrationFactor = params.calibrationFactor || null;\r\n\r\n // outgoing values\r\n this._distance = null;\r\n this._distance2 = null;\r\n this._units = !this._calibrationFactor && !params.pixelSpacing ? 'units' : 'mm';\r\n\r\n // mesh stuff\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n\r\n // dom stuff\r\n this._line = null;\r\n this._label = null;\r\n this._line2 = null;\r\n this._label2 = null;\r\n this._dashline = null;\r\n\r\n // add handles\r\n this._handles = [];\r\n\r\n let handle;\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n for (let i = 0; i < 4; i++) {\r\n handle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(handle);\r\n this._handles.push(handle);\r\n }\r\n this._handles[1].active = true;\r\n this._handles[1].tracking = true;\r\n this._handles[3].active = true;\r\n this._handles[3].tracking = true;\r\n\r\n this.create();\r\n\r\n this.onMove = this.onMove.bind(this);\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n this._container.addEventListener('wheel', this.onMove);\r\n }\r\n\r\n removeEventListeners() {\r\n this._container.removeEventListener('wheel', this.onMove);\r\n }\r\n\r\n onStart(evt) {\r\n this._handles.forEach(elem => elem.onStart(evt));\r\n\r\n this._active =\r\n this._handles[0].active ||\r\n this._handles[1].active ||\r\n this._handles[2].active ||\r\n this._handles[3].active;\r\n\r\n this.update();\r\n }\r\n\r\n onMove(evt) {\r\n if (this._active) {\r\n this._dragged = true;\r\n } else {\r\n this._hovered =\r\n this._handles[0].hovered ||\r\n this._handles[1].hovered ||\r\n this._handles[2].hovered ||\r\n this._handles[3].hovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n }\r\n\r\n this._handles.forEach(elem => elem.onMove(evt));\r\n\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n this._handles[0].onEnd();\r\n this._handles[2].onEnd();\r\n\r\n if (\r\n this._handles[1].tracking &&\r\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10\r\n ) {\r\n return;\r\n }\r\n\r\n if (!this._dragged && this._active && !this._handles[3].tracking) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n this._handles[0].selected = this._selected;\r\n this._handles[2].selected = this._selected;\r\n }\r\n\r\n // Fourth Handle\r\n if (this._handles[1].active) {\r\n this._handles[3].onEnd();\r\n } else if (this._dragged || !this._handles[3].tracking) {\r\n this._handles[3].tracking = false;\r\n this._handles[3].onEnd();\r\n } else {\r\n this._handles[3].tracking = false;\r\n }\r\n this._handles[3].selected = this._selected;\r\n\r\n // Second Handle\r\n if (this._dragged || !this._handles[1].tracking) {\r\n this._handles[1].tracking = false;\r\n this._handles[1].onEnd();\r\n } else {\r\n this._handles[1].tracking = false;\r\n }\r\n this._handles[1].selected = this._selected;\r\n\r\n this._active =\r\n this._handles[0].active ||\r\n this._handles[1].active ||\r\n this._handles[2].active ||\r\n this._handles[3].active;\r\n this._dragged = false;\r\n this.update();\r\n }\r\n\r\n create() {\r\n this.createMesh();\r\n this.createDOM();\r\n }\r\n\r\n createMesh() {\r\n // geometry\r\n this._geometry = new three.Geometry();\r\n this._geometry.vertices = [\r\n this._handles[0].worldPosition,\r\n this._handles[1].worldPosition,\r\n this._handles[2].worldPosition,\r\n this._handles[3].worldPosition,\r\n ];\r\n\r\n // material\r\n this._material = new three.LineBasicMaterial();\r\n\r\n this.updateMeshColor();\r\n\r\n // mesh\r\n this._mesh = new three.LineSegments(this._geometry, this._material);\r\n this._mesh.visible = true;\r\n this.add(this._mesh);\r\n }\r\n\r\n createDOM() {\r\n this._line = document.createElement('div');\r\n this._line.className = 'widgets-line';\r\n this._container.appendChild(this._line);\r\n\r\n this._label = document.createElement('div');\r\n this._label.className = 'widgets-label';\r\n this._container.appendChild(this._label);\r\n\r\n this._line2 = document.createElement('div');\r\n this._line2.className = 'widgets-line';\r\n this._container.appendChild(this._line2);\r\n\r\n this._label2 = document.createElement('div');\r\n this._label2.className = 'widgets-label';\r\n this._container.appendChild(this._label2);\r\n\r\n this._dashline = document.createElement('div');\r\n this._dashline.className = 'widgets-dashline';\r\n this._container.appendChild(this._dashline);\r\n\r\n this.updateDOMColor();\r\n }\r\n\r\n hideDOM() {\r\n this._line.style.display = 'none';\r\n this._label.style.display = 'none';\r\n this._line2.style.display = 'none';\r\n this._label2.style.display = 'none';\r\n this._dashline.style.display = 'none';\r\n\r\n this._handles.forEach(elem => elem.hideDOM());\r\n }\r\n\r\n showDOM() {\r\n this._line.style.display = '';\r\n this._label.style.display = '';\r\n this._line2.style.display = '';\r\n this._label2.style.display = '';\r\n this._dashline.style.display = '';\r\n\r\n this._handles.forEach(elem => elem.showDOM());\r\n }\r\n\r\n update() {\r\n this.updateColor();\r\n\r\n this._handles.forEach(elem => elem.update());\r\n\r\n this.updateMeshColor();\r\n this.updateMeshPosition();\r\n\r\n this.updateDOM();\r\n }\r\n\r\n updateMeshColor() {\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n updateMeshPosition() {\r\n if (this._geometry) {\r\n this._geometry.verticesNeedUpdate = true;\r\n }\r\n }\r\n\r\n updateDOM() {\r\n this.updateDOMColor();\r\n\r\n // update first line\r\n const lineData = this.getLineData(\r\n this._handles[0].screenPosition,\r\n this._handles[1].screenPosition\r\n );\r\n\r\n this._line.style.transform = `translate3D(${lineData.transformX}px, ${\r\n lineData.transformY\r\n }px, 0)\r\n rotate(${lineData.transformAngle}rad)`;\r\n this._line.style.width = lineData.length + 'px';\r\n\r\n // update second line\r\n const line2Data = this.getLineData(\r\n this._handles[2].screenPosition,\r\n this._handles[3].screenPosition\r\n );\r\n\r\n this._line2.style.transform = `translate3D(${line2Data.transformX}px, ${\r\n line2Data.transformY\r\n }px, 0)\r\n rotate(${line2Data.transformAngle}rad)`;\r\n this._line2.style.width = line2Data.length + 'px';\r\n\r\n // update dash line\r\n const line1Center = this._handles[0].worldPosition\r\n .clone()\r\n .add(this._handles[1].worldPosition)\r\n .multiplyScalar(0.5);\r\n const line2Center = this._handles[2].worldPosition\r\n .clone()\r\n .add(this._handles[3].worldPosition)\r\n .multiplyScalar(0.5);\r\n const dashLineData = this.getLineData(\r\n this.worldToScreen(line1Center),\r\n this.worldToScreen(line2Center)\r\n );\r\n\r\n this._dashline.style.transform = `translate3D(${dashLineData.transformX}px, ${\r\n dashLineData.transformY\r\n }px, 0)\r\n rotate(${dashLineData.transformAngle}rad)`;\r\n this._dashline.style.width = dashLineData.length + 'px';\r\n\r\n // update labels\r\n const distanceData = this.getDistanceData(\r\n this._handles[0].worldPosition,\r\n this._handles[1].worldPosition,\r\n this._calibrationFactor\r\n );\r\n const distanceData2 = this.getDistanceData(\r\n this._handles[2].worldPosition,\r\n this._handles[3].worldPosition,\r\n this._calibrationFactor\r\n );\r\n const title = 'Calibration is required to display the distance in mm';\r\n\r\n this._distance = distanceData.distance;\r\n this._distance2 = distanceData2.distance;\r\n if (distanceData.units && distanceData2.units && distanceData.units === distanceData2.units) {\r\n this._units = distanceData.units;\r\n } else {\r\n if (!distanceData.units) {\r\n distanceData.units = this._units;\r\n }\r\n if (!distanceData2.units) {\r\n distanceData2.units = this._units;\r\n }\r\n }\r\n\r\n if (distanceData.units === 'units' && !this._label.hasAttribute('title')) {\r\n this._label.setAttribute('title', title);\r\n this._label.style.color = this._colors.error;\r\n } else if (distanceData.units !== 'units' && this._label.hasAttribute('title')) {\r\n this._label.removeAttribute('title');\r\n this._label.style.color = this._colors.text;\r\n }\r\n if (distanceData2.units === 'units' && !this._label2.hasAttribute('title')) {\r\n this._label2.setAttribute('title', title);\r\n this._label2.style.color = this._colors.error;\r\n } else if (distanceData2.units !== 'units' && this._label2.hasAttribute('title')) {\r\n this._label2.removeAttribute('title');\r\n this._label2.style.color = this._colors.text;\r\n }\r\n this._label.innerHTML = `${this._distance.toFixed(2)} ${distanceData.units}`;\r\n this._label2.innerHTML = `${this._distance2.toFixed(2)} ${distanceData2.units}`;\r\n\r\n let angle = Math.abs(lineData.transformAngle);\r\n if (angle > Math.PI / 2) {\r\n angle = Math.PI - angle;\r\n }\r\n\r\n const labelPadding =\r\n Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth\r\n ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding\r\n : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle) + 15;\r\n const paddingVector = lineData.line.normalize().multiplyScalar(labelPadding);\r\n const paddingPoint =\r\n lineData.length > labelPadding * 2\r\n ? this._handles[1].screenPosition.clone().sub(paddingVector)\r\n : this._handles[1].screenPosition.clone().add(paddingVector);\r\n const transform = this.adjustLabelTransform(this._label, paddingPoint);\r\n\r\n this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`;\r\n\r\n let angle2 = Math.abs(line2Data.transformAngle);\r\n if (angle2 > Math.PI / 2) {\r\n angle2 = Math.PI - angle2;\r\n }\r\n\r\n const label2Padding =\r\n Math.tan(angle2) < this._label2.offsetHeight / this._label2.offsetWidth\r\n ? this._label2.offsetWidth / 2 / Math.cos(angle2) + 15 // 5px for each handle + padding\r\n : this._label2.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle2) + 15;\r\n const paddingVector2 = line2Data.line.normalize().multiplyScalar(label2Padding);\r\n const paddingPoint2 =\r\n line2Data.length > label2Padding * 2\r\n ? this._handles[3].screenPosition.clone().sub(paddingVector2)\r\n : this._handles[3].screenPosition.clone().add(paddingVector2);\r\n const transform2 = this.adjustLabelTransform(this._label2, paddingPoint2);\r\n\r\n this._label2.style.transform = `translate3D(${transform2.x}px, ${transform2.y}px, 0)`;\r\n }\r\n\r\n updateDOMColor() {\r\n this._line.style.backgroundColor = this._color;\r\n this._label.style.borderColor = this._color;\r\n\r\n this._line2.style.backgroundColor = this._color;\r\n this._label2.style.borderColor = this._color;\r\n\r\n this._dashline.style.borderTop = '1.5px dashed ' + this._color;\r\n }\r\n\r\n free() {\r\n this.removeEventListeners();\r\n\r\n this._handles.forEach(h => {\r\n this.remove(h);\r\n h.free();\r\n });\r\n this._handles = [];\r\n\r\n this._container.removeChild(this._line);\r\n this._container.removeChild(this._label);\r\n this._container.removeChild(this._line2);\r\n this._container.removeChild(this._label2);\r\n this._container.removeChild(this._dashline);\r\n\r\n // mesh, geometry, material\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n super.free();\r\n }\r\n\r\n /**\r\n * Get length of rulers\r\n *\r\n * @return {Array}\r\n */\r\n getDistances() {\r\n return [this._distance, this._distance2];\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh) {\r\n this._targetMesh = targetMesh;\r\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition) {\r\n this._handles.forEach(elem => elem.worldPosition.copy(worldPosition));\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n\r\n get calibrationFactor() {\r\n return this._calibrationFactor;\r\n }\r\n\r\n set calibrationFactor(calibrationFactor) {\r\n this._calibrationFactor = calibrationFactor;\r\n this._units = 'mm';\r\n this.update();\r\n }\r\n\r\n get shotestDistance() {\r\n return this._distance < this._distance2 ? this._distance : this._distance2;\r\n }\r\n\r\n get longestDistance() {\r\n return this._distance > this._distance2 ? this._distance : this._distance2;\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsBiruler };\r\nexport default widgetsBiruler();\r\n","import { widgetsBase } from './widgets.base';\r\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\r\n\r\n/**\r\n * @module widgets/crossRuler\r\n */\r\nconst widgetsCrossRuler = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'CrossRuler';\r\n\r\n // incoming parameters (optional: lps2IJK, pixelSpacing, ultrasoundRegions, worldPosition)\r\n this._calibrationFactor = params.calibrationFactor || null;\r\n\r\n this._distances = null; // from intersection point to handles\r\n this._line01 = null; // vector from 0 to 1st handle\r\n this._normal = null; // normal vector to line01\r\n\r\n // outgoing values\r\n this._distance = null;\r\n this._distance2 = null;\r\n this._units = !this._calibrationFactor && !params.pixelSpacing ? 'units' : 'mm';\r\n\r\n this._domHovered = false;\r\n this._moving = false;\r\n\r\n // mesh stuff\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n\r\n // dom stuff\r\n this._line = null;\r\n this._line2 = null;\r\n this._label = null;\r\n this._label2 = null;\r\n\r\n // add handles\r\n this._handles = [];\r\n\r\n let handle;\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n for (let i = 0; i < 4; i++) {\r\n handle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(handle);\r\n this._handles.push(handle);\r\n }\r\n this._handles[1].active = true;\r\n this._handles[1].tracking = true;\r\n\r\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(this._moveHandle);\r\n this._handles.push(this._moveHandle);\r\n this._moveHandle.hide();\r\n\r\n this.onHover = this.onHover.bind(this);\r\n this.onMove = this.onMove.bind(this);\r\n\r\n this.create();\r\n\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n this._line.addEventListener('mouseenter', this.onHover);\r\n this._line.addEventListener('mouseleave', this.onHover);\r\n this._line2.addEventListener('mouseenter', this.onHover);\r\n this._line2.addEventListener('mouseleave', this.onHover);\r\n\r\n this._container.addEventListener('wheel', this.onMove);\r\n }\r\n\r\n removeEventListeners() {\r\n this._line.removeEventListener('mouseenter', this.onHover);\r\n this._line.removeEventListener('mouseleave', this.onHover);\r\n this._line2.removeEventListener('mouseenter', this.onHover);\r\n this._line2.removeEventListener('mouseleave', this.onHover);\r\n\r\n this._container.removeEventListener('wheel', this.onMove);\r\n }\r\n\r\n onHover(evt) {\r\n if (evt) {\r\n this.hoverDom(evt);\r\n }\r\n\r\n this.hoverMesh();\r\n\r\n this._hovered =\r\n this._handles[0].hovered ||\r\n this._handles[1].hovered ||\r\n this._handles[2].hovered ||\r\n this._handles[3].hovered ||\r\n this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n }\r\n\r\n hoverMesh() {\r\n // check raycast intersection, do we want to hover on mesh or just css?\r\n }\r\n\r\n hoverDom(evt) {\r\n this._domHovered = evt.type === 'mouseenter';\r\n }\r\n\r\n onStart(evt) {\r\n this._moveHandle.onMove(evt, true);\r\n\r\n this._handles.slice(0, -1).forEach(elem => elem.onStart(evt));\r\n\r\n this._active =\r\n this._handles[0].active ||\r\n this._handles[1].active ||\r\n this._handles[2].active ||\r\n this._handles[3].active ||\r\n this._domHovered;\r\n\r\n if (this._domHovered && this._distances) {\r\n this._moving = true;\r\n this._controls.enabled = false;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n onMove(evt) {\r\n if (this._active) {\r\n const prevPosition = this._moveHandle.worldPosition.clone();\r\n\r\n this._dragged = true;\r\n this._moveHandle.onMove(evt, true);\r\n\r\n if (this._moving) {\r\n this._handles.slice(0, -1).forEach(handle => {\r\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\r\n });\r\n }\r\n } else {\r\n this.onHover(null);\r\n }\r\n\r\n this._handles.slice(0, -1).forEach(elem => elem.onMove(evt));\r\n\r\n if (this._distances) {\r\n if (this._handles[0].active || this._handles[1].active) {\r\n this.repositionOrtho(); // change worldPosition of 2nd and 3rd handle\r\n } else if (this._handles[2].active || this._handles[3].active) {\r\n this.recalculateOrtho();\r\n }\r\n }\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n this._handles[0].onEnd();\r\n this._handles[2].onEnd();\r\n this._handles[3].onEnd();\r\n\r\n if (\r\n this._handles[1].tracking &&\r\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10\r\n ) {\r\n return;\r\n }\r\n\r\n if (!this._dragged && this._active && !this._handles[1].tracking) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n this._handles[0].selected = this._selected;\r\n this._handles[2].selected = this._selected;\r\n this._handles[3].selected = this._selected;\r\n }\r\n\r\n // Second Handle\r\n if (this._dragged || !this._handles[1].tracking) {\r\n this._handles[1].tracking = false;\r\n this._handles[1].onEnd();\r\n } else {\r\n this._handles[1].tracking = false;\r\n }\r\n this._handles[1].selected = this._selected;\r\n\r\n this._active =\r\n this._handles[0].active ||\r\n this._handles[1].active ||\r\n this._handles[2].active ||\r\n this._handles[3].active;\r\n this._dragged = false;\r\n this._moving = false;\r\n\r\n if (!this._distances) {\r\n this.initOrtho();\r\n }\r\n this.update();\r\n }\r\n\r\n create() {\r\n this.createMesh();\r\n this.createDOM();\r\n }\r\n\r\n createMesh() {\r\n // geometry\r\n this._geometry = new three.Geometry();\r\n this._geometry.vertices = [\r\n this._handles[0].worldPosition,\r\n this._handles[1].worldPosition,\r\n this._handles[2].worldPosition,\r\n this._handles[3].worldPosition,\r\n ];\r\n\r\n // material\r\n this._material = new three.LineBasicMaterial();\r\n\r\n this.updateMeshColor();\r\n\r\n // mesh\r\n this._mesh = new three.LineSegments(this._geometry, this._material);\r\n this._mesh.visible = true;\r\n this.add(this._mesh);\r\n }\r\n\r\n createDOM() {\r\n this._line = document.createElement('div');\r\n this._line.className = 'widgets-line';\r\n this._container.appendChild(this._line);\r\n\r\n this._line2 = document.createElement('div');\r\n this._line2.className = 'widgets-line';\r\n this._container.appendChild(this._line2);\r\n\r\n this._label = document.createElement('div');\r\n this._label.className = 'widgets-label';\r\n this._container.appendChild(this._label);\r\n\r\n this._label2 = document.createElement('div');\r\n this._label2.className = 'widgets-label';\r\n this._container.appendChild(this._label2);\r\n\r\n this.updateDOMColor();\r\n }\r\n\r\n hideDOM() {\r\n this._line.style.display = 'none';\r\n this._line2.style.display = 'none';\r\n this._label.style.display = 'none';\r\n this._label2.style.display = 'none';\r\n\r\n this._handles.slice(0, -1).forEach(elem => elem.hideDOM());\r\n }\r\n\r\n showDOM() {\r\n this._line.style.display = '';\r\n this._line2.style.display = '';\r\n this._label.style.display = '';\r\n this._label2.style.display = '';\r\n\r\n this._handles.slice(0, -1).forEach(elem => elem.showDOM());\r\n }\r\n\r\n update() {\r\n this.updateColor();\r\n\r\n this._handles.slice(0, -1).forEach(elem => elem.update());\r\n\r\n this.updateMeshColor();\r\n this.updateMeshPosition();\r\n\r\n this.updateDOM();\r\n }\r\n\r\n updateMeshColor() {\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n updateMeshPosition() {\r\n if (this._geometry) {\r\n this._geometry.verticesNeedUpdate = true;\r\n }\r\n }\r\n\r\n updateDOM() {\r\n this.updateDOMColor();\r\n\r\n // update first line\r\n const lineData = this.getLineData(\r\n this._handles[0].screenPosition,\r\n this._handles[1].screenPosition\r\n );\r\n\r\n this._line.style.transform = `translate3D(${lineData.transformX}px, ${\r\n lineData.transformY\r\n }px, 0)\r\n rotate(${lineData.transformAngle}rad)`;\r\n this._line.style.width = lineData.length + 'px';\r\n\r\n // update second line\r\n const line2Data = this.getLineData(\r\n this._handles[2].screenPosition,\r\n this._handles[3].screenPosition\r\n );\r\n\r\n this._line2.style.transform = `translate3D(${line2Data.transformX}px, ${\r\n line2Data.transformY\r\n }px, 0)\r\n rotate(${line2Data.transformAngle}rad)`;\r\n this._line2.style.width = line2Data.length + 'px';\r\n\r\n // update labels\r\n const distanceData = this.getDistanceData(\r\n this._handles[0].worldPosition,\r\n this._handles[1].worldPosition,\r\n this._calibrationFactor\r\n );\r\n const distanceData2 = this.getDistanceData(\r\n this._handles[2].worldPosition,\r\n this._handles[3].worldPosition,\r\n this._calibrationFactor\r\n );\r\n const title = 'Calibration is required to display the distance in mm';\r\n\r\n this._distance = distanceData.distance;\r\n this._distance2 = distanceData2.distance;\r\n if (distanceData.units && distanceData2.units && distanceData.units === distanceData2.units) {\r\n this._units = distanceData.units;\r\n } else {\r\n if (!distanceData.units) {\r\n distanceData.units = this._units;\r\n }\r\n if (!distanceData2.units) {\r\n distanceData2.units = this._units;\r\n }\r\n }\r\n\r\n if (distanceData.units === 'units' && !this._label.hasAttribute('title')) {\r\n this._label.setAttribute('title', title);\r\n this._label.style.color = this._colors.error;\r\n } else if (distanceData.units !== 'units' && this._label.hasAttribute('title')) {\r\n this._label.removeAttribute('title');\r\n this._label.style.color = this._colors.text;\r\n }\r\n if (distanceData2.units === 'units' && !this._label2.hasAttribute('title')) {\r\n this._label2.setAttribute('title', title);\r\n this._label2.style.color = this._colors.error;\r\n } else if (distanceData2.units !== 'units' && this._label2.hasAttribute('title')) {\r\n this._label2.removeAttribute('title');\r\n this._label2.style.color = this._colors.text;\r\n }\r\n this._label.innerHTML = `${this._distance.toFixed(2)} ${distanceData.units}`;\r\n this._label2.innerHTML = `${this._distance2.toFixed(2)} ${distanceData2.units}`;\r\n\r\n let angle = Math.abs(lineData.transformAngle);\r\n if (angle > Math.PI / 2) {\r\n angle = Math.PI - angle;\r\n }\r\n\r\n const labelPadding =\r\n Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth\r\n ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding\r\n : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle) + 15,\r\n paddingVector = lineData.line.normalize().multiplyScalar(labelPadding),\r\n paddingPoint =\r\n lineData.length > labelPadding * 4\r\n ? this._handles[1].screenPosition.clone().sub(paddingVector)\r\n : this._handles[1].screenPosition.clone().add(paddingVector),\r\n transform = this.adjustLabelTransform(this._label, paddingPoint);\r\n\r\n this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`;\r\n\r\n let angle2 = Math.abs(line2Data.transformAngle);\r\n if (angle2 > Math.PI / 2) {\r\n angle2 = Math.PI - angle2;\r\n }\r\n\r\n const label2Padding =\r\n Math.tan(angle2) < this._label2.offsetHeight / this._label2.offsetWidth\r\n ? this._label2.offsetWidth / 2 / Math.cos(angle2) + 15 // 5px for each handle + padding\r\n : this._label2.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle2) + 15,\r\n paddingVector2 = line2Data.line.normalize().multiplyScalar(label2Padding),\r\n paddingPoint2 =\r\n line2Data.length > label2Padding * 4\r\n ? this._handles[3].screenPosition.clone().sub(paddingVector2)\r\n : this._handles[3].screenPosition.clone().add(paddingVector2),\r\n transform2 = this.adjustLabelTransform(this._label2, paddingPoint2);\r\n\r\n this._label2.style.transform = `translate3D(${transform2.x}px, ${transform2.y}px, 0)`;\r\n }\r\n\r\n updateDOMColor() {\r\n this._line.style.backgroundColor = this._color;\r\n this._line2.style.backgroundColor = this._color;\r\n this._label.style.borderColor = this._color;\r\n this._label2.style.borderColor = this._color;\r\n }\r\n\r\n free() {\r\n this.removeEventListeners();\r\n\r\n this._handles.forEach(h => {\r\n this.remove(h);\r\n h.free();\r\n });\r\n this._handles = [];\r\n\r\n this._container.removeChild(this._line);\r\n this._container.removeChild(this._line2);\r\n this._container.removeChild(this._label);\r\n this._container.removeChild(this._label2);\r\n\r\n // mesh, geometry, material\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n super.free();\r\n }\r\n\r\n initLineAndNormal() {\r\n this._line01 = this._handles[1].worldPosition.clone().sub(this._handles[0].worldPosition);\r\n this._normal = this._line01\r\n .clone()\r\n .cross(this._camera._direction)\r\n .normalize();\r\n }\r\n\r\n initOrtho() {\r\n // called onEnd if distances are null\r\n this.initLineAndNormal();\r\n\r\n const center = this._handles[1].worldPosition\r\n .clone()\r\n .add(this._handles[0].worldPosition)\r\n .multiplyScalar(0.5);\r\n const halfLength = this._line01.length() / 2;\r\n const normLine = this._normal.clone().multiplyScalar(halfLength * 0.8);\r\n const normLength = normLine.length();\r\n\r\n this._handles[2].worldPosition.copy(center.clone().add(normLine));\r\n this._handles[3].worldPosition.copy(center.clone().sub(normLine));\r\n\r\n this._distances = [halfLength, halfLength, normLength, normLength];\r\n }\r\n\r\n repositionOrtho() {\r\n // called onMove if 0 or 1st handle is active\r\n this.initLineAndNormal();\r\n this._distances[0] *= this._line01.length() / (this._distances[0] + this._distances[1]);\r\n this._distances[1] = this._line01.length() - this._distances[0];\r\n\r\n const intersect = this._handles[0].worldPosition.clone().add(\r\n this._line01\r\n .clone()\r\n .normalize()\r\n .multiplyScalar(this._distances[0])\r\n );\r\n\r\n this._handles[2].worldPosition.copy(\r\n intersect.clone().add(this._normal.clone().multiplyScalar(this._distances[2]))\r\n );\r\n this._handles[3].worldPosition.copy(\r\n intersect.clone().sub(this._normal.clone().multiplyScalar(this._distances[3]))\r\n );\r\n }\r\n\r\n recalculateOrtho() {\r\n // called onMove if 2nd or 3rd handle is active\r\n const activeInd = this._handles[2].active ? 2 : 3;\r\n const lines = [];\r\n const intersect = new three.Vector3();\r\n\r\n lines[2] = this._handles[2].worldPosition.clone().sub(this._handles[0].worldPosition);\r\n lines[3] = this._handles[3].worldPosition.clone().sub(this._handles[0].worldPosition);\r\n new three.Ray(\r\n this._handles[0].worldPosition,\r\n this._line01.clone().normalize()\r\n ).closestPointToPoint(this._handles[activeInd].worldPosition, intersect);\r\n\r\n const isOutside =\r\n intersect\r\n .clone()\r\n .sub(this._handles[0].worldPosition)\r\n .length() > this._line01.length();\r\n // if intersection is outside of the line01 then change worldPosition of active handle\r\n if (isOutside || intersect.equals(this._handles[0].worldPosition)) {\r\n if (isOutside) {\r\n intersect.copy(this._handles[1].worldPosition);\r\n }\r\n\r\n this._handles[activeInd].worldPosition.copy(\r\n intersect.clone().add(lines[activeInd].clone().projectOnVector(this._normal))\r\n );\r\n }\r\n\r\n if (lines[2].cross(this._line01).angleTo(this._camera._direction) > 0.01) {\r\n this._handles[2].worldPosition.copy(intersect); // 2nd handle should always be above line01\r\n }\r\n if (lines[3].cross(this._line01).angleTo(this._camera._direction) < Math.PI - 0.01) {\r\n this._handles[3].worldPosition.copy(intersect); // 3nd handle should always be below line01\r\n }\r\n\r\n lines[0] = this._normal.clone().multiplyScalar(this._distances[5 - activeInd]);\r\n if (activeInd === 2) {\r\n lines[0].negate();\r\n }\r\n this._handles[5 - activeInd].worldPosition.copy(intersect.clone().add(lines[0]));\r\n\r\n this._distances[activeInd] = intersect.distanceTo(this._handles[activeInd].worldPosition);\r\n this._distances[0] = intersect.distanceTo(this._handles[0].worldPosition);\r\n this._distances[1] = intersect.distanceTo(this._handles[1].worldPosition);\r\n }\r\n\r\n /**\r\n * Get length of rulers\r\n *\r\n * @return {Array}\r\n */\r\n getDimensions() {\r\n return [this._distance, this._distance2];\r\n }\r\n\r\n /**\r\n * Get CrossRuler handles position\r\n *\r\n * @return {Array.} First begin, first end, second begin, second end\r\n */\r\n getCoordinates() {\r\n return [\r\n this._handles[0].worldPosition,\r\n this._handles[1].worldPosition,\r\n this._handles[2].worldPosition,\r\n this._handles[3].worldPosition,\r\n ];\r\n }\r\n\r\n /**\r\n * Set CrossRuler handles position\r\n *\r\n * @param {Vector3} first The beginning of the first line\r\n * @param {Vector3} second The end of the first line\r\n * @param {Vector3} third The beginning of the second line (clockwise relative to the first line)\r\n * @param {Vector3} fourth The end of the second line\r\n */\r\n initCoordinates(first, second, third, fourth) {\r\n const intersectR = new three.Vector3();\r\n const intersectS = new three.Vector3();\r\n const ray = new three.Ray(first);\r\n\r\n ray.lookAt(second);\r\n ray.distanceSqToSegment(third, fourth, intersectR, intersectS);\r\n\r\n if (\r\n intersectR.distanceTo(intersectS) > 0.01 &&\r\n intersectR.distanceTo(first) > second.distanceTo(first) + 0.01\r\n ) {\r\n window.console.warn('Lines do not intersect');\r\n\r\n return;\r\n }\r\n\r\n this.active = false;\r\n this.hovered = false;\r\n this.setDefaultColor('#198');\r\n this._worldPosition.copy(first);\r\n this._handles[0].worldPosition.copy(first);\r\n this._handles[1].worldPosition.copy(second);\r\n this._handles[1].active = false;\r\n this._handles[1].tracking = false;\r\n this._handles[2].worldPosition.copy(third);\r\n this._handles[3].worldPosition.copy(fourth);\r\n this._distances = [\r\n intersectR.distanceTo(first),\r\n intersectR.distanceTo(second),\r\n intersectR.distanceTo(third),\r\n intersectR.distanceTo(fourth),\r\n ];\r\n\r\n this.initLineAndNormal();\r\n this.update();\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh) {\r\n this._targetMesh = targetMesh;\r\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition) {\r\n this._handles.slice(0, -1).forEach(elem => elem.worldPosition.copy(worldPosition));\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n\r\n get calibrationFactor() {\r\n return this._calibrationFactor;\r\n }\r\n\r\n set calibrationFactor(calibrationFactor) {\r\n this._calibrationFactor = calibrationFactor;\r\n this._units = 'mm';\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsCrossRuler };\r\nexport default widgetsCrossRuler();\r\n","/**\r\n * @module CSS Code for all Widgets\r\n */\r\nexport default class WidgetsCss {\r\n static get code() {\r\n return `\r\n .widgets-handle {\r\n position: absolute;\r\n border: 1px solid;\r\n border-radius: 50%;\r\n width: 10px;\r\n height: 10px;\r\n margin: -6px; /* border + width / 2 */\r\n z-index: 3;\r\n }\r\n .widgets-line {\r\n position: absolute;\r\n width: 1px;\r\n height: 1px;\r\n margin-top: -0.5px; /* height / 2 */\r\n }\r\n .widgets-dashline {\r\n position: absolute;\r\n border-top: 1px dashed;\r\n margin-top: -0.5px; /* border / 2 */\r\n }\r\n .widgets-line:before,\r\n .widgets-dashline:before { /* for dragging */\r\n content: \" \";\r\n position: absolute;\r\n height: 12px;\r\n left: 0;\r\n right: 0;\r\n margin-top: -6px;\r\n }\r\n .widgets-rectangle {\r\n position: absolute;\r\n border: 1px solid;\r\n margin: -1px; /* border */\r\n }\r\n .widgets-rectangle-helper {\r\n position: absolute;\r\n border: 1px dashed;\r\n margin: -1px; /* border */\r\n }\r\n .widgets-ellipse {\r\n position: absolute;\r\n border: 1px solid;\r\n border-radius: 50%;\r\n margin: -1px; /* border */\r\n z-index: 2;\r\n }\r\n .widgets-label {\r\n position: absolute;\r\n border: 1px solid;\r\n background-color: rgba(0, 0, 0, 0.7);\r\n color: rgb(255, 255, 255);\r\n padding: 4px;\r\n z-index: 3;\r\n }\r\n `;\r\n }\r\n}\r\n","import { widgetsBase } from './widgets.base';\r\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\r\nimport CoreUtils from '../core/core.utils';\r\n\r\n/**\r\n * @module widgets/ellipse\r\n */\r\nconst widgetsEllipse = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'Ellipse';\r\n\r\n // incoming parameters (optional: frameIndex, worldPosition)\r\n this._stack = params.stack; // required\r\n this._calibrationFactor = params.calibrationFactor || null;\r\n\r\n // outgoing values\r\n this._area = null;\r\n this._units =\r\n !this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing\r\n ? 'units'\r\n : 'cm²';\r\n\r\n this._moving = false;\r\n this._domHovered = false;\r\n\r\n // mesh stuff\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n\r\n // dom stuff\r\n this._rectangle = null;\r\n this._ellipse = null;\r\n this._label = null;\r\n\r\n // add handles\r\n this._handles = [];\r\n\r\n let handle;\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n for (let i = 0; i < 2; i++) {\r\n handle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(handle);\r\n this._handles.push(handle);\r\n }\r\n this._handles[1].active = true;\r\n this._handles[1].tracking = true;\r\n\r\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(this._moveHandle);\r\n this._handles.push(this._moveHandle);\r\n this._moveHandle.hide();\r\n\r\n this.create();\r\n\r\n this.onMove = this.onMove.bind(this);\r\n this.onHover = this.onHover.bind(this);\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n this._container.addEventListener('wheel', this.onMove);\r\n\r\n this._rectangle.addEventListener('mouseenter', this.onHover);\r\n this._rectangle.addEventListener('mouseleave', this.onHover);\r\n this._ellipse.addEventListener('mouseenter', this.onHover);\r\n this._ellipse.addEventListener('mouseleave', this.onHover);\r\n this._label.addEventListener('mouseenter', this.onHover);\r\n this._label.addEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n removeEventListeners() {\r\n this._container.removeEventListener('wheel', this.onMove);\r\n\r\n this._rectangle.removeEventListener('mouseenter', this.onHover);\r\n this._rectangle.removeEventListener('mouseleave', this.onHover);\r\n this._ellipse.removeEventListener('mouseenter', this.onHover);\r\n this._ellipse.removeEventListener('mouseleave', this.onHover);\r\n this._label.removeEventListener('mouseenter', this.onHover);\r\n this._label.removeEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n onHover(evt) {\r\n if (evt) {\r\n this.hoverDom(evt);\r\n }\r\n\r\n this.hoverMesh();\r\n\r\n this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n }\r\n\r\n hoverMesh() {\r\n // check raycast intersection, if we want to hover on mesh instead of just css\r\n }\r\n\r\n hoverDom(evt) {\r\n this._domHovered = evt.type === 'mouseenter';\r\n }\r\n\r\n onStart(evt) {\r\n this._moveHandle.onMove(evt, true);\r\n\r\n this._handles[0].onStart(evt);\r\n this._handles[1].onStart(evt);\r\n\r\n this._active = this._handles[0].active || this._handles[1].active || this._domHovered;\r\n\r\n if (this._domHovered && !this._handles[1].tracking) {\r\n this._moving = true;\r\n this._controls.enabled = false;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n onMove(evt) {\r\n if (this._active) {\r\n const prevPosition = this._moveHandle.worldPosition.clone();\r\n\r\n this._dragged = true;\r\n this._moveHandle.onMove(evt, true);\r\n\r\n if (this._moving) {\r\n this._handles.slice(0, -1).forEach(handle => {\r\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\r\n });\r\n }\r\n\r\n this.updateRoI(true);\r\n } else {\r\n this.onHover(null);\r\n }\r\n\r\n this._handles[0].onMove(evt);\r\n this._handles[1].onMove(evt);\r\n\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n this._handles[0].onEnd(); // First Handle\r\n\r\n if (\r\n this._handles[1].tracking &&\r\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10\r\n ) {\r\n return;\r\n }\r\n\r\n if (!this._dragged && this._active && !this._handles[1].tracking) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n this._handles[0].selected = this._selected;\r\n }\r\n\r\n // Second Handle\r\n if (this._dragged || !this._handles[1].tracking) {\r\n this._handles[1].tracking = false;\r\n this._handles[1].onEnd();\r\n } else {\r\n this._handles[1].tracking = false;\r\n }\r\n this._handles[1].selected = this._selected;\r\n\r\n this._active = this._handles[0].active || this._handles[1].active;\r\n this._dragged = false;\r\n this._moving = false;\r\n\r\n this.updateRoI(); // TODO: if (this._dragged || !this._initialized)\r\n this.update();\r\n }\r\n\r\n hideDOM() {\r\n this._handles.forEach(elem => elem.hideDOM());\r\n\r\n this._rectangle.style.display = 'none';\r\n this._ellipse.style.display = 'none';\r\n this._label.style.display = 'none';\r\n }\r\n\r\n showDOM() {\r\n this._handles[0].showDOM();\r\n this._handles[1].showDOM();\r\n\r\n this._rectangle.style.display = '';\r\n this._ellipse.style.display = '';\r\n this._label.style.display = '';\r\n }\r\n\r\n create() {\r\n this.createMaterial();\r\n this.createDOM();\r\n }\r\n\r\n createMaterial() {\r\n this._material = new three.MeshBasicMaterial();\r\n this._material.transparent = true;\r\n this._material.opacity = 0.2;\r\n }\r\n\r\n createDOM() {\r\n this._rectangle = document.createElement('div');\r\n this._rectangle.className = 'widgets-rectangle-helper';\r\n this._container.appendChild(this._rectangle);\r\n\r\n this._ellipse = document.createElement('div');\r\n this._ellipse.className = 'widgets-ellipse';\r\n this._container.appendChild(this._ellipse);\r\n\r\n this._label = document.createElement('div');\r\n this._label.className = 'widgets-label';\r\n\r\n // measurements\r\n const measurementsContainer = document.createElement('div');\r\n // Mean / SD\r\n let meanSDContainer = document.createElement('div');\r\n meanSDContainer.className = 'mean-sd';\r\n measurementsContainer.appendChild(meanSDContainer);\r\n // Max / Min\r\n let maxMinContainer = document.createElement('div');\r\n maxMinContainer.className = 'max-min';\r\n measurementsContainer.appendChild(maxMinContainer);\r\n // Area\r\n let areaContainer = document.createElement('div');\r\n areaContainer.className = 'area';\r\n measurementsContainer.appendChild(areaContainer);\r\n\r\n this._label.appendChild(measurementsContainer);\r\n\r\n this._container.appendChild(this._label);\r\n\r\n this.updateDOMColor();\r\n }\r\n\r\n update() {\r\n this.updateColor();\r\n\r\n this._handles[0].update();\r\n this._handles[1].update();\r\n\r\n this.updateMeshColor();\r\n this.updateMeshPosition();\r\n\r\n this.updateDOM();\r\n }\r\n\r\n updateMeshColor() {\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n updateMeshPosition() {\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n }\r\n\r\n const vec01 = this._handles[1].worldPosition.clone().sub(this._handles[0].worldPosition);\r\n const height = vec01\r\n .clone()\r\n .projectOnVector(this._camera.up)\r\n .length();\r\n const width = vec01\r\n .clone()\r\n .projectOnVector(this._camera._right)\r\n .length();\r\n\r\n if (width === 0 || height === 0) {\r\n return;\r\n }\r\n\r\n this._geometry = new three.ShapeGeometry(\r\n new three.Shape(\r\n new three.EllipseCurve(0, 0, width / 2, height / 2, 0, 2 * Math.PI, false).getPoints(50)\r\n )\r\n );\r\n\r\n this._mesh = new three.Mesh(this._geometry, this._material);\r\n this._mesh.position.copy(\r\n this._handles[0].worldPosition.clone().add(vec01.multiplyScalar(0.5))\r\n );\r\n this._mesh.rotation.copy(this._camera.rotation);\r\n this._mesh.visible = true;\r\n this.add(this._mesh);\r\n }\r\n\r\n updateRoI(clear) {\r\n if (!this._geometry) {\r\n return;\r\n }\r\n\r\n const meanSDContainer = this._label.querySelector('.mean-sd');\r\n const maxMinContainer = this._label.querySelector('.max-min');\r\n\r\n if (clear) {\r\n meanSDContainer.innerHTML = '';\r\n maxMinContainer.innerHTML = '';\r\n\r\n return;\r\n }\r\n\r\n const roi = CoreUtils.getRoI(this._mesh, this._camera, this._stack);\r\n\r\n if (roi !== null) {\r\n meanSDContainer.innerHTML = `Mean: ${roi.mean.toFixed(1)} / SD: ${roi.sd.toFixed(1)}`;\r\n maxMinContainer.innerHTML = `Max: ${roi.max.toFixed()} / Min: ${roi.min.toFixed()}`;\r\n } else {\r\n meanSDContainer.innerHTML = '';\r\n maxMinContainer.innerHTML = '';\r\n }\r\n }\r\n\r\n updateDOMColor() {\r\n this._rectangle.style.borderColor = this._color;\r\n this._ellipse.style.borderColor = this._color;\r\n this._label.style.borderColor = this._color;\r\n }\r\n\r\n updateDOM() {\r\n if (!this._geometry) {\r\n return;\r\n }\r\n\r\n this.updateDOMColor();\r\n\r\n const regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || [];\r\n\r\n this._area = CoreUtils.getGeometryArea(this._geometry);\r\n if (this._calibrationFactor) {\r\n this._area *= Math.pow(this._calibrationFactor, 2);\r\n } else if (regions && regions.length > 0 && this._stack.lps2IJK) {\r\n const region0 = this.getRegionByXY(\r\n regions,\r\n CoreUtils.worldToData(this._stack.lps2IJK, this._handles[0].worldPosition)\r\n );\r\n const region1 = this.getRegionByXY(\r\n regions,\r\n CoreUtils.worldToData(this._stack.lps2IJK, this._handles[1].worldPosition)\r\n );\r\n\r\n if (\r\n region0 !== null &&\r\n region1 !== null &&\r\n region0 === region1 &&\r\n regions[region0].unitsX === 'cm' &&\r\n regions[region0].unitsY === 'cm'\r\n ) {\r\n this._area *= Math.pow(regions[region0].deltaX, 2);\r\n this._units = 'cm²';\r\n } else if (this._stack.frame[this._params.frameIndex].pixelSpacing) {\r\n this._area /= 100;\r\n this._units = 'cm²';\r\n } else {\r\n this._units = 'units';\r\n }\r\n } else if (this._units === 'cm²') {\r\n this._area /= 100;\r\n }\r\n\r\n if (this._units === 'units' && !this._label.hasAttribute('title')) {\r\n this._label.setAttribute('title', 'Calibration is required to display the area in cm²');\r\n this._label.style.color = this._colors.error;\r\n } else if (this._units !== 'units' && this._label.hasAttribute('title')) {\r\n this._label.removeAttribute('title');\r\n this._label.style.color = this._colors.text;\r\n }\r\n this._label.querySelector('.area').innerHTML = `Area: ${this._area.toFixed(2)} ${\r\n this._units\r\n }`;\r\n\r\n const rectData = this.getRectData(\r\n this._handles[0].screenPosition,\r\n this._handles[1].screenPosition\r\n );\r\n const labelTransform = this.adjustLabelTransform(\r\n this._label,\r\n this._handles[1].screenPosition\r\n .clone()\r\n .add(rectData.paddingVector.multiplyScalar(15 + this._label.offsetHeight / 2))\r\n );\r\n\r\n // update rectangle\r\n this._rectangle.style.transform = `translate3D(${rectData.transformX}px, ${\r\n rectData.transformY\r\n }px, 0)`;\r\n this._rectangle.style.width = rectData.width + 'px';\r\n this._rectangle.style.height = rectData.height + 'px';\r\n\r\n // update ellipse\r\n this._ellipse.style.transform = `translate3D(${rectData.transformX}px, ${\r\n rectData.transformY\r\n }px, 0)`;\r\n this._ellipse.style.width = rectData.width + 'px';\r\n this._ellipse.style.height = rectData.height + 'px';\r\n\r\n // update label\r\n this._label.style.transform =\r\n 'translate3D(' + labelTransform.x + 'px,' + labelTransform.y + 'px, 0)';\r\n }\r\n\r\n free() {\r\n this.removeEventListeners();\r\n\r\n this._handles.forEach(h => {\r\n this.remove(h);\r\n h.free();\r\n });\r\n this._handles = [];\r\n\r\n this._container.removeChild(this._rectangle);\r\n this._container.removeChild(this._ellipse);\r\n this._container.removeChild(this._label);\r\n\r\n // mesh, geometry, material\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n }\r\n if (this._geometry) {\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n }\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n this._stack = null;\r\n\r\n super.free();\r\n }\r\n\r\n getMeasurements() {\r\n return {\r\n area: this._area,\r\n units: this._units,\r\n };\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh) {\r\n this._targetMesh = targetMesh;\r\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition) {\r\n this._handles[0].worldPosition.copy(worldPosition);\r\n this._handles[1].worldPosition.copy(worldPosition);\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n\r\n get calibrationFactor() {\r\n return this._calibrationFactor;\r\n }\r\n\r\n set calibrationFactor(calibrationFactor) {\r\n this._calibrationFactor = calibrationFactor;\r\n this._units = 'cm²';\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsEllipse };\r\nexport default widgetsEllipse();\r\n","import { widgetsBase } from './widgets.base';\r\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\r\nimport CoreUtils from '../core/core.utils';\r\n\r\n/**\r\n * @module widgets/freehand\r\n */\r\nconst widgetsFreehand = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'Freehand';\r\n\r\n // incoming parameters (optional: frameIndex, worldPosition)\r\n this._stack = params.stack; // required\r\n this._calibrationFactor = params.calibrationFactor || null;\r\n\r\n // outgoing values\r\n this._area = null;\r\n this._units =\r\n !this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing\r\n ? 'units'\r\n : 'cm²';\r\n\r\n this._initialized = false; // set to true onEnd if number of handles > 2\r\n this._moving = false;\r\n this._domHovered = false;\r\n\r\n // mesh stuff\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n\r\n // dom stuff\r\n this._lines = [];\r\n this._label = null;\r\n\r\n // add handles\r\n this._handles = [];\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n\r\n let handle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(handle);\r\n this._handles.push(handle);\r\n\r\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(this._moveHandle);\r\n this._moveHandle.hide();\r\n\r\n this.onMove = this.onMove.bind(this);\r\n this.onHover = this.onHover.bind(this);\r\n\r\n this.create();\r\n\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n this._container.addEventListener('wheel', this.onMove);\r\n\r\n this._label.addEventListener('mouseenter', this.onHover);\r\n this._label.addEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n removeEventListeners() {\r\n this._container.removeEventListener('wheel', this.onMove);\r\n\r\n this._label.removeEventListener('mouseenter', this.onHover);\r\n this._label.removeEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n onHover(evt) {\r\n if (evt) {\r\n this.hoverDom(evt);\r\n }\r\n\r\n this.hoverMesh();\r\n\r\n let hovered = false;\r\n\r\n this._handles.forEach(elem => (hovered = hovered || elem.hovered));\r\n\r\n this._hovered = hovered || this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n }\r\n\r\n hoverMesh() {\r\n // check raycast intersection, if we want to hover on mesh instead of just css\r\n }\r\n\r\n hoverDom(evt) {\r\n this._domHovered = evt.type === 'mouseenter';\r\n }\r\n\r\n onStart(evt) {\r\n let active = false;\r\n\r\n this._moveHandle.onMove(evt, true);\r\n this._handles.forEach(elem => {\r\n elem.onStart(evt);\r\n active = active || elem.active;\r\n });\r\n\r\n this._active = active || this._domHovered;\r\n\r\n if (this._domHovered && this._initialized) {\r\n this._moving = true;\r\n this._controls.enabled = false;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n onMove(evt) {\r\n let hovered = false;\r\n\r\n if (this.active) {\r\n this._dragged = true;\r\n\r\n if (!this._initialized) {\r\n this._handles[this._handles.length - 1].hovered = false;\r\n this._handles[this._handles.length - 1].active = false;\r\n this._handles[this._handles.length - 1].tracking = false;\r\n\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n let handle = new WidgetsHandle(this._targetMesh, this._controls, this._params);\r\n\r\n handle.hovered = true;\r\n handle.active = true;\r\n handle.tracking = true;\r\n this.add(handle);\r\n this._handles.push(handle);\r\n\r\n this.createLine();\r\n } else {\r\n const prevPosition = this._moveHandle.worldPosition.clone();\r\n\r\n this._moveHandle.onMove(evt, true);\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n }\r\n this.updateDOMContent(true);\r\n if (this._moving) {\r\n this._handles.forEach(handle => {\r\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\r\n });\r\n }\r\n }\r\n }\r\n\r\n this._handles.forEach(elem => {\r\n elem.onMove(evt);\r\n hovered = hovered || elem.hovered;\r\n });\r\n\r\n this._hovered = hovered || this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n\r\n if (this.active && this._handles.length > 2) {\r\n this.pushPopHandle();\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n if (this._handles.length < 3) {\r\n return;\r\n }\r\n\r\n let active = false;\r\n\r\n this._handles.slice(0, -1).forEach(elem => {\r\n elem.onEnd();\r\n active = active || elem.active;\r\n });\r\n\r\n // Last Handle\r\n if (this._dragged || !this._handles[this._handles.length - 1].tracking) {\r\n this._handles[this._handles.length - 1].tracking = false;\r\n this._handles[this._handles.length - 1].onEnd();\r\n } else {\r\n this._handles[this._handles.length - 1].tracking = false;\r\n }\r\n\r\n if (this._lines.length < this._handles.length) {\r\n this.createLine();\r\n }\r\n\r\n if (this._dragged || !this._initialized) {\r\n this.updateMesh();\r\n this.updateDOMContent();\r\n }\r\n\r\n if (!this._dragged && this._active) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n this._handles.forEach(elem => (elem.selected = this._selected));\r\n }\r\n this._active = active || this._handles[this._handles.length - 1].active;\r\n this._dragged = false;\r\n this._moving = false;\r\n this._initialized = true;\r\n\r\n this.update();\r\n }\r\n\r\n create() {\r\n this.createMaterial();\r\n this.createDOM();\r\n }\r\n\r\n createMaterial() {\r\n this._material = new three.MeshBasicMaterial({ side: three.DoubleSide });\r\n this._material.transparent = true;\r\n this._material.opacity = 0.2;\r\n }\r\n\r\n createDOM() {\r\n this._label = document.createElement('div');\r\n this._label.className = 'widgets-label';\r\n\r\n // measurements\r\n const measurementsContainer = document.createElement('div');\r\n // Mean / SD\r\n let meanSDContainer = document.createElement('div');\r\n meanSDContainer.className = 'mean-sd';\r\n measurementsContainer.appendChild(meanSDContainer);\r\n // Max / Min\r\n let maxMinContainer = document.createElement('div');\r\n maxMinContainer.className = 'max-min';\r\n measurementsContainer.appendChild(maxMinContainer);\r\n // Area\r\n let areaContainer = document.createElement('div');\r\n areaContainer.className = 'area';\r\n measurementsContainer.appendChild(areaContainer);\r\n\r\n this._label.appendChild(measurementsContainer);\r\n\r\n this._container.appendChild(this._label);\r\n\r\n this.updateDOMColor();\r\n }\r\n\r\n createLine() {\r\n const line = document.createElement('div');\r\n\r\n line.className = 'widgets-line';\r\n line.addEventListener('mouseenter', this.onHover);\r\n line.addEventListener('mouseleave', this.onHover);\r\n this._lines.push(line);\r\n this._container.appendChild(line);\r\n }\r\n\r\n hideDOM() {\r\n this._handles.forEach(elem => elem.hideDOM());\r\n\r\n this._lines.forEach(elem => (elem.style.display = 'none'));\r\n this._label.style.display = 'none';\r\n }\r\n\r\n showDOM() {\r\n this._handles.forEach(elem => elem.showDOM());\r\n\r\n this._lines.forEach(elem => (elem.style.display = ''));\r\n this._label.style.display = '';\r\n }\r\n\r\n update() {\r\n this.updateColor();\r\n\r\n // update handles\r\n this._handles.forEach(elem => elem.update());\r\n\r\n // mesh stuff\r\n this.updateMeshColor();\r\n this.updateMeshPosition();\r\n\r\n // DOM stuff\r\n this.updateDOMColor();\r\n this.updateDOMPosition();\r\n }\r\n\r\n updateMesh() {\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n }\r\n\r\n let points = [];\r\n\r\n this._handles.forEach(elem => points.push(elem.worldPosition));\r\n\r\n let center = CoreUtils.centerOfMass(points);\r\n // direction from first point to center\r\n let referenceDirection = new three.Vector3().subVectors(points[0], center).normalize();\r\n let direction = new three.Vector3().crossVectors(\r\n new three.Vector3().subVectors(points[0], center), // side 1\r\n new three.Vector3().subVectors(points[1], center) // side 2\r\n );\r\n let base = new three.Vector3().crossVectors(referenceDirection, direction).normalize();\r\n let orderedpoints = [];\r\n\r\n // other lines // if inter, return location + angle\r\n for (let j = 0; j < points.length; j++) {\r\n let point = new three.Vector3(points[j].x, points[j].y, points[j].z);\r\n point.direction = new three.Vector3().subVectors(points[j], center).normalize();\r\n\r\n let x = referenceDirection.dot(point.direction);\r\n let y = base.dot(point.direction);\r\n point.xy = { x, y };\r\n point.angle = Math.atan2(y, x) * (180 / Math.PI);\r\n\r\n orderedpoints.push(point);\r\n }\r\n\r\n // override to catch console.warn \"THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()\"\r\n this._shapeWarn = false;\r\n const oldWarn = console.warn;\r\n console.warn = function(...rest) {\r\n if (rest[0] === 'three.ShapeUtils: Unable to triangulate polygon! in triangulate()') {\r\n this._shapeWarn = true;\r\n }\r\n return oldWarn.apply(console, rest);\r\n }.bind(this);\r\n\r\n // create the shape\r\n let shape = new three.Shape();\r\n // move to first point!\r\n shape.moveTo(orderedpoints[0].xy.x, orderedpoints[0].xy.y);\r\n\r\n // loop through all points!\r\n for (let l = 1; l < orderedpoints.length; l++) {\r\n // project each on plane!\r\n shape.lineTo(orderedpoints[l].xy.x, orderedpoints[l].xy.y);\r\n }\r\n\r\n // close the shape!\r\n shape.lineTo(orderedpoints[0].xy.x, orderedpoints[0].xy.y);\r\n\r\n this._geometry = new three.ShapeGeometry(shape);\r\n\r\n console.warn = oldWarn;\r\n\r\n this._geometry.vertices = orderedpoints;\r\n this._geometry.verticesNeedUpdate = true;\r\n this._geometry.elementsNeedUpdate = true;\r\n\r\n this.updateMeshColor();\r\n\r\n this._mesh = new three.Mesh(this._geometry, this._material);\r\n this._mesh.visible = true;\r\n this.add(this._mesh);\r\n }\r\n\r\n updateMeshColor() {\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n updateMeshPosition() {\r\n if (this._geometry) {\r\n this._geometry.verticesNeedUpdate = true;\r\n }\r\n }\r\n\r\n isPointOnLine(pointA, pointB, pointToCheck) {\r\n let c = new three.Vector3();\r\n c.crossVectors(pointA.clone().sub(pointToCheck), pointB.clone().sub(pointToCheck));\r\n return !c.length();\r\n }\r\n\r\n pushPopHandle() {\r\n let handle0 = this._handles[this._handles.length - 3];\r\n let handle1 = this._handles[this._handles.length - 2];\r\n let newhandle = this._handles[this._handles.length - 1];\r\n\r\n let isOnLine = this.isPointOnLine(\r\n handle0.worldPosition,\r\n handle1.worldPosition,\r\n newhandle.worldPosition\r\n );\r\n\r\n if (isOnLine || handle0.screenPosition.distanceTo(newhandle.screenPosition) < 25) {\r\n this.remove(handle1);\r\n handle1.free();\r\n\r\n this._handles[this._handles.length - 2] = newhandle;\r\n this._handles.pop();\r\n\r\n this._container.removeChild(this._lines.pop());\r\n }\r\n\r\n return isOnLine;\r\n }\r\n\r\n updateDOMColor() {\r\n if (this._handles.length >= 2) {\r\n this._lines.forEach(elem => (elem.style.backgroundColor = this._color));\r\n }\r\n this._label.style.borderColor = this._color;\r\n }\r\n\r\n updateDOMContent(clear) {\r\n const meanSDContainer = this._label.querySelector('.mean-sd');\r\n const maxMinContainer = this._label.querySelector('.max-min');\r\n const areaContainer = this._label.querySelector('.area');\r\n\r\n if (clear) {\r\n meanSDContainer.innerHTML = '';\r\n maxMinContainer.innerHTML = '';\r\n areaContainer.innerHTML = '';\r\n\r\n return;\r\n }\r\n\r\n const regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || [];\r\n\r\n this._area = CoreUtils.getGeometryArea(this._geometry); // this.getArea result is changed on dragging\r\n if (this._calibrationFactor) {\r\n this._area *= Math.pow(this._calibrationFactor, 2);\r\n } else if (regions && regions.length > 0 && this._stack.lps2IJK) {\r\n let same = true;\r\n let cRegion;\r\n let pRegion;\r\n\r\n this._handles.forEach(elem => {\r\n cRegion = this.getRegionByXY(\r\n regions,\r\n CoreUtils.worldToData(this._stack.lps2IJK, elem.worldPosition)\r\n );\r\n if (\r\n cRegion === null ||\r\n regions[cRegion].unitsX !== 'cm' ||\r\n (pRegion !== undefined && pRegion !== cRegion)\r\n ) {\r\n same = false;\r\n }\r\n pRegion = cRegion;\r\n });\r\n\r\n if (same) {\r\n this._area *= Math.pow(regions[cRegion].deltaX, 2);\r\n this._units = 'cm²';\r\n } else if (this._stack.frame[this._params.frameIndex].pixelSpacing) {\r\n this._area /= 100;\r\n this._units = 'cm²';\r\n } else {\r\n this._units = 'units';\r\n }\r\n } else if (this._units === 'cm²') {\r\n this._area /= 100;\r\n }\r\n\r\n let title =\r\n this._units === 'units' ? 'Calibration is required to display the area in cm². ' : '';\r\n\r\n if (this._shapeWarn) {\r\n title += 'Values may be incorrect due to triangulation error.';\r\n }\r\n if (title !== '' && !this._label.hasAttribute('title')) {\r\n this._label.setAttribute('title', title);\r\n this._label.style.color = this._colors.error;\r\n } else if (title === '' && this._label.hasAttribute('title')) {\r\n this._label.removeAttribute('title');\r\n this._label.style.color = this._colors.text;\r\n }\r\n\r\n const roi = CoreUtils.getRoI(this._mesh, this._camera, this._stack);\r\n\r\n if (roi !== null) {\r\n meanSDContainer.innerHTML = `Mean: ${roi.mean.toFixed(1)} / SD: ${roi.sd.toFixed(1)}`;\r\n maxMinContainer.innerHTML = `Max: ${roi.max.toFixed()} / Min: ${roi.min.toFixed()}`;\r\n } else {\r\n meanSDContainer.innerHTML = '';\r\n maxMinContainer.innerHTML = '';\r\n }\r\n areaContainer.innerHTML = `Area: ${this._area.toFixed(2)} ${this._units}`;\r\n }\r\n\r\n updateDOMPosition() {\r\n if (this._handles.length < 2) {\r\n return;\r\n }\r\n // update lines and get coordinates of lowest handle\r\n let labelPosition = null;\r\n\r\n this._lines.forEach((elem, ind) => {\r\n const lineData = this.getLineData(\r\n this._handles[ind].screenPosition,\r\n this._handles[ind + 1 === this._handles.length ? 0 : ind + 1].screenPosition\r\n );\r\n\r\n elem.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0)\r\n rotate(${lineData.transformAngle}rad)`;\r\n elem.style.width = lineData.length + 'px';\r\n\r\n if (labelPosition === null || labelPosition.y < this._handles[ind].screenPosition.y) {\r\n labelPosition = this._handles[ind].screenPosition.clone();\r\n }\r\n });\r\n\r\n if (!this._initialized) {\r\n return;\r\n }\r\n\r\n // update label\r\n labelPosition.y += 15 + this._label.offsetHeight / 2;\r\n labelPosition = this.adjustLabelTransform(this._label, labelPosition);\r\n\r\n this._label.style.transform = `translate3D(${labelPosition.x}px, ${labelPosition.y}px, 0)`;\r\n }\r\n\r\n free() {\r\n this.removeEventListeners();\r\n\r\n this._handles.forEach(h => {\r\n this.remove(h);\r\n h.free();\r\n });\r\n this._handles = [];\r\n\r\n this.remove(this._moveHandle);\r\n this._moveHandle.free();\r\n this._moveHandle = null;\r\n\r\n this._lines.forEach(elem => {\r\n elem.removeEventListener('mouseenter', this.onHover);\r\n elem.removeEventListener('mouseleave', this.onHover);\r\n this._container.removeChild(elem);\r\n });\r\n this._lines = [];\r\n this._container.removeChild(this._label);\r\n\r\n // mesh, geometry, material\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n }\r\n if (this._geometry) {\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n }\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n this._stack = null;\r\n\r\n super.free();\r\n }\r\n\r\n getMeasurements() {\r\n return {\r\n area: this._area,\r\n units: this._units,\r\n };\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh) {\r\n this._targetMesh = targetMesh;\r\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\r\n this._moveHandle.targetMesh = targetMesh;\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition) {\r\n this._handles.forEach(elem => elem._worldPosition.copy(worldPosition));\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n\r\n get calibrationFactor() {\r\n return this._calibrationFactor;\r\n }\r\n\r\n set calibrationFactor(calibrationFactor) {\r\n this._calibrationFactor = calibrationFactor;\r\n this._units = 'cm²';\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsFreehand };\r\nexport default widgetsFreehand();\r\n","import { widgetsBase } from './widgets.base';\r\nimport CoreIntersections from '../core/core.intersections';\r\n\r\n/**\r\n * @module widgets/handle\r\n */\r\nconst widgetsHandle = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'Handle';\r\n\r\n // incoming parameters (optional: worldPosition)\r\n if (params.hideHandleMesh === true) {\r\n this.visible = false;\r\n }\r\n\r\n // if no target mesh, use plane for FREE dragging.\r\n this._plane = {\r\n position: new three.Vector3(),\r\n direction: new three.Vector3(),\r\n };\r\n this._offset = new three.Vector3();\r\n this._raycaster = new three.Raycaster();\r\n\r\n this._active = false;\r\n this._hovered = false;\r\n this._tracking = false;\r\n\r\n this._mouse = new three.Vector2();\r\n\r\n this._initialized = false;\r\n\r\n // mesh stuff\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n this._meshHovered = false;\r\n\r\n // dom stuff\r\n this._dom = null;\r\n this._domHovered = false;\r\n\r\n this._screenPosition = this.worldToScreen(this._worldPosition);\r\n\r\n this.create();\r\n this.initOffsets();\r\n\r\n // event listeners\r\n this.onResize = this.onResize.bind(this);\r\n this.onMove = this.onMove.bind(this);\r\n this.onHover = this.onHover.bind(this);\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n window.addEventListener('resize', this.onResize);\r\n\r\n this._dom.addEventListener('mouseenter', this.onHover);\r\n this._dom.addEventListener('mouseleave', this.onHover);\r\n\r\n this._container.addEventListener('wheel', this.onMove);\r\n }\r\n\r\n removeEventListeners() {\r\n window.removeEventListener('resize', this.onResize);\r\n\r\n this._dom.removeEventListener('mouseenter', this.onHover);\r\n this._dom.removeEventListener('mouseleave', this.onHover);\r\n\r\n this._container.removeEventListener('wheel', this.onMove);\r\n }\r\n\r\n onResize() {\r\n this.initOffsets();\r\n }\r\n\r\n onHover(evt) {\r\n if (evt) {\r\n this.hoverDom(evt);\r\n }\r\n\r\n this.hoverMesh();\r\n\r\n this._hovered = this._meshHovered || this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n }\r\n\r\n hoverMesh() {\r\n // check raycast intersection, do we want to hover on mesh or just css?\r\n let intersectsHandle = this._raycaster.intersectObject(this._mesh);\r\n this._meshHovered = intersectsHandle.length > 0;\r\n }\r\n\r\n hoverDom(evt) {\r\n this._domHovered = evt.type === 'mouseenter';\r\n }\r\n\r\n onStart(evt) {\r\n const offsets = this.getMouseOffsets(evt, this._container);\r\n this._mouse.set(offsets.x, offsets.y);\r\n\r\n // update raycaster\r\n this._raycaster.setFromCamera(this._mouse, this._camera);\r\n this._raycaster.ray.position = this._raycaster.ray.origin;\r\n\r\n if (this._hovered) {\r\n this._active = true;\r\n this._controls.enabled = false;\r\n\r\n if (this._targetMesh) {\r\n let intersectsTarget = this._raycaster.intersectObject(this._targetMesh);\r\n if (intersectsTarget.length > 0) {\r\n this._offset.copy(intersectsTarget[0].point).sub(this._worldPosition);\r\n }\r\n } else {\r\n this._plane.position.copy(this._worldPosition);\r\n this._plane.direction.copy(this._camera.getWorldDirection());\r\n let intersection = CoreIntersections.rayPlane(this._raycaster.ray, this._plane);\r\n if (intersection !== null) {\r\n this._offset.copy(intersection).sub(this._plane.position);\r\n }\r\n }\r\n\r\n this.update();\r\n }\r\n }\r\n\r\n /**\r\n * @param {Object} evt - Browser event\r\n * @param {Boolean} forced - true to move inactive handles\r\n */\r\n onMove(evt, forced) {\r\n const offsets = this.getMouseOffsets(evt, this._container);\r\n this._mouse.set(offsets.x, offsets.y);\r\n\r\n // update raycaster\r\n // set ray.position to satisfy CoreIntersections::rayPlane API\r\n this._raycaster.setFromCamera(this._mouse, this._camera);\r\n this._raycaster.ray.position = this._raycaster.ray.origin;\r\n\r\n if (this._active || forced) {\r\n this._dragged = true;\r\n\r\n if (this._targetMesh !== null) {\r\n let intersectsTarget = this._raycaster.intersectObject(this._targetMesh);\r\n if (intersectsTarget.length > 0) {\r\n this._worldPosition.copy(intersectsTarget[0].point.sub(this._offset));\r\n }\r\n } else {\r\n if (this._plane.direction.length() === 0) {\r\n // free mode!this._targetMesh\r\n this._plane.position.copy(this._worldPosition);\r\n this._plane.direction.copy(this._camera.getWorldDirection());\r\n }\r\n\r\n let intersection = CoreIntersections.rayPlane(this._raycaster.ray, this._plane);\r\n if (intersection !== null) {\r\n this._worldPosition.copy(intersection.sub(this._offset));\r\n }\r\n }\r\n } else {\r\n this.onHover(null);\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n if (this._tracking === true) {\r\n // stay active and keep controls disabled\r\n return;\r\n }\r\n\r\n if (!this._dragged && this._active && this._initialized) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n }\r\n\r\n this._initialized = true;\r\n this._active = false;\r\n this._dragged = false;\r\n this._controls.enabled = true;\r\n\r\n this.update();\r\n }\r\n\r\n create() {\r\n this.createMesh();\r\n this.createDOM();\r\n }\r\n\r\n createMesh() {\r\n // geometry\r\n this._geometry = new three.SphereGeometry(1, 16, 16);\r\n\r\n // material\r\n this._material = new three.MeshBasicMaterial({\r\n wireframe: true,\r\n wireframeLinewidth: 2,\r\n });\r\n\r\n this.updateMeshColor();\r\n\r\n // mesh\r\n this._mesh = new three.Mesh(this._geometry, this._material);\r\n this._mesh.position.copy(this._worldPosition);\r\n this._mesh.visible = true;\r\n\r\n this.add(this._mesh);\r\n }\r\n\r\n createDOM() {\r\n this._dom = document.createElement('div');\r\n this._dom.className = 'widgets-handle';\r\n\r\n this._dom.style.transform = `translate3D(\r\n ${this._screenPosition.x}px,\r\n ${this._screenPosition.y - this._container.offsetHeight}px, 0)`;\r\n\r\n this.updateDOMColor();\r\n\r\n this._container.appendChild(this._dom);\r\n }\r\n\r\n update() {\r\n // general update\r\n this.updateColor();\r\n\r\n // update screen position of handle\r\n this._screenPosition = this.worldToScreen(this._worldPosition);\r\n\r\n // mesh stuff\r\n this.updateMeshColor();\r\n this.updateMeshPosition();\r\n\r\n // DOM stuff\r\n this.updateDOMColor();\r\n this.updateDOMPosition();\r\n }\r\n\r\n updateMeshColor() {\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n updateMeshPosition() {\r\n if (this._mesh) {\r\n this._mesh.position.copy(this._worldPosition);\r\n }\r\n }\r\n\r\n updateDOMPosition() {\r\n if (this._dom) {\r\n this._dom.style.transform = `translate3D(${this._screenPosition.x}px,\r\n ${this._screenPosition.y - this._container.offsetHeight}px, 0)`;\r\n }\r\n }\r\n\r\n updateDOMColor() {\r\n this._dom.style.borderColor = this._color;\r\n }\r\n\r\n showMesh() {\r\n if (this._params.hideMesh === true || this._params.hideHandleMesh === true) {\r\n return;\r\n }\r\n\r\n this.visible = true;\r\n }\r\n\r\n free() {\r\n // events\r\n this.removeEventListeners();\r\n // dom\r\n this._container.removeChild(this._dom);\r\n // mesh, geometry, material\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n super.free();\r\n }\r\n\r\n hideDOM() {\r\n this._dom.style.display = 'none';\r\n }\r\n\r\n showDOM() {\r\n this._dom.style.display = '';\r\n }\r\n\r\n get screenPosition() {\r\n return this._screenPosition;\r\n }\r\n\r\n set screenPosition(screenPosition) {\r\n this._screenPosition = screenPosition;\r\n }\r\n\r\n get active() {\r\n return this._active;\r\n }\r\n\r\n set active(active) {\r\n this._active = active;\r\n // this._tracking = this._active;\r\n this._controls.enabled = !this._active;\r\n\r\n this.update();\r\n }\r\n\r\n get tracking() {\r\n return this._tracking;\r\n }\r\n\r\n set tracking(tracking) {\r\n this._tracking = tracking;\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsHandle };\r\nexport default widgetsHandle();\r\n","import Css from './widgets.css';\r\n\r\nimport Angle, { widgetsAngle } from './widgets.angle';\r\nimport Annotation, { widgetsAnnotation } from './widgets.annotation';\r\nimport BiRuler, { widgetsBiruler } from './widgets.biruler';\r\nimport CrossRuler, { widgetsCrossRuler } from './widgets.crossRuler';\r\nimport Ellipse, { widgetsEllipse } from './widgets.ellipse';\r\nimport Freehand, { widgetsFreehand } from './widgets.freehand';\r\nimport Handle, { widgetsHandle } from './widgets.handle';\r\nimport PeakVelocity, { widgetsPeakVelocity } from './widgets.peakVelocity';\r\nimport PressureHalfTime, { widgetsPressureHalfTime } from './widgets.pressureHalfTime';\r\nimport Polygon, { widgetsPolygon } from './widgets.polygon';\r\nimport Rectangle, { widgetsRectangle } from './widgets.rectangle';\r\nimport Ruler, { widgetsRuler } from './widgets.ruler';\r\nimport VelocityTimeIntegral, { widgetsVelocityTimeIntegral } from './widgets.velocityTimeIntegral';\r\nimport VoxelProbe, { widgetsVoxelprobe } from './widgets.voxelProbe';\r\n\r\nexport {\r\n Css as WidgetsCss,\r\n Angle as AngleWidget,\r\n widgetsAngle as angleWidgetFactory,\r\n Annotation as AnnotationWidget,\r\n widgetsAnnotation as annotationWidgetFactory,\r\n BiRuler as BiRulerWidget,\r\n widgetsBiruler as birulerWidgetFactory,\r\n CrossRuler as CrossRulerWidget,\r\n widgetsCrossRuler as crossrulerWidgetFactory,\r\n Ellipse as EllipseWidget,\r\n widgetsEllipse as ellipseWidgetFactory,\r\n Freehand as FreehandWidget,\r\n widgetsFreehand as freehandWidgetFactory,\r\n Handle as HandleWidget,\r\n widgetsHandle as handleWidgetFactory,\r\n PeakVelocity as PeakVelocityWidget,\r\n widgetsPeakVelocity as peakVelocityWidgetFactory,\r\n PressureHalfTime as PressureHalfTimeWidget,\r\n widgetsPressureHalfTime as pressureHalfTimeWidgetFactory,\r\n Polygon as PolygonWidget,\r\n widgetsPolygon as polygonWidgetFactory,\r\n Rectangle as RectangleWidget,\r\n widgetsRectangle as rectangleWidgetFactory,\r\n Ruler as RulerWidget,\r\n widgetsRuler as rulerWidgetFactory,\r\n VelocityTimeIntegral as VelocityTimeIntegralWidget,\r\n widgetsVelocityTimeIntegral as velocityTimeIntegralWidgetFactory,\r\n VoxelProbe as VoxelProbeWidget,\r\n widgetsVoxelprobe as voxelprobeWidgetFactory,\r\n};\r\n","import { widgetsBase } from './widgets.base';\r\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\r\nimport CoreUtils from '../core/core.utils';\r\n\r\n/**\r\n * @module widgets/peakVelocity (Gradient)\r\n */\r\nconst widgetsPeakVelocity = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'PeakVelocity';\r\n\r\n // incoming parameters (required: lps2IJK, worldPosition)\r\n this._regions = params.ultrasoundRegions || []; // required\r\n if (this._regions.length < 1) {\r\n throw new Error('Ultrasound regions should not be empty!');\r\n }\r\n\r\n // outgoing values\r\n this._velocity = null;\r\n this._gradient = null;\r\n\r\n this._container.style.cursor = 'pointer';\r\n this._controls.enabled = false; // controls should be disabled for widgets with a single handle\r\n this._initialized = false; // set to true onEnd\r\n this._active = true;\r\n this._domHovered = false;\r\n this._initialRegion = this.getRegionByXY(\r\n this._regions,\r\n CoreUtils.worldToData(params.lps2IJK, params.worldPosition)\r\n );\r\n if (this._initialRegion === null) {\r\n throw new Error('Invalid initial UltraSound region!');\r\n }\r\n\r\n // dom stuff\r\n this._line = null;\r\n this._label = null;\r\n\r\n // handle (represent line)\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n this._handle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(this._handle);\r\n\r\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(this._moveHandle);\r\n this._moveHandle.hide();\r\n\r\n this.create();\r\n\r\n // event listeners\r\n this.onMove = this.onMove.bind(this);\r\n this.onHover = this.onHover.bind(this);\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n this._container.addEventListener('wheel', this.onMove);\r\n\r\n this._line.addEventListener('mouseenter', this.onHover);\r\n this._line.addEventListener('mouseleave', this.onHover);\r\n this._label.addEventListener('mouseenter', this.onHover);\r\n this._label.addEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n removeEventListeners() {\r\n this._container.removeEventListener('wheel', this.onMove);\r\n\r\n this._line.removeEventListener('mouseenter', this.onHover);\r\n this._line.removeEventListener('mouseleave', this.onHover);\r\n this._label.removeEventListener('mouseenter', this.onHover);\r\n this._label.removeEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n onHover(evt) {\r\n if (evt) {\r\n this.hoverDom(evt);\r\n }\r\n\r\n this._hovered = this._handle.hovered || this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n }\r\n\r\n hoverDom(evt) {\r\n this._domHovered = evt.type === 'mouseenter';\r\n }\r\n\r\n onStart(evt) {\r\n this._moveHandle.onMove(evt, true);\r\n this._handle.onStart(evt);\r\n\r\n this._active = this._handle.active || this._domHovered;\r\n\r\n if (this._domHovered) {\r\n this._controls.enabled = false;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n onMove(evt) {\r\n if (this._active) {\r\n const prevPosition = this._moveHandle.worldPosition.clone();\r\n\r\n this._moveHandle.onMove(evt, true);\r\n\r\n const shift = this._moveHandle.worldPosition.clone().sub(prevPosition);\r\n\r\n if (!this.isCorrectRegion(shift)) {\r\n this._moveHandle.worldPosition.copy(prevPosition);\r\n\r\n return;\r\n }\r\n\r\n if (!this._handle.active) {\r\n this._handle.worldPosition.add(shift);\r\n }\r\n this._dragged = true;\r\n } else {\r\n this.onHover(null);\r\n }\r\n\r\n this._handle.onMove(evt);\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n this._handle.onEnd();\r\n\r\n if (!this._dragged && this._active && this._initialized) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n this._handle.selected = this._selected;\r\n }\r\n\r\n this._initialized = true;\r\n this._active = false;\r\n this._dragged = false;\r\n\r\n this.update();\r\n }\r\n\r\n isCorrectRegion(shift) {\r\n const region = this.getRegionByXY(\r\n this._regions,\r\n CoreUtils.worldToData(this._params.lps2IJK, this._handle.worldPosition.clone().add(shift))\r\n );\r\n\r\n return (\r\n region !== null &&\r\n region === this._initialRegion &&\r\n this._regions[region].unitsY === 'cm/sec'\r\n );\r\n }\r\n\r\n create() {\r\n this.createDOM();\r\n }\r\n\r\n createDOM() {\r\n this._line = document.createElement('div');\r\n this._line.className = 'widgets-dashline';\r\n this._container.appendChild(this._line);\r\n\r\n this._label = document.createElement('div');\r\n this._label.className = 'widgets-label';\r\n\r\n // Measurements\r\n let measurementsContainer = document.createElement('div');\r\n // Peak Velocity\r\n let pvContainer = document.createElement('div');\r\n pvContainer.className = 'peakVelocity';\r\n measurementsContainer.appendChild(pvContainer);\r\n // Gradient\r\n let gradientContainer = document.createElement('div');\r\n gradientContainer.className = 'gradient';\r\n measurementsContainer.appendChild(gradientContainer);\r\n\r\n this._label.appendChild(measurementsContainer);\r\n this._container.appendChild(this._label);\r\n\r\n this.updateDOMColor();\r\n }\r\n\r\n update() {\r\n this.updateColor();\r\n\r\n this._handle.update();\r\n this._worldPosition.copy(this._handle.worldPosition);\r\n\r\n this.updateDOM();\r\n }\r\n\r\n updateDOM() {\r\n this.updateDOMColor();\r\n\r\n const point = CoreUtils.worldToData(this._params.lps2IJK, this._worldPosition);\r\n const region = this._regions[this.getRegionByXY(this._regions, point)];\r\n const usPosition = this.getPointInRegion(region, point);\r\n\r\n this._velocity = Math.abs(usPosition.y / 100);\r\n this._gradient = 4 * Math.pow(this._velocity, 2);\r\n\r\n // content\r\n this._label.querySelector('.peakVelocity').innerHTML = `${this._velocity.toFixed(2)} m/s`;\r\n this._label.querySelector('.gradient').innerHTML = `${this._gradient.toFixed(2)} mmhg`;\r\n\r\n // position\r\n const transform = this.adjustLabelTransform(this._label, this._handle.screenPosition, true);\r\n\r\n this._line.style.transform = `translate3D(${transform.x -\r\n (point.x - region.x0) * this._camera.zoom}px, ${transform.y}px, 0)`;\r\n this._line.style.width = (region.x1 - region.x0) * this._camera.zoom + 'px';\r\n this._label.style.transform = `translate3D(${transform.x + 10}px, ${transform.y + 10}px, 0)`;\r\n }\r\n\r\n updateDOMColor() {\r\n this._line.style.backgroundColor = this._color;\r\n this._label.style.borderColor = this._color;\r\n }\r\n\r\n hideDOM() {\r\n this._line.style.display = 'none';\r\n this._label.style.display = 'none';\r\n this._handle.hideDOM();\r\n }\r\n\r\n showDOM() {\r\n this._line.style.display = '';\r\n this._label.style.display = '';\r\n this._handle.showDOM();\r\n }\r\n\r\n free() {\r\n this.removeEventListeners();\r\n\r\n this.remove(this._handle);\r\n this._handle.free();\r\n this._handle = null;\r\n this.remove(this._moveHandle);\r\n this._moveHandle.free();\r\n this._moveHandle = null;\r\n\r\n this._container.removeChild(this._line);\r\n this._container.removeChild(this._label);\r\n\r\n super.free();\r\n }\r\n\r\n getMeasurements() {\r\n return {\r\n velocity: this._velocity,\r\n gradient: this._gradient,\r\n };\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh) {\r\n this._targetMesh = targetMesh;\r\n this._handle.targetMesh = targetMesh;\r\n this._moveHandle.targetMesh = targetMesh;\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition) {\r\n this._handle.worldPosition.copy(worldPosition);\r\n this._moveHandle.worldPosition.copy(worldPosition);\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n\r\n get active() {\r\n return this._active;\r\n }\r\n\r\n set active(active) {\r\n this._active = active;\r\n this._controls.enabled = !this._active;\r\n\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsPeakVelocity };\r\nexport default widgetsPeakVelocity();\r\n","import { widgetsBase } from './widgets.base';\r\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\r\nimport CoreUtils from '../core/core.utils';\r\n\r\n/**\r\n * @module widgets/polygon\r\n */\r\nconst widgetsPolygon = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'Polygon';\r\n\r\n // incoming parameters (optional: frameIndex, worldPosition)\r\n this._stack = params.stack; // required\r\n this._calibrationFactor = params.calibrationFactor || null;\r\n\r\n // outgoing values\r\n this._area = null;\r\n this._units =\r\n !this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing\r\n ? 'units'\r\n : 'cm²';\r\n\r\n this._initialized = false; // set to true onDblClick if number of handles > 2\r\n this._newHandleRequired = true; // should handle be created onMove?\r\n this._moving = false;\r\n this._domHovered = false;\r\n\r\n // mesh stuff\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n\r\n // dom stuff\r\n this._lines = [];\r\n this._label = null;\r\n\r\n // add handles\r\n this._handles = [];\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n\r\n let handle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(handle);\r\n this._handles.push(handle);\r\n\r\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(this._moveHandle);\r\n this._moveHandle.hide();\r\n\r\n this.onDoubleClick = this.onDoubleClick.bind(this);\r\n this.onMove = this.onMove.bind(this);\r\n this.onHover = this.onHover.bind(this);\r\n\r\n this.create();\r\n\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n this._container.addEventListener('dblclick', this.onDoubleClick);\r\n this._container.addEventListener('wheel', this.onMove);\r\n\r\n this._label.addEventListener('mouseenter', this.onHover);\r\n this._label.addEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n removeEventListeners() {\r\n this._container.removeEventListener('dblclick', this.onDoubleClick);\r\n this._container.removeEventListener('wheel', this.onMove);\r\n\r\n this._label.removeEventListener('mouseenter', this.onHover);\r\n this._label.removeEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n onHover(evt) {\r\n if (evt) {\r\n this.hoverDom(evt);\r\n }\r\n\r\n this.hoverMesh();\r\n\r\n let hovered = false;\r\n\r\n this._handles.forEach(elem => (hovered = hovered || elem.hovered));\r\n\r\n this._hovered = hovered || this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n }\r\n\r\n hoverMesh() {\r\n // check raycast intersection, if we want to hover on mesh instead of just css\r\n }\r\n\r\n hoverDom(evt) {\r\n this._domHovered = evt.type === 'mouseenter';\r\n }\r\n\r\n onStart(evt) {\r\n let active = false;\r\n\r\n this._handles.forEach(elem => {\r\n elem.onStart(evt);\r\n active = active || elem.active;\r\n });\r\n\r\n if (!this._initialized) {\r\n return;\r\n }\r\n\r\n this._moveHandle.onMove(evt, true);\r\n this._active = active || this._domHovered;\r\n\r\n if (this._domHovered && this._initialized) {\r\n this._moving = true;\r\n this._controls.enabled = false;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n onMove(evt) {\r\n let hovered = false;\r\n\r\n if (this.active) {\r\n this._dragged = true;\r\n\r\n if (this._newHandleRequired && !this._initialized) {\r\n this._handles[this._handles.length - 1].hovered = false;\r\n this._handles[this._handles.length - 1].active = false;\r\n this._handles[this._handles.length - 1].tracking = false;\r\n\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n let handle = new WidgetsHandle(this._targetMesh, this._controls, this._params);\r\n\r\n handle.hovered = true;\r\n handle.active = true;\r\n handle.tracking = true;\r\n this.add(handle);\r\n this._handles.push(handle);\r\n\r\n this.createLine();\r\n this._newHandleRequired = false;\r\n } else {\r\n const prevPosition = this._moveHandle.worldPosition.clone();\r\n\r\n this._moveHandle.onMove(evt, true);\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n }\r\n this.updateDOMContent(true);\r\n if (this._moving) {\r\n this._handles.forEach(handle => {\r\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\r\n });\r\n }\r\n }\r\n }\r\n\r\n this._handles.forEach(elem => {\r\n elem.onMove(evt);\r\n hovered = hovered || elem.hovered;\r\n });\r\n\r\n this._hovered = hovered || this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n let numHandles = this._handles.length;\r\n let active = false;\r\n\r\n if (\r\n !this._initialized &&\r\n numHandles > 1 &&\r\n this._handles[numHandles - 2].screenPosition.distanceTo(\r\n this._handles[numHandles - 1].screenPosition\r\n ) < 10\r\n ) {\r\n return;\r\n }\r\n\r\n this._handles.forEach(elem => {\r\n elem.onEnd();\r\n active = active || elem.active;\r\n });\r\n\r\n if (!this._initialized) {\r\n this._newHandleRequired = true;\r\n\r\n return;\r\n }\r\n\r\n if (this._dragged) {\r\n this.updateMesh();\r\n this.updateDOMContent();\r\n }\r\n\r\n if (!this._dragged && this._active) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n this._handles.forEach(elem => (elem.selected = this._selected));\r\n }\r\n this._active = active || this._handles[numHandles - 1].active;\r\n this._dragged = false;\r\n this._moving = false;\r\n\r\n this.update();\r\n }\r\n\r\n onDoubleClick() {\r\n let numHandles = this._handles.length;\r\n\r\n if (\r\n numHandles < 3 ||\r\n this._initialized ||\r\n (numHandles > 1 &&\r\n this._handles[numHandles - 2].screenPosition.distanceTo(\r\n this._handles[numHandles - 1].screenPosition\r\n ) < 10)\r\n ) {\r\n return;\r\n }\r\n\r\n this._handles[numHandles - 1].tracking = false;\r\n this._handles.forEach(elem => elem.onEnd());\r\n\r\n this._active = false;\r\n this._dragged = false;\r\n this._moving = false;\r\n this._initialized = true;\r\n\r\n this.updateMesh();\r\n this.updateDOMContent();\r\n this.update();\r\n }\r\n\r\n create() {\r\n this.createMaterial();\r\n this.createDOM();\r\n }\r\n\r\n createMaterial() {\r\n this._material = new three.MeshBasicMaterial({ side: THREE.DoubleSide });\r\n this._material.transparent = true;\r\n this._material.opacity = 0.2;\r\n }\r\n\r\n createDOM() {\r\n this.createLine();\r\n\r\n this._label = document.createElement('div');\r\n this._label.className = 'widgets-label';\r\n\r\n // measurements\r\n const measurementsContainer = document.createElement('div');\r\n // Mean / SD\r\n let meanSDContainer = document.createElement('div');\r\n meanSDContainer.className = 'mean-sd';\r\n measurementsContainer.appendChild(meanSDContainer);\r\n // Max / Min\r\n let maxMinContainer = document.createElement('div');\r\n maxMinContainer.className = 'max-min';\r\n measurementsContainer.appendChild(maxMinContainer);\r\n // Area\r\n let areaContainer = document.createElement('div');\r\n areaContainer.className = 'area';\r\n measurementsContainer.appendChild(areaContainer);\r\n\r\n this._label.appendChild(measurementsContainer);\r\n\r\n this._container.appendChild(this._label);\r\n\r\n this.updateDOMColor();\r\n }\r\n\r\n createLine() {\r\n const line = document.createElement('div');\r\n\r\n line.className = 'widgets-line';\r\n line.addEventListener('mouseenter', this.onHover);\r\n line.addEventListener('mouseleave', this.onHover);\r\n this._lines.push(line);\r\n this._container.appendChild(line);\r\n }\r\n\r\n hideDOM() {\r\n this._handles.forEach(elem => elem.hideDOM());\r\n\r\n this._lines.forEach(elem => (elem.style.display = 'none'));\r\n this._label.style.display = 'none';\r\n }\r\n\r\n showDOM() {\r\n this._handles.forEach(elem => elem.showDOM());\r\n\r\n this._lines.forEach(elem => (elem.style.display = ''));\r\n this._label.style.display = '';\r\n }\r\n\r\n update() {\r\n this.updateColor();\r\n\r\n // update handles\r\n this._handles.forEach(elem => elem.update());\r\n\r\n // mesh stuff\r\n this.updateMeshColor();\r\n this.updateMeshPosition();\r\n\r\n // DOM stuff\r\n this.updateDOMColor();\r\n this.updateDOMPosition();\r\n }\r\n\r\n updateMesh() {\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n }\r\n\r\n let points = [];\r\n\r\n this._handles.forEach(elem => points.push(elem.worldPosition));\r\n\r\n let center = CoreUtils.centerOfMass(points);\r\n // direction from first point to center\r\n let referenceDirection = new three.Vector3().subVectors(points[0], center).normalize();\r\n let direction = new three.Vector3().crossVectors(\r\n new three.Vector3().subVectors(points[0], center), // side 1\r\n new three.Vector3().subVectors(points[1], center) // side 2\r\n );\r\n let base = new three.Vector3().crossVectors(referenceDirection, direction).normalize();\r\n let orderedpoints = [];\r\n\r\n // other lines // if inter, return location + angle\r\n for (let j = 0; j < points.length; j++) {\r\n let point = new three.Vector3(points[j].x, points[j].y, points[j].z);\r\n\r\n point.direction = new three.Vector3().subVectors(points[j], center).normalize();\r\n\r\n let x = referenceDirection.dot(point.direction);\r\n let y = base.dot(point.direction);\r\n\r\n point.xy = { x, y };\r\n point.angle = Math.atan2(y, x) * (180 / Math.PI);\r\n\r\n orderedpoints.push(point);\r\n }\r\n\r\n // override to catch console.warn \"THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()\"\r\n this._shapeWarn = false;\r\n const oldWarn = console.warn;\r\n console.warn = function(...rest) {\r\n if (rest[0] === 'THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()') {\r\n this._shapeWarn = true;\r\n }\r\n return oldWarn.apply(console, rest);\r\n }.bind(this);\r\n\r\n // create the shape\r\n let shape = new three.Shape();\r\n // move to first point!\r\n shape.moveTo(orderedpoints[0].xy.x, orderedpoints[0].xy.y);\r\n\r\n // loop through all points!\r\n for (let l = 1; l < orderedpoints.length; l++) {\r\n // project each on plane!\r\n shape.lineTo(orderedpoints[l].xy.x, orderedpoints[l].xy.y);\r\n }\r\n\r\n // close the shape!\r\n shape.lineTo(orderedpoints[0].xy.x, orderedpoints[0].xy.y);\r\n\r\n this._geometry = new three.ShapeGeometry(shape);\r\n\r\n console.warn = oldWarn;\r\n\r\n this._geometry.vertices = orderedpoints;\r\n this._geometry.verticesNeedUpdate = true;\r\n this._geometry.elementsNeedUpdate = true;\r\n\r\n this.updateMeshColor();\r\n\r\n this._mesh = new three.Mesh(this._geometry, this._material);\r\n this._mesh.visible = true;\r\n this.add(this._mesh);\r\n }\r\n\r\n updateMeshColor() {\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n updateMeshPosition() {\r\n if (this._geometry) {\r\n this._geometry.verticesNeedUpdate = true;\r\n }\r\n }\r\n\r\n updateDOMColor() {\r\n this._lines.forEach(elem => (elem.style.backgroundColor = this._color));\r\n this._label.style.borderColor = this._color;\r\n }\r\n\r\n updateDOMContent(clear) {\r\n const meanSDContainer = this._label.querySelector('.mean-sd');\r\n const maxMinContainer = this._label.querySelector('.max-min');\r\n const areaContainer = this._label.querySelector('.area');\r\n\r\n if (clear) {\r\n meanSDContainer.innerHTML = '';\r\n maxMinContainer.innerHTML = '';\r\n areaContainer.innerHTML = '';\r\n\r\n return;\r\n }\r\n\r\n const regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || [];\r\n\r\n this._area = CoreUtils.getGeometryArea(this._geometry); // this.getArea result is changed on dragging\r\n if (this._calibrationFactor) {\r\n this._area *= Math.pow(this._calibrationFactor, 2);\r\n } else if (regions && regions.length > 0 && this._stack.lps2IJK) {\r\n let same = true;\r\n let cRegion;\r\n let pRegion;\r\n\r\n this._handles.forEach(elem => {\r\n cRegion = this.getRegionByXY(\r\n regions,\r\n CoreUtils.worldToData(this._stack.lps2IJK, elem.worldPosition)\r\n );\r\n if (\r\n cRegion === null ||\r\n regions[cRegion].unitsX !== 'cm' ||\r\n (pRegion !== undefined && pRegion !== cRegion)\r\n ) {\r\n same = false;\r\n }\r\n pRegion = cRegion;\r\n });\r\n\r\n if (same) {\r\n this._area *= Math.pow(regions[cRegion].deltaX, 2);\r\n this._units = 'cm²';\r\n } else if (this._stack.frame[this._params.frameIndex].pixelSpacing) {\r\n this._area /= 100;\r\n this._units = 'cm²';\r\n } else {\r\n this._units = 'units';\r\n }\r\n } else if (this._units === 'cm²') {\r\n this._area /= 100;\r\n }\r\n\r\n let title =\r\n this._units === 'units' ? 'Calibration is required to display the area in cm². ' : '';\r\n\r\n if (this._shapeWarn) {\r\n title += 'Values may be incorrect due to triangulation error.';\r\n }\r\n if (title !== '' && !this._label.hasAttribute('title')) {\r\n this._label.setAttribute('title', title);\r\n this._label.style.color = this._colors.error;\r\n } else if (title === '' && this._label.hasAttribute('title')) {\r\n this._label.removeAttribute('title');\r\n this._label.style.color = this._colors.text;\r\n }\r\n\r\n const roi = CoreUtils.getRoI(this._mesh, this._camera, this._stack);\r\n\r\n if (roi !== null) {\r\n meanSDContainer.innerHTML = `Mean: ${roi.mean.toFixed(1)} / SD: ${roi.sd.toFixed(1)}`;\r\n maxMinContainer.innerHTML = `Max: ${roi.max.toFixed()} / Min: ${roi.min.toFixed()}`;\r\n } else {\r\n meanSDContainer.innerHTML = '';\r\n maxMinContainer.innerHTML = '';\r\n }\r\n areaContainer.innerHTML = `Area: ${this._area.toFixed(2)} ${this._units}`;\r\n }\r\n\r\n updateDOMPosition() {\r\n // update lines and get coordinates of lowest handle\r\n let labelPosition = null;\r\n\r\n this._lines.forEach((elem, ind) => {\r\n const lineData = this.getLineData(\r\n this._handles[ind].screenPosition,\r\n this._handles[ind + 1 === this._handles.length ? 0 : ind + 1].screenPosition\r\n );\r\n\r\n elem.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0)\r\n rotate(${lineData.transformAngle}rad)`;\r\n elem.style.width = lineData.length + 'px';\r\n\r\n if (labelPosition === null || labelPosition.y < this._handles[ind].screenPosition.y) {\r\n labelPosition = this._handles[ind].screenPosition.clone();\r\n }\r\n });\r\n\r\n if (!this._initialized) {\r\n return;\r\n }\r\n\r\n // update label\r\n labelPosition.y += 15 + this._label.offsetHeight / 2;\r\n labelPosition = this.adjustLabelTransform(this._label, labelPosition);\r\n\r\n this._label.style.transform = `translate3D(${labelPosition.x}px, ${labelPosition.y}px, 0)`;\r\n }\r\n\r\n free() {\r\n this.removeEventListeners();\r\n\r\n this._handles.forEach(h => {\r\n this.remove(h);\r\n h.free();\r\n });\r\n this._handles = [];\r\n\r\n this.remove(this._moveHandle);\r\n this._moveHandle.free();\r\n this._moveHandle = null;\r\n\r\n this._lines.forEach(elem => {\r\n elem.removeEventListener('mouseenter', this.onHover);\r\n elem.removeEventListener('mouseleave', this.onHover);\r\n this._container.removeChild(elem);\r\n });\r\n this._lines = [];\r\n this._container.removeChild(this._label);\r\n\r\n // mesh, geometry, material\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n }\r\n if (this._geometry) {\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n }\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n this._stack = null;\r\n\r\n super.free();\r\n }\r\n\r\n getMeasurements() {\r\n return {\r\n area: this._area,\r\n units: this._units,\r\n };\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh) {\r\n this._targetMesh = targetMesh;\r\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\r\n this._moveHandle.targetMesh = targetMesh;\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition) {\r\n this._handles.forEach(elem => elem.worldPosition.copy(worldPosition));\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n\r\n get calibrationFactor() {\r\n return this._calibrationFactor;\r\n }\r\n\r\n set calibrationFactor(calibrationFactor) {\r\n this._calibrationFactor = calibrationFactor;\r\n this._units = 'cm²';\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsPolygon };\r\nexport default widgetsPolygon();\r\n","import { widgetsBase } from './widgets.base';\r\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\r\nimport CoreUtils from '../core/core.utils';\r\n\r\n/**\r\n * @module widgets/pressureHalfTime\r\n */\r\nconst widgetsPressureHalfTime = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'PressureHalfTime';\r\n\r\n // incoming parameters (required: lps2IJK, worldPosition)\r\n this._regions = params.ultrasoundRegions || []; // required\r\n if (this._regions.length < 1) {\r\n throw new Error('Ultrasound regions should not be empty!');\r\n }\r\n\r\n // outgoing values\r\n this._vMax = null; // Maximum Velocity (Vmax)\r\n this._gMax = null; // Maximum Gradient (Gmax)\r\n this._pht = null; // Pressure Half Time (PHT)\r\n this._mva = null; // Mitral Valve Area (MVA)\r\n this._dt = null; // Deceleration Time (DT)\r\n this._ds = null; // Deceleration Slope (DS)\r\n\r\n this._domHovered = false;\r\n this._initialRegion = this.getRegionByXY(\r\n this._regions,\r\n CoreUtils.worldToData(params.lps2IJK, params.worldPosition)\r\n );\r\n if (this._initialRegion === null) {\r\n throw new Error('Invalid initial UltraSound region!');\r\n }\r\n\r\n // mesh stuff\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n\r\n // dom stuff\r\n this._line = null;\r\n this._label = null;\r\n\r\n // add handles\r\n this._handles = [];\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n\r\n let handle;\r\n for (let i = 0; i < 2; i++) {\r\n handle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(handle);\r\n this._handles.push(handle);\r\n }\r\n this._handles[1].active = true;\r\n this._handles[1].tracking = true;\r\n\r\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(this._moveHandle);\r\n this._handles.push(this._moveHandle);\r\n this._moveHandle.hide();\r\n\r\n this.create();\r\n\r\n this.onMove = this.onMove.bind(this);\r\n this.onHover = this.onHover.bind(this);\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n this._container.addEventListener('wheel', this.onMove);\r\n\r\n this._line.addEventListener('mouseenter', this.onHover);\r\n this._line.addEventListener('mouseleave', this.onHover);\r\n this._label.addEventListener('mouseenter', this.onHover);\r\n this._label.addEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n removeEventListeners() {\r\n this._container.removeEventListener('wheel', this.onMove);\r\n\r\n this._line.removeEventListener('mouseenter', this.onHover);\r\n this._line.removeEventListener('mouseleave', this.onHover);\r\n this._label.removeEventListener('mouseenter', this.onHover);\r\n this._label.removeEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n onHover(evt) {\r\n if (evt) {\r\n this.hoverDom(evt);\r\n }\r\n\r\n this.hoverMesh();\r\n\r\n this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n }\r\n\r\n hoverMesh() {\r\n // check raycast intersection, do we want to hover on mesh or just css?\r\n }\r\n\r\n hoverDom(evt) {\r\n this._domHovered = evt.type === 'mouseenter';\r\n }\r\n\r\n onStart(evt) {\r\n this._moveHandle.onMove(evt, true);\r\n\r\n this._handles[0].onStart(evt);\r\n this._handles[1].onStart(evt);\r\n\r\n this._active = this._handles[0].active || this._handles[1].active || this._domHovered;\r\n\r\n if (this._domHovered) {\r\n this._controls.enabled = false;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n onMove(evt) {\r\n if (this._active) {\r\n const prevPosition = this._moveHandle.worldPosition.clone();\r\n\r\n this._moveHandle.onMove(evt, true);\r\n\r\n const shift = this._moveHandle.worldPosition.clone().sub(prevPosition);\r\n\r\n if (!this.isCorrectRegion(shift)) {\r\n this._moveHandle.worldPosition.copy(prevPosition);\r\n\r\n return;\r\n }\r\n\r\n if (!this._handles[0].active && !this._handles[1].active) {\r\n this._handles.slice(0, -1).forEach(handle => {\r\n handle.worldPosition.add(shift);\r\n });\r\n }\r\n this._dragged = true;\r\n } else {\r\n this.onHover(null);\r\n }\r\n\r\n this._handles[0].onMove(evt);\r\n this._handles[1].onMove(evt);\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n this._handles[0].onEnd(); // First Handle\r\n\r\n if (\r\n this._handles[1].tracking &&\r\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10\r\n ) {\r\n return;\r\n }\r\n\r\n if (!this._dragged && this._active && !this._handles[1].tracking) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n this._handles[0].selected = this._selected;\r\n }\r\n\r\n // Second Handle\r\n if (this._dragged || !this._handles[1].tracking) {\r\n this._handles[1].tracking = false;\r\n this._handles[1].onEnd();\r\n } else {\r\n this._handles[1].tracking = false;\r\n }\r\n this._handles[1].selected = this._selected;\r\n\r\n this._active = this._handles[0].active || this._handles[1].active;\r\n this._dragged = false;\r\n\r\n this.update();\r\n }\r\n\r\n isCorrectRegion(shift) {\r\n const inActive = !(this._handles[0].active || this._handles[1].active);\r\n let isCorrect = true;\r\n\r\n if (this._handles[0].active || inActive) {\r\n isCorrect = isCorrect && this.checkHandle(0, shift);\r\n }\r\n if (this._handles[1].active || inActive) {\r\n isCorrect = isCorrect && this.checkHandle(1, shift);\r\n }\r\n\r\n return isCorrect;\r\n }\r\n\r\n checkHandle(index, shift) {\r\n const region = this.getRegionByXY(\r\n this._regions,\r\n CoreUtils.worldToData(\r\n this._params.lps2IJK,\r\n this._handles[index].worldPosition.clone().add(shift)\r\n )\r\n );\r\n\r\n return (\r\n region !== null &&\r\n region === this._initialRegion &&\r\n this._regions[region].unitsY === 'cm/sec'\r\n );\r\n }\r\n\r\n create() {\r\n this.createMesh();\r\n this.createDOM();\r\n }\r\n\r\n createMesh() {\r\n // geometry\r\n this._geometry = new three.Geometry();\r\n this._geometry.vertices = [this._handles[0].worldPosition, this._handles[1].worldPosition];\r\n\r\n // material\r\n this._material = new three.LineBasicMaterial();\r\n\r\n this.updateMeshColor();\r\n\r\n // mesh\r\n this._mesh = new three.Line(this._geometry, this._material);\r\n this._mesh.visible = true;\r\n\r\n this.add(this._mesh);\r\n }\r\n\r\n createDOM() {\r\n this._line = document.createElement('div');\r\n this._line.className = 'widgets-line';\r\n this._container.appendChild(this._line);\r\n\r\n this._label = document.createElement('div');\r\n this._label.className = 'widgets-label';\r\n\r\n const measurementsContainer = document.createElement('div');\r\n\r\n ['vmax', 'gmax', 'pht', 'mva', 'dt', 'ds'].forEach(name => {\r\n const div = document.createElement('div');\r\n\r\n div.className = name;\r\n measurementsContainer.appendChild(div);\r\n });\r\n this._label.appendChild(measurementsContainer);\r\n\r\n this._container.appendChild(this._label);\r\n\r\n this.updateDOMColor();\r\n }\r\n\r\n hideDOM() {\r\n this._line.style.display = 'none';\r\n this._label.style.display = 'none';\r\n this._handles.forEach(elem => elem.hideDOM());\r\n }\r\n\r\n showDOM() {\r\n this._line.style.display = '';\r\n this._label.style.display = '';\r\n this._handles[0].showDOM();\r\n this._handles[1].showDOM();\r\n }\r\n\r\n update() {\r\n this.updateColor();\r\n\r\n this._handles[0].update();\r\n this._handles[1].update();\r\n\r\n this.updateValues();\r\n\r\n this.updateMeshColor();\r\n this.updateMeshPosition();\r\n\r\n this.updateDOM();\r\n }\r\n\r\n updateValues() {\r\n const usPosition0 = this.getUsPoint(\r\n this._regions,\r\n CoreUtils.worldToData(this._params.lps2IJK, this._handles[0].worldPosition)\r\n );\r\n const usPosition1 = this.getUsPoint(\r\n this._regions,\r\n CoreUtils.worldToData(this._params.lps2IJK, this._handles[1].worldPosition)\r\n );\r\n const velocity0 = Math.abs(usPosition0.y / 100);\r\n const velocity1 = Math.abs(usPosition1.y / 100);\r\n const time0 = Math.abs(usPosition0.x);\r\n const time1 = Math.abs(usPosition1.x);\r\n const vMaxTime = this._vMax === velocity0 ? time0 : time1;\r\n\r\n this._vMax = Math.max(velocity0, velocity1);\r\n this._gMax = 4 * Math.pow(this._vMax, 2);\r\n\r\n const phtVelocity = this._vMax / Math.sqrt(2);\r\n const phtKoeff = (velocity0 - phtVelocity) / (velocity1 - phtVelocity);\r\n const dtKoeff = velocity0 / velocity1;\r\n\r\n this._pht =\r\n phtKoeff === 1\r\n ? Number.POSITIVE_INFINITY\r\n : Math.abs(vMaxTime - (time0 - phtKoeff * time1) / (1 - phtKoeff)) * 1000;\r\n this._mva = 220 / this._pht;\r\n this._dt =\r\n dtKoeff === 1\r\n ? Number.POSITIVE_INFINITY\r\n : Math.abs(vMaxTime - (time0 - dtKoeff * time1) / (1 - dtKoeff)) * 1000;\r\n this._ds = this._dt === 0 ? Number.POSITIVE_INFINITY : (this._vMax / this._dt) * 1000;\r\n }\r\n\r\n updateMeshColor() {\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n updateMeshPosition() {\r\n if (this._geometry) {\r\n this._geometry.verticesNeedUpdate = true;\r\n }\r\n }\r\n\r\n updateDOM() {\r\n this.updateDOMColor();\r\n\r\n // update line\r\n const lineData = this.getLineData(\r\n this._handles[0].screenPosition,\r\n this._handles[1].screenPosition\r\n );\r\n\r\n this._line.style.transform = `translate3D(${lineData.transformX}px, ${\r\n lineData.transformY\r\n }px, 0)\r\n rotate(${lineData.transformAngle}rad)`;\r\n this._line.style.width = lineData.length + 'px';\r\n\r\n // update label\r\n this._label.querySelector('.vmax').innerHTML = `Vmax: ${this._vMax.toFixed(2)} m/s`;\r\n this._label.querySelector('.gmax').innerHTML = `Gmax: ${this._gMax.toFixed(2)} mmhg`;\r\n this._label.querySelector('.pht').innerHTML = `PHT: ${this._pht.toFixed(1)} ms`;\r\n this._label.querySelector('.mva').innerHTML = `MVA: ${this._mva.toFixed(2)} cm²`;\r\n this._label.querySelector('.dt').innerHTML = `DT: ${this._dt.toFixed(1)} ms`;\r\n this._label.querySelector('.ds').innerHTML = `DS: ${this._ds.toFixed(2)} m/s²`;\r\n\r\n let angle = Math.abs(lineData.transformAngle);\r\n\r\n if (angle > Math.PI / 2) {\r\n angle = Math.PI - angle;\r\n }\r\n\r\n const labelPadding =\r\n Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth\r\n ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding\r\n : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle) + 15;\r\n const paddingVector = lineData.line.normalize().multiplyScalar(labelPadding);\r\n const paddingPoint =\r\n lineData.length > labelPadding * 2\r\n ? this._handles[1].screenPosition.clone().sub(paddingVector)\r\n : this._handles[1].screenPosition.clone().add(paddingVector);\r\n const transform = this.adjustLabelTransform(this._label, paddingPoint);\r\n\r\n this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`;\r\n }\r\n\r\n updateDOMColor() {\r\n this._line.style.backgroundColor = this._color;\r\n this._label.style.borderColor = this._color;\r\n }\r\n\r\n free() {\r\n this.removeEventListeners();\r\n\r\n this._handles.forEach(h => {\r\n this.remove(h);\r\n h.free();\r\n });\r\n this._handles = [];\r\n\r\n this._container.removeChild(this._line);\r\n this._container.removeChild(this._label);\r\n\r\n // mesh, geometry, material\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n super.free();\r\n }\r\n\r\n getMeasurements() {\r\n return {\r\n vMax: this._vMax,\r\n gMax: this._gMax,\r\n pht: this._pht,\r\n mva: this._mva,\r\n dt: this._dt,\r\n ds: this._ds,\r\n };\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh) {\r\n this._targetMesh = targetMesh;\r\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition) {\r\n this._handles[0].worldPosition.copy(worldPosition);\r\n this._handles[1].worldPosition.copy(worldPosition);\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsPressureHalfTime };\r\nexport default widgetsPressureHalfTime();\r\n","import { widgetsBase } from './widgets.base';\r\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\r\nimport CoreUtils from '../core/core.utils';\r\n\r\n/**\r\n * @module widgets/rectangle\r\n */\r\nconst widgetsRectangle = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'Rectangle';\r\n\r\n // incoming parameters (optional: frameIndex, worldPosition)\r\n this._stack = params.stack; // required\r\n this._calibrationFactor = params.calibrationFactor || null;\r\n\r\n // outgoing values\r\n this._area = null;\r\n this._units =\r\n !this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing\r\n ? 'units'\r\n : 'cm²';\r\n\r\n this._moving = false;\r\n this._domHovered = false;\r\n\r\n // mesh stuff\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n\r\n // dom stuff\r\n this._rectangle = null;\r\n this._label = null;\r\n\r\n // add handles\r\n this._handles = [];\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n\r\n let handle;\r\n for (let i = 0; i < 2; i++) {\r\n handle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(handle);\r\n this._handles.push(handle);\r\n }\r\n this._handles[1].active = true;\r\n this._handles[1].tracking = true;\r\n\r\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(this._moveHandle);\r\n this._handles.push(this._moveHandle);\r\n this._moveHandle.hide();\r\n\r\n this.create();\r\n\r\n this.onMove = this.onMove.bind(this);\r\n this.onHover = this.onHover.bind(this);\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n this._container.addEventListener('wheel', this.onMove);\r\n\r\n this._rectangle.addEventListener('mouseenter', this.onHover);\r\n this._rectangle.addEventListener('mouseleave', this.onHover);\r\n this._label.addEventListener('mouseenter', this.onHover);\r\n this._label.addEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n removeEventListeners() {\r\n this._container.removeEventListener('wheel', this.onMove);\r\n\r\n this._rectangle.removeEventListener('mouseenter', this.onHover);\r\n this._rectangle.removeEventListener('mouseleave', this.onHover);\r\n this._label.removeEventListener('mouseenter', this.onHover);\r\n this._label.removeEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n onHover(evt) {\r\n if (evt) {\r\n this.hoverDom(evt);\r\n }\r\n\r\n this.hoverMesh();\r\n\r\n this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n }\r\n\r\n hoverMesh() {\r\n // check raycast intersection, if we want to hover on mesh instead of just css\r\n }\r\n\r\n hoverDom(evt) {\r\n this._domHovered = evt.type === 'mouseenter';\r\n }\r\n\r\n onStart(evt) {\r\n this._moveHandle.onMove(evt, true);\r\n\r\n this._handles[0].onStart(evt);\r\n this._handles[1].onStart(evt);\r\n\r\n this._active = this._handles[0].active || this._handles[1].active || this._domHovered;\r\n\r\n if (this._domHovered && !this._handles[1].tracking) {\r\n this._moving = true;\r\n this._controls.enabled = false;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n onMove(evt) {\r\n if (this._active) {\r\n const prevPosition = this._moveHandle.worldPosition.clone();\r\n\r\n this._dragged = true;\r\n this._moveHandle.onMove(evt, true);\r\n\r\n if (this._moving) {\r\n this._handles.slice(0, -1).forEach(handle => {\r\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\r\n });\r\n }\r\n\r\n this.updateRoI(true);\r\n } else {\r\n this.onHover(null);\r\n }\r\n\r\n this._handles[0].onMove(evt);\r\n this._handles[1].onMove(evt);\r\n\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n this._handles[0].onEnd(); // First Handle\r\n\r\n if (\r\n this._handles[1].tracking &&\r\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10\r\n ) {\r\n return;\r\n }\r\n\r\n if (!this._dragged && this._active && !this._handles[1].tracking) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n this._handles[0].selected = this._selected;\r\n }\r\n\r\n // Second Handle\r\n if (this._dragged || !this._handles[1].tracking) {\r\n this._handles[1].tracking = false;\r\n this._handles[1].onEnd();\r\n } else {\r\n this._handles[1].tracking = false;\r\n }\r\n this._handles[1].selected = this._selected;\r\n\r\n this._active = this._handles[0].active || this._handles[1].active;\r\n this._dragged = false;\r\n this._moving = false;\r\n\r\n this.updateRoI(); // TODO: if (this._dragged || !this._initialized)\r\n this.update();\r\n }\r\n\r\n hideDOM() {\r\n this._handles.forEach(elem => elem.hideDOM());\r\n\r\n this._rectangle.style.display = 'none';\r\n this._label.style.display = 'none';\r\n }\r\n\r\n showDOM() {\r\n this._handles[0].showDOM();\r\n this._handles[1].showDOM();\r\n\r\n this._rectangle.style.display = '';\r\n this._label.style.display = '';\r\n }\r\n\r\n create() {\r\n this.createMesh();\r\n this.createDOM();\r\n }\r\n\r\n createMesh() {\r\n this._geometry = new three.PlaneGeometry(1, 1);\r\n\r\n this._material = new three.MeshBasicMaterial({ side: three.DoubleSide });\r\n this._material.transparent = true;\r\n this._material.opacity = 0.2;\r\n\r\n this.updateMeshColor();\r\n\r\n this._mesh = new three.Mesh(this._geometry, this._material);\r\n this._mesh.visible = true;\r\n\r\n this.add(this._mesh);\r\n }\r\n\r\n createDOM() {\r\n this._rectangle = document.createElement('div');\r\n this._rectangle.className = 'widgets-rectangle';\r\n this._container.appendChild(this._rectangle);\r\n\r\n this._label = document.createElement('div');\r\n this._label.className = 'widgets-label';\r\n\r\n // measurements\r\n const measurementsContainer = document.createElement('div');\r\n // Mean / SD\r\n let meanSDContainer = document.createElement('div');\r\n meanSDContainer.className = 'mean-sd';\r\n measurementsContainer.appendChild(meanSDContainer);\r\n // Max / Min\r\n let maxMinContainer = document.createElement('div');\r\n maxMinContainer.className = 'max-min';\r\n measurementsContainer.appendChild(maxMinContainer);\r\n // Area\r\n let areaContainer = document.createElement('div');\r\n areaContainer.className = 'area';\r\n measurementsContainer.appendChild(areaContainer);\r\n\r\n this._label.appendChild(measurementsContainer);\r\n\r\n this._container.appendChild(this._label);\r\n\r\n this.updateDOMColor();\r\n }\r\n\r\n update() {\r\n this.updateColor();\r\n\r\n this._handles[0].update();\r\n this._handles[1].update();\r\n\r\n this.updateMeshColor();\r\n this.updateMeshPosition();\r\n\r\n this.updateDOM();\r\n }\r\n\r\n updateMeshColor() {\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n updateMeshPosition() {\r\n if (this._geometry) {\r\n const progection = new three.Vector3()\r\n .subVectors(this._handles[1].worldPosition, this._handles[0].worldPosition)\r\n .projectOnVector(this._camera.up);\r\n\r\n this._geometry.vertices[0].copy(this._handles[0].worldPosition);\r\n this._geometry.vertices[1].copy(\r\n new three.Vector3().addVectors(this._handles[0].worldPosition, progection)\r\n );\r\n this._geometry.vertices[2].copy(\r\n new three.Vector3().subVectors(this._handles[1].worldPosition, progection)\r\n );\r\n this._geometry.vertices[3].copy(this._handles[1].worldPosition);\r\n\r\n this._geometry.verticesNeedUpdate = true;\r\n this._geometry.computeBoundingSphere();\r\n }\r\n }\r\n\r\n updateRoI(clear) {\r\n const meanSDContainer = this._label.querySelector('.mean-sd');\r\n const maxMinContainer = this._label.querySelector('.max-min');\r\n\r\n if (clear) {\r\n meanSDContainer.innerHTML = '';\r\n maxMinContainer.innerHTML = '';\r\n\r\n return;\r\n }\r\n\r\n const roi = CoreUtils.getRoI(this._mesh, this._camera, this._stack);\r\n\r\n if (roi !== null) {\r\n meanSDContainer.innerHTML = `Mean: ${roi.mean.toFixed(1)} / SD: ${roi.sd.toFixed(1)}`;\r\n maxMinContainer.innerHTML = `Max: ${roi.max.toFixed()} / Min: ${roi.min.toFixed()}`;\r\n } else {\r\n meanSDContainer.innerHTML = '';\r\n maxMinContainer.innerHTML = '';\r\n }\r\n }\r\n\r\n updateDOMColor() {\r\n this._rectangle.style.borderColor = this._color;\r\n this._label.style.borderColor = this._color;\r\n }\r\n\r\n updateDOM() {\r\n this.updateDOMColor();\r\n\r\n const regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || [];\r\n\r\n this._area = CoreUtils.getGeometryArea(this._geometry);\r\n if (this._calibrationFactor) {\r\n this._area *= Math.pow(this._calibrationFactor, 2);\r\n } else if (regions && regions.length > 0 && this._stack.lps2IJK) {\r\n const region0 = this.getRegionByXY(\r\n regions,\r\n CoreUtils.worldToData(this._stack.lps2IJK, this._handles[0].worldPosition)\r\n );\r\n const region1 = this.getRegionByXY(\r\n regions,\r\n CoreUtils.worldToData(this._stack.lps2IJK, this._handles[1].worldPosition)\r\n );\r\n\r\n if (\r\n region0 !== null &&\r\n region1 !== null &&\r\n region0 === region1 &&\r\n regions[region0].unitsX === 'cm' &&\r\n regions[region0].unitsY === 'cm'\r\n ) {\r\n this._area *= Math.pow(regions[region0].deltaX, 2);\r\n this._units = 'cm²';\r\n } else if (this._stack.frame[this._params.frameIndex].pixelSpacing) {\r\n this._area /= 100;\r\n this._units = 'cm²';\r\n } else {\r\n this._units = 'units';\r\n }\r\n } else if (this._units === 'cm²') {\r\n this._area /= 100;\r\n }\r\n\r\n if (this._units === 'units' && !this._label.hasAttribute('title')) {\r\n this._label.setAttribute('title', 'Calibration is required to display the area in cm²');\r\n this._label.style.color = this._colors.error;\r\n } else if (this._units !== 'units' && this._label.hasAttribute('title')) {\r\n this._label.removeAttribute('title');\r\n this._label.style.color = this._colors.text;\r\n }\r\n this._label.querySelector('.area').innerHTML = `Area: ${this._area.toFixed(2)} ${\r\n this._units\r\n }`;\r\n\r\n const rectData = this.getRectData(\r\n this._handles[0].screenPosition,\r\n this._handles[1].screenPosition\r\n );\r\n const labelTransform = this.adjustLabelTransform(\r\n this._label,\r\n this._handles[1].screenPosition\r\n .clone()\r\n .add(rectData.paddingVector.multiplyScalar(15 + this._label.offsetHeight / 2))\r\n );\r\n\r\n // update rectangle\r\n this._rectangle.style.transform = `translate3D(${rectData.transformX}px, ${\r\n rectData.transformY\r\n }px, 0)`;\r\n this._rectangle.style.width = rectData.width + 'px';\r\n this._rectangle.style.height = rectData.height + 'px';\r\n\r\n // update label\r\n this._label.style.transform =\r\n 'translate3D(' + labelTransform.x + 'px,' + labelTransform.y + 'px, 0)';\r\n }\r\n\r\n free() {\r\n this.removeEventListeners();\r\n\r\n this._handles.forEach(h => {\r\n this.remove(h);\r\n h.free();\r\n });\r\n this._handles = [];\r\n\r\n this._container.removeChild(this._rectangle);\r\n this._container.removeChild(this._label);\r\n\r\n // mesh, geometry, material\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n this._stack = null;\r\n\r\n super.free();\r\n }\r\n\r\n getMeasurements() {\r\n return {\r\n area: this._area,\r\n units: this._units,\r\n };\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh) {\r\n this._targetMesh = targetMesh;\r\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition) {\r\n this._handles[0].worldPosition.copy(worldPosition);\r\n this._handles[1].worldPosition.copy(worldPosition);\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n\r\n get calibrationFactor() {\r\n return this._calibrationFactor;\r\n }\r\n\r\n set calibrationFactor(calibrationFactor) {\r\n this._calibrationFactor = calibrationFactor;\r\n this._units = 'cm²';\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsRectangle };\r\nexport default widgetsRectangle();\r\n","import { widgetsBase } from './widgets.base';\r\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\r\n\r\n/**\r\n * @module widgets/ruler\r\n */\r\nconst widgetsRuler = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'Ruler';\r\n\r\n // incoming parameters (optional: lps2IJK, pixelSpacing, ultrasoundRegions, worldPosition)\r\n this._calibrationFactor = params.calibrationFactor || null;\r\n\r\n // outgoing values\r\n this._distance = null;\r\n this._units = !this._calibrationFactor && !params.pixelSpacing ? 'units' : 'mm';\r\n\r\n this._moving = false;\r\n this._domHovered = false;\r\n\r\n // mesh stuff\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n\r\n // dom stuff\r\n this._line = null;\r\n this._label = null;\r\n\r\n // add handles\r\n this._handles = [];\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n\r\n let handle;\r\n for (let i = 0; i < 2; i++) {\r\n handle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(handle);\r\n this._handles.push(handle);\r\n }\r\n this._handles[1].active = true;\r\n this._handles[1].tracking = true;\r\n\r\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(this._moveHandle);\r\n this._handles.push(this._moveHandle);\r\n this._moveHandle.hide();\r\n\r\n this.create();\r\n\r\n this.onMove = this.onMove.bind(this);\r\n this.onHover = this.onHover.bind(this);\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n this._container.addEventListener('wheel', this.onMove);\r\n\r\n this._line.addEventListener('mouseenter', this.onHover);\r\n this._line.addEventListener('mouseleave', this.onHover);\r\n this._label.addEventListener('mouseenter', this.onHover);\r\n this._label.addEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n removeEventListeners() {\r\n this._container.removeEventListener('wheel', this.onMove);\r\n\r\n this._line.removeEventListener('mouseenter', this.onHover);\r\n this._line.removeEventListener('mouseleave', this.onHover);\r\n this._label.removeEventListener('mouseenter', this.onHover);\r\n this._label.removeEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n onHover(evt) {\r\n if (evt) {\r\n this.hoverDom(evt);\r\n }\r\n\r\n this.hoverMesh();\r\n\r\n this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n }\r\n\r\n hoverMesh() {\r\n // check raycast intersection, do we want to hover on mesh or just css?\r\n }\r\n\r\n hoverDom(evt) {\r\n this._domHovered = evt.type === 'mouseenter';\r\n }\r\n\r\n onStart(evt) {\r\n this._moveHandle.onMove(evt, true);\r\n\r\n this._handles[0].onStart(evt);\r\n this._handles[1].onStart(evt);\r\n\r\n this._active = this._handles[0].active || this._handles[1].active || this._domHovered;\r\n\r\n if (this._domHovered && !this._handles[1].tracking) {\r\n this._moving = true;\r\n this._controls.enabled = false;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n onMove(evt) {\r\n if (this._active) {\r\n const prevPosition = this._moveHandle.worldPosition.clone();\r\n\r\n this._dragged = true;\r\n this._moveHandle.onMove(evt, true);\r\n\r\n if (this._moving) {\r\n this._handles.slice(0, -1).forEach(handle => {\r\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\r\n });\r\n }\r\n } else {\r\n this.onHover(null);\r\n }\r\n\r\n this._handles[0].onMove(evt);\r\n this._handles[1].onMove(evt);\r\n\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n this._handles[0].onEnd(); // First Handle\r\n\r\n if (\r\n this._handles[1].tracking &&\r\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10\r\n ) {\r\n return;\r\n }\r\n\r\n if (!this._dragged && this._active && !this._handles[1].tracking) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n this._handles[0].selected = this._selected;\r\n }\r\n\r\n // Second Handle\r\n if (this._dragged || !this._handles[1].tracking) {\r\n this._handles[1].tracking = false;\r\n this._handles[1].onEnd();\r\n } else {\r\n this._handles[1].tracking = false;\r\n }\r\n this._handles[1].selected = this._selected;\r\n\r\n this._active = this._handles[0].active || this._handles[1].active;\r\n this._dragged = false;\r\n this._moving = false;\r\n\r\n this.update();\r\n }\r\n\r\n create() {\r\n this.createMesh();\r\n this.createDOM();\r\n }\r\n\r\n createMesh() {\r\n // geometry\r\n this._geometry = new three.Geometry();\r\n this._geometry.vertices.push(this._handles[0].worldPosition);\r\n this._geometry.vertices.push(this._handles[1].worldPosition);\r\n\r\n // material\r\n this._material = new three.LineBasicMaterial();\r\n\r\n this.updateMeshColor();\r\n\r\n // mesh\r\n this._mesh = new three.Line(this._geometry, this._material);\r\n this._mesh.visible = true;\r\n\r\n this.add(this._mesh);\r\n }\r\n\r\n createDOM() {\r\n this._line = document.createElement('div');\r\n this._line.className = 'widgets-line';\r\n this._container.appendChild(this._line);\r\n\r\n this._label = document.createElement('div');\r\n this._label.className = 'widgets-label';\r\n this._container.appendChild(this._label);\r\n\r\n this.updateDOMColor();\r\n }\r\n\r\n hideDOM() {\r\n this._line.style.display = 'none';\r\n this._label.style.display = 'none';\r\n this._handles.forEach(elem => elem.hideDOM());\r\n }\r\n\r\n showDOM() {\r\n this._line.style.display = '';\r\n this._label.style.display = '';\r\n this._handles[0].showDOM();\r\n this._handles[1].showDOM();\r\n }\r\n\r\n update() {\r\n this.updateColor();\r\n\r\n this._handles[0].update();\r\n this._handles[1].update();\r\n\r\n // calculate values\r\n const distanceData = this.getDistanceData(\r\n this._handles[0].worldPosition,\r\n this._handles[1].worldPosition,\r\n this._calibrationFactor\r\n );\r\n\r\n this._distance = distanceData.distance;\r\n if (distanceData.units) {\r\n this._units = distanceData.units;\r\n }\r\n\r\n this.updateMeshColor();\r\n this.updateMeshPosition();\r\n\r\n this.updateDOM();\r\n }\r\n\r\n updateMeshColor() {\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n updateMeshPosition() {\r\n if (this._geometry) {\r\n this._geometry.verticesNeedUpdate = true;\r\n }\r\n }\r\n\r\n updateDOM() {\r\n this.updateDOMColor();\r\n\r\n // update line\r\n const lineData = this.getLineData(\r\n this._handles[0].screenPosition,\r\n this._handles[1].screenPosition\r\n );\r\n\r\n this._line.style.transform = `translate3D(${lineData.transformX}px, ${\r\n lineData.transformY\r\n }px, 0)\r\n rotate(${lineData.transformAngle}rad)`;\r\n this._line.style.width = lineData.length + 'px';\r\n\r\n // update label\r\n if (this._units === 'units' && !this._label.hasAttribute('title')) {\r\n this._label.setAttribute('title', 'Calibration is required to display the distance in mm');\r\n this._label.style.color = this._colors.error;\r\n } else if (this._units !== 'units' && this._label.hasAttribute('title')) {\r\n this._label.removeAttribute('title');\r\n this._label.style.color = this._colors.text;\r\n }\r\n this._label.innerHTML = `${this._distance.toFixed(2)} ${this._units}`;\r\n\r\n let angle = Math.abs(lineData.transformAngle);\r\n if (angle > Math.PI / 2) {\r\n angle = Math.PI - angle;\r\n }\r\n\r\n const labelPadding =\r\n Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth\r\n ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding\r\n : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle) + 15;\r\n const paddingVector = lineData.line.normalize().multiplyScalar(labelPadding);\r\n const paddingPoint =\r\n lineData.length > labelPadding * 2\r\n ? this._handles[1].screenPosition.clone().sub(paddingVector)\r\n : this._handles[1].screenPosition.clone().add(paddingVector);\r\n const transform = this.adjustLabelTransform(this._label, paddingPoint);\r\n\r\n this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`;\r\n }\r\n\r\n updateDOMColor() {\r\n this._line.style.backgroundColor = this._color;\r\n this._label.style.borderColor = this._color;\r\n }\r\n\r\n free() {\r\n this.removeEventListeners();\r\n\r\n this._handles.forEach(h => {\r\n this.remove(h);\r\n h.free();\r\n });\r\n this._handles = [];\r\n\r\n this._container.removeChild(this._line);\r\n this._container.removeChild(this._label);\r\n\r\n // mesh, geometry, material\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n super.free();\r\n }\r\n\r\n getMeasurements() {\r\n return {\r\n distance: this._distance,\r\n units: this._units,\r\n };\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh) {\r\n this._targetMesh = targetMesh;\r\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition) {\r\n this._handles[0].worldPosition.copy(worldPosition);\r\n this._handles[1].worldPosition.copy(worldPosition);\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n\r\n get calibrationFactor() {\r\n return this._calibrationFactor;\r\n }\r\n\r\n set calibrationFactor(calibrationFactor) {\r\n this._calibrationFactor = calibrationFactor;\r\n this._units = 'mm';\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsRuler };\r\nexport default widgetsRuler();\r\n","import { widgetsBase } from './widgets.base';\r\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\r\nimport CoreUtils from '../core/core.utils';\r\n\r\n/**\r\n * @module widgets/velocityTimeIntegral\r\n */\r\nconst widgetsVelocityTimeIntegral = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'VelocityTimeIntegral';\r\n\r\n // incoming parameters (+ ijk2LPS, lps2IJK, worldPosition)\r\n this._regions = params.ultrasoundRegions || []; // required\r\n if (this._regions.length < 1) {\r\n throw new Error('Ultrasound regions should not be empty!');\r\n }\r\n\r\n // outgoing values\r\n this._vMax = null; // Maximum Velocity (Vmax)\r\n this._vMean = null; // Mean Velocity (Vmean)\r\n this._gMax = null; // Maximum Gradient (Gmax)\r\n this._gMean = null; // Mean Gradient (Gmean)\r\n this._envTi = null; // Envelope Duration (Env.Ti)\r\n this._vti = null; // Velocity Time Integral (VTI)\r\n this._extraInfo = null; // extra information which is added to label\r\n\r\n this._initialized = false; // set to true onEnd if number of handles > 2\r\n this._isHandleActive = true;\r\n this._domHovered = false;\r\n this._initialRegion = this.getRegionByXY(\r\n this._regions,\r\n CoreUtils.worldToData(params.lps2IJK, params.worldPosition)\r\n );\r\n if (this._initialRegion === null) {\r\n throw new Error('Invalid initial UltraSound region!');\r\n }\r\n this._usPoints = [];\r\n\r\n // mesh stuff\r\n this._material = null;\r\n this._geometry = null;\r\n this._mesh = null;\r\n\r\n // dom stuff\r\n this._lines = [];\r\n this._label = null;\r\n\r\n // add handles\r\n this._handles = [];\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n\r\n let handle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(handle);\r\n this._handles.push(handle);\r\n\r\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(this._moveHandle);\r\n this._moveHandle.hide();\r\n\r\n this.onMove = this.onMove.bind(this);\r\n this.onHover = this.onHover.bind(this);\r\n\r\n this.create();\r\n\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n this._container.addEventListener('wheel', this.onMove);\r\n\r\n this._label.addEventListener('mouseenter', this.onHover);\r\n this._label.addEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n removeEventListeners() {\r\n this._container.removeEventListener('wheel', this.onMove);\r\n\r\n this._label.removeEventListener('mouseenter', this.onHover);\r\n this._label.removeEventListener('mouseleave', this.onHover);\r\n }\r\n\r\n onHover(evt) {\r\n if (evt) {\r\n this.hoverDom(evt);\r\n }\r\n\r\n this.hoverMesh();\r\n\r\n let hovered = false;\r\n\r\n this._handles.forEach(elem => (hovered = hovered || elem.hovered));\r\n\r\n this._hovered = hovered || this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n }\r\n\r\n hoverMesh() {\r\n // check raycast intersection, if we want to hover on mesh instead of just css\r\n }\r\n\r\n hoverDom(evt) {\r\n this._domHovered = evt.type === 'mouseenter';\r\n }\r\n\r\n onStart(evt) {\r\n let active = false;\r\n\r\n this._moveHandle.onMove(evt, true);\r\n this._handles.forEach(elem => {\r\n elem.onStart(evt);\r\n active = active || elem.active;\r\n });\r\n\r\n this._active = active || this._domHovered;\r\n this._isHandleActive = active;\r\n\r\n if (this._domHovered) {\r\n this._controls.enabled = false;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n onMove(evt) {\r\n if (this.active) {\r\n const prevPosition = this._moveHandle.worldPosition.clone();\r\n\r\n this._moveHandle.onMove(evt, true);\r\n\r\n const shift = this._moveHandle.worldPosition.clone().sub(prevPosition);\r\n\r\n if (!this.isCorrectRegion(shift)) {\r\n this._moveHandle.worldPosition.copy(prevPosition);\r\n\r\n return;\r\n }\r\n\r\n if (!this._initialized) {\r\n this._handles[this._handles.length - 1].hovered = false;\r\n this._handles[this._handles.length - 1].active = false;\r\n this._handles[this._handles.length - 1].tracking = false;\r\n\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n let handle = new WidgetsHandle(this._targetMesh, this._controls, this._params);\r\n\r\n handle.hovered = true;\r\n handle.active = true;\r\n handle.tracking = true;\r\n this.add(handle);\r\n this._handles.push(handle);\r\n\r\n this.createLine();\r\n } else {\r\n this.updateDOMContent(true);\r\n\r\n if (\r\n !this._isHandleActive ||\r\n this._handles[this._handles.length - 2].active ||\r\n this._handles[this._handles.length - 1].active\r\n ) {\r\n this._handles.forEach(handle => {\r\n handle.worldPosition.add(shift);\r\n });\r\n this._isHandleActive = false;\r\n this._handles[this._handles.length - 2].active = false;\r\n this._handles[this._handles.length - 1].active = false;\r\n this._controls.enabled = false;\r\n }\r\n }\r\n this._dragged = true;\r\n } else {\r\n this.onHover(null);\r\n }\r\n\r\n this._handles.forEach(elem => {\r\n elem.onMove(evt);\r\n });\r\n if (this.active && this._handles.length > 2) {\r\n this.pushPopHandle();\r\n }\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n if (this._handles.length < 3) {\r\n return;\r\n }\r\n\r\n let active = false;\r\n\r\n this._handles.slice(0, -1).forEach(elem => {\r\n elem.onEnd();\r\n active = active || elem.active;\r\n });\r\n\r\n // Last Handle\r\n if (this._dragged || !this._handles[this._handles.length - 1].tracking) {\r\n this._handles[this._handles.length - 1].tracking = false;\r\n this._handles[this._handles.length - 1].onEnd();\r\n } else {\r\n this._handles[this._handles.length - 1].tracking = false;\r\n }\r\n\r\n if (this._dragged || !this._initialized) {\r\n this.finalize();\r\n this.updateDOMContent();\r\n }\r\n\r\n if (!this._dragged && this._active) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n this._handles.forEach(elem => (elem.selected = this._selected));\r\n }\r\n this._active = active || this._handles[this._handles.length - 1].active;\r\n this._isHandleActive = active;\r\n this._dragged = false;\r\n this._initialized = true;\r\n\r\n this.update();\r\n }\r\n\r\n isCorrectRegion(shift) {\r\n let isCorrect = true;\r\n\r\n this._handles.forEach((handle, index) => {\r\n if (handle.active || !this._isHandleActive) {\r\n isCorrect = isCorrect && this.checkHandle(index, shift);\r\n }\r\n });\r\n\r\n return isCorrect;\r\n }\r\n\r\n checkHandle(index, shift) {\r\n const region = this.getRegionByXY(\r\n this._regions,\r\n CoreUtils.worldToData(\r\n this._params.lps2IJK,\r\n this._handles[index].worldPosition.clone().add(shift)\r\n )\r\n );\r\n\r\n return (\r\n region !== null &&\r\n region === this._initialRegion &&\r\n this._regions[region].unitsY === 'cm/sec'\r\n );\r\n }\r\n\r\n create() {\r\n this.createMaterial();\r\n this.createDOM();\r\n }\r\n\r\n createMaterial() {\r\n this._material = new three.LineBasicMaterial();\r\n }\r\n\r\n createDOM() {\r\n this._label = document.createElement('div');\r\n this._label.className = 'widgets-label';\r\n\r\n const measurementsContainer = document.createElement('div');\r\n\r\n ['vmax', 'vmean', 'gmax', 'gmean', 'envti', 'vti', 'info'].forEach(name => {\r\n const div = document.createElement('div');\r\n\r\n div.className = name;\r\n measurementsContainer.appendChild(div);\r\n });\r\n this._label.appendChild(measurementsContainer);\r\n\r\n this._container.appendChild(this._label);\r\n\r\n this.updateDOMColor();\r\n }\r\n\r\n createLine() {\r\n const line = document.createElement('div');\r\n\r\n line.className = 'widgets-line';\r\n line.addEventListener('mouseenter', this.onHover);\r\n line.addEventListener('mouseleave', this.onHover);\r\n this._lines.push(line);\r\n this._container.appendChild(line);\r\n }\r\n\r\n pushPopHandle() {\r\n let handle0 = this._handles[this._handles.length - 3];\r\n let handle1 = this._handles[this._handles.length - 2];\r\n let newhandle = this._handles[this._handles.length - 1];\r\n let isOnLine = this.isPointOnLine(\r\n handle0.worldPosition,\r\n handle1.worldPosition,\r\n newhandle.worldPosition\r\n );\r\n\r\n if (isOnLine || handle0.screenPosition.distanceTo(newhandle.screenPosition) < 25) {\r\n this.remove(handle1);\r\n handle1.free();\r\n\r\n this._handles[this._handles.length - 2] = newhandle;\r\n this._handles.pop();\r\n\r\n this._container.removeChild(this._lines.pop());\r\n }\r\n\r\n return isOnLine;\r\n }\r\n\r\n isPointOnLine(pointA, pointB, pointToCheck) {\r\n return !new three.Vector3()\r\n .crossVectors(pointA.clone().sub(pointToCheck), pointB.clone().sub(pointToCheck))\r\n .length();\r\n }\r\n\r\n finalize() {\r\n if (this._initialized) {\r\n // remove old axis handles\r\n this._handles.splice(-2).forEach(elem => {\r\n this.remove(elem);\r\n elem.free();\r\n });\r\n }\r\n\r\n const pointF = CoreUtils.worldToData(this._params.lps2IJK, this._handles[0]._worldPosition);\r\n const pointL = CoreUtils.worldToData(\r\n this._params.lps2IJK,\r\n this._handles[this._handles.length - 1]._worldPosition\r\n );\r\n const region = this._regions[this.getRegionByXY(this._regions, pointF)];\r\n const axisY = region.y0 + (region.axisY || 0); // data coordinate equal to US region's zero Y coordinate\r\n\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n const params = { hideHandleMesh: this._params.hideHandleMesh || false };\r\n\r\n pointF.y = axisY;\r\n pointL.y = axisY;\r\n this._usPoints = [\r\n this.getPointInRegion(region, pointL),\r\n this.getPointInRegion(region, pointF),\r\n ];\r\n\r\n params.worldPosition = pointL.applyMatrix4(this._params.ijk2LPS); // projection of last point on Y axis\r\n this._handles.push(new WidgetsHandle(this._targetMesh, this._controls, params));\r\n this.add(this._handles[this._handles.length - 1]);\r\n\r\n params.worldPosition = pointF.applyMatrix4(this._params.ijk2LPS); // projection of first point on Y axis\r\n this._handles.push(new WidgetsHandle(this._targetMesh, this._controls, params));\r\n this.add(this._handles[this._handles.length - 1]);\r\n\r\n while (this._lines.length < this._handles.length) {\r\n this.createLine();\r\n }\r\n }\r\n\r\n update() {\r\n this.updateColor();\r\n\r\n // update handles\r\n this._handles.forEach(elem => elem.update());\r\n\r\n // mesh stuff\r\n this.updateMesh();\r\n\r\n // DOM stuff\r\n this.updateDOMColor();\r\n this.updateDOMPosition();\r\n }\r\n\r\n updateValues() {\r\n const region = this._regions[\r\n this.getRegionByXY(\r\n this._regions,\r\n CoreUtils.worldToData(this._params.lps2IJK, this._handles[0]._worldPosition)\r\n )\r\n ];\r\n const boundaries = {\r\n xMin: Number.POSITIVE_INFINITY,\r\n xMax: Number.NEGATIVE_INFINITY,\r\n yMin: Number.POSITIVE_INFINITY,\r\n yMax: Number.NEGATIVE_INFINITY,\r\n };\r\n let pVelocity;\r\n let pGradient;\r\n let pTime;\r\n let totalTime = 0;\r\n\r\n this._vMax = 0;\r\n this._vMean = 0;\r\n this._gMean = 0;\r\n this._usPoints.splice(2);\r\n this._handles.slice(0, -2).forEach(elem => {\r\n const usPosition = this.getPointInRegion(\r\n region,\r\n CoreUtils.worldToData(this._params.lps2IJK, elem._worldPosition)\r\n );\r\n const velocity = Math.abs(usPosition.y / 100);\r\n const gradient = 4 * Math.pow(velocity, 2);\r\n\r\n if (this._vMax === null || velocity > this._vMax) {\r\n this._vMax = velocity;\r\n }\r\n boundaries.xMin = Math.min(usPosition.x, boundaries.xMin);\r\n boundaries.xMax = Math.max(usPosition.x, boundaries.xMax);\r\n boundaries.yMin = Math.min(usPosition.y, boundaries.yMin);\r\n boundaries.yMax = Math.max(usPosition.y, boundaries.yMax);\r\n\r\n if (pTime) {\r\n const length = Math.abs(usPosition.x - pTime);\r\n\r\n totalTime += length;\r\n this._vMean += (length * (pVelocity + velocity)) / 2;\r\n this._gMean += (length * (pGradient + gradient)) / 2;\r\n }\r\n\r\n pVelocity = velocity;\r\n pGradient = gradient;\r\n pTime = usPosition.x;\r\n this._usPoints.push(usPosition);\r\n });\r\n\r\n this._gMax = 4 * Math.pow(this._vMax, 2);\r\n this._vMean /= totalTime;\r\n this._gMean /= totalTime;\r\n this._envTi = totalTime * 1000;\r\n this._vti = this.getArea(this._usPoints);\r\n\r\n this._shapeWarn =\r\n boundaries.xMax - boundaries.xMin !== totalTime ||\r\n boundaries.yMin < 0 !== boundaries.yMax < 0;\r\n }\r\n\r\n updateMesh() {\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n }\r\n\r\n this._geometry = new three.Geometry();\r\n this._handles.forEach(elem => this._geometry.vertices.push(elem.worldPosition));\r\n this._geometry.vertices.push(this._handles[0].worldPosition);\r\n this._geometry.verticesNeedUpdate = true;\r\n\r\n this.updateMeshColor();\r\n\r\n this._mesh = new three.Line(this._geometry, this._material);\r\n this._mesh.visible = true;\r\n this.add(this._mesh);\r\n }\r\n\r\n updateMeshColor() {\r\n if (this._material) {\r\n this._material.color.set(this._color);\r\n }\r\n }\r\n\r\n updateDOMColor() {\r\n if (this._handles.length >= 2) {\r\n this._lines.forEach(elem => (elem.style.backgroundColor = this._color));\r\n }\r\n this._label.style.borderColor = this._color;\r\n }\r\n\r\n updateDOMContent(clear) {\r\n const vMaxContainer = this._label.querySelector('.vmax');\r\n const vMeanContainer = this._label.querySelector('.vmean');\r\n const gMaxContainer = this._label.querySelector('.gmax');\r\n const gMeanContainer = this._label.querySelector('.gmean');\r\n const envTiContainer = this._label.querySelector('.envti');\r\n const vtiContainer = this._label.querySelector('.vti');\r\n const infoContainer = this._label.querySelector('.info');\r\n\r\n if (clear) {\r\n vMaxContainer.innerHTML = '';\r\n vMeanContainer.innerHTML = '';\r\n gMaxContainer.innerHTML = '';\r\n gMeanContainer.innerHTML = '';\r\n envTiContainer.innerHTML = '';\r\n vtiContainer.innerHTML = '';\r\n infoContainer.innerHTML = '';\r\n\r\n return;\r\n }\r\n\r\n this.updateValues();\r\n\r\n if (this._shapeWarn && !this._label.hasAttribute('title')) {\r\n this._label.setAttribute('title', 'Values may be incorrect due to invalid curve.');\r\n this._label.style.color = this._colors.error;\r\n } else if (!this._shapeWarn && this._label.hasAttribute('title')) {\r\n this._label.removeAttribute('title');\r\n this._label.style.color = this._colors.text;\r\n }\r\n\r\n vMaxContainer.innerHTML = `Vmax: ${this._vMax.toFixed(2)} m/s`;\r\n vMeanContainer.innerHTML = `Vmean: ${this._vMean.toFixed(2)} m/s`;\r\n gMaxContainer.innerHTML = `Gmax: ${this._gMax.toFixed(2)} mmhg`;\r\n gMeanContainer.innerHTML = `Gmean: ${this._gMean.toFixed(2)} mmhg`;\r\n envTiContainer.innerHTML = `Env.Ti: ${this._envTi.toFixed(1)} ms`;\r\n vtiContainer.innerHTML = `VTI: ${this._vti.toFixed(2)} cm`;\r\n infoContainer.innerHTML = this._extraInfo;\r\n }\r\n\r\n updateDOMPosition() {\r\n if (this._handles.length < 2) {\r\n return;\r\n }\r\n // update lines and get coordinates of lowest handle\r\n let labelPosition = null;\r\n\r\n this._lines.forEach((elem, ind) => {\r\n const lineData = this.getLineData(\r\n this._handles[ind].screenPosition,\r\n this._handles[ind + 1 === this._handles.length ? 0 : ind + 1].screenPosition\r\n );\r\n\r\n elem.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0)\r\n rotate(${lineData.transformAngle}rad)`;\r\n elem.style.width = lineData.length + 'px';\r\n\r\n if (labelPosition === null || labelPosition.y < this._handles[ind].screenPosition.y) {\r\n labelPosition = this._handles[ind].screenPosition.clone();\r\n }\r\n });\r\n\r\n if (!this._initialized) {\r\n return;\r\n }\r\n\r\n // update label\r\n labelPosition.y += 15 + this._label.offsetHeight / 2;\r\n labelPosition = this.adjustLabelTransform(this._label, labelPosition);\r\n\r\n this._label.style.transform = `translate3D(${labelPosition.x}px, ${labelPosition.y}px, 0)`;\r\n }\r\n\r\n hideDOM() {\r\n this._handles.forEach(elem => elem.hideDOM());\r\n\r\n this._lines.forEach(elem => (elem.style.display = 'none'));\r\n this._label.style.display = 'none';\r\n }\r\n\r\n showDOM() {\r\n this._handles.forEach(elem => elem.showDOM());\r\n\r\n this._lines.forEach(elem => (elem.style.display = ''));\r\n this._label.style.display = '';\r\n }\r\n\r\n free() {\r\n this.removeEventListeners();\r\n\r\n this._handles.forEach(elem => {\r\n this.remove(elem);\r\n elem.free();\r\n });\r\n this._handles = [];\r\n this._usPoints = [];\r\n\r\n this.remove(this._moveHandle);\r\n this._moveHandle.free();\r\n this._moveHandle = null;\r\n\r\n this._lines.forEach(elem => {\r\n elem.removeEventListener('mouseenter', this.onHover);\r\n elem.removeEventListener('mouseleave', this.onHover);\r\n this._container.removeChild(elem);\r\n });\r\n this._lines = [];\r\n this._container.removeChild(this._label);\r\n\r\n // mesh, geometry, material\r\n if (this._mesh) {\r\n this.remove(this._mesh);\r\n this._mesh.geometry.dispose();\r\n this._mesh.geometry = null;\r\n this._mesh.material.dispose();\r\n this._mesh.material = null;\r\n this._mesh = null;\r\n }\r\n if (this._geometry) {\r\n this._geometry.dispose();\r\n this._geometry = null;\r\n }\r\n this._material.vertexShader = null;\r\n this._material.fragmentShader = null;\r\n this._material.uniforms = null;\r\n this._material.dispose();\r\n this._material = null;\r\n\r\n super.free();\r\n }\r\n\r\n getMeasurements() {\r\n return {\r\n vMax: this._vMax,\r\n vMean: this._vMean,\r\n gMax: this._gMax,\r\n gMean: this._gMean,\r\n envTi: this._envTi,\r\n vti: this._vti,\r\n };\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh) {\r\n this._targetMesh = targetMesh;\r\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\r\n this._moveHandle.targetMesh = targetMesh;\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition) {\r\n this._handles.forEach(elem => elem._worldPosition.copy(worldPosition));\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n\r\n get extraInfo() {\r\n return this._extraInfo;\r\n }\r\n\r\n set extraInfo(info) {\r\n this._extraInfo = info;\r\n this._label.querySelector('.info').innerHTML = info;\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsVelocityTimeIntegral };\r\nexport default widgetsVelocityTimeIntegral();\r\n","import { widgetsBase } from './widgets.base';\r\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\r\nimport ModelsVoxel from '../models/models.voxel';\r\nimport CoreUtils from '../core/core.utils';\r\n\r\n/**\r\n * @module widgets/voxelProbe\r\n */\r\nconst widgetsVoxelprobe = (three = window.THREE) => {\r\n if (three === undefined || three.Object3D === undefined) {\r\n return null;\r\n }\r\n\r\n const Constructor = widgetsBase(three);\r\n return class extends Constructor {\r\n constructor(targetMesh, controls, params = {}) {\r\n super(targetMesh, controls, params);\r\n\r\n this._widgetType = 'VoxelProbe';\r\n\r\n // incoming parameters (optional: worldPosition)\r\n this._stack = params.stack; // required\r\n\r\n this._container.style.cursor = 'pointer';\r\n this._controls.enabled = false; // controls should be disabled for widgets with a single handle\r\n this._initialized = false; // set to true onEnd\r\n this._active = true;\r\n this._moving = true;\r\n this._domHovered = false;\r\n\r\n // dom stuff\r\n this._label = null;\r\n\r\n // handle (represent voxel)\r\n const WidgetsHandle = widgetsHandleFactory(three);\r\n this._handle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(this._handle);\r\n\r\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\r\n this.add(this._moveHandle);\r\n this._moveHandle.hide();\r\n\r\n this.create();\r\n\r\n // event listeners\r\n this.onMove = this.onMove.bind(this);\r\n this.onHover = this.onHover.bind(this);\r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n this._label.addEventListener('mouseenter', this.onHover);\r\n this._label.addEventListener('mouseleave', this.onHover);\r\n\r\n this._container.addEventListener('wheel', this.onMove);\r\n }\r\n\r\n removeEventListeners() {\r\n this._label.removeEventListener('mouseenter', this.onHover);\r\n this._label.removeEventListener('mouseleave', this.onHover);\r\n\r\n this._container.removeEventListener('wheel', this.onMove);\r\n }\r\n\r\n onStart(evt) {\r\n this._moveHandle.onMove(evt, true);\r\n this._handle.onStart(evt);\r\n\r\n this._active = this._handle.active || this._domHovered;\r\n\r\n if (this._domHovered) {\r\n this._moving = true;\r\n this._controls.enabled = false;\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n onMove(evt) {\r\n if (this._active) {\r\n const prevPosition = this._moveHandle.worldPosition.clone();\r\n\r\n this._dragged = true;\r\n this._moveHandle.onMove(evt, true);\r\n\r\n if (this._moving) {\r\n this._handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\r\n }\r\n } else {\r\n this.onHover(null);\r\n }\r\n\r\n this._handle.onMove(evt);\r\n\r\n this.update();\r\n }\r\n\r\n onEnd() {\r\n this._handle.onEnd();\r\n\r\n if (!this._dragged && this._active && this._initialized) {\r\n this._selected = !this._selected; // change state if there was no dragging\r\n this._handle.selected = this._selected;\r\n }\r\n\r\n this._initialized = true;\r\n this._active = this._handle.active;\r\n this._dragged = false;\r\n this._moving = false;\r\n\r\n this.update();\r\n }\r\n\r\n onHover(evt) {\r\n if (evt) {\r\n this.hoverDom(evt);\r\n }\r\n\r\n this._hovered = this._handle.hovered || this._domHovered;\r\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\r\n }\r\n\r\n hoverDom(evt) {\r\n this._domHovered = evt.type === 'mouseenter';\r\n }\r\n\r\n create() {\r\n this.createVoxel();\r\n this.createDOM();\r\n }\r\n\r\n createVoxel() {\r\n this._voxel = new ModelsVoxel();\r\n this._voxel.id = this.id;\r\n }\r\n\r\n createDOM() {\r\n this._label = document.createElement('div');\r\n this._label.className = 'widgets-label';\r\n\r\n // measurements\r\n let measurementsContainer = document.createElement('div');\r\n // LPS\r\n let lpsContainer = document.createElement('div');\r\n lpsContainer.className = 'lpsPosition';\r\n measurementsContainer.appendChild(lpsContainer);\r\n // IJK\r\n let ijkContainer = document.createElement('div');\r\n ijkContainer.className = 'ijkPosition';\r\n measurementsContainer.appendChild(ijkContainer);\r\n // Value\r\n let valueContainer = document.createElement('div');\r\n valueContainer.className = 'value';\r\n measurementsContainer.appendChild(valueContainer);\r\n\r\n this._label.appendChild(measurementsContainer);\r\n\r\n this._container.appendChild(this._label);\r\n\r\n this.updateDOMColor();\r\n }\r\n\r\n update() {\r\n this.updateColor();\r\n\r\n this._handle.update();\r\n this._worldPosition.copy(this._handle.worldPosition);\r\n\r\n this.updateVoxel(); // set data coordinates && value\r\n\r\n this.updateDOM();\r\n }\r\n\r\n updateVoxel() {\r\n this._voxel.worldCoordinates = this._worldPosition;\r\n this._voxel.dataCoordinates = CoreUtils.worldToData(this._stack.lps2IJK, this._worldPosition);\r\n\r\n // update value\r\n let value = CoreUtils.getPixelData(this._stack, this._voxel.dataCoordinates);\r\n\r\n this._voxel.value =\r\n value === null || this._stack.numberOfChannels > 1\r\n ? 'NA' // coordinates outside the image or RGB\r\n : CoreUtils.rescaleSlopeIntercept(\r\n value,\r\n this._stack.rescaleSlope,\r\n this._stack.rescaleIntercept\r\n ).toFixed();\r\n }\r\n\r\n updateDOM() {\r\n const rasContainer = this._label.querySelector('.lpsPosition');\r\n const ijkContainer = this._label.querySelector('.ijkPosition');\r\n const valueContainer = this._label.querySelector('.value');\r\n\r\n rasContainer.innerHTML = `LPS: \r\n ${this._voxel.worldCoordinates.x.toFixed(2)} :\r\n ${this._voxel.worldCoordinates.y.toFixed(2)} :\r\n ${this._voxel.worldCoordinates.z.toFixed(2)}`;\r\n ijkContainer.innerHTML = `IJK: \r\n ${this._voxel.dataCoordinates.x} :\r\n ${this._voxel.dataCoordinates.y} :\r\n ${this._voxel.dataCoordinates.z}`;\r\n valueContainer.innerHTML = `Value: ${this._voxel.value}`;\r\n\r\n this.updateDOMColor();\r\n\r\n const transform = this.adjustLabelTransform(this._label, this._handle.screenPosition, true);\r\n\r\n this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`;\r\n }\r\n\r\n updateDOMColor() {\r\n this._label.style.borderColor = this._color;\r\n }\r\n\r\n free() {\r\n this.removeEventListeners();\r\n\r\n this.remove(this._handle);\r\n this._handle.free();\r\n this._handle = null;\r\n this.remove(this._moveHandle);\r\n this._moveHandle.free();\r\n this._moveHandle = null;\r\n\r\n this._container.removeChild(this._label);\r\n\r\n this._stack = null;\r\n this._voxel = null;\r\n\r\n super.free();\r\n }\r\n\r\n hideDOM() {\r\n this._label.style.display = 'none';\r\n this._handle.hideDOM();\r\n }\r\n\r\n showDOM() {\r\n this._label.style.display = '';\r\n this._handle.showDOM();\r\n }\r\n\r\n get targetMesh() {\r\n return this._targetMesh;\r\n }\r\n\r\n set targetMesh(targetMesh) {\r\n this._targetMesh = targetMesh;\r\n this._handle.targetMesh = targetMesh;\r\n this._moveHandle.targetMesh = targetMesh;\r\n this.update();\r\n }\r\n\r\n get worldPosition() {\r\n return this._worldPosition;\r\n }\r\n\r\n set worldPosition(worldPosition) {\r\n this._handle.worldPosition.copy(worldPosition);\r\n this._moveHandle.worldPosition.copy(worldPosition);\r\n this._worldPosition.copy(worldPosition);\r\n this.update();\r\n }\r\n\r\n get active() {\r\n return this._active;\r\n }\r\n\r\n set active(active) {\r\n this._active = active;\r\n this._controls.enabled = !this._active;\r\n\r\n this.update();\r\n }\r\n };\r\n};\r\n\r\nexport { widgetsVoxelprobe };\r\nexport default widgetsVoxelprobe();\r\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://AMI/webpack/universalModuleDefinition","webpack://AMI/webpack/bootstrap","webpack://AMI/./external/scripts/jpeg.js","webpack://AMI/./external/scripts/jpx.js","webpack://AMI/./node_modules/OpenJPEG.js/dist/openJPEG-DynamicMemory-browser.js","webpack://AMI/./node_modules/assert/assert.js","webpack://AMI/./node_modules/base64-js/index.js","webpack://AMI/./node_modules/buffer/index.js","webpack://AMI/./node_modules/const-ninf-float32/lib/index.js","webpack://AMI/./node_modules/const-pinf-float32/lib/index.js","webpack://AMI/./node_modules/dicom-parser/dist/dicomParser.min.js","webpack://AMI/./node_modules/events/events.js","webpack://AMI/./node_modules/ieee754/index.js","webpack://AMI/./node_modules/inherits/inherits_browser.js","webpack://AMI/./node_modules/isarray/index.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/component-spec.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/data-stream.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/decoder.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/frame-header.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/huffman-table.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/main.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/quantization-table.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/scan-component.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/scan-header.js","webpack://AMI/./node_modules/jpeg-lossless-decoder-js/src/utils.js","webpack://AMI/./node_modules/math-abs/lib/index.js","webpack://AMI/./node_modules/math-ceil/lib/index.js","webpack://AMI/./node_modules/math-float32-to-binary-string/lib/div2.js","webpack://AMI/./node_modules/math-float32-to-binary-string/lib/index.js","webpack://AMI/./node_modules/math-float32-to-binary-string/lib/mult2.js","webpack://AMI/./node_modules/math-floor/lib/index.js","webpack://AMI/./node_modules/nifti-reader-js/src/nifti.js","webpack://AMI/./node_modules/nifti-reader-js/src/nifti1.js","webpack://AMI/./node_modules/nifti-reader-js/src/nifti2.js","webpack://AMI/./node_modules/nifti-reader-js/src/utilities.js","webpack://AMI/./node_modules/nrrd-js/nrrd.js","webpack://AMI/./node_modules/pako/index.js","webpack://AMI/./node_modules/pako/lib/deflate.js","webpack://AMI/./node_modules/pako/lib/inflate.js","webpack://AMI/./node_modules/pako/lib/utils/common.js","webpack://AMI/./node_modules/pako/lib/utils/strings.js","webpack://AMI/./node_modules/pako/lib/zlib/adler32.js","webpack://AMI/./node_modules/pako/lib/zlib/constants.js","webpack://AMI/./node_modules/pako/lib/zlib/crc32.js","webpack://AMI/./node_modules/pako/lib/zlib/deflate.js","webpack://AMI/./node_modules/pako/lib/zlib/gzheader.js","webpack://AMI/./node_modules/pako/lib/zlib/inffast.js","webpack://AMI/./node_modules/pako/lib/zlib/inflate.js","webpack://AMI/./node_modules/pako/lib/zlib/inftrees.js","webpack://AMI/./node_modules/pako/lib/zlib/messages.js","webpack://AMI/./node_modules/pako/lib/zlib/trees.js","webpack://AMI/./node_modules/pako/lib/zlib/zstream.js","webpack://AMI/./node_modules/path-browserify/index.js","webpack://AMI/./node_modules/process/browser.js","webpack://AMI/./node_modules/three/src/constants.js","webpack://AMI/./node_modules/three/src/core/Raycaster.js","webpack://AMI/./node_modules/three/src/math/Box3.js","webpack://AMI/./node_modules/three/src/math/Math.js","webpack://AMI/./node_modules/three/src/math/Matrix4.js","webpack://AMI/./node_modules/three/src/math/Quaternion.js","webpack://AMI/./node_modules/three/src/math/Ray.js","webpack://AMI/./node_modules/three/src/math/Sphere.js","webpack://AMI/./node_modules/three/src/math/Triangle.js","webpack://AMI/./node_modules/three/src/math/Vector2.js","webpack://AMI/./node_modules/three/src/math/Vector3.js","webpack://AMI/./node_modules/util/support/isBufferBrowser.js","webpack://AMI/./node_modules/util/util.js","webpack://AMI/./node_modules/utils-left-pad-string/lib/index.js","webpack://AMI/./node_modules/utils-repeat-string/lib/index.js","webpack://AMI/./node_modules/utils-right-pad-string/lib/index.js","webpack://AMI/./node_modules/validate.io-integer/lib/index.js","webpack://AMI/./node_modules/validate.io-nonnegative-integer/lib/index.js","webpack://AMI/./node_modules/validate.io-number/lib/index.js","webpack://AMI/./node_modules/validate.io-string-primitive/lib/index.js","webpack://AMI/(webpack)/buildin/global.js","webpack://AMI/./src/ami.ts","webpack://AMI/./src/cameras/cameras.js","webpack://AMI/./src/cameras/cameras.orthographic.js","webpack://AMI/./src/controls/controls.js","webpack://AMI/./src/controls/controls.orbit.js","webpack://AMI/./src/controls/controls.trackball.js","webpack://AMI/./src/controls/controls.trackballortho.js","webpack://AMI/./src/core/core.colors.ts","webpack://AMI/./src/core/core.intersections.js","webpack://AMI/./src/core/core.js","webpack://AMI/./src/core/core.utils.js","webpack://AMI/./src/core/core.validators.js","webpack://AMI/./src/decoders/decoders.rle.js","webpack://AMI/./src/geometries/geometries.js","webpack://AMI/./src/geometries/geometries.slice.js","webpack://AMI/./src/geometries/geometries.voxel.js","webpack://AMI/./src/helpers/helpers.border.js","webpack://AMI/./src/helpers/helpers.boundingbox.js","webpack://AMI/./src/helpers/helpers.contour.js","webpack://AMI/./src/helpers/helpers.js","webpack://AMI/./src/helpers/helpers.localizer.js","webpack://AMI/./src/helpers/helpers.lut.js","webpack://AMI/./src/helpers/helpers.material.mixin.js","webpack://AMI/./src/helpers/helpers.progressbar.eventbased.js","webpack://AMI/./src/helpers/helpers.progressbar.js","webpack://AMI/./src/helpers/helpers.segmentationlut.js","webpack://AMI/./src/helpers/helpers.slice.js","webpack://AMI/./src/helpers/helpers.stack.js","webpack://AMI/./src/helpers/helpers.volumerendering.js","webpack://AMI/./src/loaders/loaders.base.js","webpack://AMI/./src/loaders/loaders.cornerstone.js","webpack://AMI/./src/loaders/loaders.js","webpack://AMI/./src/loaders/loaders.volume.js","webpack://AMI/./src/models/models.base.js","webpack://AMI/./src/models/models.frame.js","webpack://AMI/./src/models/models.js","webpack://AMI/./src/models/models.series.js","webpack://AMI/./src/models/models.stack.js","webpack://AMI/./src/models/models.voxel.js","webpack://AMI/./src/parsers/parsers.dicom.js","webpack://AMI/./src/parsers/parsers.js","webpack://AMI/./src/parsers/parsers.mgh.js","webpack://AMI/./src/parsers/parsers.mhd.js","webpack://AMI/./src/parsers/parsers.nifti.js","webpack://AMI/./src/parsers/parsers.nrrd.js","webpack://AMI/./src/parsers/parsers.volume.js","webpack://AMI/./src/presets/presets.js","webpack://AMI/./src/presets/presets.segmentation.freesurfer.js","webpack://AMI/./src/presets/presets.segmentation.js","webpack://AMI/./src/shaders/helpers/shaders.helpers.intersectBox.js","webpack://AMI/./src/shaders/helpers/shaders.helpers.texture3d.js","webpack://AMI/./src/shaders/helpers/shaders.helpers.unpack.js","webpack://AMI/./src/shaders/interpolation/shaders.interpolation.identity.js","webpack://AMI/./src/shaders/interpolation/shaders.interpolation.js","webpack://AMI/./src/shaders/interpolation/shaders.interpolation.trilinear.js","webpack://AMI/./src/shaders/shaders.base.js","webpack://AMI/./src/shaders/shaders.contour.fragment.js","webpack://AMI/./src/shaders/shaders.contour.uniform.js","webpack://AMI/./src/shaders/shaders.contour.vertex.js","webpack://AMI/./src/shaders/shaders.data.fragment.js","webpack://AMI/./src/shaders/shaders.data.uniform.js","webpack://AMI/./src/shaders/shaders.data.vertex.js","webpack://AMI/./src/shaders/shaders.js","webpack://AMI/./src/shaders/shaders.layer.fragment.js","webpack://AMI/./src/shaders/shaders.layer.uniform.js","webpack://AMI/./src/shaders/shaders.layer.vertex.js","webpack://AMI/./src/shaders/shaders.localizer.fragment.js","webpack://AMI/./src/shaders/shaders.localizer.uniform.js","webpack://AMI/./src/shaders/shaders.localizer.vertex.js","webpack://AMI/./src/shaders/shaders.vr.fragment.js","webpack://AMI/./src/shaders/shaders.vr.uniform.js","webpack://AMI/./src/shaders/shaders.vr.vertex.js","webpack://AMI/./src/utils/cornerstoneDataParser.js","webpack://AMI/./src/utils/getNumberString.js","webpack://AMI/./src/utils/getNumberValue.js","webpack://AMI/./src/utils/getNumberValues.js","webpack://AMI/./src/utils/getValue.js","webpack://AMI/./src/utils/index.js","webpack://AMI/./src/widgets/widgets.angle.js","webpack://AMI/./src/widgets/widgets.annotation.js","webpack://AMI/./src/widgets/widgets.base.ts","webpack://AMI/./src/widgets/widgets.biruler.js","webpack://AMI/./src/widgets/widgets.crossRuler.js","webpack://AMI/./src/widgets/widgets.css.js","webpack://AMI/./src/widgets/widgets.ellipse.js","webpack://AMI/./src/widgets/widgets.freehand.js","webpack://AMI/./src/widgets/widgets.handle.js","webpack://AMI/./src/widgets/widgets.js","webpack://AMI/./src/widgets/widgets.peakVelocity.js","webpack://AMI/./src/widgets/widgets.polygon.js","webpack://AMI/./src/widgets/widgets.pressureHalfTime.js","webpack://AMI/./src/widgets/widgets.rectangle.js","webpack://AMI/./src/widgets/widgets.ruler.js","webpack://AMI/./src/widgets/widgets.velocityTimeIntegral.js","webpack://AMI/./src/widgets/widgets.voxelProbe.js"],"names":["camerasOrthographic","three","window","THREE","undefined","OrthographicCamera","Constructor","left","right","top","bottom","near","far","_front","_back","_directions","Vector3","_directionsLabel","_orientation","_convention","_stackOrientation","_right","_up","_direction","_controls","_box","_canvas","width","height","_fromFront","_angle","init","xCosine","yCosine","zCosine","controls","box","canvas","console","warn","Validators","vector3","log","_adjustTopDirection","crossVectors","ray","position","center","direction","intersections","_orderIntersections","Intersections","rayBox","up","set","x","y","z","_updateCanvas","_updatePositionAndTarget","_updateMatrices","_updateDirections","update","_getMaxIndex","leftIndex","leftDirection","posteriorIndex","posteriorDirection","superiorIndex","superiorDirection","negate","_findMaxIndex","invertRows","multiplyScalar","invertColumns","oppositePosition","_oppositePosition","clone","rotate","angle","rotationToApply","rotation","Matrix4","makeRotationAxis","Math","PI","applyMatrix4","fitBox","factor","zoom","_computeZoom","min","horizontalDirection","verticalDirection","vMaxIndex","getComponent","vector","maxValue","abs","index","directions","target","maxIndices","_getMaxIndices","i","length","indices","push","ordered","dot","camFactor","handleResize","sub","add","dimension","distanceTo","lookAt","updateProjectionMatrix","updateMatrixWorld","_updateLabels","_vector2Label","scaledDirection","divideScalar","delta","label","pLocal","pWorld","matrixWorld","normalize","convention","orientation","directionsLabel","stackOrientation","maxIndex","orbit","EventDispatcher","OrbitControls","object","domElement","document","enabled","preventDefault","minDistance","maxDistance","Infinity","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","panSpeed","screenSpacePanning","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","keys","LEFT","UP","RIGHT","BOTTOM","mouseButtons","MOUSE","MIDDLE","target0","position0","zoom0","getPolarAngle","spherical","phi","getAzimuthalAngle","theta","saveState","scope","copy","reset","dispatchEvent","changeEvent","state","STATE","NONE","offset","quat","Quaternion","setFromUnitVectors","quatInverse","inverse","lastPosition","lastQuaternion","applyQuaternion","setFromVector3","rotateLeft","getAutoRotationAngle","sphericalDelta","max","makeSafe","radius","scale","panOffset","setFromSpherical","zoomChanged","distanceToSquared","EPS","quaternion","dispose","removeEventListener","onContextMenu","onMouseDown","onMouseWheel","onTouchStart","onTouchEnd","onTouchMove","onMouseMove","onMouseUp","onKeyDown","type","startEvent","endEvent","ROTATE","DOLLY","PAN","TOUCH_ROTATE","TOUCH_DOLLY_PAN","Spherical","rotateStart","Vector2","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","pow","rotateUp","panLeft","v","distance","objectMatrix","setFromMatrixColumn","panUp","pan","deltaX","deltaY","element","body","isPerspectiveCamera","targetDistance","tan","fov","clientHeight","matrix","isOrthographicCamera","clientWidth","dollyIn","dollyScale","dollyOut","handleMouseDownRotate","event","clientX","clientY","handleMouseDownDolly","handleMouseDownPan","handleMouseMoveRotate","subVectors","handleMouseMoveDolly","handleMouseMovePan","handleMouseUp","handleMouseWheel","handleKeyDown","keyCode","handleTouchStartRotate","touches","pageX","pageY","handleTouchStartDollyPan","dx","dy","sqrt","handleTouchMoveRotate","handleTouchMoveDollyPan","handleTouchEnd","button","ctrlKey","metaKey","shiftKey","addEventListener","stopPropagation","prototype","Object","create","constructor","defineProperties","get","noZoom","value","noRotate","noPan","noKeys","staticMoving","dynamicDampingFactor","trackball","_this","ZOOM","TOUCH_ZOOM","TOUCH_PAN","CUSTOM","screen","noCustom","forceState","_state","_prevState","_eye","_movePrev","_moveCurr","_lastAxis","_lastAngle","_zoomStart","_zoomEnd","_touchZoomDistanceStart","_touchZoomDistanceEnd","_panStart","_panEnd","_customStart","_customEnd","up0","innerWidth","innerHeight","getBoundingClientRect","d","ownerDocument","documentElement","pageXOffset","clientLeft","pageYOffset","clientTop","handleEvent","getMouseOnScreen","getMouseOnCircle","rotateCamera","axis","eyeDirection","objectUpDirection","objectSidewaysDirection","moveDirection","setLength","setFromAxisAngle","zoomCamera","panCamera","mouseChange","objectUp","lengthSq","cross","checkDistances","addVectors","custom","setState","targetState","customStart","customEnd","keydown","keyup","mousedown","mousemove","mouseup","mousewheel","deltaMode","touchstart","touchmove","touchend","contextmenu","trackballOrtho","SCROLL","TOUCH_ZOOM_PAN","_changed","left0","right0","top0","bottom0","scale_x","scale_y","aabbPlane","aabb","plane","validateAabb","validatePlane","fromAABB","getInverse","toAABB","t1","t0","planeAABB","posdir","bbox","CoreUtils","halfDimensions","rayPlaneInBBox","ray2","ray3","ray4","ray5","map","rayPlane","t","intersection","inBBox","find","findIntersection","myintersection","found","array","point","epsilon","matrix4","minMax","data","numPixels","spv","isElement","obj","HTMLElement","e","nodeType","style","isString","str","String","parseUrl","url","parsedUrl","URL","filename","searchParams","extension","pathname","query","search","split","pop","splittedName","skipExt","isNaN","indexOf","includes","ijk2LPS","xCos","yCos","zCos","spacing","origin","registrationMatrix","premultiply","aabb2LPS","worldToData","lps2IJK","worldCoordinates","dataCoordinate","addScalar","floor","stack","coordinate","getPixelData","_frame","setPixelData","rescaleSlopeIntercept","slope","intercept","centerOfMass","points","orderIntersections","reference","referenceDirection","base","orderedpoints","j","xy","atan2","sort","a","b","noDups","getRoI","mesh","camera","geometry","computeBoundingBox","Box3","setFromObject","project","offsetWidth","offsetHeight","rayCaster","Raycaster","values","round","intersect","setFromCamera","intersectObject","numberOfChannels","rescaleSlope","rescaleIntercept","avg","reduce","sum","val","prev","mean","sd","getGeometryArea","faces","area","vertices","forEach","elem","Triangle","c","getArea","stringToNumber","numberAsString","number","Number","dots","match","commas","replaceBy","stringWithoutComma","replace","error","objectToTest","hasOwnProperty","elements","identity","determinant","decodeRLE","imageFrame","pixelData","bitsAllocated","planarConfiguration","decode8Planar","decode8","decode16","Error","frameData","frameSize","rows","columns","outFrame","ArrayBuffer","samplesPerPixel","header","DataView","buffer","byteOffset","Int8Array","out","outIndex","numSegments","getInt32","s","inIndex","endOfSegment","n","Uint8Array","highByte","pixelRepresentation","Uint16Array","Int16Array","RLEDecoder","geometriesSlice","ShapeBufferGeometry","coreIntersections","err","coreUtils","shape","Shape","moveTo","positions","Float32Array","toArray","lineTo","addAttribute","Float32BufferAttribute","geometriesVoxel","BoxGeometry","dataPosition","_location","applyMatrix","makeTranslation","verticesNeedUpdate","resetVertices","location","helpersBorder","Object3D","helpersSlice","_helpersSlice","_visible","_color","_material","_geometry","_mesh","_create","LineBasicMaterial","color","linewidth","BufferGeometry","nbOfVertices","attributes","Line","aabbSpace","visible","_update","remove","material","helpersBoundingBox","_stack","_meshStack","dimensions","dimensionsIJK","halfDimensionsIJK","MeshBasicMaterial","wireframe","Mesh","BoxHelper","helpersContour","texture","_textureToFilter","_contourWidth","_contourOpacity","_canvasWidth","_canvasHeight","_shadersFragment","ShadersFragment","_shadersVertex","ShadersVertex","_uniforms","ShadersUniform","uniforms","_prepareMaterial","_ijk2LPS","uWidth","uOpacity","uCanvasWidth","uCanvasHeight","fs","vs","ShaderMaterial","side","DoubleSide","vertexShader","compute","fragmentShader","transparent","uTextureFilled","needsUpdate","contourOpacity","contourWidth","canvasWidth","canvasHeight","helpersLocalizer","referencePlane","_referencePlane","_plane1","_color1","_plane2","_color2","_plane3","_color3","uSlice","uPlane1","uPlaneColor1","uPlane2","uPlaneColor2","uPlane3","uPlaneColor3","plane1","color1","plane2","color2","plane3","color3","helpersLut","domTarget","lut","lutO","opacity","discrete","_dom","getElementById","_discrete","_lut","_luts","_opacity","_lutO","_lutsO","initCanvas","paintCanvas","_canvasContainer","initCanvasContainer","_canvasBg","createCanvas","appendChild","dom","canvasContainer","border","createElement","ctx","getContext","clearRect","globalCompositeOperation","createLinearGradient","addColorStop","fillStyle","fillRect","lineWidth","currentPos","nextPos","previousPos","from","to","beginPath","strokeStyle","stroke","closePath","lutsAvailable","available","luts","presetLuts","default","spectrum","hot_and_cold","gold","red","green","blue","walking_dead","random","muscle_bone","presetLutsO","linear","lowpass","bandpass","highpass","flat","linear_full","Texture","mapping","UVMapping","wrapS","wrapT","ClampToEdgeWrapping","magFilter","minFilter","NearestFilter","premultiplyAlpha","targetLUT","newLuts","targetLUTO","newLutsO","helpersMaterialMixin","_createMaterial","extraOptions","globalOptions","options","assign","_updateMaterial","_prepareTexture","_textures","m","_rawData","tex","DataTexture","rawData","textureSize","textureType","UnsignedByteType","flipY","HelpersProgressBarEventBased","emitter","_isFunction","emit","_emitter","initContainerDom","initEventListenner","loaded","totalFile","fn","toString","call","self","on","totalFiles","files","_domTotalFile","innerHTML","fetchLi","fileTag","file","append","className","id","marginBottom","fetchprogress","_domProcessList","fileFetchDom","total","liParent","result","parseprogress","fileParseDom","parsed","_domCurrentFile","_domCurrentProgress","containerDom","wrap","HelpersProgressBar","container","_container","_modes","load","name","parse","requestAnimationFrameID","_mode","_value","_total","_totalFiles","free","progressContainers","getElementsByClassName","parentNode","removeChild","cancelAnimationFrame","progressContainer","_domContainer","mode","bar","_domBar","updateUI","requestAnimationFrame","progress","progressBar","borderColor","classList","backgroundColor","zIndex","defaultSegmentation","HelpersSegmentationLut","segmentation","_segmentation","xCoord","yCoord","_invert","invert","_lutTexture","_intensityAuto","_interpolation","_index","_windowWidth","_windowCenter","_rescaleSlope","_rescaleIntercept","_spacing","_thickness","_thicknessMethod","_lowerThreshold","_upperThreshold","_borderColor","_planePosition","_planeDirection","_aaBBspace","_init","_prepared","_packed","_halfDimensions","_center","_toAABB","aaBBox","AABBox","centerAABBox","lps2AABB","prepared","packed","SliceGeometryContructor","uTextureSize","uDataDimensions","uWorldToData","uNumberOfChannels","uPixelType","pixelType","uBitsAllocated","uPackedPerPixel","packedPerPixel","uSpacing","uThickness","uThicknessMethod","uTextureContainer","textureUnits","updateIntensitySettings","updateIntensitySettingsUniforms","updateIntensitySetting","windowCenter","windowWidth","_minMax","uRescaleSlopeIntercept","uWindowCenterWidth","uLowerUpperThreshold","uInvert","uInterpolation","uLut","uTextureLUT","setting","frame","cartesianEquation","Vector4","dataToWorld","p1","p2","p3","v1","v2","normal","thickness","thicknessMethod","upperThreshold","lowerThreshold","lutTexture","intensityAuto","interpolation","uBorderColor","Color","helpersStack","_bBox","_slice","_border","_dummy","_autoWindowLevel","_outOfBounds","_orientationMaxIndex","_orientationSpacing","_prepareStack","_prepareBBox","_prepareSlice","_prepareBorder","_computeOrientationSpacing","_computeOrientationMaxIndex","_isIndexOutOfBounds","prepare","pack","HelpersBoundingBoxConstructor","HelpersBorderContructor","_prepareSliceIndex","_prepareSlicePosition","_prepareDirection","SliceHelperConstructor","rPosition","planePosition","planeDirection","outOfBounds","orientationMaxIndex","orientationSpacing","helpersVolumeRendering","_algorithm","_alphaCorrection","_shading","_shininess","_steps","_offset","_prepareGeometry","uWorldBBox","worldBoundingBox","uAlphaCorrection","uShading","uShininess","uSteps","uAlgorithm","BackSide","worldBBox","centerLPS","worldCenter","steps","alphaCorrection","shading","shininess","algorithm","LoadersBase","ProgressBar","_loaded","_totalLoaded","_parsed","_totalParsed","_data","_progressBar","fetch","requests","Promise","resolve","reject","request","XMLHttpRequest","open","crossOrigin","responseType","onloadstart","time","Date","onload","status","response","totalLoaded","statusText","onerror","onabort","ontimeout","onprogress","onloadend","Map","send","loadSequenceGroup","fetchSequence","all","then","rawdata","catch","loadSequence","Array","isArray","loadSequences","EventEmitter","PAKO","require","LoadersVolumesCornerstone","cornerstone","loader","loadAndCacheImage","image","cornerstoneImage","setTimeout","imageId","metaData","metaDataAll","dataParser","CornerstoneDataParser","volumeParser","series","ModelsSeries","seriesInstanceUID","transferSyntaxUID","seriesDate","seriesDescription","studyDate","studyDescription","numberOfFrames","modality","segmentationType","patientID","patientName","patientAge","patientBirthdate","patientSex","ModelsStack","spacingBetweenSlices","segmentationSegments","parseFrameClosure","parseFrame","ModelsFrame","sopInstanceUID","frameTime","ultrasoundRegions","pixelPaddingValue","pixelSpacing","sliceThickness","imageOrientation","imagePosition","instanceNumber","minMaxPixelData","referencedSegmentNumber","LoadersVolumes","_preprocess","dataset","mhdFile","filter","_filterByExtension","bind","rawFile","mhdBuffer","rawBuffer","Parser","_parser","rawHeader","extractPixelData","rightHanded","dimensionIndexValues","toUpperCase","ParsersNifti","ParsersDicom","ParsersMhd","ParsersNrrd","ParsersMgh","gzcompressed","shift","decompressedData","inflate","item","ModelsBase","_id","mergeModels","referenceArray","targetArray","_validateModelArray","targetLength","refLength","merge","model","validate","modelArray","_sopInstanceUID","_url","_stackID","_frameTime","_ultrasoundRegions","_rows","_columns","_dimensionIndexValues","_imagePosition","_imageOrientation","_rightHanded","_sliceThickness","_spacingBetweenSlices","_pixelPaddingValue","_pixelRepresentation","_pixelType","_pixelSpacing","_pixelAspectRatio","_pixelData","_instanceNumber","_bitsAllocated","_numberOfChannels","_dist","_referencedSegmentNumber","cosines","spacingXY","_compareArrays","pixelAspectRatio","column","row","getImageDataUrl","context","imageData","createImageData","_frameToCanvas","putImageData","toDataURL","params","padding","range","normalized","_pixelTo8Bit","packedValue","join","dist","_concatenationUID","_seriesInstanceUID","_transferSyntaxUID","_seriesNumber","_seriesDescription","_seriesDate","_studyDescription","_studyDate","_accessionNumber","_modality","_dimensionIndexSequence","_numberOfFrames","_rawHeader","_patientID","_patientName","_patientAge","_patientBirthdate","_patientSex","_segmentationType","_segmentationSegments","mergeSeries","computeNumberOfFrames","computeCosines","seriesContainer","binaryString","_uid","_textureSize","_textureUnits","POSITIVE_INFINITY","NEGATIVE_INFINITY","_regMatrix","_lps2IJK","_aabb2LPS","_lps2AABB","_dimensionsIJK","_halfDimensionsIJK","_origin","_xCosine","_yCosine","_zCosine","_packedPerPixel","_segmentationDefaultColor","_frameSegment","_segmentationLUT","_segmentationLUTO","prepareSegmentation","mergedFrames","_computeDistanceArrayMap","_sortDistanceArraySort","prevIndex","k","dict","parseInt","segmentNumber","recommendedDisplayCIELab","CoreColors","cielab2RGB","rgb","orderFrames","computeSpacing","_arrayToVector3","computeIJK2LPS","computeLPS2AABB","middleFrameIndex","middleFrame","computeMinMaxIntensities","packEchos","echos","packedEcho","_orderFrameOnDimensionIndicesArraySort","_sortInstanceNumberArraySort","_sortSopInstanceUIDArraySort","xySpacing","zSpacing","stackID","equals","nbVoxels","textureDimension","requiredTextures","ceil","voxelIndexStart","voxelIndexStop","ii","_packTo8Bits","_textureType","channels","startVoxel","stopVoxel","packIndex","frameIndex","inFrameIndex","frameDimension","channelOffset","raw","RGBAFormat","bitString","bitStringArray","RGBFormat","dims","world","world0","world7","minBBox","centerBBox","indexInDimensions","valueRescaleSlopeIntercept","regMatrix","segmentationLUT","segmentationLUTO","ModelsVoxel","_worldCoordinates","_dataCoordinates","_screenCoordinates","dataCoordinates","screenCoordinates","DicomParser","Jpeg","JpegBaseline","Jpx","openJPEG","_arrayBuffer","byteArray","_dataSet","parseDicom","string","studyInstanceUID","segmentSequence","x00620002","items","_recommendedDisplayCIELab","segmentationCode","_segmentationCode","dataSet","uint16","segmentLabel","segmentAlgorithmType","segmentationCodeDesignator","segmentationCodeValue","segmentationCodeMeaning","segment","x00082218","x0062000d","dataOffset","slice","CIELabScaled","CIELabNormalized","_findStringEverywhere","photometricInterpretation","intString","UtilsCore","referencedSegmentNumberElement","_findInGroupSequence","perFrameFunctionnalGroupSequence","x52009230","x2005140f","planeOrientationSequence","splittedSpacing","sequence","x0","uint32","y0","x1","y1","axisX","int32","axisY","unitsX","_getUnitsName","unitsY","double","frameIncrementPointer","frameRate","floatString","int16","highBit","_findFloatStringInFrameGroupSequence","frameContentSequence","x00209111","dimensionIndexValuesElt","x00209157","nbValues","inStackPositionNumber","philipsPrivateSequence","_decodePixelData","_convertColorSpace","subsequence","functionalGroupSequence","inSequence","_findStringInGroupSequence","tag","_findStringInFrameGroupSequence","targetString","petModule","_findStringInSequence","sequenceTag","_findFloatStringInGroupSequence","dataInGroupSequence","_decodeJ2K","_decodeRLE","_decodeJPEGLossless","_decodeJPEGBaseline","_decodeUncompressed","_swapFrame","framesAreFragmented","pixelDataElement","x7fe00010","fragments","getEncapsulatedImageFrame","basicOffsetTable","readEncapsulatedImageFrame","createJPEGBasicOffsetTable","readEncapsulatedPixelDataFromFragments","_decodeJpx","jpxImage","componentsCount","tiles","_decodeOpenJPEG","encodedPixelData","bytesPerPixel","signed","dataPtr","_malloc","writeArrayToMemory","imagePtrPtr","imageSizePtr","imageSizeXPtr","imageSizeYPtr","imageSizeCompPtr","ret","ccall","imagePtr","getValue","_free","src32","Int32Array","HEAP32","OpenJPEG","_jp2_decode","decoded","byteOutput","decoder","lossless","Decoder","decode","jpegBaseline","getData","getData16","pixelDataOffset","frameOffset","Uint32Array","newBuffer","newArray","bitStart","bitEnd","byteStart","bitStartOffset","byteEnd","targetBuffer","_interpretAsRGB","rgbLikeTypes","uncompressedData","rgbData","interpretAsRGB","rgbaIndex","rIndex","gIndex","bIndex","nPixels","ybrIndex","cb","cr","_swap16","_swap32","units","ParsersVolume","_buffer","_bufferPos","_dataPos","_version","_width","_height","_depth","_nframes","_type","MRI_UCHAR","_dof","_goodRASFlag","_spacingXYZ","_Xras","_Yras","_Zras","_Cras","_tr","_flipAngle","_te","_ti","_fov","_tags","_imageOrient","_readInt","_swapEndian","_readShort","_readFloat","dataSize","vSize","_readUChar","MRI_INT","MRI_FLOAT","MRI_SHORT","enc","TextDecoder","_tagReadStart","tagType","tagLen","tagValue","TAG_OLD_MGH_XFORM","TAG_MGH_XFORM","_readChar","first","fromArray","second","crossFirstSecond","third","angleTo","fcx","fcy","fcz","ui","sliceSize","len","tempBuff","getInt16","_readLong","shiftHigh","shiftLow","_swapendian","high","low","getInt8","getUint8","getFloat32","byteLength","TAG_OLD_SURF_GEOM","TAG_OLD_USEREALRAS","TAG_OLD_COLORTABLE","MRI_LONG","MRI_BITMAP","MRI_TENSOR","MRI_FLOAT_COMPLEX","MRI_DOUBLE_COMPLEX","MRI_RGB","TAG_CMDLINE","TAG_USEREALRAS","TAG_COLORTABLE","TAG_GCAMORPH_GEOM","TAG_GCAMORPH_TYPE","TAG_GCAMORPH_LABELS","TAG_SURF_GEOM","TAG_GROUP_AVG_SURFACE_AREA","TAG_AUTO_ALIGN","TAG_SCALAR_DOUBLE","TAG_PEDIR","TAG_MRI_FRAME","TAG_FIELDSTRENGTH","ParsersMHD","_header","lines","keyvalue","line","trim","DimSize","ElementSpacing","TransformMatrix","Offset","anatomicalOrientation","AnatomicalOrientation","ElementType","parseFloat","invertX","invertY","_decompressUncompressed","_niftiHeader","_niftiImage","_ordered","_orderedData","_qfac","NiftiReader","isNIFTI","readHeader","readImage","datatypeCode","numBitsPerVoxel","pixDims","qform_code","quatern_b","quatern_c","quatern_d","sform_code","rowX","affine","rowY","qoffset_x","qoffset_y","qoffset_z","scl_slope","scl_inter","_reorderData","totalNumPixels","tmp","numPixels2","pako","NrrdReader","_unpackedData","space","sizes","spaceDirections","spaceOrigin","encoding","unpackedData","segmentationFs","PresetsSegmentation","presetID","_presetID","_presets","presetSegs","fetchPreset","presets","addPreset","presetObj","presetsAvailable","Freesurfer","freesurferSegmentation","targetPreset","IntersectBox","_rayOrigin","_rayDirection","_aabbMin","_aabbMax","_tNear","_tFar","_intersect","api","baseFragment","_base","rayOrigin","rayDirection","aabbMin","aabbMax","tNear","tFar","computeDefinition","_functions","_name","_definition","ShadersBase","Texture3d","_dataValue","dataValue","content","Unpack","_packedData","packedData","upack8","upack16","upack32","upackIdentity","uInt8","uInt16","uInt32","uFloat32","InterpolationIdentity","_currentVoxel","currentVoxel","shadersInterpolation","gradient","InterpolationTrilinear","_gradient","_main","functions","main","property","uniform","typeGLSL","shaderInterpolation","uLutSegmentation","uTextureLUTSegmentation","uBorderWidth","uBorderMargin","uBorderDashLength","uTextureBackTest0","uTextureBackTest1","uOpacity0","uOpacity1","uType0","uType1","uTrackMouse","uMouse","shadersIntersectBox","uFrequence","uAmplitude","uAmbient","uAmbientColor","uSampleColorToAmbient","uSpecular","uSpecularColor","uDiffuse","uDiffuseColor","uSampleColorToDiffuse","uLightPosition","uLightPositionInCamera","uIntensity","getNumberValue","getNumberValues","getNumberString","defaultValue","minimumLength","Value","widgetsAngle","widgetsBase","targetMesh","_widgetType","_opangle","_moving","_domHovered","_defaultAngle","_line","_line2","_label","_handles","handle","WidgetsHandle","widgetsHandleFactory","active","tracking","_moveHandle","hide","onMove","onHover","addEventListeners","removeEventListeners","evt","hoverDom","hoverMesh","_hovered","hovered","cursor","onStart","_active","prevPosition","worldPosition","_dragged","onEnd","screenPosition","_selected","selected","createMesh","createDOM","Geometry","updateMeshColor","LineSegments","updateDOMColor","hideDOM","display","showDOM","updateColor","updateMeshPosition","updateDOM","lineData","getLineData","transform","transformX","transformY","transformAngle","line2Data","toFixed","paddingNormVector","normAngle","labelPadding","cos","paddingPoint","adjustLabelTransform","h","toggleDefaultAngle","_targetMesh","_worldPosition","widgetsAnnotation","_initialized","_movinglabel","_labelmoved","_labelhovered","_manuallabeldisplay","_meshline","_cone","_dashline","_labeltext","_labelOffset","_mouseLabelOffset","initOffsets","onResize","onHoverlabel","notonHoverlabel","changelabeltext","offsets","getMouseOffsets","screenX","screenY","setlabeltext","prompt","displaylabel","_conegeometry","CylinderGeometry","translate","rotateX","paddingVector","labelPosition","minLine","lineCL","line1L","borderTop","widgetsBiruler","_calibrationFactor","calibrationFactor","_distance","_distance2","_units","_label2","line1Center","line2Center","dashLineData","worldToScreen","distanceData","getDistanceData","distanceData2","title","hasAttribute","setAttribute","_colors","removeAttribute","text","angle2","label2Padding","paddingVector2","paddingPoint2","transform2","getDistances","widgetsCrossRuler","_distances","_line01","_normal","repositionOrtho","recalculateOrtho","initOrtho","initLineAndNormal","_camera","halfLength","normLine","normLength","activeInd","Ray","closestPointToPoint","isOutside","projectOnVector","getDimensions","getCoordinates","initCoordinates","fourth","intersectR","intersectS","distanceSqToSegment","setDefaultColor","WidgetsCss","widgetsEllipse","_area","_rectangle","_ellipse","updateRoI","createMaterial","measurementsContainer","meanSDContainer","maxMinContainer","areaContainer","vec01","ShapeGeometry","EllipseCurve","getPoints","clear","querySelector","roi","regions","_params","region0","getRegionByXY","region1","rectData","getRectData","labelTransform","getMeasurements","widgetsFreehand","_lines","createLine","updateDOMContent","pushPopHandle","updateMesh","updateDOMPosition","_shapeWarn","oldWarn","rest","apply","l","elementsNeedUpdate","isPointOnLine","pointA","pointB","pointToCheck","handle0","handle1","newhandle","isOnLine","same","cRegion","pRegion","ind","widgetsHandle","hideHandleMesh","_plane","_raycaster","_tracking","_mouse","_meshHovered","_screenPosition","intersectsHandle","intersectsTarget","getWorldDirection","CoreIntersections","forced","SphereGeometry","wireframeLinewidth","showMesh","hideMesh","widgetsPeakVelocity","_regions","_velocity","_initialRegion","_handle","isCorrectRegion","region","pvContainer","gradientContainer","usPosition","getPointInRegion","velocity","widgetsPolygon","_newHandleRequired","onDoubleClick","numHandles","widgetsPressureHalfTime","_vMax","_gMax","_pht","_mva","_dt","_ds","inActive","isCorrect","checkHandle","div","updateValues","usPosition0","getUsPoint","usPosition1","velocity0","velocity1","time0","time1","vMaxTime","phtVelocity","phtKoeff","dtKoeff","vMax","gMax","pht","mva","dt","ds","widgetsRectangle","PlaneGeometry","progection","computeBoundingSphere","widgetsRuler","widgetsVelocityTimeIntegral","_vMean","_gMean","_envTi","_vti","_extraInfo","_isHandleActive","_usPoints","finalize","splice","pointF","pointL","boundaries","xMin","xMax","yMin","yMax","pVelocity","pGradient","pTime","totalTime","vMaxContainer","vMeanContainer","gMaxContainer","gMeanContainer","envTiContainer","vtiContainer","infoContainer","vMean","gMean","envTi","vti","info","widgetsVoxelprobe","createVoxel","_voxel","lpsContainer","ijkContainer","valueContainer","updateVoxel","rasContainer"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;AClFA;;AAEA,kBAAkB,cAAc,uBAAuB;AACvD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB;AACrB,oBAAoB;AACpB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;AACrB,sBAAsB;AACtB,wBAAwB;;AAExB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,uBAAuB;AACtC;AACA,eAAe,YAAY;AAC3B,iBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA,OAAO;AACP,mBAAmB,mBAAmB;AACtC,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD;AACjD;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,QAAQ;AACvB;AACA;;AAEA;AACA,eAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,4BAA4B;AACtD,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,6BAA6B;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0DAA0D;AAC1D;AACA,4BAA4B,qCAAqC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA,eAAe,+CAA+C;AAC9D,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qBAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B,4BAA4B;AAC1D;AACA,gCAAgC,0BAA0B;AAC1D;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,YAAY;AAC/B,qBAAqB,WAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B,4BAA4B;AAC1D;AACA,gCAAgC,0BAA0B;AAC1D;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,YAAY;AAC/B,qBAAqB,WAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA,C;;;;;;;;;;;;AC1/BA;AACA,kBAAkB,cAAc,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,6CAA6C;AAC7C,8CAA8C;AAC9C,8CAA8C;AAC9C;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yCAAyC,QAAQ;AACjD;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,UAAU;AAC5B,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA,6CAA6C,QAAQ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;;AAEA;;AAEA;AACA;AACA,YAAY,iBAAiB;AAC7B,cAAc,kCAAkC;AAChD,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;;AAEA;;AAEA;AACA;AACA,YAAY,kCAAkC;AAC9C,cAAc,iBAAiB;AAC/B,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kCAAkC;AACjD;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,kCAAkC;AAC9C,cAAc,+BAA+B;AAC7C,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,yCAAyC;AACrD,cAAc,yCAAyC;AACvD,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA,kBAAkB,+BAA+B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA,cAAc,yCAAyC;AACvD,gBAAgB,yCAAyC;AACzD,kBAAkB,+BAA+B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,QAAQ;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2CAA2C,QAAQ;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;;AAEhC;AACA;AACA;AACA,mCAAmC,QAAQ;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,QAAQ;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC,uCAAuC;AACvC;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,+BAA+B;AAClD;;AAEA;AACA;AACA;AACA;;AAEA,sDAAsD,QAAQ;AAC9D;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA,OAAO,OAAO;AACd,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;AAC3D;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kBAAkB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,qBAAqB,kBAAkB;AACvC;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,aAAa;AACrC,yBAAyB,WAAW;AACpC;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAuC,iBAAiB;AACxD;AACA,yBAAyB,WAAW;AACpC,wCAAwC,mBAAmB;;AAE3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA,yBAAyB,WAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,SAAS;AACxC;AACA;;AAEA;AACA;AACA,6BAA6B,WAAW;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,QAAQ;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,cAAc;AACtC;AACA,mBAAmB,aAAa;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B,YAAY;AACxC;AACA;AACA;AACA,OAAO;AACP,0BAA0B,YAAY;AACtC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,WAAW;AAChC;AACA;AACA;AACA,OAAO;AACP,mBAAmB,WAAW;AAC9B;AACA;AACA;AACA,0CAA0C,QAAQ;AAClD,yBAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,QAAQ;AAC3C,yBAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,uBAAuB,KAAK;AAC5B;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,KAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,KAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,KAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,KAAK;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,mCAAmC,KAAK;AACxC;AACA;;AAEA,mCAAmC,KAAK;AACxC;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA,CAAC;;;AAGD,kBAAkB,cAAc,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,4CAA4C;AACjD,KAAK,4CAA4C;AACjD,KAAK,4CAA4C;AACjD,KAAK,6CAA6C;AAClD,KAAK,6CAA6C;AAClD,KAAK,8CAA8C;AACnD,KAAK,4CAA4C;AACjD,KAAK,6CAA6C;AAClD,KAAK,6CAA6C;AAClD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK,8CAA8C;AACnD,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED,kBAAkB,cAAc,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA,sDAAsD;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;AACD;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,MAAM;AAC3B,mBAAmB,OAAO;AAC1B,sBAAsB,OAAO;AAC7B,qBAAqB,OAAO;AAC5B,qBAAqB,OAAO;AAC5B,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,aAAa,aAAa;AAC/C;AACA;AACA,oBAAoB,aAAa,aAAa;AAC9C;AACA;AACA,oBAAoB,cAAc,cAAc;AAChD;AACA;AACA;AACA,oBAAoB,aAAa,aAAa;AAC9C;AACA;;AAEA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB;AACA,aAAa;AACb,aAAa;AACb;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,oBAAoB,MAAM;AAC1B,iBAAiB,MAAM;AACvB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA,GAAG;AACH,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,OAAO;AACpB,cAAc,QAAQ;AACtB,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB;;AAEA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,gBAAgB,EAAE;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA,0BAA0B;AAC1B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA,qBAAqB,qCAAqC;AAC1D;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qCAAqC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,2CAA2C,gBAAgB,EAAE;AAC7D;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,mDAAmD,gBAAgB,EAAE;AACrE;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,6BAA6B,oBAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,2CAA2C;AAC3C,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,aAAa,OAAO;AACpB,aAAa,KAAK;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,KAAK;AAClB,aAAa,MAAM;AACnB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA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AA8B;AAC9B;AACA,mDAAmD;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,gDAAgD;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gCAAgC,oBAAoB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACzeY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,SAAS;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,UAAU;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,aAAa,mBAAO,CAAC,oDAAW;AAChC,cAAc,mBAAO,CAAC,gDAAS;AAC/B,cAAc,mBAAO,CAAC,gDAAS;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,mDAAmD;AACxE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD,EAAE;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wBAAwB,QAAQ;AAChC;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA,GAAG;AACH;AACA,eAAe,SAAS;AACxB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;A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mB,MAAM,kCAAkC,OAAO,sBAAsB,+BAA+B,QAAQ,iBAAiB,aAAa,sCAAsC,SAAS,0BAA0B,gBAAgB,8LAA8L,4KAA4K,OAAO,iDAAiD,+BAA+B,QAAQ,iBAAiB,aAAa,sCAAsC,SAAS,gJAAgJ,mEAAmE,cAAc,0BAA0B,WAAW,+NAA+N,iBAAiB,aAAa,sCAAsC,SAAS,+rBAA+rB,iQAAiQ,cAAc,0BAA0B,WAAW,OAAO,0hCAA0hC,qmCAAqmC,GAAG;AAC9glG,2C;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,GAAG;AACH,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;AC7SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,QAAQ,WAAW;;AAEnB;AACA;AACA,QAAQ,UAAU;;AAElB;AACA;;;;;;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;;;AAGA;AACA;AACA,mBAAmB;AACnB,2BAA2B;AAC3B,mBAAmB;AACnB;;;AAGA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;AACA,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,6DAA6D,KAA8B,IAAI,mBAAO,CAAC,wFAAoB,IAAI,SAAI;AACnI,uEAAuE,KAA8B,IAAI,mBAAO,CAAC,kGAAyB,IAAI,SAAI;AAClJ,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,2DAA2D,KAA8B,IAAI,mBAAO,CAAC,sFAAmB,IAAI,SAAI;AAChI,+CAA+C,KAA8B,IAAI,mBAAO,CAAC,wEAAY,IAAI,SAAI;;;AAG7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA,qBAAqB;AACrB,wDAAwD;AACxD,wDAAwD;AACxD,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;;;AAIA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,6BAA6B;AAC7B;AACA;;AAEA;;AAEA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,sBAAsB;AACtB;AACA;;AAEA,uBAAuB,QAAQ;AAC/B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sBAAsB;AACtB;;AAEA,4BAA4B,+BAA+B;AAC3D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA,sDAAsD;AACtD;AACA;AACA;AACA,KAAK;;AAEL;AACA;;;;AAIA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA,mBAAmB,uBAAuB;AAC1C,uBAAuB,6BAA6B;AACpD;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAuB,QAAQ;AAC/B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,eAAe,oBAAoB;AACnC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;;AAEA;AACA,mEAAmE;AACnE;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AC1zBA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;AACA,+DAA+D,KAA8B,IAAI,mBAAO,CAAC,0FAAqB,IAAI,SAAI;AACtI,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;;;AAG7H;AACA;AACA,yBAAyB;AACzB,kBAAkB;AAClB,kBAAkB;AAClB,qBAAqB;AACrB,uBAAuB;AACvB;;;;AAIA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;AACA,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,+CAA+C,KAA8B,IAAI,mBAAO,CAAC,wEAAY,IAAI,SAAI;;;AAG7G;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;;AAEA;;;AAGA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,QAAQ;AAC3B;AACA;AACA;;AAEA,mBAAmB,QAAQ;AAC3B,uBAAuB,qBAAqB;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,eAAe,OAAO,QAAQ;AAC9B,mBAAmB,UAAU;AAC7B,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;;AAEA,eAAe,SAAS;AACxB;AACA;;AAEA;AACA;;AAEA,eAAe,QAAQ,QAAQ;AAC/B,mBAAmB,UAAU;AAC7B,uBAAuB,uBAAuB;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACzLA;AACA;;AAEa;;AAEb;AACA;AACA;AACA,+DAA+D,KAA8B,IAAI,mBAAO,CAAC,0FAAqB,IAAI,SAAI;AACtI,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,mDAAmD,KAA8B,IAAI,mBAAO,CAAC,4EAAc,IAAI,SAAI;AACnH,2DAA2D,KAA8B,IAAI,mBAAO,CAAC,sFAAmB,IAAI,SAAI;AAChI,6DAA6D,KAA8B,IAAI,mBAAO,CAAC,wFAAoB,IAAI,SAAI;AACnI,uEAAuE,KAA8B,IAAI,mBAAO,CAAC,kGAAyB,IAAI,SAAI;AAClJ,+DAA+D,KAA8B,IAAI,mBAAO,CAAC,0FAAqB,IAAI,SAAI;AACtI,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,+CAA+C,KAA8B,IAAI,mBAAO,CAAC,wEAAY,IAAI,SAAI;;;AAG7G;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;AACA,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,+CAA+C,KAA8B,IAAI,mBAAO,CAAC,wEAAY,IAAI,SAAI;;;AAG7G;AACA;AACA,wBAAwB;AACxB,iBAAiB;AACjB,8DAA8D;;AAE9D;AACA;AACA;AACA;AACA;;;;AAIA;;AAEA;AACA;;AAEA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,QAAQ;AACvB;AACA;AACA;;;AAGA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT,uBAAuB,QAAQ;AAC/B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;;;AAGA;AACA;AACA,sBAAsB;AACtB,sBAAsB;AACtB,yBAAyB;AACzB;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;AACA,yDAAyD,KAA8B,IAAI,mBAAO,CAAC,oFAAkB,IAAI,SAAI;AAC7H,+DAA+D,KAA8B,IAAI,mBAAO,CAAC,0FAAqB,IAAI,SAAI;;;AAGtI;AACA;AACA;AACA;AACA,qBAAqB;AACrB,uBAAuB;AACvB,yBAAyB;AACzB;AACA;;;AAGA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA,eAAe,kBAAkB;AACjC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEa;;AAEb;AACA;AACA;;;AAGA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,yBAAyB;AAC5C;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AC3Fa;;AAEb;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;ACtBa;;AAEb;;AAEA;;;;;;;;;;;;;ACJa;;AAEb;;AAEA,YAAY,mBAAO,EAAE,0DAAY;;;AAGjC;;AAEA;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;ACpCa;;AAEb;;AAEA,WAAW,mBAAO,EAAE,0EAAoB;AACxC,WAAW,mBAAO,EAAE,0EAAoB;AACxC,UAAU,mBAAO,EAAE,sDAAU;AAC7B,YAAY,mBAAO,EAAE,0DAAY;AACjC,WAAW,mBAAO,EAAE,kFAAwB;AAC5C,WAAW,mBAAO,EAAE,gFAAuB;AAC3C,aAAa,mBAAO,EAAE,4EAAqB;AAC3C,WAAW,mBAAO,EAAE,2EAAW;AAC/B,YAAY,mBAAO,EAAE,6EAAY;;;AAGjC;;AAEA,eAAe;;;AAGf;;AAEA;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,0BAA0B;AAC1B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;ACxHa;;AAEb;;AAEA,mBAAmB;AACnB,kBAAkB;;;AAGlB;;AAEA;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gEAAgE;AAChE,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;ACrDa;;AAEb;;AAEA;;;;;;;;;;;;;;ACHA;AACA;;AAEa;;AAEb;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA,iCAAiC,KAA8B,IAAI,mBAAO,CAAC,iEAAa,IAAI,SAAI;AAChG,iCAAiC,KAA8B,IAAI,mBAAO,CAAC,iEAAa,IAAI,SAAI;AAChG,+BAA+B,KAA8B,IAAI,mBAAO,CAAC,uEAAgB,IAAI,SAAI;;AAEjG,qBAAqB,KAA8B,IAAI,mBAAO,CAAC,0CAAM,IAAI,SAAI;;;;AAI7E;;AAEA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA,WAAW,0BAA0B;AACrC,aAAa;AACb;AACA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,0BAA0B;AACrC,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,0BAA0B;AACrC,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA,WAAW,0BAA0B;AACrC,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;AChNA;AACA;;AAEa;;AAEb;;AAEA;AACA,+BAA+B,KAA8B,IAAI,mBAAO,CAAC,uEAAgB,IAAI,SAAI;;;;AAIjG;;AAEA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB,cAAc,SAAS;AACvB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,SAAS;AACvB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,uBAAuB;AACrC,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,cAAc,SAAS;AACvB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+CAA+C;AAC/C,gDAAgD;AAChD;;;AAGA;;AAEA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uDAAuD;AACvD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,YAAY;AAChC,uBAAuB,WAAW;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;;AAGA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;;AAGA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;;AAGA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB;;AAExB;AACA;AACA;AACA,eAAe;AACf,gBAAgB;AAChB,KAAK;;AAEL,yBAAyB;AACzB;;AAEA;AACA,+BAA+B;AAC/B;AACA;;AAEA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA,WAAW,uBAAuB;AAClC,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iEAAiE;;AAEjE,iCAAiC;;AAEjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,qDAAqD;AACrD,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,uBAAuB;AACvB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,eAAe,QAAQ,UAAU;AACjC,mBAAmB,QAAQ,UAAU;AACrC;AACA,2BAA2B,QAAQ,UAAU;AAC7C;AACA;AACA,oCAAoC,QAAQ,UAAU;AACtD,wCAAwC,QAAQ,UAAU;AAC1D,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA,sEAAsE;AACtE;AACA;;AAEA;AACA;;AAEA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0CAA0C,mBAAmB;;AAE7D;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB,mBAAmB,OAAO;AAC1B;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;;AAGA;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;AC/1BA;AACA;;AAEa;;AAEb;;AAEA;AACA,+BAA+B,KAA8B,IAAI,mBAAO,CAAC,uEAAgB,IAAI,SAAI;AACjG,iCAAiC,KAA8B,IAAI,mBAAO,CAAC,iEAAa,IAAI,SAAI;;;AAGhG;;AAEA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB,cAAc,SAAS;AACvB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,SAAS;AACvB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,uBAAuB;AACrC,cAAc,OAAO;AACrB,cAAc,SAAS;AACvB,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;;AAEA;AACA;AACA,0EAA0E;;;;AAI1E;;AAEA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uDAAuD;AACvD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,YAAY;AAChC,uBAAuB,WAAW;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;;AAIA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;;;AAIA;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;;;;AAIA;AACA;AACA,WAAW,uBAAuB;AAClC,aAAa;AACb;AACA;;;;AAIA;;;;AAIA;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;AC1YA;AACA;;AAEa;;AAEb;;AAEA;AACA;;;;AAIA;;AAEA;AACA;AACA;;;;AAIA;;AAEA;AACA;;AAEA,qBAAqB,WAAW;AAChC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;;AAEA,gCAAgC,UAAU;AAC1C;AACA;;AAEA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA,mBAAmB,yBAAyB;AAC5C;AACA;;AAEA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AC7Ja;AACb,aAAa,mBAAO,CAAC,+CAAQ;;AAE7B;AACA,2BAA2B,EAAE;AAC7B;AACA;;AAEA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,+CAA+C;;AAE/C;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC;AACjC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,2BAA2B;AAC3B;;AAEA;AACA;AACA,YAAY,qBAAqB;AACjC;AACA,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA,+CAA+C;AAC/C,kDAAkD;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA,KAAK;AACL,uBAAuB;AACvB;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qCAAqC,0FAA0F,qBAAqB;AACpJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,4BAA4B;AAC5B,0EAA0E;AAC1E;AACA;AACA,aAAa;AACb,oBAAoB;AACpB;AACA,SAAS,0BAA0B;AACnC,gBAAgB;AAChB,SAAS;AACT,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uCAAuC,kCAAkC,EAAE,EAAE;AAC7E;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;;AAEA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS,6BAA6B;AACtC;AACA,SAAS;AACT,2DAA2D;AAC3D;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,8GAA8G,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,8GAA8G,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA,sCAAsC,8GAA8G,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,8GAA8G,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,6HAA6H,EAAE;AACvL,SAAS;AACT,0DAA0D,4DAA4D,EAAE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,6HAA6H,EAAE;AACvL,SAAS;AACT,0DAA0D,4DAA4D,EAAE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uCAAuC;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,OAAO;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,sBAAsB,YAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,YAAY;AAClC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;AACA,YAAY,cAAc;AAC1B;AACA;AACA;AACA;;;;;;;;;;;;;AC7tCA;AACa;;AAEb,gBAAgB,mBAAO,CAAC,mEAAoB;;AAE5C,gBAAgB,mBAAO,CAAC,yDAAe;AACvC,gBAAgB,mBAAO,CAAC,yDAAe;AACvC,gBAAgB,mBAAO,CAAC,uEAAsB;;AAE9C;;AAEA;;AAEA;;;;;;;;;;;;;ACba;;;AAGb,mBAAmB,mBAAO,CAAC,+DAAgB;AAC3C,mBAAmB,mBAAO,CAAC,+DAAgB;AAC3C,mBAAmB,mBAAO,CAAC,iEAAiB;AAC5C,mBAAmB,mBAAO,CAAC,iEAAiB;AAC5C,mBAAmB,mBAAO,CAAC,+DAAgB;;AAE3C;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA,8BAA8B;AAC9B;AACA,qBAAqB,8BAA8B;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,eAAe;;AAElB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB;AAClB,mBAAmB;AACnB,sBAAsB;AACtB,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,cAAc;;AAEjC;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,qBAAqB,oBAAoB;;AAEzC;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;;;;;;;;;;;AC/Ya;;;AAGb,mBAAmB,mBAAO,CAAC,+DAAgB;AAC3C,mBAAmB,mBAAO,CAAC,+DAAgB;AAC3C,mBAAmB,mBAAO,CAAC,iEAAiB;AAC5C,mBAAmB,mBAAO,CAAC,mEAAkB;AAC7C,mBAAmB,mBAAO,CAAC,iEAAiB;AAC5C,mBAAmB,mBAAO,CAAC,+DAAgB;AAC3C,mBAAmB,mBAAO,CAAC,iEAAiB;;AAE5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA,8BAA8B;AAC9B;AACA,qBAAqB,8BAA8B;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG,eAAe;;AAElB;;AAEA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB,mBAAmB;AACnB,sBAAsB;AACtB,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,cAAc;AACjC;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sDAAsD;;AAEtD;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,kEAAkE;;AAEvF;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,qBAAqB,oBAAoB;;AAEzC;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;;;;;;;;;;;ACjaa;;;AAGb;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,kBAAkB,UAAU;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,4BAA4B,YAAY;AACxC,qBAAqB,8BAA8B;AACnD;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,OAAO;AACzC;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,OAAO;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACrGA;AACa;;;AAGb,YAAY,mBAAO,CAAC,yDAAU;;;AAG9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK,wCAAwC,EAAE,aAAa,sBAAsB;AAClF,KAAK,oDAAoD,EAAE,aAAa,0BAA0B;;;AAGlG;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA,kCAAkC;;;AAGlC;AACA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA,mBAAmB,qBAAqB,UAAU;;AAElD;AACA;AACA,oBAAoB,0BAA0B,gBAAgB,UAAU;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,0BAA0B,UAAU;;AAExD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,kBAAkB;;AAE3C;AACA;AACA,kDAAkD,OAAO;;AAEzD;AACA;AACA,gBAAgB,YAAY;;AAE5B;AACA;AACA,kBAAkB,YAAY;;AAE9B;AACA;;;;;;;;;;;;;ACxLa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;;AAGA;;;;;;;;;;;;;AC/Ba;;;AAGb;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACjDa;;AAEb;AACA;AACA;;;AAGA;AACA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;;AAEA,mBAAmB,SAAS;AAC5B;AACA;;AAEA,sBAAsB;AACtB;;;AAGA;;;;;;;;;;;;;ACxCa;;AAEb,cAAc,mBAAO,CAAC,gEAAiB;AACvC,cAAc,mBAAO,CAAC,sDAAS;AAC/B,cAAc,mBAAO,CAAC,0DAAW;AACjC,cAAc,mBAAO,CAAC,sDAAS;AAC/B,cAAc,mBAAO,CAAC,4DAAY;;AAElC;AACA;;;AAGA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;;;AAGA;AACA;;AAEA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;AAC1B,0BAA0B;AAC1B,0BAA0B;AAC1B,0BAA0B;;AAE1B,mBAAmB;;AAEnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,sBAAsB,qBAAqB,cAAc,EAAE;;;AAG/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,YAAY;AAC/B,kBAAkB,UAAU;;AAE5B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,wBAAwB;AACxB,YAAY;AACZ,UAAU;AACV,+BAA+B;AAC/B,gCAAgC;AAChC;AACA;;AAEA,sBAAsB;;AAEtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;;AAE3D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,aAAa;;AAEb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;;AAEnE;AACA,yDAAyD;AACzD;;AAEA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,0DAA0D;AAC1D;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,aAAa;;AAEb;;AAEA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,OAAO,EAAE;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;;AAEA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX,mBAAmB;;AAEnB;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,OAAO,EAAE;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oEAAoE;AACpE;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,0DAA0D;AAC1D;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB;AACrB,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,mBAAmB;AACnB,kBAAkB;AAClB,0BAA0B;AAC1B,4BAA4B;AAC5B,uBAAuB;AACvB,mBAAmB;AACnB,gBAAgB;AAChB,qBAAqB;AACrB,mBAAmB;AACnB,2BAA2B;AAC3B,uBAAuB;;AAEvB,kBAAkB;AAClB,kBAAkB;AAClB,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;;AAEnB,iBAAiB;AACjB,qBAAqB;AACrB,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB,sBAAsB;AACtB,2BAA2B;AAC3B,oBAAoB;AACpB,uBAAuB;AACvB,qBAAqB;;AAErB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB,oBAAoB;;AAEpB;AACA;;AAEA,sBAAsB;;AAEtB;;AAEA;;AAEA,2CAA2C;AAC3C,6CAA6C;AAC7C,4CAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;;AAEvB;AACA;AACA;;AAEA,0BAA0B;AAC1B,+CAA+C;AAC/C;;AAEA,oBAAoB;AACpB,oBAAoB;AACpB;AACA;AACA;;AAEA,gDAAgD;AAChD;AACA;AACA;;AAEA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB,sBAAsB;AACtB,mBAAmB;AACnB,kBAAkB;;;AAGlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,6BAA6B,uBAAuB;AACpD,8BAA8B,uBAAuB;AACrD;AACA;AACA;;;AAGA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;;AAEA;AACA,aAAa;AACb;AACA;;;AAGA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB;;AAErB,sCAAsC;;AAEtC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB,qBAAqB;AACrB;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,6BAA6B,uBAAuB;AACpD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;;AAEnC;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA,8BAA8B;;AAE9B,2BAA2B,aAAa;AACxC,oBAAoB,qBAAqB;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oDAAoD;AACpD;AACA;;AAEA,aAAa;;AAEb;AACA;AACA,qBAAqB;AACrB,yBAAyB;AACzB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvzDa;;;AAGb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACvCa;;AAEb;AACA,aAAa;AACb,cAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,WAAW;AACX,WAAW;AACX,UAAU;AACV,UAAU;AACV;AACA,WAAW;AACX;AACA,YAAY;AACZ,YAAY;AACZ,YAAY;AACZ;AACA,eAAe;AACf,WAAW;AACX,WAAW;AACX,YAAY;AACZ,YAAY;AACZ,YAAY;AACZ,YAAY;AACZ,WAAW;AACX,SAAS;AACT;AACA,UAAU;AACV,WAAW;AACX,WAAW;AACX;;;AAGA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,GAAG;AAClB;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,4BAA4B;AAC5B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA,gCAAgC;AAChC;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,mBAAmB;AACnB,qCAAqC;AACrC;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,mBAAmB;AACnB;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA,qBAAqB;AACrB,uCAAuC;AACvC;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,mBAAmB;AACnB,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,kBAAkB;AAClB;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY;AACZ;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrUa;;;AAGb,oBAAoB,mBAAO,CAAC,gEAAiB;AAC7C,oBAAoB,mBAAO,CAAC,0DAAW;AACvC,oBAAoB,mBAAO,CAAC,sDAAS;AACrC,oBAAoB,mBAAO,CAAC,0DAAW;AACvC,oBAAoB,mBAAO,CAAC,4DAAY;;AAExC;AACA;AACA;;AAEA;AACA;;;AAGA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;;AAGA,gBAAgB;AAChB,iBAAiB;AACjB,gBAAgB;AAChB,cAAc;AACd,iBAAiB;AACjB,iBAAiB;AACjB,gBAAgB;AAChB,mBAAmB;AACnB,gBAAgB;AAChB,mBAAmB;AACnB,iBAAiB;AACjB,qBAAqB;AACrB,uBAAuB;AACvB,uBAAuB;AACvB,sBAAsB;AACtB,qBAAqB;AACrB,sBAAsB;AACtB,wBAAwB;AACxB,yBAAyB;AACzB,yBAAyB;AACzB,wBAAwB;AACxB,2BAA2B;AAC3B,yBAAyB;AACzB,4BAA4B;AAC5B,0BAA0B;AAC1B,wBAAwB;AACxB,kBAAkB;AAClB,mBAAmB;AACnB,iBAAiB;AACjB,gBAAgB;AAChB,gBAAgB;AAChB,iBAAiB;;AAEjB;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,gBAAgB;AAChB,oBAAoB;AACpB,gBAAgB;AAChB,wBAAwB;AACxB,iBAAiB;AACjB,gBAAgB;AAChB,iBAAiB;AACjB,iBAAiB;AACjB;AACA,mBAAmB;;AAEnB;AACA,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,qBAAqB;;AAErB;AACA,gBAAgB;AAChB,gBAAgB;;AAEhB;AACA,kBAAkB;AAClB,kBAAkB;;AAElB;AACA,iBAAiB;;AAEjB;AACA,sBAAsB;AACtB,uBAAuB;AACvB,mBAAmB;AACnB,oBAAoB;;AAEpB;AACA,iBAAiB;AACjB,gBAAgB;AAChB,iBAAiB;AACjB,gBAAgB;AAChB,mBAAmB;;AAEnB,mCAAmC;AACnC,mCAAmC;;AAEnC;AACA;AACA;AACA;AACA,yCAAyC;AACzC,qBAAqB;AACrB,sBAAsB;AACtB,gBAAgB;AAChB,gBAAgB;AAChB,eAAe;AACf;;AAEA;AACA;;AAEA,6BAA6B,uBAAuB;AACpD;AACA;AACA,gBAAgB;AAChB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6BAA6B,uBAAuB;AACpD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,6BAA6B,uBAAuB;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAc,uBAAuB;AACrC,sBAAsB;;AAEtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB;;AAEpB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uBAAuB,uBAAuB;AAC9C,uBAAuB,uBAAuB;AAC9C,uBAAuB,uBAAuB;AAC9C,uBAAuB,uBAAuB;;AAE9C,uEAAuE,UAAU;;AAEjF;AACA;AACA,sBAAsB,uBAAuB;;AAE7C,uEAAuE,UAAU;;AAEjF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,iBAAiB;AACzD,sCAAsC,qBAAqB;AAC3D;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;AACpB,WAAW;AACX,UAAU;AACV,iBAAiB;AACjB,WAAW;AACX,WAAW;AACX,gBAAgB;AAChB,WAAW;AACX,WAAW;AACX;AACA,eAAe;AACf,mCAAmC;AACnC,aAAa;AACb,mCAAmC;AACnC,UAAU;AACV,UAAU;AACV,+BAA+B;AAC/B;;AAEA,QAAQ;;AAER;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B,qBAAqB,EAAE;;;AAGnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,aAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,iBAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,aAAa;AACvC,0BAA0B,aAAa;AACvC,yBAAyB,iBAAiB;AAC1C,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,kEAAkE;AAClE;AACA;AACA;;AAEA,oCAAoC,OAAO;AAC3C;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,OAAO;;AAEtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gEAAgE;AAChE;AACA;AACA;;AAEA,gCAAgC,OAAO;AACvC;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA,gDAAgD,OAAO;AACvD;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kEAAkE;AAClE;AACA;AACA;;AAEA,kCAAkC,OAAO;AACzC;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA,gDAAgD,OAAO;AACvD;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB;AAC3D,8BAA8B,aAAa;AAC3C;AACA;AACA;AACA;AACA,aAAa;AACb,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA;AACA,OAAO;AACP,+BAA+B,kBAAkB;AACjD;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B,uBAAuB;AACpD;AACA,+BAA+B,uBAAuB;;AAEtD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6DAA6D,uBAAuB;AACpF;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjgDa;;;AAGb,YAAY,mBAAO,CAAC,gEAAiB;;AAErC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;;AAEzB,cAAc;AACd,cAAc;AACd,uBAAuB;AACvB,eAAe;AACf,eAAe;AACf,eAAe;AACf,eAAe;AACf,eAAe;AACf,eAAe;AACf,WAAW;AACX,WAAW;AACX,UAAU;AACV,WAAW;AACX,WAAW;AACX,kBAAkB;AAClB;AACA,iBAAiB;AACjB,UAAU;AACV,2CAA2C,eAAe;AAC1D,0CAA0C,eAAe;AACzD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA,eAAe,aAAa;AAC5B;AACA;;AAEA;AACA;AACA,qBAAqB,UAAU;AAC/B,2BAA2B,OAAO;AAClC;AACA;AACA;AACA;AACA,kBAAkB;AAClB,sCAAsC,2BAA2B;AACjE,uCAAuC;AACvC,wCAAwC;AACxC;;;AAGA;AACA;AACA;AACA;;AAEA;AACA,aAAa;AACb;AACA,eAAe,WAAW;AAC1B,2BAA2B,OAAO;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA,eAAe,eAAe;AAC9B;AACA;;AAEA;AACA,eAAe,aAAa;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA,GAAG,OAAO;AACV;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX,UAAU;AACV,YAAY;AACZ,qBAAqB;AACrB,cAAc;AACd,WAAW;AACX,WAAW;AACX,mBAAmB;AACnB,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACtUa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACZa;;;AAGb,YAAY,mBAAO,CAAC,gEAAiB;;AAErC;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B;AAC9B;;AAEA;;;AAGA,oBAAoB,sBAAsB,qBAAqB,cAAc,EAAE;;AAE/E;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA,kCAAkC;AAClC,iCAAiC;AACjC,iCAAiC;AACjC,4BAA4B;AAC5B,iCAAiC;;AAEjC;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA,2BAA2B;AAC3B,oBAAoB;AACpB,6BAA6B;AAC7B;;;;AAIA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,WAAW;AACX,WAAW;AACX,YAAY;AACZ,QAAQ;AACR,mBAAmB;;AAEnB,gBAAgB,kBAAkB;AAClC;AACA;;AAEA;AACA;AACA;AACA,+CAA+C;;AAE/C,0BAA0B,eAAe;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,UAAU,EAAE;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;;AAE/B;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C,uBAAuB;AACvB,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,yBAAyB,YAAY;AACrC;AACA;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,mBAAmB;AACnB,qBAAqB;AACrB;AACA,0CAA0C;AAC1C,eAAe;AACf,WAAW;AACX,QAAQ;;AAER;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gBAAgB;AAC7B;AACA,oBAAoB,UAAU;AAC9B;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,QAAQ;AACR,WAAW;AACX,aAAa;AACb,WAAW;AACX,WAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA,eAAe,8BAA8B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA,eAAe,8BAA8B;AAC7C;AACA;AACA;AACA;AACA,aAAa;AACb,QAAQ,gBAAgB;AACxB;AACA,eAAe,oCAAoC;AACnD;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,kBAAkB;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,aAAa;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA,QAAQ;;AAER;AACA,aAAa,aAAa,QAAQ,iCAAiC;AACnE,aAAa,aAAa,QAAQ,iCAAiC;AACnE,aAAa,cAAc,OAAO,+BAA+B;;AAEjE;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,eAAe;AACf,kBAAkB;AAClB;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,YAAY;AACZ;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,OAAO;;AAEtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA,WAAW;AACX,SAAS;AACT,aAAa;AACb,WAAW;AACX,YAAY;;AAEZ;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC;AAChC;AACA,OAAO;AACP;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA,kCAAkC;AAClC;AACA,eAAe;AACf;AACA;;AAEA,kCAAkC;AAClC;AACA;AACA;AACA,oCAAoC;AACpC;AACA,OAAO;;AAEP;AACA;AACA;;AAEA,KAAK;AACL;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,oBAAoB;AACpB,WAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,WAAW;AACxB;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uCAAuC,QAAQ,OAAO,wBAAwB;;AAE9E;AACA;AACA;AACA,eAAe;AACf;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA,8BAA8B;;AAE9B,6BAA6B;AAC7B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,mBAAmB;AACnB;AACA,QAAQ;AACR,mBAAmB;AACnB,aAAa;;AAEb,wCAAwC;;AAExC,gBAAgB;AAChB,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA,gDAAgD;;AAEhD,aAAa,eAAe;AAC5B;AACA;;AAEA;AACA;;AAEA,KAAK;AACL;;AAEA,KAAK;;AAEL,+BAA+B,kCAAkC;AACjE;;AAEA,KAAK;AACL;;AAEA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,mBAAmB;AACnB;AACA,QAAQ;AACR,mBAAmB;AACnB,aAAa;;AAEb,wCAAwC;;AAExC,gBAAgB;AAChB,oBAAoB;AACpB,oBAAoB;;AAEpB,+BAA+B;AAC/B;AACA;AACA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;;AAEA;AACA;;AAEA,KAAK;AACL,UAAU,iCAAiC,EAAE;;AAE7C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC,kBAAkB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,gCAAgC;AAChC,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;;AAEA,wCAAwC;AACxC;;AAEA,wCAAwC;AACxC;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,IAAI,MAAM,GAAG,MAAM,GAAG;AAChD;AACA;AACA;AACA,SAAS,IAAI,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,MAAM,IAAI;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,iBAAiB;AACjB,WAAW;AACX;AACA,wDAAwD;AACxD,uCAAuC;AACvC;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,iBAAiB;AACjB,WAAW;AACX;AACA,4BAA4B;AAC5B,sBAAsB;;AAEtB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kCAAkC,wBAAwB;;AAE1D,GAAG;AACH;AACA,4CAA4C;AAC5C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,kBAAkB;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjrCa;;;AAGb;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,MAAM;AAChB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,IAAI;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,8BAA8B;AAClE;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,oBAAoB;AAC9B;AACA;;AAEA;AACA,UAAU,UAAU;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,sBAAsB;AACrD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC/NA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;;;;;;;;;;;;;;;;;;ACvLtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,oBAAoB,8CAAK;;AAEzB,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAE;;AAEF;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;;AAGkB;;;;;;;;;;;;AC7tBnB;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,uBAAuB,SAAS;AAChC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA4C,KAAK;;AAEjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,mBAAO,CAAC,0EAAoB;;AAE/C;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA,WAAW,SAAS;AACpB;AACA,mBAAmB,mBAAO,CAAC,6DAAU;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;ACzkBa;;AAEb;;AAEA,eAAe,mBAAO,EAAE,8FAA8B;AACtD,2BAA2B,mBAAO,EAAE,oGAAiC;AACrE,WAAW,mBAAO,EAAE,wDAAW;AAC/B,aAAa,mBAAO,EAAE,4EAAqB;;;AAG3C;;AAEA,wCAAwC;;;AAGxC;;AAEA;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,UAAU,OAAO;AACjB,UAAU,OAAO;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;AC5Da;;AAEb;;AAEA,eAAe,mBAAO,EAAE,8FAA8B;AACtD,2BAA2B,mBAAO,EAAE,oGAAiC;;;AAGrE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA,wCAAwC;;;AAGxC;;AAEA;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,UAAU,OAAO;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,EAAE;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;AC1Fa;;AAEb;;AAEA,eAAe,mBAAO,EAAE,8FAA8B;AACtD,2BAA2B,mBAAO,EAAE,oGAAiC;AACrE,WAAW,mBAAO,EAAE,wDAAW;AAC/B,aAAa,mBAAO,EAAE,4EAAqB;;;AAG3C;;AAEA,wCAAwC;;;AAGxC;;AAEA;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,UAAU,OAAO;AACjB,UAAU,OAAO;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,eAAe,mBAAO,EAAE,0EAAoB;;;AAG5C;;AAEA;AACA;AACA;AACA;AACA,UAAU,OAAO;AACjB,YAAY,QAAQ;AACpB;AACA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,gBAAgB,mBAAO,EAAE,4EAAqB;;;AAG9C;;AAEA;AACA;AACA;AACA;AACA,UAAU,EAAE;AACZ,YAAY,QAAQ;AACpB;AACA;AACA;AACA,CAAC;;;AAGD;;AAEA;;;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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","file":"ami.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"AMI\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"AMI\"] = factory();\n\telse\n\t\troot[\"AMI\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","// jshint ignore: start\n\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /\n /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\n/*\n Copyright 2011 notmasteryet\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n// - The JPEG specification can be found in the ITU CCITT Recommendation T.81\n// (www.w3.org/Graphics/JPEG/itu-t81.pdf)\n// - The JFIF specification can be found in the JPEG File Interchange Format\n// (www.w3.org/Graphics/JPEG/jfif3.pdf)\n// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters\n// in PostScript Level 2, Technical Note #5116\n// (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)\n\nvar ColorSpace = {Unkown: 0, Grayscale: 1, AdobeRGB: 2, RGB: 3, CYMK: 4};\nvar JpegImage = (function jpegImage() {\n \"use strict\";\n var dctZigZag = new Int32Array([\n 0,\n 1, 8,\n 16, 9, 2,\n 3, 10, 17, 24,\n 32, 25, 18, 11, 4,\n 5, 12, 19, 26, 33, 40,\n 48, 41, 34, 27, 20, 13, 6,\n 7, 14, 21, 28, 35, 42, 49, 56,\n 57, 50, 43, 36, 29, 22, 15,\n 23, 30, 37, 44, 51, 58,\n 59, 52, 45, 38, 31,\n 39, 46, 53, 60,\n 61, 54, 47,\n 55, 62,\n 63\n ]);\n\n var dctCos1 = 4017; // cos(pi/16)\n var dctSin1 = 799; // sin(pi/16)\n var dctCos3 = 3406; // cos(3*pi/16)\n var dctSin3 = 2276; // sin(3*pi/16)\n var dctCos6 = 1567; // cos(6*pi/16)\n var dctSin6 = 3784; // sin(6*pi/16)\n var dctSqrt2 = 5793; // sqrt(2)\n var dctSqrt1d2 = 2896; // sqrt(2) / 2\n\n function constructor() {\n }\n\n function buildHuffmanTable(codeLengths, values) {\n var k = 0, code = [], i, j, length = 16;\n while (length > 0 && !codeLengths[length - 1])\n length--;\n code.push({children: [], index: 0});\n var p = code[0], q;\n for (i = 0; i < length; i++) {\n for (j = 0; j < codeLengths[i]; j++) {\n p = code.pop();\n p.children[p.index] = values[k];\n while (p.index > 0) {\n p = code.pop();\n }\n p.index++;\n code.push(p);\n while (code.length <= i) {\n code.push(q = {children: [], index: 0});\n p.children[p.index] = q.children;\n p = q;\n }\n k++;\n }\n if (i + 1 < length) {\n // p here points to last code\n code.push(q = {children: [], index: 0});\n p.children[p.index] = q.children;\n p = q;\n }\n }\n return code[0].children;\n }\n\n function getBlockBufferOffset(component, row, col) {\n return 64 * ((component.blocksPerLine + 1) * row + col);\n }\n\n function decodeScan(data, offset,\n frame, components, resetInterval,\n spectralStart, spectralEnd,\n successivePrev, successive) {\n var precision = frame.precision;\n var samplesPerLine = frame.samplesPerLine;\n var scanLines = frame.scanLines;\n var mcusPerLine = frame.mcusPerLine;\n var progressive = frame.progressive;\n var maxH = frame.maxH, maxV = frame.maxV;\n\n var startOffset = offset, bitsData = 0, bitsCount = 0;\n\n function readBit() {\n if (bitsCount > 0) {\n bitsCount--;\n return (bitsData >> bitsCount) & 1;\n }\n bitsData = data[offset++];\n if (bitsData == 0xFF) {\n var nextByte = data[offset++];\n if (nextByte) {\n throw \"unexpected marker: \" + ((bitsData << 8) | nextByte).toString(16);\n }\n // unstuff 0\n }\n bitsCount = 7;\n return bitsData >>> 7;\n }\n\n function decodeHuffman(tree) {\n var node = tree;\n var bit;\n while ((bit = readBit()) !== null) {\n node = node[bit];\n if (typeof node === 'number')\n return node;\n if (typeof node !== 'object')\n throw \"invalid huffman sequence\";\n }\n return null;\n }\n\n function receive(length) {\n var n = 0;\n while (length > 0) {\n var bit = readBit();\n if (bit === null)\n return;\n n = (n << 1) | bit;\n length--;\n }\n return n;\n }\n\n function receiveAndExtend(length) {\n var n = receive(length);\n if (n >= 1 << (length - 1))\n return n;\n return n + (-1 << length) + 1;\n }\n\n function decodeBaseline(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t);\n component.blockData[offset] = (component.pred += diff);\n var k = 1;\n while (k < 64) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15, r = rs >> 4;\n if (s === 0) {\n if (r < 15)\n break;\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] = receiveAndExtend(s);\n k++;\n }\n }\n\n function decodeDCFirst(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive);\n component.blockData[offset] = (component.pred += diff);\n }\n\n function decodeDCSuccessive(component, offset) {\n component.blockData[offset] |= readBit() << successive;\n }\n\n var eobrun = 0;\n function decodeACFirst(component, offset) {\n if (eobrun > 0) {\n eobrun--;\n return;\n }\n var k = spectralStart, e = spectralEnd;\n while (k <= e) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15, r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r) - 1;\n break;\n }\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] = receiveAndExtend(s) * (1 << successive);\n k++;\n }\n }\n\n var successiveACState = 0, successiveACNextValue;\n function decodeACSuccessive(component, offset) {\n var k = spectralStart, e = spectralEnd, r = 0;\n while (k <= e) {\n var z = dctZigZag[k];\n switch (successiveACState) {\n case 0: // initial state\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15;\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r);\n successiveACState = 4;\n } else {\n r = 16;\n successiveACState = 1;\n }\n } else {\n if (s !== 1)\n throw \"invalid ACn encoding\";\n successiveACNextValue = receiveAndExtend(s);\n successiveACState = r ? 2 : 3;\n }\n continue;\n case 1: // skipping r zero items\n case 2:\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += (readBit() << successive);\n } else {\n r--;\n if (r === 0)\n successiveACState = successiveACState == 2 ? 3 : 0;\n }\n break;\n case 3: // set value for a zero item\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += (readBit() << successive);\n } else {\n component.blockData[offset + z] = successiveACNextValue << successive;\n successiveACState = 0;\n }\n break;\n case 4: // eob\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += (readBit() << successive);\n }\n break;\n }\n k++;\n }\n if (successiveACState === 4) {\n eobrun--;\n if (eobrun === 0)\n successiveACState = 0;\n }\n }\n\n function decodeMcu(component, decode, mcu, row, col) {\n var mcuRow = (mcu / mcusPerLine) | 0;\n var mcuCol = mcu % mcusPerLine;\n var blockRow = mcuRow * component.v + row;\n var blockCol = mcuCol * component.h + col;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n function decodeBlock(component, decode, mcu) {\n var blockRow = (mcu / component.blocksPerLine) | 0;\n var blockCol = mcu % component.blocksPerLine;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n var componentsLength = components.length;\n var component, i, j, k, n;\n var decodeFn;\n if (progressive) {\n if (spectralStart === 0)\n decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n else\n decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n } else {\n decodeFn = decodeBaseline;\n }\n\n var mcu = 0, marker;\n var mcuExpected;\n if (componentsLength == 1) {\n mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n } else {\n mcuExpected = mcusPerLine * frame.mcusPerColumn;\n }\n if (!resetInterval) {\n resetInterval = mcuExpected;\n }\n\n var h, v;\n while (mcu < mcuExpected) {\n // reset interval stuff\n for (i = 0; i < componentsLength; i++) {\n components[i].pred = 0;\n }\n eobrun = 0;\n\n if (componentsLength == 1) {\n component = components[0];\n for (n = 0; n < resetInterval; n++) {\n decodeBlock(component, decodeFn, mcu);\n mcu++;\n }\n } else {\n for (n = 0; n < resetInterval; n++) {\n for (i = 0; i < componentsLength; i++) {\n component = components[i];\n h = component.h;\n v = component.v;\n for (j = 0; j < v; j++) {\n for (k = 0; k < h; k++) {\n decodeMcu(component, decodeFn, mcu, j, k);\n }\n }\n }\n mcu++;\n }\n }\n\n // find marker\n bitsCount = 0;\n marker = (data[offset] << 8) | data[offset + 1];\n if (marker <= 0xFF00) {\n throw \"marker was not found\";\n }\n\n if (marker >= 0xFFD0 && marker <= 0xFFD7) { // RSTx\n offset += 2;\n } else {\n break;\n }\n }\n\n return offset - startOffset;\n }\n\n // A port of poppler's IDCT method which in turn is taken from:\n // Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\n // \"Practical Fast 1-D DCT Algorithms with 11 Multiplications\",\n // IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\n // 988-991.\n function quantizeAndInverse(component, blockBufferOffset, p) {\n var qt = component.quantizationTable;\n var v0, v1, v2, v3, v4, v5, v6, v7, t;\n var i;\n\n // dequant\n for (i = 0; i < 64; i++) {\n p[i] = component.blockData[blockBufferOffset + i] * qt[i];\n }\n\n // inverse DCT on rows\n for (i = 0; i < 8; ++i) {\n var row = 8 * i;\n\n // check for all-zero AC coefficients\n if (p[1 + row] === 0 && p[2 + row] === 0 && p[3 + row] === 0 &&\n p[4 + row] === 0 && p[5 + row] === 0 && p[6 + row] === 0 &&\n p[7 + row] === 0) {\n t = (dctSqrt2 * p[0 + row] + 512) >> 10;\n p[0 + row] = t;\n p[1 + row] = t;\n p[2 + row] = t;\n p[3 + row] = t;\n p[4 + row] = t;\n p[5 + row] = t;\n p[6 + row] = t;\n p[7 + row] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 + row] + 128) >> 8;\n v1 = (dctSqrt2 * p[4 + row] + 128) >> 8;\n v2 = p[2 + row];\n v3 = p[6 + row];\n v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8;\n v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8;\n v5 = p[3 + row] << 4;\n v6 = p[5 + row] << 4;\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 + row] = v0 + v7;\n p[7 + row] = v0 - v7;\n p[1 + row] = v1 + v6;\n p[6 + row] = v1 - v6;\n p[2 + row] = v2 + v5;\n p[5 + row] = v2 - v5;\n p[3 + row] = v3 + v4;\n p[4 + row] = v3 - v4;\n }\n\n // inverse DCT on columns\n for (i = 0; i < 8; ++i) {\n var col = i;\n\n // check for all-zero AC coefficients\n if (p[1 * 8 + col] === 0 && p[2 * 8 + col] === 0 && p[3 * 8 + col] === 0 &&\n p[4 * 8 + col] === 0 && p[5 * 8 + col] === 0 && p[6 * 8 + col] === 0 &&\n p[7 * 8 + col] === 0) {\n t = (dctSqrt2 * p[i + 0] + 8192) >> 14;\n p[0 * 8 + col] = t;\n p[1 * 8 + col] = t;\n p[2 * 8 + col] = t;\n p[3 * 8 + col] = t;\n p[4 * 8 + col] = t;\n p[5 * 8 + col] = t;\n p[6 * 8 + col] = t;\n p[7 * 8 + col] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 * 8 + col] + 2048) >> 12;\n v1 = (dctSqrt2 * p[4 * 8 + col] + 2048) >> 12;\n v2 = p[2 * 8 + col];\n v3 = p[6 * 8 + col];\n v4 = (dctSqrt1d2 * (p[1 * 8 + col] - p[7 * 8 + col]) + 2048) >> 12;\n v7 = (dctSqrt1d2 * (p[1 * 8 + col] + p[7 * 8 + col]) + 2048) >> 12;\n v5 = p[3 * 8 + col];\n v6 = p[5 * 8 + col];\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 * 8 + col] = v0 + v7;\n p[7 * 8 + col] = v0 - v7;\n p[1 * 8 + col] = v1 + v6;\n p[6 * 8 + col] = v1 - v6;\n p[2 * 8 + col] = v2 + v5;\n p[5 * 8 + col] = v2 - v5;\n p[3 * 8 + col] = v3 + v4;\n p[4 * 8 + col] = v3 - v4;\n }\n\n // convert to 8-bit integers\n for (i = 0; i < 64; ++i) {\n var index = blockBufferOffset + i;\n var q = p[i];\n q = (q <= -2056 / component.bitConversion) ? 0 :\n (q >= 2024 / component.bitConversion) ? 255 / component.bitConversion :\n (q + 2056 / component.bitConversion) >> 4;\n component.blockData[index] = q;\n }\n }\n\n function buildComponentData(frame, component) {\n var lines = [];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n var computationBuffer = new Int32Array(64);\n\n var i, j, ll = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n quantizeAndInverse(component, offset, computationBuffer);\n }\n }\n return component.blockData;\n }\n\n function clampToUint8(a) {\n return a <= 0 ? 0 : a >= 255 ? 255 : a | 0;\n }\n\n constructor.prototype = {\n load: function load(path) {\n var handleData = (function (data) {\n this.parse(data);\n if (this.onload)\n this.onload();\n }).bind(this);\n\n if (path.indexOf(\"data:\") > -1) {\n var offset = path.indexOf(\"base64,\") + 7;\n var data = atob(path.substring(offset));\n var arr = new Uint8Array(data.length);\n for (var i = data.length - 1; i >= 0; i--) {\n arr[i] = data.charCodeAt(i);\n }\n handleData(data);\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", path, true);\n xhr.responseType = \"arraybuffer\";\n xhr.onload = (function () {\n // TODO catch parse error\n var data = new Uint8Array(xhr.response);\n handleData(data);\n }).bind(this);\n xhr.send(null);\n }\n },\n parse: function parse(data) {\n\n function readUint16() {\n var value = (data[offset] << 8) | data[offset + 1];\n offset += 2;\n return value;\n }\n\n function readDataBlock() {\n var length = readUint16();\n var array = data.subarray(offset, offset + length - 2);\n offset += array.length;\n return array;\n }\n\n function prepareComponents(frame) {\n var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\n var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\n for (var i = 0; i < frame.components.length; i++) {\n component = frame.components[i];\n var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH);\n var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV);\n var blocksPerLineForMcu = mcusPerLine * component.h;\n var blocksPerColumnForMcu = mcusPerColumn * component.v;\n\n var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);\n component.blockData = new Int16Array(blocksBufferSize);\n component.blocksPerLine = blocksPerLine;\n component.blocksPerColumn = blocksPerColumn;\n }\n frame.mcusPerLine = mcusPerLine;\n frame.mcusPerColumn = mcusPerColumn;\n }\n\n var offset = 0, length = data.length;\n var jfif = null;\n var adobe = null;\n var pixels = null;\n var frame, resetInterval;\n var quantizationTables = [];\n var huffmanTablesAC = [], huffmanTablesDC = [];\n var fileMarker = readUint16();\n if (fileMarker != 0xFFD8) { // SOI (Start of Image)\n throw \"SOI not found\";\n }\n\n fileMarker = readUint16();\n while (fileMarker != 0xFFD9) { // EOI (End of image)\n var i, j, l;\n switch (fileMarker) {\n case 0xFFE0: // APP0 (Application Specific)\n case 0xFFE1: // APP1\n case 0xFFE2: // APP2\n case 0xFFE3: // APP3\n case 0xFFE4: // APP4\n case 0xFFE5: // APP5\n case 0xFFE6: // APP6\n case 0xFFE7: // APP7\n case 0xFFE8: // APP8\n case 0xFFE9: // APP9\n case 0xFFEA: // APP10\n case 0xFFEB: // APP11\n case 0xFFEC: // APP12\n case 0xFFED: // APP13\n case 0xFFEE: // APP14\n case 0xFFEF: // APP15\n case 0xFFFE: // COM (Comment)\n var appData = readDataBlock();\n\n if (fileMarker === 0xFFE0) {\n if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 &&\n appData[3] === 0x46 && appData[4] === 0) { // 'JFIF\\x00'\n jfif = {\n version: {major: appData[5], minor: appData[6]},\n densityUnits: appData[7],\n xDensity: (appData[8] << 8) | appData[9],\n yDensity: (appData[10] << 8) | appData[11],\n thumbWidth: appData[12],\n thumbHeight: appData[13],\n thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])\n };\n }\n }\n // TODO APP1 - Exif\n if (fileMarker === 0xFFEE) {\n if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F &&\n appData[3] === 0x62 && appData[4] === 0x65 && appData[5] === 0) { // 'Adobe\\x00'\n adobe = {\n version: appData[6],\n flags0: (appData[7] << 8) | appData[8],\n flags1: (appData[9] << 8) | appData[10],\n transformCode: appData[11]\n };\n }\n }\n break;\n\n case 0xFFDB: // DQT (Define Quantization Tables)\n var quantizationTablesLength = readUint16();\n var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n while (offset < quantizationTablesEnd) {\n var quantizationTableSpec = data[offset++];\n var tableData = new Int32Array(64);\n if ((quantizationTableSpec >> 4) === 0) { // 8 bit values\n for (j = 0; j < 64; j++) {\n var z = dctZigZag[j];\n tableData[z] = data[offset++];\n }\n } else if ((quantizationTableSpec >> 4) === 1) { //16 bit\n for (j = 0; j < 64; j++) {\n var zz = dctZigZag[j];\n tableData[zz] = readUint16();\n }\n } else\n throw \"DQT: invalid table spec\";\n quantizationTables[quantizationTableSpec & 15] = tableData;\n }\n break;\n\n case 0xFFC0: // SOF0 (Start of Frame, Baseline DCT)\n case 0xFFC1: // SOF1 (Start of Frame, Extended DCT)\n case 0xFFC2: // SOF2 (Start of Frame, Progressive DCT)\n if (frame) {\n throw \"Only single frame JPEGs supported\";\n }\n readUint16(); // skip data length\n frame = {};\n frame.extended = (fileMarker === 0xFFC1);\n frame.progressive = (fileMarker === 0xFFC2);\n frame.precision = data[offset++];\n frame.scanLines = readUint16();\n frame.samplesPerLine = readUint16();\n frame.components = [];\n frame.componentIds = {};\n var componentsCount = data[offset++], componentId;\n var maxH = 0, maxV = 0;\n for (i = 0; i < componentsCount; i++) {\n componentId = data[offset];\n var h = data[offset + 1] >> 4;\n var v = data[offset + 1] & 15;\n if (maxH < h)\n maxH = h;\n if (maxV < v)\n maxV = v;\n var qId = data[offset + 2];\n l = frame.components.push({\n h: h,\n v: v,\n quantizationTable: quantizationTables[qId],\n quantizationTableId: qId,\n bitConversion: 255 / ((1 << frame.precision) - 1)\n });\n frame.componentIds[componentId] = l - 1;\n offset += 3;\n }\n frame.maxH = maxH;\n frame.maxV = maxV;\n prepareComponents(frame);\n break;\n\n case 0xFFC4: // DHT (Define Huffman Tables)\n var huffmanLength = readUint16();\n for (i = 2; i < huffmanLength; ) {\n var huffmanTableSpec = data[offset++];\n var codeLengths = new Uint8Array(16);\n var codeLengthSum = 0;\n for (j = 0; j < 16; j++, offset++)\n codeLengthSum += (codeLengths[j] = data[offset]);\n var huffmanValues = new Uint8Array(codeLengthSum);\n for (j = 0; j < codeLengthSum; j++, offset++)\n huffmanValues[j] = data[offset];\n i += 17 + codeLengthSum;\n\n ((huffmanTableSpec >> 4) === 0 ?\n huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] =\n buildHuffmanTable(codeLengths, huffmanValues);\n }\n break;\n\n case 0xFFDD: // DRI (Define Restart Interval)\n readUint16(); // skip data length\n resetInterval = readUint16();\n break;\n\n case 0xFFDA: // SOS (Start of Scan)\n var scanLength = readUint16();\n var selectorsCount = data[offset++];\n var components = [], component;\n for (i = 0; i < selectorsCount; i++) {\n var componentIndex = frame.componentIds[data[offset++]];\n component = frame.components[componentIndex];\n var tableSpec = data[offset++];\n component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n components.push(component);\n }\n var spectralStart = data[offset++];\n var spectralEnd = data[offset++];\n var successiveApproximation = data[offset++];\n var processed = decodeScan(data, offset,\n frame, components, resetInterval,\n spectralStart, spectralEnd,\n successiveApproximation >> 4, successiveApproximation & 15);\n offset += processed;\n break;\n default:\n if (data[offset - 3] == 0xFF &&\n data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) {\n // could be incorrect encoding -- last 0xFF byte of the previous\n // block was eaten by the encoder\n offset -= 3;\n break;\n }\n throw \"unknown JPEG marker \" + fileMarker.toString(16);\n }\n fileMarker = readUint16();\n }\n\n this.width = frame.samplesPerLine;\n this.height = frame.scanLines;\n this.jfif = jfif;\n this.adobe = adobe;\n this.components = [];\n switch (frame.components.length)\n {\n case 1:\n this.colorspace = ColorSpace.Grayscale;\n break;\n case 3:\n if (this.adobe)\n this.colorspace = ColorSpace.AdobeRGB;\n else\n this.colorspace = ColorSpace.RGB;\n break;\n case 4:\n this.colorspace = ColorSpace.CYMK;\n break;\n default:\n this.colorspace = ColorSpace.Unknown;\n }\n for (var i = 0; i < frame.components.length; i++) {\n var component = frame.components[i];\n if (!component.quantizationTable && component.quantizationTableId !== null)\n component.quantizationTable = quantizationTables[component.quantizationTableId];\n this.components.push({\n output: buildComponentData(frame, component),\n scaleX: component.h / frame.maxH,\n scaleY: component.v / frame.maxV,\n blocksPerLine: component.blocksPerLine,\n blocksPerColumn: component.blocksPerColumn,\n bitConversion: component.bitConversion\n });\n }\n },\n getData16: function getData16(width, height) {\n if (this.components.length !== 1)\n throw 'Unsupported color mode';\n var scaleX = this.width / width, scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint16Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint16Array((this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn * 8);\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j, k, ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(component, blockRow, blockCol);\n var offset = 0, sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++];\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n return data;\n },\n getData: function getData(width, height) {\n var scaleX = this.width / width, scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var Y, Cb, Cr, K, C, M, Ye, R, G, B;\n var colorTransform;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint8Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint8Array((this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn * 8);\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j, k, ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(component, blockRow, blockCol);\n var offset = 0, sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++] * component.bitConversion;\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n\n // ... then transform colors, if necessary\n switch (numComponents) {\n case 1:\n case 2:\n break;\n // no color conversion for one or two compoenents\n\n case 3:\n // The default transform for three components is true\n colorTransform = true;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode)\n colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i ];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n R = clampToUint8(Y - 179.456 + 1.402 * Cr);\n G = clampToUint8(Y + 135.459 - 0.344 * Cb - 0.714 * Cr);\n B = clampToUint8(Y - 226.816 + 1.772 * Cb);\n\n data[i ] = R;\n data[i + 1] = G;\n data[i + 2] = B;\n }\n }\n break;\n case 4:\n if (!this.adobe)\n throw 'Unsupported color mode (4 components)';\n // The default transform for four components is false\n colorTransform = false;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode)\n colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n C = clampToUint8(434.456 - Y - 1.402 * Cr);\n M = clampToUint8(119.541 - Y + 0.344 * Cb + 0.714 * Cr);\n Y = clampToUint8(481.816 - Y - 1.772 * Cb);\n\n data[i ] = C;\n data[i + 1] = M;\n data[i + 2] = Y;\n // K is unchanged\n }\n }\n break;\n default:\n throw 'Unsupported color mode';\n }\n return data;\n }\n };\n\n return constructor;\n})();\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = JpegImage;\n}","/*! image-JPEG2000 - v0.3.1 - 2015-08-26 | https://github.com/OHIF/image-JPEG2000 */\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\n/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals ArithmeticDecoder, globalScope, log2, readUint16, readUint32,\n info, warn */\n\n'use strict';\n\nvar JpxImage = (function JpxImageClosure() {\n // Table E.1\n var SubbandsGainLog2 = {\n 'LL': 0,\n 'LH': 1,\n 'HL': 1,\n 'HH': 2\n };\n function JpxImage() {\n this.failOnCorruptedImage = false;\n }\n JpxImage.prototype = {\n parse: function JpxImage_parse(data) {\n\n var head = readUint16(data, 0);\n // No box header, immediate start of codestream (SOC)\n if (head === 0xFF4F) {\n this.parseCodestream(data, 0, data.length);\n return;\n }\n\n var position = 0, length = data.length;\n while (position < length) {\n var headerSize = 8;\n var lbox = readUint32(data, position);\n var tbox = readUint32(data, position + 4);\n position += headerSize;\n if (lbox === 1) {\n // XLBox: read UInt64 according to spec.\n // JavaScript's int precision of 53 bit should be sufficient here.\n lbox = readUint32(data, position) * 4294967296 +\n readUint32(data, position + 4);\n position += 8;\n headerSize += 8;\n }\n if (lbox === 0) {\n lbox = length - position + headerSize;\n }\n if (lbox < headerSize) {\n throw new Error('JPX Error: Invalid box field size');\n }\n var dataLength = lbox - headerSize;\n var jumpDataLength = true;\n switch (tbox) {\n case 0x6A703268: // 'jp2h'\n jumpDataLength = false; // parsing child boxes\n break;\n case 0x636F6C72: // 'colr'\n // Colorspaces are not used, the CS from the PDF is used.\n var method = data[position];\n var precedence = data[position + 1];\n var approximation = data[position + 2];\n if (method === 1) {\n // enumerated colorspace\n var colorspace = readUint32(data, position + 3);\n switch (colorspace) {\n case 16: // this indicates a sRGB colorspace\n case 17: // this indicates a grayscale colorspace\n case 18: // this indicates a YUV colorspace\n break;\n default:\n warn('Unknown colorspace ' + colorspace);\n break;\n }\n } else if (method === 2) {\n info('ICC profile not supported');\n }\n break;\n case 0x6A703263: // 'jp2c'\n this.parseCodestream(data, position, position + dataLength);\n break;\n case 0x6A502020: // 'jP\\024\\024'\n if (0x0d0a870a !== readUint32(data, position)) {\n warn('Invalid JP2 signature');\n }\n break;\n // The following header types are valid but currently not used:\n case 0x6A501A1A: // 'jP\\032\\032'\n case 0x66747970: // 'ftyp'\n case 0x72726571: // 'rreq'\n case 0x72657320: // 'res '\n case 0x69686472: // 'ihdr'\n break;\n default:\n var headerType = String.fromCharCode((tbox >> 24) & 0xFF,\n (tbox >> 16) & 0xFF,\n (tbox >> 8) & 0xFF,\n tbox & 0xFF);\n warn('Unsupported header type ' + tbox + ' (' + headerType + ')');\n break;\n }\n if (jumpDataLength) {\n position += dataLength;\n }\n }\n },\n parseImageProperties: function JpxImage_parseImageProperties(stream) {\n var newByte = stream.getByte();\n while (newByte >= 0) {\n var oldByte = newByte;\n newByte = stream.getByte();\n var code = (oldByte << 8) | newByte;\n // Image and tile size (SIZ)\n if (code === 0xFF51) {\n stream.skip(4);\n var Xsiz = stream.getInt32() >>> 0; // Byte 4\n var Ysiz = stream.getInt32() >>> 0; // Byte 8\n var XOsiz = stream.getInt32() >>> 0; // Byte 12\n var YOsiz = stream.getInt32() >>> 0; // Byte 16\n stream.skip(16);\n var Csiz = stream.getUint16(); // Byte 36\n this.width = Xsiz - XOsiz;\n this.height = Ysiz - YOsiz;\n this.componentsCount = Csiz;\n // Results are always returned as Uint8Arrays\n this.bitsPerComponent = 8;\n return;\n }\n }\n throw new Error('JPX Error: No size marker found in JPX stream');\n },\n parseCodestream: function JpxImage_parseCodestream(data, start, end) {\n var context = {};\n try {\n var doNotRecover = false;\n var position = start;\n while (position + 1 < end) {\n var code = readUint16(data, position);\n position += 2;\n\n var length = 0, j, sqcd, spqcds, spqcdSize, scalarExpounded, tile;\n switch (code) {\n case 0xFF4F: // Start of codestream (SOC)\n context.mainHeader = true;\n break;\n case 0xFFD9: // End of codestream (EOC)\n break;\n case 0xFF51: // Image and tile size (SIZ)\n length = readUint16(data, position);\n var siz = {};\n siz.Xsiz = readUint32(data, position + 4);\n siz.Ysiz = readUint32(data, position + 8);\n siz.XOsiz = readUint32(data, position + 12);\n siz.YOsiz = readUint32(data, position + 16);\n siz.XTsiz = readUint32(data, position + 20);\n siz.YTsiz = readUint32(data, position + 24);\n siz.XTOsiz = readUint32(data, position + 28);\n siz.YTOsiz = readUint32(data, position + 32);\n var componentsCount = readUint16(data, position + 36);\n siz.Csiz = componentsCount;\n var components = [];\n j = position + 38;\n for (var i = 0; i < componentsCount; i++) {\n var component = {\n precision: (data[j] & 0x7F) + 1,\n isSigned: !!(data[j] & 0x80),\n XRsiz: data[j + 1],\n YRsiz: data[j + 1]\n };\n calculateComponentDimensions(component, siz);\n components.push(component);\n }\n context.SIZ = siz;\n context.components = components;\n calculateTileGrids(context, components);\n context.QCC = [];\n context.COC = [];\n break;\n case 0xFF5C: // Quantization default (QCD)\n length = readUint16(data, position);\n var qcd = {};\n j = position + 2;\n sqcd = data[j++];\n switch (sqcd & 0x1F) {\n case 0:\n spqcdSize = 8;\n scalarExpounded = true;\n break;\n case 1:\n spqcdSize = 16;\n scalarExpounded = false;\n break;\n case 2:\n spqcdSize = 16;\n scalarExpounded = true;\n break;\n default:\n throw new Error('JPX Error: Invalid SQcd value ' + sqcd);\n }\n qcd.noQuantization = (spqcdSize === 8);\n qcd.scalarExpounded = scalarExpounded;\n qcd.guardBits = sqcd >> 5;\n spqcds = [];\n while (j < length + position) {\n var spqcd = {};\n if (spqcdSize === 8) {\n spqcd.epsilon = data[j++] >> 3;\n spqcd.mu = 0;\n } else {\n spqcd.epsilon = data[j] >> 3;\n spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1];\n j += 2;\n }\n spqcds.push(spqcd);\n }\n qcd.SPqcds = spqcds;\n if (context.mainHeader) {\n context.QCD = qcd;\n } else {\n context.currentTile.QCD = qcd;\n context.currentTile.QCC = [];\n }\n break;\n case 0xFF5D: // Quantization component (QCC)\n length = readUint16(data, position);\n var qcc = {};\n j = position + 2;\n var cqcc;\n if (context.SIZ.Csiz < 257) {\n cqcc = data[j++];\n } else {\n cqcc = readUint16(data, j);\n j += 2;\n }\n sqcd = data[j++];\n switch (sqcd & 0x1F) {\n case 0:\n spqcdSize = 8;\n scalarExpounded = true;\n break;\n case 1:\n spqcdSize = 16;\n scalarExpounded = false;\n break;\n case 2:\n spqcdSize = 16;\n scalarExpounded = true;\n break;\n default:\n throw new Error('JPX Error: Invalid SQcd value ' + sqcd);\n }\n qcc.noQuantization = (spqcdSize === 8);\n qcc.scalarExpounded = scalarExpounded;\n qcc.guardBits = sqcd >> 5;\n spqcds = [];\n while (j < (length + position)) {\n spqcd = {};\n if (spqcdSize === 8) {\n spqcd.epsilon = data[j++] >> 3;\n spqcd.mu = 0;\n } else {\n spqcd.epsilon = data[j] >> 3;\n spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1];\n j += 2;\n }\n spqcds.push(spqcd);\n }\n qcc.SPqcds = spqcds;\n if (context.mainHeader) {\n context.QCC[cqcc] = qcc;\n } else {\n context.currentTile.QCC[cqcc] = qcc;\n }\n break;\n case 0xFF52: // Coding style default (COD)\n length = readUint16(data, position);\n var cod = {};\n j = position + 2;\n var scod = data[j++];\n cod.entropyCoderWithCustomPrecincts = !!(scod & 1);\n cod.sopMarkerUsed = !!(scod & 2);\n cod.ephMarkerUsed = !!(scod & 4);\n cod.progressionOrder = data[j++];\n cod.layersCount = readUint16(data, j);\n j += 2;\n cod.multipleComponentTransform = data[j++];\n\n cod.decompositionLevelsCount = data[j++];\n cod.xcb = (data[j++] & 0xF) + 2;\n cod.ycb = (data[j++] & 0xF) + 2;\n var blockStyle = data[j++];\n cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);\n cod.resetContextProbabilities = !!(blockStyle & 2);\n cod.terminationOnEachCodingPass = !!(blockStyle & 4);\n cod.verticalyStripe = !!(blockStyle & 8);\n cod.predictableTermination = !!(blockStyle & 16);\n cod.segmentationSymbolUsed = !!(blockStyle & 32);\n cod.reversibleTransformation = data[j++];\n if (cod.entropyCoderWithCustomPrecincts) {\n var precinctsSizes = [];\n while (j < length + position) {\n var precinctsSize = data[j++];\n precinctsSizes.push({\n PPx: precinctsSize & 0xF,\n PPy: precinctsSize >> 4\n });\n }\n cod.precinctsSizes = precinctsSizes;\n }\n var unsupported = [];\n if (cod.selectiveArithmeticCodingBypass) {\n unsupported.push('selectiveArithmeticCodingBypass');\n }\n if (cod.resetContextProbabilities) {\n unsupported.push('resetContextProbabilities');\n }\n if (cod.terminationOnEachCodingPass) {\n unsupported.push('terminationOnEachCodingPass');\n }\n if (cod.verticalyStripe) {\n unsupported.push('verticalyStripe');\n }\n if (cod.predictableTermination) {\n unsupported.push('predictableTermination');\n }\n if (unsupported.length > 0) {\n doNotRecover = true;\n throw new Error('JPX Error: Unsupported COD options (' +\n unsupported.join(', ') + ')');\n }\n if (context.mainHeader) {\n context.COD = cod;\n } else {\n context.currentTile.COD = cod;\n context.currentTile.COC = [];\n }\n break;\n case 0xFF90: // Start of tile-part (SOT)\n length = readUint16(data, position);\n tile = {};\n tile.index = readUint16(data, position + 2);\n tile.length = readUint32(data, position + 4);\n tile.dataEnd = tile.length + position - 2;\n tile.partIndex = data[position + 8];\n tile.partsCount = data[position + 9];\n\n context.mainHeader = false;\n if (tile.partIndex === 0) {\n // reset component specific settings\n tile.COD = context.COD;\n tile.COC = context.COC.slice(0); // clone of the global COC\n tile.QCD = context.QCD;\n tile.QCC = context.QCC.slice(0); // clone of the global COC\n }\n context.currentTile = tile;\n break;\n case 0xFF93: // Start of data (SOD)\n tile = context.currentTile;\n if (tile.partIndex === 0) {\n initializeTile(context, tile.index);\n buildPackets(context);\n }\n\n // moving to the end of the data\n length = tile.dataEnd - position;\n parseTilePackets(context, data, position, length);\n break;\n case 0xFF55: // Tile-part lengths, main header (TLM)\n case 0xFF57: // Packet length, main header (PLM)\n case 0xFF58: // Packet length, tile-part header (PLT)\n case 0xFF64: // Comment (COM)\n length = readUint16(data, position);\n // skipping content\n break;\n case 0xFF53: // Coding style component (COC)\n throw new Error('JPX Error: Codestream code 0xFF53 (COC) is ' +\n 'not implemented');\n default:\n throw new Error('JPX Error: Unknown codestream code: ' +\n code.toString(16));\n }\n position += length;\n }\n } catch (e) {\n if (doNotRecover || this.failOnCorruptedImage) {\n throw e;\n } else {\n warn('Trying to recover from ' + e.message);\n }\n }\n this.tiles = transformComponents(context);\n this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;\n this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;\n this.componentsCount = context.SIZ.Csiz;\n }\n };\n function calculateComponentDimensions(component, siz) {\n // Section B.2 Component mapping\n component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);\n component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);\n component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);\n component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);\n component.width = component.x1 - component.x0;\n component.height = component.y1 - component.y0;\n }\n function calculateTileGrids(context, components) {\n var siz = context.SIZ;\n // Section B.3 Division into tile and tile-components\n var tile, tiles = [];\n var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);\n var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);\n for (var q = 0; q < numYtiles; q++) {\n for (var p = 0; p < numXtiles; p++) {\n tile = {};\n tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);\n tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);\n tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);\n tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);\n tile.width = tile.tx1 - tile.tx0;\n tile.height = tile.ty1 - tile.ty0;\n tile.components = [];\n tiles.push(tile);\n }\n }\n context.tiles = tiles;\n\n var componentsCount = siz.Csiz;\n for (var i = 0, ii = componentsCount; i < ii; i++) {\n var component = components[i];\n for (var j = 0, jj = tiles.length; j < jj; j++) {\n var tileComponent = {};\n tile = tiles[j];\n tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);\n tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);\n tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);\n tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);\n tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;\n tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;\n tile.components[i] = tileComponent;\n }\n }\n }\n function getBlocksDimensions(context, component, r) {\n var codOrCoc = component.codingStyleParameters;\n var result = {};\n if (!codOrCoc.entropyCoderWithCustomPrecincts) {\n result.PPx = 15;\n result.PPy = 15;\n } else {\n result.PPx = codOrCoc.precinctsSizes[r].PPx;\n result.PPy = codOrCoc.precinctsSizes[r].PPy;\n }\n // calculate codeblock size as described in section B.7\n result.xcb_ = (r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) :\n Math.min(codOrCoc.xcb, result.PPx));\n result.ycb_ = (r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) :\n Math.min(codOrCoc.ycb, result.PPy));\n return result;\n }\n function buildPrecincts(context, resolution, dimensions) {\n // Section B.6 Division resolution to precincts\n var precinctWidth = 1 << dimensions.PPx;\n var precinctHeight = 1 << dimensions.PPy;\n // Jasper introduces codeblock groups for mapping each subband codeblocks\n // to precincts. Precinct partition divides a resolution according to width\n // and height parameters. The subband that belongs to the resolution level\n // has a different size than the level, unless it is the zero resolution.\n\n // From Jasper documentation: jpeg2000.pdf, section K: Tier-2 coding:\n // The precinct partitioning for a particular subband is derived from a\n // partitioning of its parent LL band (i.e., the LL band at the next higher\n // resolution level)... The LL band associated with each resolution level is\n // divided into precincts... Each of the resulting precinct regions is then\n // mapped into its child subbands (if any) at the next lower resolution\n // level. This is accomplished by using the coordinate transformation\n // (u, v) = (ceil(x/2), ceil(y/2)) where (x, y) and (u, v) are the\n // coordinates of a point in the LL band and child subband, respectively.\n var isZeroRes = resolution.resLevel === 0;\n var precinctWidthInSubband = 1 << (dimensions.PPx + (isZeroRes ? 0 : -1));\n var precinctHeightInSubband = 1 << (dimensions.PPy + (isZeroRes ? 0 : -1));\n var numprecinctswide = (resolution.trx1 > resolution.trx0 ?\n Math.ceil(resolution.trx1 / precinctWidth) -\n Math.floor(resolution.trx0 / precinctWidth) : 0);\n var numprecinctshigh = (resolution.try1 > resolution.try0 ?\n Math.ceil(resolution.try1 / precinctHeight) -\n Math.floor(resolution.try0 / precinctHeight) : 0);\n var numprecincts = numprecinctswide * numprecinctshigh;\n\n resolution.precinctParameters = {\n precinctWidth: precinctWidth,\n precinctHeight: precinctHeight,\n numprecinctswide: numprecinctswide,\n numprecinctshigh: numprecinctshigh,\n numprecincts: numprecincts,\n precinctWidthInSubband: precinctWidthInSubband,\n precinctHeightInSubband: precinctHeightInSubband\n };\n }\n function buildCodeblocks(context, subband, dimensions) {\n // Section B.7 Division sub-band into code-blocks\n var xcb_ = dimensions.xcb_;\n var ycb_ = dimensions.ycb_;\n var codeblockWidth = 1 << xcb_;\n var codeblockHeight = 1 << ycb_;\n var cbx0 = subband.tbx0 >> xcb_;\n var cby0 = subband.tby0 >> ycb_;\n var cbx1 = (subband.tbx1 + codeblockWidth - 1) >> xcb_;\n var cby1 = (subband.tby1 + codeblockHeight - 1) >> ycb_;\n var precinctParameters = subband.resolution.precinctParameters;\n var codeblocks = [];\n var precincts = [];\n var i, j, codeblock, precinctNumber;\n for (j = cby0; j < cby1; j++) {\n for (i = cbx0; i < cbx1; i++) {\n codeblock = {\n cbx: i,\n cby: j,\n tbx0: codeblockWidth * i,\n tby0: codeblockHeight * j,\n tbx1: codeblockWidth * (i + 1),\n tby1: codeblockHeight * (j + 1)\n };\n\n codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);\n codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);\n codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);\n codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);\n\n // Calculate precinct number for this codeblock, codeblock position\n // should be relative to its subband, use actual dimension and position\n // See comment about codeblock group width and height\n var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) /\n precinctParameters.precinctWidthInSubband);\n var pj = Math.floor((codeblock.tby0_ - subband.tby0) /\n precinctParameters.precinctHeightInSubband);\n precinctNumber = pi + (pj * precinctParameters.numprecinctswide);\n\n codeblock.precinctNumber = precinctNumber;\n codeblock.subbandType = subband.type;\n codeblock.Lblock = 3;\n\n if (codeblock.tbx1_ <= codeblock.tbx0_ ||\n codeblock.tby1_ <= codeblock.tby0_) {\n continue;\n }\n codeblocks.push(codeblock);\n // building precinct for the sub-band\n var precinct = precincts[precinctNumber];\n if (precinct !== undefined) {\n if (i < precinct.cbxMin) {\n precinct.cbxMin = i;\n } else if (i > precinct.cbxMax) {\n precinct.cbxMax = i;\n }\n if (j < precinct.cbyMin) {\n precinct.cbxMin = j;\n } else if (j > precinct.cbyMax) {\n precinct.cbyMax = j;\n }\n } else {\n precincts[precinctNumber] = precinct = {\n cbxMin: i,\n cbyMin: j,\n cbxMax: i,\n cbyMax: j\n };\n }\n codeblock.precinct = precinct;\n }\n }\n subband.codeblockParameters = {\n codeblockWidth: xcb_,\n codeblockHeight: ycb_,\n numcodeblockwide: cbx1 - cbx0 + 1,\n numcodeblockhigh: cby1 - cby0 + 1\n };\n subband.codeblocks = codeblocks;\n subband.precincts = precincts;\n }\n function createPacket(resolution, precinctNumber, layerNumber) {\n var precinctCodeblocks = [];\n // Section B.10.8 Order of info in packet\n var subbands = resolution.subbands;\n // sub-bands already ordered in 'LL', 'HL', 'LH', and 'HH' sequence\n for (var i = 0, ii = subbands.length; i < ii; i++) {\n var subband = subbands[i];\n var codeblocks = subband.codeblocks;\n for (var j = 0, jj = codeblocks.length; j < jj; j++) {\n var codeblock = codeblocks[j];\n if (codeblock.precinctNumber !== precinctNumber) {\n continue;\n }\n precinctCodeblocks.push(codeblock);\n }\n }\n return {\n layerNumber: layerNumber,\n codeblocks: precinctCodeblocks\n };\n }\n function LayerResolutionComponentPositionIterator(context) {\n var siz = context.SIZ;\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\n var componentsCount = siz.Csiz;\n var maxDecompositionLevelsCount = 0;\n for (var q = 0; q < componentsCount; q++) {\n maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount,\n tile.components[q].codingStyleParameters.decompositionLevelsCount);\n }\n\n var l = 0, r = 0, i = 0, k = 0;\n\n this.nextPacket = function JpxImage_nextPacket() {\n // Section B.12.1.1 Layer-resolution-component-position\n for (; l < layersCount; l++) {\n for (; r <= maxDecompositionLevelsCount; r++) {\n for (; i < componentsCount; i++) {\n var component = tile.components[i];\n if (r > component.codingStyleParameters.decompositionLevelsCount) {\n continue;\n }\n\n var resolution = component.resolutions[r];\n var numprecincts = resolution.precinctParameters.numprecincts;\n for (; k < numprecincts;) {\n var packet = createPacket(resolution, k, l);\n k++;\n return packet;\n }\n k = 0;\n }\n i = 0;\n }\n r = 0;\n }\n };\n }\n function ResolutionLayerComponentPositionIterator(context) {\n var siz = context.SIZ;\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\n var componentsCount = siz.Csiz;\n var maxDecompositionLevelsCount = 0;\n for (var q = 0; q < componentsCount; q++) {\n maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount,\n tile.components[q].codingStyleParameters.decompositionLevelsCount);\n }\n\n var r = 0, l = 0, i = 0, k = 0;\n\n this.nextPacket = function JpxImage_nextPacket() {\n // Section B.12.1.2 Resolution-layer-component-position\n for (; r <= maxDecompositionLevelsCount; r++) {\n for (; l < layersCount; l++) {\n for (; i < componentsCount; i++) {\n var component = tile.components[i];\n if (r > component.codingStyleParameters.decompositionLevelsCount) {\n continue;\n }\n\n var resolution = component.resolutions[r];\n var numprecincts = resolution.precinctParameters.numprecincts;\n for (; k < numprecincts;) {\n var packet = createPacket(resolution, k, l);\n k++;\n return packet;\n }\n k = 0;\n }\n i = 0;\n }\n l = 0;\n }\n };\n }\n function ResolutionPositionComponentLayerIterator(context) {\n var siz = context.SIZ;\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\n var componentsCount = siz.Csiz;\n var l, r, c, p;\n var maxDecompositionLevelsCount = 0;\n for (c = 0; c < componentsCount; c++) {\n var component = tile.components[c];\n maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount,\n component.codingStyleParameters.decompositionLevelsCount);\n }\n var maxNumPrecinctsInLevel = new Int32Array(\n maxDecompositionLevelsCount + 1);\n for (r = 0; r <= maxDecompositionLevelsCount; ++r) {\n var maxNumPrecincts = 0;\n for (c = 0; c < componentsCount; ++c) {\n var resolutions = tile.components[c].resolutions;\n if (r < resolutions.length) {\n maxNumPrecincts = Math.max(maxNumPrecincts,\n resolutions[r].precinctParameters.numprecincts);\n }\n }\n maxNumPrecinctsInLevel[r] = maxNumPrecincts;\n }\n l = 0;\n r = 0;\n c = 0;\n p = 0;\n\n this.nextPacket = function JpxImage_nextPacket() {\n // Section B.12.1.3 Resolution-position-component-layer\n for (; r <= maxDecompositionLevelsCount; r++) {\n for (; p < maxNumPrecinctsInLevel[r]; p++) {\n for (; c < componentsCount; c++) {\n var component = tile.components[c];\n if (r > component.codingStyleParameters.decompositionLevelsCount) {\n continue;\n }\n var resolution = component.resolutions[r];\n var numprecincts = resolution.precinctParameters.numprecincts;\n if (p >= numprecincts) {\n continue;\n }\n for (; l < layersCount;) {\n var packet = createPacket(resolution, p, l);\n l++;\n return packet;\n }\n l = 0;\n }\n c = 0;\n }\n p = 0;\n }\n };\n }\n function PositionComponentResolutionLayerIterator(context) {\n var siz = context.SIZ;\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\n var componentsCount = siz.Csiz;\n var precinctsSizes = getPrecinctSizesInImageScale(tile);\n var precinctsIterationSizes = precinctsSizes;\n var l = 0, r = 0, c = 0, px = 0, py = 0;\n\n this.nextPacket = function JpxImage_nextPacket() {\n // Section B.12.1.4 Position-component-resolution-layer\n for (; py < precinctsIterationSizes.maxNumHigh; py++) {\n for (; px < precinctsIterationSizes.maxNumWide; px++) {\n for (; c < componentsCount; c++) {\n var component = tile.components[c];\n var decompositionLevelsCount =\n component.codingStyleParameters.decompositionLevelsCount;\n for (; r <= decompositionLevelsCount; r++) {\n var resolution = component.resolutions[r];\n var sizeInImageScale =\n precinctsSizes.components[c].resolutions[r];\n var k = getPrecinctIndexIfExist(\n px,\n py,\n sizeInImageScale,\n precinctsIterationSizes,\n resolution);\n if (k === null) {\n continue;\n }\n for (; l < layersCount;) {\n var packet = createPacket(resolution, k, l);\n l++;\n return packet;\n }\n l = 0;\n }\n r = 0;\n }\n c = 0;\n }\n px = 0;\n }\n };\n }\n function ComponentPositionResolutionLayerIterator(context) {\n var siz = context.SIZ;\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var layersCount = tile.codingStyleDefaultParameters.layersCount;\n var componentsCount = siz.Csiz;\n var precinctsSizes = getPrecinctSizesInImageScale(tile);\n var l = 0, r = 0, c = 0, px = 0, py = 0;\n\n this.nextPacket = function JpxImage_nextPacket() {\n // Section B.12.1.5 Component-position-resolution-layer\n for (; c < componentsCount; ++c) {\n var component = tile.components[c];\n var precinctsIterationSizes = precinctsSizes.components[c];\n var decompositionLevelsCount =\n component.codingStyleParameters.decompositionLevelsCount;\n for (; py < precinctsIterationSizes.maxNumHigh; py++) {\n for (; px < precinctsIterationSizes.maxNumWide; px++) {\n for (; r <= decompositionLevelsCount; r++) {\n var resolution = component.resolutions[r];\n var sizeInImageScale = precinctsIterationSizes.resolutions[r];\n var k = getPrecinctIndexIfExist(\n px,\n py,\n sizeInImageScale,\n precinctsIterationSizes,\n resolution);\n if (k === null) {\n continue;\n }\n for (; l < layersCount;) {\n var packet = createPacket(resolution, k, l);\n l++;\n return packet;\n }\n l = 0;\n }\n r = 0;\n }\n px = 0;\n }\n py = 0;\n }\n };\n }\n function getPrecinctIndexIfExist(\n pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) {\n var posX = pxIndex * precinctIterationSizes.minWidth;\n var posY = pyIndex * precinctIterationSizes.minHeight;\n if (posX % sizeInImageScale.width !== 0 ||\n posY % sizeInImageScale.height !== 0) {\n return null;\n }\n var startPrecinctRowIndex =\n (posY / sizeInImageScale.width) *\n resolution.precinctParameters.numprecinctswide;\n return (posX / sizeInImageScale.height) + startPrecinctRowIndex;\n }\n function getPrecinctSizesInImageScale(tile) {\n var componentsCount = tile.components.length;\n var minWidth = Number.MAX_VALUE;\n var minHeight = Number.MAX_VALUE;\n var maxNumWide = 0;\n var maxNumHigh = 0;\n var sizePerComponent = new Array(componentsCount);\n for (var c = 0; c < componentsCount; c++) {\n var component = tile.components[c];\n var decompositionLevelsCount =\n component.codingStyleParameters.decompositionLevelsCount;\n var sizePerResolution = new Array(decompositionLevelsCount + 1);\n var minWidthCurrentComponent = Number.MAX_VALUE;\n var minHeightCurrentComponent = Number.MAX_VALUE;\n var maxNumWideCurrentComponent = 0;\n var maxNumHighCurrentComponent = 0;\n var scale = 1;\n for (var r = decompositionLevelsCount; r >= 0; --r) {\n var resolution = component.resolutions[r];\n var widthCurrentResolution =\n scale * resolution.precinctParameters.precinctWidth;\n var heightCurrentResolution =\n scale * resolution.precinctParameters.precinctHeight;\n minWidthCurrentComponent = Math.min(\n minWidthCurrentComponent,\n widthCurrentResolution);\n minHeightCurrentComponent = Math.min(\n minHeightCurrentComponent,\n heightCurrentResolution);\n maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent,\n resolution.precinctParameters.numprecinctswide);\n maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent,\n resolution.precinctParameters.numprecinctshigh);\n sizePerResolution[r] = {\n width: widthCurrentResolution,\n height: heightCurrentResolution\n };\n scale <<= 1;\n }\n minWidth = Math.min(minWidth, minWidthCurrentComponent);\n minHeight = Math.min(minHeight, minHeightCurrentComponent);\n maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);\n maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);\n sizePerComponent[c] = {\n resolutions: sizePerResolution,\n minWidth: minWidthCurrentComponent,\n minHeight: minHeightCurrentComponent,\n maxNumWide: maxNumWideCurrentComponent,\n maxNumHigh: maxNumHighCurrentComponent\n };\n }\n return {\n components: sizePerComponent,\n minWidth: minWidth,\n minHeight: minHeight,\n maxNumWide: maxNumWide,\n maxNumHigh: maxNumHigh\n };\n }\n function buildPackets(context) {\n var siz = context.SIZ;\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var componentsCount = siz.Csiz;\n // Creating resolutions and sub-bands for each component\n for (var c = 0; c < componentsCount; c++) {\n var component = tile.components[c];\n var decompositionLevelsCount =\n component.codingStyleParameters.decompositionLevelsCount;\n // Section B.5 Resolution levels and sub-bands\n var resolutions = [];\n var subbands = [];\n for (var r = 0; r <= decompositionLevelsCount; r++) {\n var blocksDimensions = getBlocksDimensions(context, component, r);\n var resolution = {};\n var scale = 1 << (decompositionLevelsCount - r);\n resolution.trx0 = Math.ceil(component.tcx0 / scale);\n resolution.try0 = Math.ceil(component.tcy0 / scale);\n resolution.trx1 = Math.ceil(component.tcx1 / scale);\n resolution.try1 = Math.ceil(component.tcy1 / scale);\n resolution.resLevel = r;\n buildPrecincts(context, resolution, blocksDimensions);\n resolutions.push(resolution);\n\n var subband;\n if (r === 0) {\n // one sub-band (LL) with last decomposition\n subband = {};\n subband.type = 'LL';\n subband.tbx0 = Math.ceil(component.tcx0 / scale);\n subband.tby0 = Math.ceil(component.tcy0 / scale);\n subband.tbx1 = Math.ceil(component.tcx1 / scale);\n subband.tby1 = Math.ceil(component.tcy1 / scale);\n subband.resolution = resolution;\n buildCodeblocks(context, subband, blocksDimensions);\n subbands.push(subband);\n resolution.subbands = [subband];\n } else {\n var bscale = 1 << (decompositionLevelsCount - r + 1);\n var resolutionSubbands = [];\n // three sub-bands (HL, LH and HH) with rest of decompositions\n subband = {};\n subband.type = 'HL';\n subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);\n subband.tby0 = Math.ceil(component.tcy0 / bscale);\n subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);\n subband.tby1 = Math.ceil(component.tcy1 / bscale);\n subband.resolution = resolution;\n buildCodeblocks(context, subband, blocksDimensions);\n subbands.push(subband);\n resolutionSubbands.push(subband);\n\n subband = {};\n subband.type = 'LH';\n subband.tbx0 = Math.ceil(component.tcx0 / bscale);\n subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);\n subband.tbx1 = Math.ceil(component.tcx1 / bscale);\n subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);\n subband.resolution = resolution;\n buildCodeblocks(context, subband, blocksDimensions);\n subbands.push(subband);\n resolutionSubbands.push(subband);\n\n subband = {};\n subband.type = 'HH';\n subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);\n subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);\n subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);\n subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);\n subband.resolution = resolution;\n buildCodeblocks(context, subband, blocksDimensions);\n subbands.push(subband);\n resolutionSubbands.push(subband);\n\n resolution.subbands = resolutionSubbands;\n }\n }\n component.resolutions = resolutions;\n component.subbands = subbands;\n }\n // Generate the packets sequence\n var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;\n switch (progressionOrder) {\n case 0:\n tile.packetsIterator =\n new LayerResolutionComponentPositionIterator(context);\n break;\n case 1:\n tile.packetsIterator =\n new ResolutionLayerComponentPositionIterator(context);\n break;\n case 2:\n tile.packetsIterator =\n new ResolutionPositionComponentLayerIterator(context);\n break;\n case 3:\n tile.packetsIterator =\n new PositionComponentResolutionLayerIterator(context);\n break;\n case 4:\n tile.packetsIterator =\n new ComponentPositionResolutionLayerIterator(context);\n break;\n default:\n throw new Error('JPX Error: Unsupported progression order ' +\n progressionOrder);\n }\n }\n function parseTilePackets(context, data, offset, dataLength) {\n var position = 0;\n var buffer, bufferSize = 0, skipNextBit = false;\n function readBits(count) {\n while (bufferSize < count) {\n if(offset + position >= data.length){\n throw new Error(\"Unexpected EOF\");\n }\n var b = data[offset + position];\n position++;\n if (skipNextBit) {\n buffer = (buffer << 7) | b;\n bufferSize += 7;\n skipNextBit = false;\n } else {\n buffer = (buffer << 8) | b;\n bufferSize += 8;\n }\n if (b === 0xFF) {\n skipNextBit = true;\n }\n }\n bufferSize -= count;\n return (buffer >>> bufferSize) & ((1 << count) - 1);\n }\n function skipMarkerIfEqual(value) {\n if (data[offset + position - 1] === 0xFF &&\n data[offset + position] === value) {\n skipBytes(1);\n return true;\n } else if (data[offset + position] === 0xFF &&\n data[offset + position + 1] === value) {\n skipBytes(2);\n return true;\n }\n return false;\n }\n function skipBytes(count) {\n position += count;\n }\n function alignToByte() {\n bufferSize = 0;\n if (skipNextBit) {\n position++;\n skipNextBit = false;\n }\n }\n function readCodingpasses() {\n if (readBits(1) === 0) {\n return 1;\n }\n if (readBits(1) === 0) {\n return 2;\n }\n var value = readBits(2);\n if (value < 3) {\n return value + 3;\n }\n value = readBits(5);\n if (value < 31) {\n return value + 6;\n }\n value = readBits(7);\n return value + 37;\n }\n var tileIndex = context.currentTile.index;\n var tile = context.tiles[tileIndex];\n var sopMarkerUsed = context.COD.sopMarkerUsed;\n var ephMarkerUsed = context.COD.ephMarkerUsed;\n var packetsIterator = tile.packetsIterator;\n while (position < dataLength) {\n try{\n alignToByte();\n if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {\n // Skip also marker segment length and packet sequence ID\n skipBytes(4);\n }\n var packet = packetsIterator.nextPacket();\n if (packet === undefined) {\n //No more packets. Stream is probably truncated.\n return;\n }\n if (!readBits(1)) {\n continue;\n }\n var layerNumber = packet.layerNumber;\n var queue = [], codeblock;\n for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) {\n codeblock = packet.codeblocks[i];\n var precinct = codeblock.precinct;\n var codeblockColumn = codeblock.cbx - precinct.cbxMin;\n var codeblockRow = codeblock.cby - precinct.cbyMin;\n var codeblockIncluded = false;\n var firstTimeInclusion = false;\n var valueReady;\n if (codeblock['included'] !== undefined) {\n codeblockIncluded = !!readBits(1);\n } else {\n // reading inclusion tree\n precinct = codeblock.precinct;\n var inclusionTree, zeroBitPlanesTree;\n if (precinct['inclusionTree'] !== undefined) {\n inclusionTree = precinct.inclusionTree;\n } else {\n // building inclusion and zero bit-planes trees\n var width = precinct.cbxMax - precinct.cbxMin + 1;\n var height = precinct.cbyMax - precinct.cbyMin + 1;\n inclusionTree = new InclusionTree(width, height);\n zeroBitPlanesTree = new TagTree(width, height);\n precinct.inclusionTree = inclusionTree;\n precinct.zeroBitPlanesTree = zeroBitPlanesTree;\n }\n\n inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber);\n while (true) {\n if (position >= data.length) {\n return;\n }\n if (inclusionTree.isAboveThreshold()){\n break;\n }\n if (inclusionTree.isKnown()) {\n inclusionTree.nextLevel();\n continue;\n }\n if (readBits(1)) {\n inclusionTree.setKnown();\n if (inclusionTree.isLeaf()) {\n codeblock.included = true;\n codeblockIncluded = firstTimeInclusion = true;\n break;\n } else {\n inclusionTree.nextLevel();\n }\n } else {\n inclusionTree.incrementValue();\n }\n }\n }\n if (!codeblockIncluded) {\n continue;\n }\n if (firstTimeInclusion) {\n zeroBitPlanesTree = precinct.zeroBitPlanesTree;\n zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);\n while (true) {\n if (position >= data.length) {\n return;\n }\n if (readBits(1)) {\n valueReady = !zeroBitPlanesTree.nextLevel();\n if (valueReady) {\n break;\n }\n } else {\n zeroBitPlanesTree.incrementValue();\n }\n }\n codeblock.zeroBitPlanes = zeroBitPlanesTree.value;\n }\n var codingpasses = readCodingpasses();\n while (readBits(1)) {\n codeblock.Lblock++;\n }\n var codingpassesLog2 = log2(codingpasses);\n // rounding down log2\n var bits = ((codingpasses < (1 << codingpassesLog2)) ?\n codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock;\n var codedDataLength = readBits(bits);\n queue.push({\n codeblock: codeblock,\n codingpasses: codingpasses,\n dataLength: codedDataLength\n });\n }\n alignToByte();\n if (ephMarkerUsed) {\n skipMarkerIfEqual(0x92);\n }\n while (queue.length > 0) {\n var packetItem = queue.shift();\n codeblock = packetItem.codeblock;\n if (codeblock['data'] === undefined) {\n codeblock.data = [];\n }\n codeblock.data.push({\n data: data,\n start: offset + position,\n end: offset + position + packetItem.dataLength,\n codingpasses: packetItem.codingpasses\n });\n position += packetItem.dataLength;\n }\n } catch (e) {\n return;\n }\n }\n return position;\n }\n function copyCoefficients(coefficients, levelWidth, levelHeight, subband,\n delta, mb, reversible, segmentationSymbolUsed) {\n var x0 = subband.tbx0;\n var y0 = subband.tby0;\n var width = subband.tbx1 - subband.tbx0;\n var codeblocks = subband.codeblocks;\n var right = subband.type.charAt(0) === 'H' ? 1 : 0;\n var bottom = subband.type.charAt(1) === 'H' ? levelWidth : 0;\n\n for (var i = 0, ii = codeblocks.length; i < ii; ++i) {\n var codeblock = codeblocks[i];\n var blockWidth = codeblock.tbx1_ - codeblock.tbx0_;\n var blockHeight = codeblock.tby1_ - codeblock.tby0_;\n if (blockWidth === 0 || blockHeight === 0) {\n continue;\n }\n if (codeblock['data'] === undefined) {\n continue;\n }\n\n var bitModel, currentCodingpassType;\n bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType,\n codeblock.zeroBitPlanes, mb);\n currentCodingpassType = 2; // first bit plane starts from cleanup\n\n // collect data\n var data = codeblock.data, totalLength = 0, codingpasses = 0;\n var j, jj, dataItem;\n for (j = 0, jj = data.length; j < jj; j++) {\n dataItem = data[j];\n totalLength += dataItem.end - dataItem.start;\n codingpasses += dataItem.codingpasses;\n }\n var encodedData = new Int16Array(totalLength);\n var position = 0;\n for (j = 0, jj = data.length; j < jj; j++) {\n dataItem = data[j];\n var chunk = dataItem.data.subarray(dataItem.start, dataItem.end);\n encodedData.set(chunk, position);\n position += chunk.length;\n }\n // decoding the item\n var decoder = new ArithmeticDecoder(encodedData, 0, totalLength);\n bitModel.setDecoder(decoder);\n\n for (j = 0; j < codingpasses; j++) {\n switch (currentCodingpassType) {\n case 0:\n bitModel.runSignificancePropogationPass();\n break;\n case 1:\n bitModel.runMagnitudeRefinementPass();\n break;\n case 2:\n bitModel.runCleanupPass();\n if (segmentationSymbolUsed) {\n bitModel.checkSegmentationSymbol();\n }\n break;\n }\n currentCodingpassType = (currentCodingpassType + 1) % 3;\n }\n\n var offset = (codeblock.tbx0_ - x0) + (codeblock.tby0_ - y0) * width;\n var sign = bitModel.coefficentsSign;\n var magnitude = bitModel.coefficentsMagnitude;\n var bitsDecoded = bitModel.bitsDecoded;\n var magnitudeCorrection = reversible ? 0 : 0.5;\n var k, n, nb;\n position = 0;\n // Do the interleaving of Section F.3.3 here, so we do not need\n // to copy later. LL level is not interleaved, just copied.\n var interleave = (subband.type !== 'LL');\n for (j = 0; j < blockHeight; j++) {\n var row = (offset / width) | 0; // row in the non-interleaved subband\n var levelOffset = 2 * row * (levelWidth - width) + right + bottom;\n for (k = 0; k < blockWidth; k++) {\n n = magnitude[position];\n if (n !== 0) {\n n = (n + magnitudeCorrection) * delta;\n if (sign[position] !== 0) {\n n = -n;\n }\n nb = bitsDecoded[position];\n var pos = interleave ? (levelOffset + (offset << 1)) : offset;\n if (reversible && (nb >= mb)) {\n coefficients[pos] = n;\n } else {\n coefficients[pos] = n * (1 << (mb - nb));\n }\n }\n offset++;\n position++;\n }\n offset += width - blockWidth;\n }\n }\n }\n function transformTile(context, tile, c) {\n var component = tile.components[c];\n var codingStyleParameters = component.codingStyleParameters;\n var quantizationParameters = component.quantizationParameters;\n var decompositionLevelsCount =\n codingStyleParameters.decompositionLevelsCount;\n var spqcds = quantizationParameters.SPqcds;\n var scalarExpounded = quantizationParameters.scalarExpounded;\n var guardBits = quantizationParameters.guardBits;\n var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;\n var precision = context.components[c].precision;\n\n var reversible = codingStyleParameters.reversibleTransformation;\n var transform = (reversible ? new ReversibleTransform() :\n new IrreversibleTransform());\n\n var subbandCoefficients = [];\n var b = 0;\n for (var i = 0; i <= decompositionLevelsCount; i++) {\n var resolution = component.resolutions[i];\n\n var width = resolution.trx1 - resolution.trx0;\n var height = resolution.try1 - resolution.try0;\n // Allocate space for the whole sublevel.\n var coefficients = new Float32Array(width * height);\n\n for (var j = 0, jj = resolution.subbands.length; j < jj; j++) {\n var mu, epsilon;\n if (!scalarExpounded) {\n // formula E-5\n mu = spqcds[0].mu;\n epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);\n } else {\n mu = spqcds[b].mu;\n epsilon = spqcds[b].epsilon;\n b++;\n }\n\n var subband = resolution.subbands[j];\n var gainLog2 = SubbandsGainLog2[subband.type];\n\n // calulate quantization coefficient (Section E.1.1.1)\n var delta = (reversible ? 1 :\n Math.pow(2, precision + gainLog2 - epsilon) * (1 + mu / 2048));\n var mb = (guardBits + epsilon - 1);\n\n // In the first resolution level, copyCoefficients will fill the\n // whole array with coefficients. In the succeding passes,\n // copyCoefficients will consecutively fill in the values that belong\n // to the interleaved positions of the HL, LH, and HH coefficients.\n // The LL coefficients will then be interleaved in Transform.iterate().\n copyCoefficients(coefficients, width, height, subband, delta, mb,\n reversible, segmentationSymbolUsed);\n }\n subbandCoefficients.push({\n width: width,\n height: height,\n items: coefficients\n });\n }\n\n var result = transform.calculate(subbandCoefficients,\n component.tcx0, component.tcy0);\n return {\n left: component.tcx0,\n top: component.tcy0,\n width: result.width,\n height: result.height,\n items: result.items\n };\n }\n function transformComponents(context) {\n var siz = context.SIZ;\n var components = context.components;\n var componentsCount = siz.Csiz;\n var resultImages = [];\n for (var i = 0, ii = context.tiles.length; i < ii; i++) {\n var tile = context.tiles[i];\n var transformedTiles = [];\n var c;\n for (c = 0; c < componentsCount; c++) {\n transformedTiles[c] = transformTile(context, tile, c);\n }\n var tile0 = transformedTiles[0];\n var isSigned = components[0].isSigned;\n if (isSigned) {\n var out = new Int16Array(tile0.items.length * componentsCount);\n } else {\n var out = new Uint16Array(tile0.items.length * componentsCount);\n }\n var result = {\n left: tile0.left,\n top: tile0.top,\n width: tile0.width,\n height: tile0.height,\n items: out\n };\n\n // Section G.2.2 Inverse multi component transform\n var shift, offset, max, min, maxK;\n var pos = 0, j, jj, y0, y1, y2, r, g, b, k, val;\n if (tile.codingStyleDefaultParameters.multipleComponentTransform) {\n var fourComponents = componentsCount === 4;\n var y0items = transformedTiles[0].items;\n var y1items = transformedTiles[1].items;\n var y2items = transformedTiles[2].items;\n var y3items = fourComponents ? transformedTiles[3].items : null;\n\n // HACK: The multiple component transform formulas below assume that\n // all components have the same precision. With this in mind, we\n // compute shift and offset only once.\n shift = components[0].precision - 8;\n offset = (128 << shift) + 0.5;\n max = 255 * (1 << shift);\n maxK = max * 0.5;\n min = -maxK;\n\n var component0 = tile.components[0];\n var alpha01 = componentsCount - 3;\n jj = y0items.length;\n if (!component0.codingStyleParameters.reversibleTransformation) {\n // inverse irreversible multiple component transform\n for (j = 0; j < jj; j++, pos += alpha01) {\n y0 = y0items[j] + offset;\n y1 = y1items[j];\n y2 = y2items[j];\n r = y0 + 1.402 * y2;\n g = y0 - 0.34413 * y1 - 0.71414 * y2;\n b = y0 + 1.772 * y1;\n out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift;\n out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift;\n out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift;\n }\n } else {\n // inverse reversible multiple component transform\n for (j = 0; j < jj; j++, pos += alpha01) {\n y0 = y0items[j] + offset;\n y1 = y1items[j];\n y2 = y2items[j];\n g = y0 - ((y2 + y1) >> 2);\n r = g + y2;\n b = g + y1;\n out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift;\n out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift;\n out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift;\n }\n }\n if (fourComponents) {\n for (j = 0, pos = 3; j < jj; j++, pos += 4) {\n k = y3items[j];\n out[pos] = k <= min ? 0 : k >= maxK ? 255 : (k + offset) >> shift;\n }\n }\n } else { // no multi-component transform\n for (c = 0; c < componentsCount; c++) {\n if (components[c].precision === 8){\n var items = transformedTiles[c].items;\n shift = components[c].precision - 8;\n offset = (128 << shift) + 0.5;\n max = (127.5 * (1 << shift));\n min = -max;\n for (pos = c, j = 0, jj = items.length; j < jj; j++) {\n val = items[j];\n out[pos] = val <= min ? 0 :\n val >= max ? 255 : (val + offset) >> shift;\n pos += componentsCount;\n }\n }else{\n var isSigned = components[c].isSigned;\n var items = transformedTiles[c].items;\n\n if(isSigned){\n for (pos = c, j = 0, jj = items.length; j < jj; j++) {\n out[pos] = items[j];\n pos += componentsCount;\n }\n }else{\n shift = components[c].precision - 8;\n offset = (128 << shift) + 0.5;\n var precisionMax = Math.pow(2,components[c].precision)-1;\n for (pos = c, j = 0, jj = items.length; j < jj; j++) {\n val = items[j];\n out[pos] = Math.max(Math.min((val + offset),precisionMax),0);\n pos += componentsCount;\n }\n }\n }\n }\n }\n resultImages.push(result);\n }\n return resultImages;\n }\n function initializeTile(context, tileIndex) {\n var siz = context.SIZ;\n var componentsCount = siz.Csiz;\n var tile = context.tiles[tileIndex];\n for (var c = 0; c < componentsCount; c++) {\n var component = tile.components[c];\n var qcdOrQcc = (context.currentTile.QCC[c] !== undefined ?\n context.currentTile.QCC[c] : context.currentTile.QCD);\n component.quantizationParameters = qcdOrQcc;\n var codOrCoc = (context.currentTile.COC[c] !== undefined ?\n context.currentTile.COC[c] : context.currentTile.COD);\n component.codingStyleParameters = codOrCoc;\n }\n tile.codingStyleDefaultParameters = context.currentTile.COD;\n }\n\n // Section B.10.2 Tag trees\n var TagTree = (function TagTreeClosure() {\n function TagTree(width, height) {\n var levelsLength = log2(Math.max(width, height)) + 1;\n this.levels = [];\n for (var i = 0; i < levelsLength; i++) {\n var level = {\n width: width,\n height: height,\n items: []\n };\n this.levels.push(level);\n width = Math.ceil(width / 2);\n height = Math.ceil(height / 2);\n }\n }\n TagTree.prototype = {\n reset: function TagTree_reset(i, j) {\n var currentLevel = 0, value = 0, level;\n while (currentLevel < this.levels.length) {\n level = this.levels[currentLevel];\n var index = i + j * level.width;\n if (level.items[index] !== undefined) {\n value = level.items[index];\n break;\n }\n level.index = index;\n i >>= 1;\n j >>= 1;\n currentLevel++;\n }\n currentLevel--;\n level = this.levels[currentLevel];\n level.items[level.index] = value;\n this.currentLevel = currentLevel;\n delete this.value;\n },\n incrementValue: function TagTree_incrementValue() {\n var level = this.levels[this.currentLevel];\n level.items[level.index]++;\n },\n nextLevel: function TagTree_nextLevel() {\n var currentLevel = this.currentLevel;\n var level = this.levels[currentLevel];\n var value = level.items[level.index];\n currentLevel--;\n if (currentLevel < 0) {\n this.value = value;\n return false;\n }\n\n this.currentLevel = currentLevel;\n level = this.levels[currentLevel];\n level.items[level.index] = value;\n return true;\n }\n };\n return TagTree;\n })();\n\n var InclusionTree = (function InclusionTreeClosure() {\n function InclusionTree(width, height) {\n var levelsLength = log2(Math.max(width, height)) + 1;\n this.levels = [];\n for (var i = 0; i < levelsLength; i++) {\n var items = new Uint8Array(width * height);\n var status = new Uint8Array(width * height);\n for (var j = 0, jj = items.length; j < jj; j++) {\n items[j] = 0;\n status[j] = 0;\n }\n\n var level = {\n width: width,\n height: height,\n items: items,\n status: status\n };\n this.levels.push(level);\n\n width = Math.ceil(width / 2);\n height = Math.ceil(height / 2);\n }\n }\n InclusionTree.prototype = {\n reset: function InclusionTree_reset(i, j, stopValue) {\n this.currentStopValue = stopValue;\n var currentLevel = 0;\n while (currentLevel < this.levels.length) {\n var level = this.levels[currentLevel];\n var index = i + j * level.width;\n level.index = index;\n\n i >>= 1;\n j >>= 1;\n currentLevel++;\n }\n\n this.currentLevel = this.levels.length - 1;\n this.minValue =this.levels[this.currentLevel].items[0];\n return;\n },\n incrementValue: function InclusionTree_incrementValue() {\n var level = this.levels[this.currentLevel];\n level.items[level.index] = level.items[level.index] + 1;\n if(level.items[level.index] > this.minValue) {\n this.minValue = level.items[level.index];\n }\n },\n nextLevel: function InclusionTree_nextLevel() {\n var currentLevel = this.currentLevel;\n currentLevel--;\n if (currentLevel < 0) {\n return false;\n } else {\n this.currentLevel = currentLevel;\n var level = this.levels[currentLevel];\n if(level.items[level.index] < this.minValue) {\n level.items[level.index] = this.minValue;\n }else if (level.items[level.index] > this.minValue) {\n this.minValue = level.items[level.index];\n }\n return true;\n }\n },\n isLeaf: function InclusionTree_isLeaf(){\n return (this.currentLevel === 0);\n },\n isAboveThreshold: function InclusionTree_isAboveThreshold(){\n var levelindex = this.currentLevel;\n var level = this.levels[levelindex];\n return (level.items[level.index] > this.currentStopValue);\n },\n isKnown: function InclusionTree_isKnown(){\n var levelindex = this.currentLevel;\n var level = this.levels[levelindex];\n return (level.status[level.index] > 0);\n },\n setKnown: function InclusionTree_setKnown(){\n var levelindex = this.currentLevel;\n var level = this.levels[levelindex];\n level.status[level.index] = 1;\n return;\n }\n\n };\n return InclusionTree;\n })();\n\n // Section D. Coefficient bit modeling\n var BitModel = (function BitModelClosure() {\n var UNIFORM_CONTEXT = 17;\n var RUNLENGTH_CONTEXT = 18;\n // Table D-1\n // The index is binary presentation: 0dddvvhh, ddd - sum of Di (0..4),\n // vv - sum of Vi (0..2), and hh - sum of Hi (0..2)\n var LLAndLHContextsLabel = new Uint8Array([\n 0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4,\n 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6,\n 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8\n ]);\n var HLContextLabel = new Uint8Array([\n 0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8,\n 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3,\n 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8\n ]);\n var HHContextLabel = new Uint8Array([\n 0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5,\n 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8,\n 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8\n ]);\n\n function BitModel(width, height, subband, zeroBitPlanes, mb) {\n this.width = width;\n this.height = height;\n\n this.contextLabelTable = (subband === 'HH' ? HHContextLabel :\n (subband === 'HL' ? HLContextLabel : LLAndLHContextsLabel));\n\n var coefficientCount = width * height;\n\n // coefficients outside the encoding region treated as insignificant\n // add border state cells for significanceState\n this.neighborsSignificance = new Uint8Array(coefficientCount);\n this.coefficentsSign = new Uint8Array(coefficientCount);\n this.coefficentsMagnitude = mb > 14 ? new Uint32Array(coefficientCount) :\n mb > 6 ? new Uint16Array(coefficientCount) :\n new Uint8Array(coefficientCount);\n this.processingFlags = new Uint8Array(coefficientCount);\n\n var bitsDecoded = new Uint8Array(coefficientCount);\n if (zeroBitPlanes !== 0) {\n for (var i = 0; i < coefficientCount; i++) {\n bitsDecoded[i] = zeroBitPlanes;\n }\n }\n this.bitsDecoded = bitsDecoded;\n\n this.reset();\n }\n\n BitModel.prototype = {\n setDecoder: function BitModel_setDecoder(decoder) {\n this.decoder = decoder;\n },\n reset: function BitModel_reset() {\n // We have 17 contexts that are accessed via context labels,\n // plus the uniform and runlength context.\n this.contexts = new Int8Array(19);\n\n // Contexts are packed into 1 byte:\n // highest 7 bits carry the index, lowest bit carries mps\n this.contexts[0] = (4 << 1) | 0;\n this.contexts[UNIFORM_CONTEXT] = (46 << 1) | 0;\n this.contexts[RUNLENGTH_CONTEXT] = (3 << 1) | 0;\n },\n setNeighborsSignificance:\n function BitModel_setNeighborsSignificance(row, column, index) {\n var neighborsSignificance = this.neighborsSignificance;\n var width = this.width, height = this.height;\n var left = (column > 0);\n var right = (column + 1 < width);\n var i;\n\n if (row > 0) {\n i = index - width;\n if (left) {\n neighborsSignificance[i - 1] += 0x10;\n }\n if (right) {\n neighborsSignificance[i + 1] += 0x10;\n }\n neighborsSignificance[i] += 0x04;\n }\n\n if (row + 1 < height) {\n i = index + width;\n if (left) {\n neighborsSignificance[i - 1] += 0x10;\n }\n if (right) {\n neighborsSignificance[i + 1] += 0x10;\n }\n neighborsSignificance[i] += 0x04;\n }\n\n if (left) {\n neighborsSignificance[index - 1] += 0x01;\n }\n if (right) {\n neighborsSignificance[index + 1] += 0x01;\n }\n neighborsSignificance[index] |= 0x80;\n },\n runSignificancePropogationPass:\n function BitModel_runSignificancePropogationPass() {\n var decoder = this.decoder;\n var width = this.width, height = this.height;\n var coefficentsMagnitude = this.coefficentsMagnitude;\n var coefficentsSign = this.coefficentsSign;\n var neighborsSignificance = this.neighborsSignificance;\n var processingFlags = this.processingFlags;\n var contexts = this.contexts;\n var labels = this.contextLabelTable;\n var bitsDecoded = this.bitsDecoded;\n var processedInverseMask = ~1;\n var processedMask = 1;\n var firstMagnitudeBitMask = 2;\n\n for (var i0 = 0; i0 < height; i0 += 4) {\n for (var j = 0; j < width; j++) {\n var index = i0 * width + j;\n for (var i1 = 0; i1 < 4; i1++, index += width) {\n var i = i0 + i1;\n if (i >= height) {\n break;\n }\n // clear processed flag first\n processingFlags[index] &= processedInverseMask;\n\n if (coefficentsMagnitude[index] ||\n !neighborsSignificance[index]) {\n continue;\n }\n\n var contextLabel = labels[neighborsSignificance[index]];\n var decision = decoder.readBit(contexts, contextLabel);\n if (decision) {\n var sign = this.decodeSignBit(i, j, index);\n coefficentsSign[index] = sign;\n coefficentsMagnitude[index] = 1;\n this.setNeighborsSignificance(i, j, index);\n processingFlags[index] |= firstMagnitudeBitMask;\n }\n bitsDecoded[index]++;\n processingFlags[index] |= processedMask;\n }\n }\n }\n },\n decodeSignBit: function BitModel_decodeSignBit(row, column, index) {\n var width = this.width, height = this.height;\n var coefficentsMagnitude = this.coefficentsMagnitude;\n var coefficentsSign = this.coefficentsSign;\n var contribution, sign0, sign1, significance1;\n var contextLabel, decoded;\n\n // calculate horizontal contribution\n significance1 = (column > 0 && coefficentsMagnitude[index - 1] !== 0);\n if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {\n sign1 = coefficentsSign[index + 1];\n if (significance1) {\n sign0 = coefficentsSign[index - 1];\n contribution = 1 - sign1 - sign0;\n } else {\n contribution = 1 - sign1 - sign1;\n }\n } else if (significance1) {\n sign0 = coefficentsSign[index - 1];\n contribution = 1 - sign0 - sign0;\n } else {\n contribution = 0;\n }\n var horizontalContribution = 3 * contribution;\n\n // calculate vertical contribution and combine with the horizontal\n significance1 = (row > 0 && coefficentsMagnitude[index - width] !== 0);\n if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {\n sign1 = coefficentsSign[index + width];\n if (significance1) {\n sign0 = coefficentsSign[index - width];\n contribution = 1 - sign1 - sign0 + horizontalContribution;\n } else {\n contribution = 1 - sign1 - sign1 + horizontalContribution;\n }\n } else if (significance1) {\n sign0 = coefficentsSign[index - width];\n contribution = 1 - sign0 - sign0 + horizontalContribution;\n } else {\n contribution = horizontalContribution;\n }\n\n if (contribution >= 0) {\n contextLabel = 9 + contribution;\n decoded = this.decoder.readBit(this.contexts, contextLabel);\n } else {\n contextLabel = 9 - contribution;\n decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;\n }\n return decoded;\n },\n runMagnitudeRefinementPass:\n function BitModel_runMagnitudeRefinementPass() {\n var decoder = this.decoder;\n var width = this.width, height = this.height;\n var coefficentsMagnitude = this.coefficentsMagnitude;\n var neighborsSignificance = this.neighborsSignificance;\n var contexts = this.contexts;\n var bitsDecoded = this.bitsDecoded;\n var processingFlags = this.processingFlags;\n var processedMask = 1;\n var firstMagnitudeBitMask = 2;\n var length = width * height;\n var width4 = width * 4;\n\n for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) {\n indexNext = Math.min(length, index0 + width4);\n for (var j = 0; j < width; j++) {\n for (var index = index0 + j; index < indexNext; index += width) {\n\n // significant but not those that have just become\n if (!coefficentsMagnitude[index] ||\n (processingFlags[index] & processedMask) !== 0) {\n continue;\n }\n\n var contextLabel = 16;\n if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {\n processingFlags[index] ^= firstMagnitudeBitMask;\n // first refinement\n var significance = neighborsSignificance[index] & 127;\n contextLabel = significance === 0 ? 15 : 14;\n }\n\n var bit = decoder.readBit(contexts, contextLabel);\n coefficentsMagnitude[index] =\n (coefficentsMagnitude[index] << 1) | bit;\n bitsDecoded[index]++;\n processingFlags[index] |= processedMask;\n }\n }\n }\n },\n runCleanupPass: function BitModel_runCleanupPass() {\n var decoder = this.decoder;\n var width = this.width, height = this.height;\n var neighborsSignificance = this.neighborsSignificance;\n var coefficentsMagnitude = this.coefficentsMagnitude;\n var coefficentsSign = this.coefficentsSign;\n var contexts = this.contexts;\n var labels = this.contextLabelTable;\n var bitsDecoded = this.bitsDecoded;\n var processingFlags = this.processingFlags;\n var processedMask = 1;\n var firstMagnitudeBitMask = 2;\n var oneRowDown = width;\n var twoRowsDown = width * 2;\n var threeRowsDown = width * 3;\n var iNext;\n for (var i0 = 0; i0 < height; i0 = iNext) {\n iNext = Math.min(i0 + 4, height);\n var indexBase = i0 * width;\n var checkAllEmpty = i0 + 3 < height;\n for (var j = 0; j < width; j++) {\n var index0 = indexBase + j;\n // using the property: labels[neighborsSignificance[index]] === 0\n // when neighborsSignificance[index] === 0\n var allEmpty = (checkAllEmpty &&\n processingFlags[index0] === 0 &&\n processingFlags[index0 + oneRowDown] === 0 &&\n processingFlags[index0 + twoRowsDown] === 0 &&\n processingFlags[index0 + threeRowsDown] === 0 &&\n neighborsSignificance[index0] === 0 &&\n neighborsSignificance[index0 + oneRowDown] === 0 &&\n neighborsSignificance[index0 + twoRowsDown] === 0 &&\n neighborsSignificance[index0 + threeRowsDown] === 0);\n var i1 = 0, index = index0;\n var i = i0, sign;\n if (allEmpty) {\n var hasSignificantCoefficent =\n decoder.readBit(contexts, RUNLENGTH_CONTEXT);\n if (!hasSignificantCoefficent) {\n bitsDecoded[index0]++;\n bitsDecoded[index0 + oneRowDown]++;\n bitsDecoded[index0 + twoRowsDown]++;\n bitsDecoded[index0 + threeRowsDown]++;\n continue; // next column\n }\n i1 = (decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) |\n decoder.readBit(contexts, UNIFORM_CONTEXT);\n if (i1 !== 0) {\n i = i0 + i1;\n index += i1 * width;\n }\n\n sign = this.decodeSignBit(i, j, index);\n coefficentsSign[index] = sign;\n coefficentsMagnitude[index] = 1;\n this.setNeighborsSignificance(i, j, index);\n processingFlags[index] |= firstMagnitudeBitMask;\n\n index = index0;\n for (var i2 = i0; i2 <= i; i2++, index += width) {\n bitsDecoded[index]++;\n }\n\n i1++;\n }\n for (i = i0 + i1; i < iNext; i++, index += width) {\n if (coefficentsMagnitude[index] ||\n (processingFlags[index] & processedMask) !== 0) {\n continue;\n }\n\n var contextLabel = labels[neighborsSignificance[index]];\n var decision = decoder.readBit(contexts, contextLabel);\n if (decision === 1) {\n sign = this.decodeSignBit(i, j, index);\n coefficentsSign[index] = sign;\n coefficentsMagnitude[index] = 1;\n this.setNeighborsSignificance(i, j, index);\n processingFlags[index] |= firstMagnitudeBitMask;\n }\n bitsDecoded[index]++;\n }\n }\n }\n },\n checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() {\n var decoder = this.decoder;\n var contexts = this.contexts;\n var symbol = (decoder.readBit(contexts, UNIFORM_CONTEXT) << 3) |\n (decoder.readBit(contexts, UNIFORM_CONTEXT) << 2) |\n (decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) |\n decoder.readBit(contexts, UNIFORM_CONTEXT);\n if (symbol !== 0xA) {\n throw new Error('JPX Error: Invalid segmentation symbol');\n }\n }\n };\n\n return BitModel;\n })();\n\n // Section F, Discrete wavelet transformation\n var Transform = (function TransformClosure() {\n function Transform() {}\n\n Transform.prototype.calculate =\n function transformCalculate(subbands, u0, v0) {\n var ll = subbands[0];\n for (var i = 1, ii = subbands.length; i < ii; i++) {\n ll = this.iterate(ll, subbands[i], u0, v0);\n }\n return ll;\n };\n Transform.prototype.extend = function extend(buffer, offset, size) {\n // Section F.3.7 extending... using max extension of 4\n var i1 = offset - 1, j1 = offset + 1;\n var i2 = offset + size - 2, j2 = offset + size;\n buffer[i1--] = buffer[j1++];\n buffer[j2++] = buffer[i2--];\n buffer[i1--] = buffer[j1++];\n buffer[j2++] = buffer[i2--];\n buffer[i1--] = buffer[j1++];\n buffer[j2++] = buffer[i2--];\n buffer[i1] = buffer[j1];\n buffer[j2] = buffer[i2];\n };\n Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh,\n u0, v0) {\n var llWidth = ll.width, llHeight = ll.height, llItems = ll.items;\n var width = hl_lh_hh.width;\n var height = hl_lh_hh.height;\n var items = hl_lh_hh.items;\n var i, j, k, l, u, v;\n\n // Interleave LL according to Section F.3.3\n for (k = 0, i = 0; i < llHeight; i++) {\n l = i * 2 * width;\n for (j = 0; j < llWidth; j++, k++, l += 2) {\n items[l] = llItems[k];\n }\n }\n // The LL band is not needed anymore.\n llItems = ll.items = null;\n\n var bufferPadding = 4;\n var rowBuffer = new Float32Array(width + 2 * bufferPadding);\n\n // Section F.3.4 HOR_SR\n if (width === 1) {\n // if width = 1, when u0 even keep items as is, when odd divide by 2\n if ((u0 & 1) !== 0) {\n for (v = 0, k = 0; v < height; v++, k += width) {\n items[k] *= 0.5;\n }\n }\n } else {\n for (v = 0, k = 0; v < height; v++, k += width) {\n rowBuffer.set(items.subarray(k, k + width), bufferPadding);\n\n this.extend(rowBuffer, bufferPadding, width);\n this.filter(rowBuffer, bufferPadding, width);\n\n items.set(\n rowBuffer.subarray(bufferPadding, bufferPadding + width),\n k);\n }\n }\n\n // Accesses to the items array can take long, because it may not fit into\n // CPU cache and has to be fetched from main memory. Since subsequent\n // accesses to the items array are not local when reading columns, we\n // have a cache miss every time. To reduce cache misses, get up to\n // 'numBuffers' items at a time and store them into the individual\n // buffers. The colBuffers should be small enough to fit into CPU cache.\n var numBuffers = 16;\n var colBuffers = [];\n for (i = 0; i < numBuffers; i++) {\n colBuffers.push(new Float32Array(height + 2 * bufferPadding));\n }\n var b, currentBuffer = 0;\n ll = bufferPadding + height;\n\n // Section F.3.5 VER_SR\n if (height === 1) {\n // if height = 1, when v0 even keep items as is, when odd divide by 2\n if ((v0 & 1) !== 0) {\n for (u = 0; u < width; u++) {\n items[u] *= 0.5;\n }\n }\n } else {\n for (u = 0; u < width; u++) {\n // if we ran out of buffers, copy several image columns at once\n if (currentBuffer === 0) {\n numBuffers = Math.min(width - u, numBuffers);\n for (k = u, l = bufferPadding; l < ll; k += width, l++) {\n for (b = 0; b < numBuffers; b++) {\n colBuffers[b][l] = items[k + b];\n }\n }\n currentBuffer = numBuffers;\n }\n\n currentBuffer--;\n var buffer = colBuffers[currentBuffer];\n this.extend(buffer, bufferPadding, height);\n this.filter(buffer, bufferPadding, height);\n\n // If this is last buffer in this group of buffers, flush all buffers.\n if (currentBuffer === 0) {\n k = u - numBuffers + 1;\n for (l = bufferPadding; l < ll; k += width, l++) {\n for (b = 0; b < numBuffers; b++) {\n items[k + b] = colBuffers[b][l];\n }\n }\n }\n }\n }\n\n return {\n width: width,\n height: height,\n items: items\n };\n };\n return Transform;\n })();\n\n // Section 3.8.2 Irreversible 9-7 filter\n var IrreversibleTransform = (function IrreversibleTransformClosure() {\n function IrreversibleTransform() {\n Transform.call(this);\n }\n\n IrreversibleTransform.prototype = Object.create(Transform.prototype);\n IrreversibleTransform.prototype.filter =\n function irreversibleTransformFilter(x, offset, length) {\n var len = length >> 1;\n offset = offset | 0;\n var j, n, current, next;\n\n var alpha = -1.586134342059924;\n var beta = -0.052980118572961;\n var gamma = 0.882911075530934;\n var delta = 0.443506852043971;\n var K = 1.230174104914001;\n var K_ = 1 / K;\n\n // step 1 is combined with step 3\n\n // step 2\n j = offset - 3;\n for (n = len + 4; n--; j += 2) {\n x[j] *= K_;\n }\n\n // step 1 & 3\n j = offset - 2;\n current = delta * x[j -1];\n for (n = len + 3; n--; j += 2) {\n next = delta * x[j + 1];\n x[j] = K * x[j] - current - next;\n if (n--) {\n j += 2;\n current = delta * x[j + 1];\n x[j] = K * x[j] - current - next;\n } else {\n break;\n }\n }\n\n // step 4\n j = offset - 1;\n current = gamma * x[j - 1];\n for (n = len + 2; n--; j += 2) {\n next = gamma * x[j + 1];\n x[j] -= current + next;\n if (n--) {\n j += 2;\n current = gamma * x[j + 1];\n x[j] -= current + next;\n } else {\n break;\n }\n }\n\n // step 5\n j = offset;\n current = beta * x[j - 1];\n for (n = len + 1; n--; j += 2) {\n next = beta * x[j + 1];\n x[j] -= current + next;\n if (n--) {\n j += 2;\n current = beta * x[j + 1];\n x[j] -= current + next;\n } else {\n break;\n }\n }\n\n // step 6\n if (len !== 0) {\n j = offset + 1;\n current = alpha * x[j - 1];\n for (n = len; n--; j += 2) {\n next = alpha * x[j + 1];\n x[j] -= current + next;\n if (n--) {\n j += 2;\n current = alpha * x[j + 1];\n x[j] -= current + next;\n } else {\n break;\n }\n }\n }\n };\n\n return IrreversibleTransform;\n })();\n\n // Section 3.8.1 Reversible 5-3 filter\n var ReversibleTransform = (function ReversibleTransformClosure() {\n function ReversibleTransform() {\n Transform.call(this);\n }\n\n ReversibleTransform.prototype = Object.create(Transform.prototype);\n ReversibleTransform.prototype.filter =\n function reversibleTransformFilter(x, offset, length) {\n var len = length >> 1;\n offset = offset | 0;\n var j, n;\n\n for (j = offset, n = len + 1; n--; j += 2) {\n x[j] -= (x[j - 1] + x[j + 1] + 2) >> 2;\n }\n\n for (j = offset + 1, n = len; n--; j += 2) {\n x[j] += (x[j - 1] + x[j + 1]) >> 1;\n }\n };\n\n return ReversibleTransform;\n })();\n\n return JpxImage;\n})();\n\n\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\n/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use strict';\n\n/* This class implements the QM Coder decoding as defined in\n * JPEG 2000 Part I Final Committee Draft Version 1.0\n * Annex C.3 Arithmetic decoding procedure \n * available at http://www.jpeg.org/public/fcd15444-1.pdf\n * \n * The arithmetic decoder is used in conjunction with context models to decode\n * JPEG2000 and JBIG2 streams.\n */\nvar ArithmeticDecoder = (function ArithmeticDecoderClosure() {\n // Table C-2\n var QeTable = [\n {qe: 0x5601, nmps: 1, nlps: 1, switchFlag: 1},\n {qe: 0x3401, nmps: 2, nlps: 6, switchFlag: 0},\n {qe: 0x1801, nmps: 3, nlps: 9, switchFlag: 0},\n {qe: 0x0AC1, nmps: 4, nlps: 12, switchFlag: 0},\n {qe: 0x0521, nmps: 5, nlps: 29, switchFlag: 0},\n {qe: 0x0221, nmps: 38, nlps: 33, switchFlag: 0},\n {qe: 0x5601, nmps: 7, nlps: 6, switchFlag: 1},\n {qe: 0x5401, nmps: 8, nlps: 14, switchFlag: 0},\n {qe: 0x4801, nmps: 9, nlps: 14, switchFlag: 0},\n {qe: 0x3801, nmps: 10, nlps: 14, switchFlag: 0},\n {qe: 0x3001, nmps: 11, nlps: 17, switchFlag: 0},\n {qe: 0x2401, nmps: 12, nlps: 18, switchFlag: 0},\n {qe: 0x1C01, nmps: 13, nlps: 20, switchFlag: 0},\n {qe: 0x1601, nmps: 29, nlps: 21, switchFlag: 0},\n {qe: 0x5601, nmps: 15, nlps: 14, switchFlag: 1},\n {qe: 0x5401, nmps: 16, nlps: 14, switchFlag: 0},\n {qe: 0x5101, nmps: 17, nlps: 15, switchFlag: 0},\n {qe: 0x4801, nmps: 18, nlps: 16, switchFlag: 0},\n {qe: 0x3801, nmps: 19, nlps: 17, switchFlag: 0},\n {qe: 0x3401, nmps: 20, nlps: 18, switchFlag: 0},\n {qe: 0x3001, nmps: 21, nlps: 19, switchFlag: 0},\n {qe: 0x2801, nmps: 22, nlps: 19, switchFlag: 0},\n {qe: 0x2401, nmps: 23, nlps: 20, switchFlag: 0},\n {qe: 0x2201, nmps: 24, nlps: 21, switchFlag: 0},\n {qe: 0x1C01, nmps: 25, nlps: 22, switchFlag: 0},\n {qe: 0x1801, nmps: 26, nlps: 23, switchFlag: 0},\n {qe: 0x1601, nmps: 27, nlps: 24, switchFlag: 0},\n {qe: 0x1401, nmps: 28, nlps: 25, switchFlag: 0},\n {qe: 0x1201, nmps: 29, nlps: 26, switchFlag: 0},\n {qe: 0x1101, nmps: 30, nlps: 27, switchFlag: 0},\n {qe: 0x0AC1, nmps: 31, nlps: 28, switchFlag: 0},\n {qe: 0x09C1, nmps: 32, nlps: 29, switchFlag: 0},\n {qe: 0x08A1, nmps: 33, nlps: 30, switchFlag: 0},\n {qe: 0x0521, nmps: 34, nlps: 31, switchFlag: 0},\n {qe: 0x0441, nmps: 35, nlps: 32, switchFlag: 0},\n {qe: 0x02A1, nmps: 36, nlps: 33, switchFlag: 0},\n {qe: 0x0221, nmps: 37, nlps: 34, switchFlag: 0},\n {qe: 0x0141, nmps: 38, nlps: 35, switchFlag: 0},\n {qe: 0x0111, nmps: 39, nlps: 36, switchFlag: 0},\n {qe: 0x0085, nmps: 40, nlps: 37, switchFlag: 0},\n {qe: 0x0049, nmps: 41, nlps: 38, switchFlag: 0},\n {qe: 0x0025, nmps: 42, nlps: 39, switchFlag: 0},\n {qe: 0x0015, nmps: 43, nlps: 40, switchFlag: 0},\n {qe: 0x0009, nmps: 44, nlps: 41, switchFlag: 0},\n {qe: 0x0005, nmps: 45, nlps: 42, switchFlag: 0},\n {qe: 0x0001, nmps: 45, nlps: 43, switchFlag: 0},\n {qe: 0x5601, nmps: 46, nlps: 46, switchFlag: 0}\n ];\n\n // C.3.5 Initialisation of the decoder (INITDEC)\n function ArithmeticDecoder(data, start, end) {\n this.data = data;\n this.bp = start;\n this.dataEnd = end;\n\n this.chigh = data[start];\n this.clow = 0;\n\n this.byteIn();\n\n this.chigh = ((this.chigh << 7) & 0xFFFF) | ((this.clow >> 9) & 0x7F);\n this.clow = (this.clow << 7) & 0xFFFF;\n this.ct -= 7;\n this.a = 0x8000;\n }\n\n ArithmeticDecoder.prototype = {\n // C.3.4 Compressed data input (BYTEIN)\n byteIn: function ArithmeticDecoder_byteIn() {\n var data = this.data;\n var bp = this.bp;\n if (data[bp] === 0xFF) {\n var b1 = data[bp + 1];\n if (b1 > 0x8F) {\n this.clow += 0xFF00;\n this.ct = 8;\n } else {\n bp++;\n this.clow += (data[bp] << 9);\n this.ct = 7;\n this.bp = bp;\n }\n } else {\n bp++;\n this.clow += bp < this.dataEnd ? (data[bp] << 8) : 0xFF00;\n this.ct = 8;\n this.bp = bp;\n }\n if (this.clow > 0xFFFF) {\n this.chigh += (this.clow >> 16);\n this.clow &= 0xFFFF;\n }\n },\n // C.3.2 Decoding a decision (parseDicom)\n readBit: function ArithmeticDecoder_readBit(contexts, pos) {\n // contexts are packed into 1 byte:\n // highest 7 bits carry cx.index, lowest bit carries cx.mps\n var cx_index = contexts[pos] >> 1, cx_mps = contexts[pos] & 1;\n var qeTableIcx = QeTable[cx_index];\n var qeIcx = qeTableIcx.qe;\n var d;\n var a = this.a - qeIcx;\n\n if (this.chigh < qeIcx) {\n // exchangeLps\n if (a < qeIcx) {\n a = qeIcx;\n d = cx_mps;\n cx_index = qeTableIcx.nmps;\n } else {\n a = qeIcx;\n d = 1 ^ cx_mps;\n if (qeTableIcx.switchFlag === 1) {\n cx_mps = d;\n }\n cx_index = qeTableIcx.nlps;\n }\n } else {\n this.chigh -= qeIcx;\n if ((a & 0x8000) !== 0) {\n this.a = a;\n return cx_mps;\n }\n // exchangeMps\n if (a < qeIcx) {\n d = 1 ^ cx_mps;\n if (qeTableIcx.switchFlag === 1) {\n cx_mps = d;\n }\n cx_index = qeTableIcx.nlps;\n } else {\n d = cx_mps;\n cx_index = qeTableIcx.nmps;\n }\n }\n // C.3.3 renormD;\n do {\n if (this.ct === 0) {\n this.byteIn();\n }\n\n a <<= 1;\n this.chigh = ((this.chigh << 1) & 0xFFFF) | ((this.clow >> 15) & 1);\n this.clow = (this.clow << 1) & 0xFFFF;\n this.ct--;\n } while ((a & 0x8000) === 0);\n this.a = a;\n\n contexts[pos] = cx_index << 1 | cx_mps;\n return d;\n }\n };\n\n return ArithmeticDecoder;\n})();\n\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\n/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals Cmd, ColorSpace, Dict, MozBlobBuilder, Name, PDFJS, Ref, URL,\n Promise */\n\n'use strict';\n\nvar globalScope = (typeof window === 'undefined') ? this : window;\n\nvar isWorker = (typeof window === 'undefined');\n\nvar FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\nvar TextRenderingMode = {\n FILL: 0,\n STROKE: 1,\n FILL_STROKE: 2,\n INVISIBLE: 3,\n FILL_ADD_TO_PATH: 4,\n STROKE_ADD_TO_PATH: 5,\n FILL_STROKE_ADD_TO_PATH: 6,\n ADD_TO_PATH: 7,\n FILL_STROKE_MASK: 3,\n ADD_TO_PATH_FLAG: 4\n};\n\nvar ImageKind = {\n GRAYSCALE_1BPP: 1,\n RGB_24BPP: 2,\n RGBA_32BPP: 3\n};\n\nvar AnnotationType = {\n WIDGET: 1,\n TEXT: 2,\n LINK: 3\n};\n\nvar StreamType = {\n UNKNOWN: 0,\n FLATE: 1,\n LZW: 2,\n DCT: 3,\n JPX: 4,\n JBIG: 5,\n A85: 6,\n AHX: 7,\n CCF: 8,\n RL: 9\n};\n\nvar FontType = {\n UNKNOWN: 0,\n TYPE1: 1,\n TYPE1C: 2,\n CIDFONTTYPE0: 3,\n CIDFONTTYPE0C: 4,\n TRUETYPE: 5,\n CIDFONTTYPE2: 6,\n TYPE3: 7,\n OPENTYPE: 8,\n TYPE0: 9,\n MMTYPE1: 10\n};\n\n// The global PDFJS object exposes the API\n// In production, it will be declared outside a global wrapper\n// In development, it will be declared here\nif (!globalScope.PDFJS) {\n globalScope.PDFJS = {};\n}\n\nglobalScope.PDFJS.pdfBug = false;\n\nPDFJS.VERBOSITY_LEVELS = {\n errors: 0,\n warnings: 1,\n infos: 5\n};\n\n// All the possible operations for an operator list.\nvar OPS = PDFJS.OPS = {\n // Intentionally start from 1 so it is easy to spot bad operators that will be\n // 0's.\n dependency: 1,\n setLineWidth: 2,\n setLineCap: 3,\n setLineJoin: 4,\n setMiterLimit: 5,\n setDash: 6,\n setRenderingIntent: 7,\n setFlatness: 8,\n setGState: 9,\n save: 10,\n restore: 11,\n transform: 12,\n moveTo: 13,\n lineTo: 14,\n curveTo: 15,\n curveTo2: 16,\n curveTo3: 17,\n closePath: 18,\n rectangle: 19,\n stroke: 20,\n closeStroke: 21,\n fill: 22,\n eoFill: 23,\n fillStroke: 24,\n eoFillStroke: 25,\n closeFillStroke: 26,\n closeEOFillStroke: 27,\n endPath: 28,\n clip: 29,\n eoClip: 30,\n beginText: 31,\n endText: 32,\n setCharSpacing: 33,\n setWordSpacing: 34,\n setHScale: 35,\n setLeading: 36,\n setFont: 37,\n setTextRenderingMode: 38,\n setTextRise: 39,\n moveText: 40,\n setLeadingMoveText: 41,\n setTextMatrix: 42,\n nextLine: 43,\n showText: 44,\n showSpacedText: 45,\n nextLineShowText: 46,\n nextLineSetSpacingShowText: 47,\n setCharWidth: 48,\n setCharWidthAndBounds: 49,\n setStrokeColorSpace: 50,\n setFillColorSpace: 51,\n setStrokeColor: 52,\n setStrokeColorN: 53,\n setFillColor: 54,\n setFillColorN: 55,\n setStrokeGray: 56,\n setFillGray: 57,\n setStrokeRGBColor: 58,\n setFillRGBColor: 59,\n setStrokeCMYKColor: 60,\n setFillCMYKColor: 61,\n shadingFill: 62,\n beginInlineImage: 63,\n beginImageData: 64,\n endInlineImage: 65,\n paintXObject: 66,\n markPoint: 67,\n markPointProps: 68,\n beginMarkedContent: 69,\n beginMarkedContentProps: 70,\n endMarkedContent: 71,\n beginCompat: 72,\n endCompat: 73,\n paintFormXObjectBegin: 74,\n paintFormXObjectEnd: 75,\n beginGroup: 76,\n endGroup: 77,\n beginAnnotations: 78,\n endAnnotations: 79,\n beginAnnotation: 80,\n endAnnotation: 81,\n paintJpegXObject: 82,\n paintImageMaskXObject: 83,\n paintImageMaskXObjectGroup: 84,\n paintImageXObject: 85,\n paintInlineImageXObject: 86,\n paintInlineImageXObjectGroup: 87,\n paintImageXObjectRepeat: 88,\n paintImageMaskXObjectRepeat: 89,\n paintSolidColorImageMask: 90,\n constructPath: 91\n};\n\n// A notice for devs. These are good for things that are helpful to devs, such\n// as warning that Workers were disabled, which is important to devs but not\n// end users.\nfunction info(msg) {\n if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.infos) {\n console.log('Info: ' + msg);\n }\n}\n\n// Non-fatal warnings.\nfunction warn(msg) {\n if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.warnings) {\n console.log('Warning: ' + msg);\n }\n}\n\n// Fatal errors that should trigger the fallback UI and halt execution by\n// throwing an exception.\nfunction error(msg) {\n // If multiple arguments were passed, pass them all to the log function.\n if (arguments.length > 1) {\n var logArguments = ['Error:'];\n logArguments.push.apply(logArguments, arguments);\n console.log.apply(console, logArguments);\n // Join the arguments into a single string for the lines below.\n msg = [].join.call(arguments, ' ');\n } else {\n console.log('Error: ' + msg);\n }\n console.log(backtrace());\n UnsupportedManager.notify(UNSUPPORTED_FEATURES.unknown);\n throw new Error(msg);\n}\n\nfunction backtrace() {\n try {\n throw new Error();\n } catch (e) {\n return e.stack ? e.stack.split('\\n').slice(2).join('\\n') : '';\n }\n}\n\nfunction assert(cond, msg) {\n if (!cond) {\n error(msg);\n }\n}\n\nvar UNSUPPORTED_FEATURES = PDFJS.UNSUPPORTED_FEATURES = {\n unknown: 'unknown',\n forms: 'forms',\n javaScript: 'javaScript',\n smask: 'smask',\n shadingPattern: 'shadingPattern',\n font: 'font'\n};\n\nvar UnsupportedManager = PDFJS.UnsupportedManager =\n (function UnsupportedManagerClosure() {\n var listeners = [];\n return {\n listen: function (cb) {\n listeners.push(cb);\n },\n notify: function (featureId) {\n warn('Unsupported feature \"' + featureId + '\"');\n for (var i = 0, ii = listeners.length; i < ii; i++) {\n listeners[i](featureId);\n }\n }\n };\n})();\n\n// Combines two URLs. The baseUrl shall be absolute URL. If the url is an\n// absolute URL, it will be returned as is.\nfunction combineUrl(baseUrl, url) {\n if (!url) {\n return baseUrl;\n }\n if (/^[a-z][a-z0-9+\\-.]*:/i.test(url)) {\n return url;\n }\n var i;\n if (url.charAt(0) === '/') {\n // absolute path\n i = baseUrl.indexOf('://');\n if (url.charAt(1) === '/') {\n ++i;\n } else {\n i = baseUrl.indexOf('/', i + 3);\n }\n return baseUrl.substring(0, i) + url;\n } else {\n // relative path\n var pathLength = baseUrl.length;\n i = baseUrl.lastIndexOf('#');\n pathLength = i >= 0 ? i : pathLength;\n i = baseUrl.lastIndexOf('?', pathLength);\n pathLength = i >= 0 ? i : pathLength;\n var prefixLength = baseUrl.lastIndexOf('/', pathLength);\n return baseUrl.substring(0, prefixLength + 1) + url;\n }\n}\n\n// Validates if URL is safe and allowed, e.g. to avoid XSS.\nfunction isValidUrl(url, allowRelative) {\n if (!url) {\n return false;\n }\n // RFC 3986 (http://tools.ietf.org/html/rfc3986#section-3.1)\n // scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n var protocol = /^[a-z][a-z0-9+\\-.]*(?=:)/i.exec(url);\n if (!protocol) {\n return allowRelative;\n }\n protocol = protocol[0].toLowerCase();\n switch (protocol) {\n case 'http':\n case 'https':\n case 'ftp':\n case 'mailto':\n case 'tel':\n return true;\n default:\n return false;\n }\n}\nPDFJS.isValidUrl = isValidUrl;\n\nfunction shadow(obj, prop, value) {\n Object.defineProperty(obj, prop, { value: value,\n enumerable: true,\n configurable: true,\n writable: false });\n return value;\n}\nPDFJS.shadow = shadow;\n\nvar PasswordResponses = PDFJS.PasswordResponses = {\n NEED_PASSWORD: 1,\n INCORRECT_PASSWORD: 2\n};\n\nvar PasswordException = (function PasswordExceptionClosure() {\n function PasswordException(msg, code) {\n this.name = 'PasswordException';\n this.message = msg;\n this.code = code;\n }\n\n PasswordException.prototype = new Error();\n PasswordException.constructor = PasswordException;\n\n return PasswordException;\n})();\nPDFJS.PasswordException = PasswordException;\n\nvar UnknownErrorException = (function UnknownErrorExceptionClosure() {\n function UnknownErrorException(msg, details) {\n this.name = 'UnknownErrorException';\n this.message = msg;\n this.details = details;\n }\n\n UnknownErrorException.prototype = new Error();\n UnknownErrorException.constructor = UnknownErrorException;\n\n return UnknownErrorException;\n})();\nPDFJS.UnknownErrorException = UnknownErrorException;\n\nvar InvalidPDFException = (function InvalidPDFExceptionClosure() {\n function InvalidPDFException(msg) {\n this.name = 'InvalidPDFException';\n this.message = msg;\n }\n\n InvalidPDFException.prototype = new Error();\n InvalidPDFException.constructor = InvalidPDFException;\n\n return InvalidPDFException;\n})();\nPDFJS.InvalidPDFException = InvalidPDFException;\n\nvar MissingPDFException = (function MissingPDFExceptionClosure() {\n function MissingPDFException(msg) {\n this.name = 'MissingPDFException';\n this.message = msg;\n }\n\n MissingPDFException.prototype = new Error();\n MissingPDFException.constructor = MissingPDFException;\n\n return MissingPDFException;\n})();\nPDFJS.MissingPDFException = MissingPDFException;\n\nvar UnexpectedResponseException =\n (function UnexpectedResponseExceptionClosure() {\n function UnexpectedResponseException(msg, status) {\n this.name = 'UnexpectedResponseException';\n this.message = msg;\n this.status = status;\n }\n\n UnexpectedResponseException.prototype = new Error();\n UnexpectedResponseException.constructor = UnexpectedResponseException;\n\n return UnexpectedResponseException;\n})();\nPDFJS.UnexpectedResponseException = UnexpectedResponseException;\n\nvar NotImplementedException = (function NotImplementedExceptionClosure() {\n function NotImplementedException(msg) {\n this.message = msg;\n }\n\n NotImplementedException.prototype = new Error();\n NotImplementedException.prototype.name = 'NotImplementedException';\n NotImplementedException.constructor = NotImplementedException;\n\n return NotImplementedException;\n})();\n\nvar MissingDataException = (function MissingDataExceptionClosure() {\n function MissingDataException(begin, end) {\n this.begin = begin;\n this.end = end;\n this.message = 'Missing data [' + begin + ', ' + end + ')';\n }\n\n MissingDataException.prototype = new Error();\n MissingDataException.prototype.name = 'MissingDataException';\n MissingDataException.constructor = MissingDataException;\n\n return MissingDataException;\n})();\n\nvar XRefParseException = (function XRefParseExceptionClosure() {\n function XRefParseException(msg) {\n this.message = msg;\n }\n\n XRefParseException.prototype = new Error();\n XRefParseException.prototype.name = 'XRefParseException';\n XRefParseException.constructor = XRefParseException;\n\n return XRefParseException;\n})();\n\n\nfunction bytesToString(bytes) {\n assert(bytes !== null && typeof bytes === 'object' &&\n bytes.length !== undefined, 'Invalid argument for bytesToString');\n var length = bytes.length;\n var MAX_ARGUMENT_COUNT = 8192;\n if (length < MAX_ARGUMENT_COUNT) {\n return String.fromCharCode.apply(null, bytes);\n }\n var strBuf = [];\n for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n var chunk = bytes.subarray(i, chunkEnd);\n strBuf.push(String.fromCharCode.apply(null, chunk));\n }\n return strBuf.join('');\n}\n\nfunction stringToBytes(str) {\n assert(typeof str === 'string', 'Invalid argument for stringToBytes');\n var length = str.length;\n var bytes = new Uint8Array(length);\n for (var i = 0; i < length; ++i) {\n bytes[i] = str.charCodeAt(i) & 0xFF;\n }\n return bytes;\n}\n\nfunction string32(value) {\n return String.fromCharCode((value >> 24) & 0xff, (value >> 16) & 0xff,\n (value >> 8) & 0xff, value & 0xff);\n}\n\nfunction log2(x) {\n var n = 1, i = 0;\n while (x > n) {\n n <<= 1;\n i++;\n }\n return i;\n}\n\nfunction readInt8(data, start) {\n return (data[start] << 24) >> 24;\n}\n\nfunction readUint16(data, offset) {\n return (data[offset] << 8) | data[offset + 1];\n}\n\nfunction readUint32(data, offset) {\n return ((data[offset] << 24) | (data[offset + 1] << 16) |\n (data[offset + 2] << 8) | data[offset + 3]) >>> 0;\n}\n\n// Lazy test the endianness of the platform\n// NOTE: This will be 'true' for simulated TypedArrays\nfunction isLittleEndian() {\n var buffer8 = new Uint8Array(2);\n buffer8[0] = 1;\n var buffer16 = new Uint16Array(buffer8.buffer);\n return (buffer16[0] === 1);\n}\n\nObject.defineProperty(PDFJS, 'isLittleEndian', {\n configurable: true,\n get: function PDFJS_isLittleEndian() {\n return shadow(PDFJS, 'isLittleEndian', isLittleEndian());\n }\n});\n\n//#if !(FIREFOX || MOZCENTRAL || B2G || CHROME)\n//// Lazy test if the userAgant support CanvasTypedArrays\nfunction hasCanvasTypedArrays() {\n var canvas = document.createElement('canvas');\n canvas.width = canvas.height = 1;\n var ctx = canvas.getContext('2d');\n var imageData = ctx.createImageData(1, 1);\n return (typeof imageData.data.buffer !== 'undefined');\n}\n\nObject.defineProperty(PDFJS, 'hasCanvasTypedArrays', {\n configurable: true,\n get: function PDFJS_hasCanvasTypedArrays() {\n return shadow(PDFJS, 'hasCanvasTypedArrays', hasCanvasTypedArrays());\n }\n});\n\nvar Uint32ArrayView = (function Uint32ArrayViewClosure() {\n\n function Uint32ArrayView(buffer, length) {\n this.buffer = buffer;\n this.byteLength = buffer.length;\n this.length = length === undefined ? (this.byteLength >> 2) : length;\n ensureUint32ArrayViewProps(this.length);\n }\n Uint32ArrayView.prototype = Object.create(null);\n\n var uint32ArrayViewSetters = 0;\n function createUint32ArrayProp(index) {\n return {\n get: function () {\n var buffer = this.buffer, offset = index << 2;\n return (buffer[offset] | (buffer[offset + 1] << 8) |\n (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24)) >>> 0;\n },\n set: function (value) {\n var buffer = this.buffer, offset = index << 2;\n buffer[offset] = value & 255;\n buffer[offset + 1] = (value >> 8) & 255;\n buffer[offset + 2] = (value >> 16) & 255;\n buffer[offset + 3] = (value >>> 24) & 255;\n }\n };\n }\n\n function ensureUint32ArrayViewProps(length) {\n while (uint32ArrayViewSetters < length) {\n Object.defineProperty(Uint32ArrayView.prototype,\n uint32ArrayViewSetters,\n createUint32ArrayProp(uint32ArrayViewSetters));\n uint32ArrayViewSetters++;\n }\n }\n\n return Uint32ArrayView;\n})();\n//#else\n//PDFJS.hasCanvasTypedArrays = true;\n//#endif\n\nvar IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\n\nvar Util = PDFJS.Util = (function UtilClosure() {\n function Util() {}\n\n var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')'];\n\n // makeCssRgb() can be called thousands of times. Using |rgbBuf| avoids\n // creating many intermediate strings.\n Util.makeCssRgb = function Util_makeCssRgb(r, g, b) {\n rgbBuf[1] = r;\n rgbBuf[3] = g;\n rgbBuf[5] = b;\n return rgbBuf.join('');\n };\n\n // Concatenates two transformation matrices together and returns the result.\n Util.transform = function Util_transform(m1, m2) {\n return [\n m1[0] * m2[0] + m1[2] * m2[1],\n m1[1] * m2[0] + m1[3] * m2[1],\n m1[0] * m2[2] + m1[2] * m2[3],\n m1[1] * m2[2] + m1[3] * m2[3],\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5]\n ];\n };\n\n // For 2d affine transforms\n Util.applyTransform = function Util_applyTransform(p, m) {\n var xt = p[0] * m[0] + p[1] * m[2] + m[4];\n var yt = p[0] * m[1] + p[1] * m[3] + m[5];\n return [xt, yt];\n };\n\n Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {\n var d = m[0] * m[3] - m[1] * m[2];\n var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n return [xt, yt];\n };\n\n // Applies the transform to the rectangle and finds the minimum axially\n // aligned bounding box.\n Util.getAxialAlignedBoundingBox =\n function Util_getAxialAlignedBoundingBox(r, m) {\n\n var p1 = Util.applyTransform(r, m);\n var p2 = Util.applyTransform(r.slice(2, 4), m);\n var p3 = Util.applyTransform([r[0], r[3]], m);\n var p4 = Util.applyTransform([r[2], r[1]], m);\n return [\n Math.min(p1[0], p2[0], p3[0], p4[0]),\n Math.min(p1[1], p2[1], p3[1], p4[1]),\n Math.max(p1[0], p2[0], p3[0], p4[0]),\n Math.max(p1[1], p2[1], p3[1], p4[1])\n ];\n };\n\n Util.inverseTransform = function Util_inverseTransform(m) {\n var d = m[0] * m[3] - m[1] * m[2];\n return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d,\n (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];\n };\n\n // Apply a generic 3d matrix M on a 3-vector v:\n // | a b c | | X |\n // | d e f | x | Y |\n // | g h i | | Z |\n // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],\n // with v as [X,Y,Z]\n Util.apply3dTransform = function Util_apply3dTransform(m, v) {\n return [\n m[0] * v[0] + m[1] * v[1] + m[2] * v[2],\n m[3] * v[0] + m[4] * v[1] + m[5] * v[2],\n m[6] * v[0] + m[7] * v[1] + m[8] * v[2]\n ];\n };\n\n // This calculation uses Singular Value Decomposition.\n // The SVD can be represented with formula A = USV. We are interested in the\n // matrix S here because it represents the scale values.\n Util.singularValueDecompose2dScale =\n function Util_singularValueDecompose2dScale(m) {\n\n var transpose = [m[0], m[2], m[1], m[3]];\n\n // Multiply matrix m with its transpose.\n var a = m[0] * transpose[0] + m[1] * transpose[2];\n var b = m[0] * transpose[1] + m[1] * transpose[3];\n var c = m[2] * transpose[0] + m[3] * transpose[2];\n var d = m[2] * transpose[1] + m[3] * transpose[3];\n\n // Solve the second degree polynomial to get roots.\n var first = (a + d) / 2;\n var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;\n var sx = first + second || 1;\n var sy = first - second || 1;\n\n // Scale values are the square roots of the eigenvalues.\n return [Math.sqrt(sx), Math.sqrt(sy)];\n };\n\n // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\n // For coordinate systems whose origin lies in the bottom-left, this\n // means normalization to (BL,TR) ordering. For systems with origin in the\n // top-left, this means (TL,BR) ordering.\n Util.normalizeRect = function Util_normalizeRect(rect) {\n var r = rect.slice(0); // clone rect\n if (rect[0] > rect[2]) {\n r[0] = rect[2];\n r[2] = rect[0];\n }\n if (rect[1] > rect[3]) {\n r[1] = rect[3];\n r[3] = rect[1];\n }\n return r;\n };\n\n // Returns a rectangle [x1, y1, x2, y2] corresponding to the\n // intersection of rect1 and rect2. If no intersection, returns 'false'\n // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\n Util.intersect = function Util_intersect(rect1, rect2) {\n function compare(a, b) {\n return a - b;\n }\n\n // Order points along the axes\n var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare),\n orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare),\n result = [];\n\n rect1 = Util.normalizeRect(rect1);\n rect2 = Util.normalizeRect(rect2);\n\n // X: first and second points belong to different rectangles?\n if ((orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||\n (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])) {\n // Intersection must be between second and third points\n result[0] = orderedX[1];\n result[2] = orderedX[2];\n } else {\n return false;\n }\n\n // Y: first and second points belong to different rectangles?\n if ((orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||\n (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])) {\n // Intersection must be between second and third points\n result[1] = orderedY[1];\n result[3] = orderedY[2];\n } else {\n return false;\n }\n\n return result;\n };\n\n Util.sign = function Util_sign(num) {\n return num < 0 ? -1 : 1;\n };\n\n Util.appendToArray = function Util_appendToArray(arr1, arr2) {\n Array.prototype.push.apply(arr1, arr2);\n };\n\n Util.prependToArray = function Util_prependToArray(arr1, arr2) {\n Array.prototype.unshift.apply(arr1, arr2);\n };\n\n Util.extendObj = function extendObj(obj1, obj2) {\n for (var key in obj2) {\n obj1[key] = obj2[key];\n }\n };\n\n Util.getInheritableProperty = function Util_getInheritableProperty(dict,\n name) {\n while (dict && !dict.has(name)) {\n dict = dict.get('Parent');\n }\n if (!dict) {\n return null;\n }\n return dict.get(name);\n };\n\n Util.inherit = function Util_inherit(sub, base, prototype) {\n sub.prototype = Object.create(base.prototype);\n sub.prototype.constructor = sub;\n for (var prop in prototype) {\n sub.prototype[prop] = prototype[prop];\n }\n };\n\n Util.loadScript = function Util_loadScript(src, callback) {\n var script = document.createElement('script');\n var loaded = false;\n script.setAttribute('src', src);\n if (callback) {\n script.onload = function() {\n if (!loaded) {\n callback();\n }\n loaded = true;\n };\n }\n document.getElementsByTagName('head')[0].appendChild(script);\n };\n\n return Util;\n})();\n\n/**\n * PDF page viewport created based on scale, rotation and offset.\n * @class\n * @alias PDFJS.PageViewport\n */\nvar PageViewport = PDFJS.PageViewport = (function PageViewportClosure() {\n /**\n * @constructor\n * @private\n * @param viewBox {Array} xMin, yMin, xMax and yMax coordinates.\n * @param scale {number} scale of the viewport.\n * @param rotation {number} rotations of the viewport in degrees.\n * @param offsetX {number} offset X\n * @param offsetY {number} offset Y\n * @param dontFlip {boolean} if true, axis Y will not be flipped.\n */\n function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) {\n this.viewBox = viewBox;\n this.scale = scale;\n this.rotation = rotation;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n // creating transform to convert pdf coordinate system to the normal\n // canvas like coordinates taking in account scale and rotation\n var centerX = (viewBox[2] + viewBox[0]) / 2;\n var centerY = (viewBox[3] + viewBox[1]) / 2;\n var rotateA, rotateB, rotateC, rotateD;\n rotation = rotation % 360;\n rotation = rotation < 0 ? rotation + 360 : rotation;\n switch (rotation) {\n case 180:\n rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1;\n break;\n case 90:\n rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0;\n break;\n case 270:\n rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0;\n break;\n //case 0:\n default:\n rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1;\n break;\n }\n\n if (dontFlip) {\n rotateC = -rotateC; rotateD = -rotateD;\n }\n\n var offsetCanvasX, offsetCanvasY;\n var width, height;\n if (rotateA === 0) {\n offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n width = Math.abs(viewBox[3] - viewBox[1]) * scale;\n height = Math.abs(viewBox[2] - viewBox[0]) * scale;\n } else {\n offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n width = Math.abs(viewBox[2] - viewBox[0]) * scale;\n height = Math.abs(viewBox[3] - viewBox[1]) * scale;\n }\n // creating transform for the following operations:\n // translate(-centerX, -centerY), rotate and flip vertically,\n // scale, and translate(offsetCanvasX, offsetCanvasY)\n this.transform = [\n rotateA * scale,\n rotateB * scale,\n rotateC * scale,\n rotateD * scale,\n offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,\n offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY\n ];\n\n this.width = width;\n this.height = height;\n this.fontScale = scale;\n }\n PageViewport.prototype = /** @lends PDFJS.PageViewport.prototype */ {\n /**\n * Clones viewport with additional properties.\n * @param args {Object} (optional) If specified, may contain the 'scale' or\n * 'rotation' properties to override the corresponding properties in\n * the cloned viewport.\n * @returns {PDFJS.PageViewport} Cloned viewport.\n */\n clone: function PageViewPort_clone(args) {\n args = args || {};\n var scale = 'scale' in args ? args.scale : this.scale;\n var rotation = 'rotation' in args ? args.rotation : this.rotation;\n return new PageViewport(this.viewBox.slice(), scale, rotation,\n this.offsetX, this.offsetY, args.dontFlip);\n },\n /**\n * Converts PDF point to the viewport coordinates. For examples, useful for\n * converting PDF location into canvas pixel coordinates.\n * @param x {number} X coordinate.\n * @param y {number} Y coordinate.\n * @returns {Object} Object that contains 'x' and 'y' properties of the\n * point in the viewport coordinate space.\n * @see {@link convertToPdfPoint}\n * @see {@link convertToViewportRectangle}\n */\n convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) {\n return Util.applyTransform([x, y], this.transform);\n },\n /**\n * Converts PDF rectangle to the viewport coordinates.\n * @param rect {Array} xMin, yMin, xMax and yMax coordinates.\n * @returns {Array} Contains corresponding coordinates of the rectangle\n * in the viewport coordinate space.\n * @see {@link convertToViewportPoint}\n */\n convertToViewportRectangle:\n function PageViewport_convertToViewportRectangle(rect) {\n var tl = Util.applyTransform([rect[0], rect[1]], this.transform);\n var br = Util.applyTransform([rect[2], rect[3]], this.transform);\n return [tl[0], tl[1], br[0], br[1]];\n },\n /**\n * Converts viewport coordinates to the PDF location. For examples, useful\n * for converting canvas pixel location into PDF one.\n * @param x {number} X coordinate.\n * @param y {number} Y coordinate.\n * @returns {Object} Object that contains 'x' and 'y' properties of the\n * point in the PDF coordinate space.\n * @see {@link convertToViewportPoint}\n */\n convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) {\n return Util.applyInverseTransform([x, y], this.transform);\n }\n };\n return PageViewport;\n})();\n\nvar PDFStringTranslateTable = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014,\n 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C,\n 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160,\n 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC\n];\n\nfunction stringToPDFString(str) {\n var i, n = str.length, strBuf = [];\n if (str[0] === '\\xFE' && str[1] === '\\xFF') {\n // UTF16BE BOM\n for (i = 2; i < n; i += 2) {\n strBuf.push(String.fromCharCode(\n (str.charCodeAt(i) << 8) | str.charCodeAt(i + 1)));\n }\n } else {\n for (i = 0; i < n; ++i) {\n var code = PDFStringTranslateTable[str.charCodeAt(i)];\n strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n }\n }\n return strBuf.join('');\n}\n\nfunction stringToUTF8String(str) {\n return decodeURIComponent(escape(str));\n}\n\nfunction isEmptyObj(obj) {\n for (var key in obj) {\n return false;\n }\n return true;\n}\n\nfunction isBool(v) {\n return typeof v === 'boolean';\n}\n\nfunction isInt(v) {\n return typeof v === 'number' && ((v | 0) === v);\n}\n\nfunction isNum(v) {\n return typeof v === 'number';\n}\n\nfunction isString(v) {\n return typeof v === 'string';\n}\n\nfunction isNull(v) {\n return v === null;\n}\n\nfunction isName(v) {\n return v instanceof Name;\n}\n\nfunction isCmd(v, cmd) {\n return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);\n}\n\nfunction isDict(v, type) {\n if (!(v instanceof Dict)) {\n return false;\n }\n if (!type) {\n return true;\n }\n var dictType = v.get('Type');\n return isName(dictType) && dictType.name === type;\n}\n\nfunction isArray(v) {\n return v instanceof Array;\n}\n\nfunction isStream(v) {\n return typeof v === 'object' && v !== null && v.getBytes !== undefined;\n}\n\nfunction isArrayBuffer(v) {\n return typeof v === 'object' && v !== null && v.byteLength !== undefined;\n}\n\nfunction isRef(v) {\n return v instanceof Ref;\n}\n\n/**\n * Promise Capability object.\n *\n * @typedef {Object} PromiseCapability\n * @property {Promise} promise - A promise object.\n * @property {function} resolve - Fullfills the promise.\n * @property {function} reject - Rejects the promise.\n */\n\n/**\n * Creates a promise capability object.\n * @alias PDFJS.createPromiseCapability\n *\n * @return {PromiseCapability} A capability object contains:\n * - a Promise, resolve and reject methods.\n */\nfunction createPromiseCapability() {\n var capability = {};\n capability.promise = new Promise(function (resolve, reject) {\n capability.resolve = resolve;\n capability.reject = reject;\n });\n return capability;\n}\n\nPDFJS.createPromiseCapability = createPromiseCapability;\n\n/**\n * Polyfill for Promises:\n * The following promise implementation tries to generally implement the\n * Promise/A+ spec. Some notable differences from other promise libaries are:\n * - There currently isn't a seperate deferred and promise object.\n * - Unhandled rejections eventually show an error if they aren't handled.\n *\n * Based off of the work in:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=810490\n */\n(function PromiseClosure() {\n if (globalScope.Promise) {\n // Promises existing in the DOM/Worker, checking presence of all/resolve\n if (typeof globalScope.Promise.all !== 'function') {\n globalScope.Promise.all = function (iterable) {\n var count = 0, results = [], resolve, reject;\n var promise = new globalScope.Promise(function (resolve_, reject_) {\n resolve = resolve_;\n reject = reject_;\n });\n iterable.forEach(function (p, i) {\n count++;\n p.then(function (result) {\n results[i] = result;\n count--;\n if (count === 0) {\n resolve(results);\n }\n }, reject);\n });\n if (count === 0) {\n resolve(results);\n }\n return promise;\n };\n }\n if (typeof globalScope.Promise.resolve !== 'function') {\n globalScope.Promise.resolve = function (value) {\n return new globalScope.Promise(function (resolve) { resolve(value); });\n };\n }\n if (typeof globalScope.Promise.reject !== 'function') {\n globalScope.Promise.reject = function (reason) {\n return new globalScope.Promise(function (resolve, reject) {\n reject(reason);\n });\n };\n }\n if (typeof globalScope.Promise.prototype.catch !== 'function') {\n globalScope.Promise.prototype.catch = function (onReject) {\n return globalScope.Promise.prototype.then(undefined, onReject);\n };\n }\n return;\n }\n//#if !MOZCENTRAL\n var STATUS_PENDING = 0;\n var STATUS_RESOLVED = 1;\n var STATUS_REJECTED = 2;\n\n // In an attempt to avoid silent exceptions, unhandled rejections are\n // tracked and if they aren't handled in a certain amount of time an\n // error is logged.\n var REJECTION_TIMEOUT = 500;\n\n var HandlerManager = {\n handlers: [],\n running: false,\n unhandledRejections: [],\n pendingRejectionCheck: false,\n\n scheduleHandlers: function scheduleHandlers(promise) {\n if (promise._status === STATUS_PENDING) {\n return;\n }\n\n this.handlers = this.handlers.concat(promise._handlers);\n promise._handlers = [];\n\n if (this.running) {\n return;\n }\n this.running = true;\n\n setTimeout(this.runHandlers.bind(this), 0);\n },\n\n runHandlers: function runHandlers() {\n var RUN_TIMEOUT = 1; // ms\n var timeoutAt = Date.now() + RUN_TIMEOUT;\n while (this.handlers.length > 0) {\n var handler = this.handlers.shift();\n\n var nextStatus = handler.thisPromise._status;\n var nextValue = handler.thisPromise._value;\n\n try {\n if (nextStatus === STATUS_RESOLVED) {\n if (typeof handler.onResolve === 'function') {\n nextValue = handler.onResolve(nextValue);\n }\n } else if (typeof handler.onReject === 'function') {\n nextValue = handler.onReject(nextValue);\n nextStatus = STATUS_RESOLVED;\n\n if (handler.thisPromise._unhandledRejection) {\n this.removeUnhandeledRejection(handler.thisPromise);\n }\n }\n } catch (ex) {\n nextStatus = STATUS_REJECTED;\n nextValue = ex;\n }\n\n handler.nextPromise._updateStatus(nextStatus, nextValue);\n if (Date.now() >= timeoutAt) {\n break;\n }\n }\n\n if (this.handlers.length > 0) {\n setTimeout(this.runHandlers.bind(this), 0);\n return;\n }\n\n this.running = false;\n },\n\n addUnhandledRejection: function addUnhandledRejection(promise) {\n this.unhandledRejections.push({\n promise: promise,\n time: Date.now()\n });\n this.scheduleRejectionCheck();\n },\n\n removeUnhandeledRejection: function removeUnhandeledRejection(promise) {\n promise._unhandledRejection = false;\n for (var i = 0; i < this.unhandledRejections.length; i++) {\n if (this.unhandledRejections[i].promise === promise) {\n this.unhandledRejections.splice(i);\n i--;\n }\n }\n },\n\n scheduleRejectionCheck: function scheduleRejectionCheck() {\n if (this.pendingRejectionCheck) {\n return;\n }\n this.pendingRejectionCheck = true;\n setTimeout(function rejectionCheck() {\n this.pendingRejectionCheck = false;\n var now = Date.now();\n for (var i = 0; i < this.unhandledRejections.length; i++) {\n if (now - this.unhandledRejections[i].time > REJECTION_TIMEOUT) {\n var unhandled = this.unhandledRejections[i].promise._value;\n var msg = 'Unhandled rejection: ' + unhandled;\n if (unhandled.stack) {\n msg += '\\n' + unhandled.stack;\n }\n warn(msg);\n this.unhandledRejections.splice(i);\n i--;\n }\n }\n if (this.unhandledRejections.length) {\n this.scheduleRejectionCheck();\n }\n }.bind(this), REJECTION_TIMEOUT);\n }\n };\n\n function Promise(resolver) {\n this._status = STATUS_PENDING;\n this._handlers = [];\n try {\n resolver.call(this, this._resolve.bind(this), this._reject.bind(this));\n } catch (e) {\n this._reject(e);\n }\n }\n /**\n * Builds a promise that is resolved when all the passed in promises are\n * resolved.\n * @param {array} array of data and/or promises to wait for.\n * @return {Promise} New dependant promise.\n */\n Promise.all = function Promise_all(promises) {\n var resolveAll, rejectAll;\n var deferred = new Promise(function (resolve, reject) {\n resolveAll = resolve;\n rejectAll = reject;\n });\n var unresolved = promises.length;\n var results = [];\n if (unresolved === 0) {\n resolveAll(results);\n return deferred;\n }\n function reject(reason) {\n if (deferred._status === STATUS_REJECTED) {\n return;\n }\n results = [];\n rejectAll(reason);\n }\n for (var i = 0, ii = promises.length; i < ii; ++i) {\n var promise = promises[i];\n var resolve = (function(i) {\n return function(value) {\n if (deferred._status === STATUS_REJECTED) {\n return;\n }\n results[i] = value;\n unresolved--;\n if (unresolved === 0) {\n resolveAll(results);\n }\n };\n })(i);\n if (Promise.isPromise(promise)) {\n promise.then(resolve, reject);\n } else {\n resolve(promise);\n }\n }\n return deferred;\n };\n\n /**\n * Checks if the value is likely a promise (has a 'then' function).\n * @return {boolean} true if value is thenable\n */\n Promise.isPromise = function Promise_isPromise(value) {\n return value && typeof value.then === 'function';\n };\n\n /**\n * Creates resolved promise\n * @param value resolve value\n * @returns {Promise}\n */\n Promise.resolve = function Promise_resolve(value) {\n return new Promise(function (resolve) { resolve(value); });\n };\n\n /**\n * Creates rejected promise\n * @param reason rejection value\n * @returns {Promise}\n */\n Promise.reject = function Promise_reject(reason) {\n return new Promise(function (resolve, reject) { reject(reason); });\n };\n\n Promise.prototype = {\n _status: null,\n _value: null,\n _handlers: null,\n _unhandledRejection: null,\n\n _updateStatus: function Promise__updateStatus(status, value) {\n if (this._status === STATUS_RESOLVED ||\n this._status === STATUS_REJECTED) {\n return;\n }\n\n if (status === STATUS_RESOLVED &&\n Promise.isPromise(value)) {\n value.then(this._updateStatus.bind(this, STATUS_RESOLVED),\n this._updateStatus.bind(this, STATUS_REJECTED));\n return;\n }\n\n this._status = status;\n this._value = value;\n\n if (status === STATUS_REJECTED && this._handlers.length === 0) {\n this._unhandledRejection = true;\n HandlerManager.addUnhandledRejection(this);\n }\n\n HandlerManager.scheduleHandlers(this);\n },\n\n _resolve: function Promise_resolve(value) {\n this._updateStatus(STATUS_RESOLVED, value);\n },\n\n _reject: function Promise_reject(reason) {\n this._updateStatus(STATUS_REJECTED, reason);\n },\n\n then: function Promise_then(onResolve, onReject) {\n var nextPromise = new Promise(function (resolve, reject) {\n this.resolve = resolve;\n this.reject = reject;\n });\n this._handlers.push({\n thisPromise: this,\n onResolve: onResolve,\n onReject: onReject,\n nextPromise: nextPromise\n });\n HandlerManager.scheduleHandlers(this);\n return nextPromise;\n },\n\n catch: function Promise_catch(onReject) {\n return this.then(undefined, onReject);\n }\n };\n\n globalScope.Promise = Promise;\n//#else\n//throw new Error('DOM Promise is not present');\n//#endif\n})();\n\nvar StatTimer = (function StatTimerClosure() {\n function rpad(str, pad, length) {\n while (str.length < length) {\n str += pad;\n }\n return str;\n }\n function StatTimer() {\n this.started = {};\n this.times = [];\n this.enabled = true;\n }\n StatTimer.prototype = {\n time: function StatTimer_time(name) {\n if (!this.enabled) {\n return;\n }\n if (name in this.started) {\n warn('Timer is already running for ' + name);\n }\n this.started[name] = Date.now();\n },\n timeEnd: function StatTimer_timeEnd(name) {\n if (!this.enabled) {\n return;\n }\n if (!(name in this.started)) {\n warn('Timer has not been started for ' + name);\n }\n this.times.push({\n 'name': name,\n 'start': this.started[name],\n 'end': Date.now()\n });\n // Remove timer from started so it can be called again.\n delete this.started[name];\n },\n toString: function StatTimer_toString() {\n var i, ii;\n var times = this.times;\n var out = '';\n // Find the longest name for padding purposes.\n var longest = 0;\n for (i = 0, ii = times.length; i < ii; ++i) {\n var name = times[i]['name'];\n if (name.length > longest) {\n longest = name.length;\n }\n }\n for (i = 0, ii = times.length; i < ii; ++i) {\n var span = times[i];\n var duration = span.end - span.start;\n out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\\n';\n }\n return out;\n }\n };\n return StatTimer;\n})();\n\nPDFJS.createBlob = function createBlob(data, contentType) {\n if (typeof Blob !== 'undefined') {\n return new Blob([data], { type: contentType });\n }\n // Blob builder is deprecated in FF14 and removed in FF18.\n var bb = new MozBlobBuilder();\n bb.append(data);\n return bb.getBlob(contentType);\n};\n\nPDFJS.createObjectURL = (function createObjectURLClosure() {\n // Blob/createObjectURL is not available, falling back to data schema.\n var digits =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n return function createObjectURL(data, contentType) {\n if (!PDFJS.disableCreateObjectURL &&\n typeof URL !== 'undefined' && URL.createObjectURL) {\n var blob = PDFJS.createBlob(data, contentType);\n return URL.createObjectURL(blob);\n }\n\n var buffer = 'data:' + contentType + ';base64,';\n for (var i = 0, ii = data.length; i < ii; i += 3) {\n var b1 = data[i] & 0xFF;\n var b2 = data[i + 1] & 0xFF;\n var b3 = data[i + 2] & 0xFF;\n var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4);\n var d3 = i + 1 < ii ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64;\n var d4 = i + 2 < ii ? (b3 & 0x3F) : 64;\n buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];\n }\n return buffer;\n };\n})();\n\nfunction MessageHandler(name, comObj) {\n this.name = name;\n this.comObj = comObj;\n this.callbackIndex = 1;\n this.postMessageTransfers = true;\n var callbacksCapabilities = this.callbacksCapabilities = {};\n var ah = this.actionHandler = {};\n\n ah['console_log'] = [function ahConsoleLog(data) {\n console.log.apply(console, data);\n }];\n ah['console_error'] = [function ahConsoleError(data) {\n console.error.apply(console, data);\n }];\n ah['_unsupported_feature'] = [function ah_unsupportedFeature(data) {\n UnsupportedManager.notify(data);\n }];\n\n comObj.onmessage = function messageHandlerComObjOnMessage(event) {\n var data = event.data;\n if (data.isReply) {\n var callbackId = data.callbackId;\n if (data.callbackId in callbacksCapabilities) {\n var callback = callbacksCapabilities[callbackId];\n delete callbacksCapabilities[callbackId];\n if ('error' in data) {\n callback.reject(data.error);\n } else {\n callback.resolve(data.data);\n }\n } else {\n error('Cannot resolve callback ' + callbackId);\n }\n } else if (data.action in ah) {\n var action = ah[data.action];\n if (data.callbackId) {\n Promise.resolve().then(function () {\n return action[0].call(action[1], data.data);\n }).then(function (result) {\n comObj.postMessage({\n isReply: true,\n callbackId: data.callbackId,\n data: result\n });\n }, function (reason) {\n comObj.postMessage({\n isReply: true,\n callbackId: data.callbackId,\n error: reason\n });\n });\n } else {\n action[0].call(action[1], data.data);\n }\n } else {\n error('Unknown action from worker: ' + data.action);\n }\n };\n}\n\nMessageHandler.prototype = {\n on: function messageHandlerOn(actionName, handler, scope) {\n var ah = this.actionHandler;\n if (ah[actionName]) {\n error('There is already an actionName called \"' + actionName + '\"');\n }\n ah[actionName] = [handler, scope];\n },\n /**\n * Sends a message to the comObj to invoke the action with the supplied data.\n * @param {String} actionName Action to call.\n * @param {JSON} data JSON data to send.\n * @param {Array} [transfers] Optional list of transfers/ArrayBuffers\n */\n send: function messageHandlerSend(actionName, data, transfers) {\n var message = {\n action: actionName,\n data: data\n };\n this.postMessage(message, transfers);\n },\n /**\n * Sends a message to the comObj to invoke the action with the supplied data.\n * Expects that other side will callback with the response.\n * @param {String} actionName Action to call.\n * @param {JSON} data JSON data to send.\n * @param {Array} [transfers] Optional list of transfers/ArrayBuffers.\n * @returns {Promise} Promise to be resolved with response data.\n */\n sendWithPromise:\n function messageHandlerSendWithPromise(actionName, data, transfers) {\n var callbackId = this.callbackIndex++;\n var message = {\n action: actionName,\n data: data,\n callbackId: callbackId\n };\n var capability = createPromiseCapability();\n this.callbacksCapabilities[callbackId] = capability;\n try {\n this.postMessage(message, transfers);\n } catch (e) {\n capability.reject(e);\n }\n return capability.promise;\n },\n /**\n * Sends raw message to the comObj.\n * @private\n * @param message {Object} Raw message.\n * @param transfers List of transfers/ArrayBuffers, or undefined.\n */\n postMessage: function (message, transfers) {\n if (transfers && this.postMessageTransfers) {\n this.comObj.postMessage(message, transfers);\n } else {\n this.comObj.postMessage(message);\n }\n }\n};\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = JpxImage;\n}\n\nfunction loadJpegStream(id, imageUrl, objs) {\n var img = new Image();\n img.onload = (function loadJpegStream_onloadClosure() {\n objs.resolve(id, img);\n });\n img.onerror = (function loadJpegStream_onerrorClosure() {\n objs.resolve(id, null);\n warn('Error during JPEG image loading');\n });\n img.src = imageUrl;\n}","/*! OpenJPEG.js - v0.10.1 - 2018-03-13 | (c) 2016 Chris Hafey | https://github.com/chafey/openjpeg */\nvar OpenJPEG = function(OpenJPEG) {\n OpenJPEG = OpenJPEG || {};\n\nvar Module=typeof OpenJPEG!==\"undefined\"?OpenJPEG:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module[\"arguments\"]=[];Module[\"thisProgram\"]=\"./this.program\";Module[\"quit\"]=(function(status,toThrow){throw toThrow});Module[\"preRun\"]=[];Module[\"postRun\"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module[\"ENVIRONMENT\"]){if(Module[\"ENVIRONMENT\"]===\"WEB\"){ENVIRONMENT_IS_WEB=true}else if(Module[\"ENVIRONMENT\"]===\"WORKER\"){ENVIRONMENT_IS_WORKER=true}else if(Module[\"ENVIRONMENT\"]===\"NODE\"){ENVIRONMENT_IS_NODE=true}else if(Module[\"ENVIRONMENT\"]===\"SHELL\"){ENVIRONMENT_IS_SHELL=true}else{throw new Error(\"Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.\")}}else{ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof require===\"function\"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){var nodeFS;var nodePath;Module[\"read\"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);ret=nodeFS[\"readFileSync\"](filename)}return binary?ret:ret.toString()};Module[\"readBinary\"]=function readBinary(filename){var ret=Module[\"read\"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){Module[\"thisProgram\"]=process[\"argv\"][1].replace(/\\\\/g,\"/\")}Module[\"arguments\"]=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));process[\"on\"](\"unhandledRejection\",(function(reason,p){process[\"exit\"](1)}));Module[\"inspect\"]=(function(){return\"[Emscripten Module object]\"})}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){Module[\"read\"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module[\"readBinary\"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){Module[\"arguments\"]=scriptArgs}else if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments}if(typeof quit===\"function\"){Module[\"quit\"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module[\"read\"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module[\"readBinary\"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module[\"readAsync\"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments}Module[\"setWindowTitle\"]=(function(title){document.title=title})}Module[\"print\"]=typeof console!==\"undefined\"?console.log.bind(console):typeof print!==\"undefined\"?print:null;Module[\"printErr\"]=typeof printErr!==\"undefined\"?printErr:typeof console!==\"undefined\"&&console.warn.bind(console)||Module[\"print\"];Module.print=Module[\"print\"];Module.printErr=Module[\"printErr\"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){assert(!staticSealed);var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret}function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return 4}else if(type[0]===\"i\"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module[\"dynCall_\"+sig].apply(null,[ptr].concat(args))}else{return Module[\"dynCall_\"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}var JSfuncs={\"stackSave\":(function(){stackSave()}),\"stackRestore\":(function(){stackRestore()}),\"arrayToC\":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),\"stringToC\":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={\"string\":JSfuncs[\"stringToC\"],\"array\":JSfuncs[\"arrayToC\"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case\"i8\":HEAP8[ptr>>0]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;default:abort(\"invalid type for setValue: \"+type)}}function getValue(ptr,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":return HEAP8[ptr>>0];case\"i8\":return HEAP8[ptr>>0];case\"i16\":return HEAP16[ptr>>1];case\"i32\":return HEAP32[ptr>>2];case\"i64\":return HEAP32[ptr>>2];case\"float\":return HEAPF32[ptr>>2];case\"double\":return HEAPF64[ptr>>3];default:abort(\"invalid type for getValue: \"+type)}return null}var ALLOC_STATIC=2;var ALLOC_NONE=4;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab===\"number\"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types===\"string\"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc===\"function\"?_malloc:staticAlloc,stackAlloc,staticAlloc,dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType===\"i8\"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret=\"\";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str=\"\";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\\w\\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+\" [\"+y+\"]\"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return\"(no stack trace available)\"}}return err.stack.toString()}var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module[\"buffer\"]=buffer=buf}function updateGlobalBufferViews(){Module[\"HEAP8\"]=HEAP8=new Int8Array(buffer);Module[\"HEAP16\"]=HEAP16=new Int16Array(buffer);Module[\"HEAP32\"]=HEAP32=new Int32Array(buffer);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buffer);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buffer);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buffer);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buffer);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort(\"Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value \"+TOTAL_MEMORY+\", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 \")}if(!Module[\"reallocBuffer\"])Module[\"reallocBuffer\"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module[\"usingWasm\"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module[\"reallocBuffer\"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,\"byteLength\").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module[\"TOTAL_STACK\"]||5242880;var TOTAL_MEMORY=Module[\"TOTAL_MEMORY\"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback();continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_max=Math.max;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};var memoryInitializer=null;var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+26352;__ATINIT__.push();memoryInitializer=\"data:application/octet-stream;base64,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ciBoYW5kbGVyLgoAQ29kZWMgcHJvdmlkZWQgdG8gdGhlIG9wal9yZWFkX2hlYWRlciBmdW5jdGlvbiBpcyBub3QgYSBkZWNvbXByZXNzb3IgaGFuZGxlci4KAEludmFsaWQgbnVtYmVyIG9mIHJlc29sdXRpb25zIDogJWQgbm90IGluIHJhbmdlIFsxLCVkXQoARGVwcmVjYXRlZCBmaWVsZHMgY3BfY2luZW1hIG9yIGNwX3JzaXogYXJlIHVzZWQKUGxlYXNlIGNvbnNpZGVyIHVzaW5nIG9ubHkgdGhlIHJzaXogZmllbGQKU2VlIG9wZW5qcGVnLmggZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzCgBUaGUgZGVzaXJlZCBtYXhpbXVtIGNvZGVzdHJlYW0gc2l6ZSBoYXMgbGltaXRlZAphdCBsZWFzdCBvbmUgb2YgdGhlIGRlc2lyZWQgcXVhbGl0eSBsYXllcnMKAEpQRUcgMjAwMCBTY2FsYWJsZSBEaWdpdGFsIENpbmVtYSBwcm9maWxlcyBub3QgeWV0IHN1cHBvcnRlZAoASlBFRyAyMDAwIFByb2ZpbGUtMyBhbmQgNCAoMmsvNGsgZGMgcHJvZmlsZSkgcmVxdWlyZXM6CjEgc2luZ2xlIHF1YWxpdHkgbGF5ZXItPiBOdW1iZXIgb2YgbGF5ZXJzIGZvcmNlZCB0byAxIChyYXRoZXIgdGhhbiAlZCkKLT4gUmF0ZSBvZiB0aGUgbGFzdCBsYXllciAoJTMuMWYpIHdpbGwgYmUgdXNlZABKUEVHIDIwMDAgUHJvZmlsZS0zICgyayBkYyBwcm9maWxlKSByZXF1aXJlczoKTnVtYmVyIG9mIGRlY29tcG9zaXRpb24gbGV2ZWxzIDw9IDUKLT4gTnVtYmVyIG9mIGRlY29tcG9zaXRpb24gbGV2ZWxzIGZvcmNlZCB0byA1IChyYXRoZXIgdGhhbiAlZCkKAEpQRUcgMjAwMCBQcm9maWxlLTQgKDRrIGRjIHByb2ZpbGUpIHJlcXVpcmVzOgpOdW1iZXIgb2YgZGVjb21wb3NpdGlvbiBsZXZlbHMgPj0gMSAmJiA8PSA2Ci0+IE51bWJlciBvZiBkZWNvbXBvc2l0aW9uIGxldmVscyBmb3JjZWQgdG8gMSAocmF0aGVyIHRoYW4gJWQpCgBKUEVHIDIwMDAgUHJvZmlsZS00ICg0ayBkYyBwcm9maWxlKSByZXF1aXJlczoKTnVtYmVyIG9mIGRlY29tcG9zaXRpb24gbGV2ZWxzID49IDEgJiYgPD0gNgotPiBOdW1iZXIgb2YgZGVjb21wb3NpdGlvbiBsZXZlbHMgZm9yY2VkIHRvIDYgKHJhdGhlciB0aGFuICVkKQoASlBFRyAyMDAwIFByb2ZpbGUtMyBhbmQgNCAoMmsvNGsgZGMgcHJvZmlsZSkgcmVxdWlyZXM6Ck1heGltdW0gMTMwMjA4MyBjb21wcmVzc2VkIGJ5dGVzIEAgMjRmcHMKQXMgbm8gcmF0ZSBoYXMgYmVlbiBnaXZlbiwgdGhpcyBsaW1pdCB3aWxsIGJlIHVzZWQuCgBKUEVHIDIwMDAgUHJvZmlsZS0zIGFuZCA0ICgyay80ayBkYyBwcm9maWxlKSByZXF1aXJlczoKTWF4aW11bSAxMzAyMDgzIGNvbXByZXNzZWQgYnl0ZXMgQCAyNGZwcwotPiBTcGVjaWZpZWQgcmF0ZSBleGNlZWRzIHRoaXMgbGltaXQuIFJhdGUgd2lsbCBiZSBmb3JjZWQgdG8gMTMwMjA4MyBieXRlcy4KAEpQRUcgMjAwMCBQcm9maWxlLTMgYW5kIDQgKDJrLzRrIGRjIHByb2ZpbGUpIHJlcXVpcmVzOgpNYXhpbXVtIDEwNDE2NjYgY29tcHJlc3NlZCBieXRlcyBAIDI0ZnBzCkFzIG5vIHJhdGUgaGFzIGJlZW4gZ2l2ZW4sIHRoaXMgbGltaXQgd2lsbCBiZSB1c2VkLgoASlBFRyAyMDAwIFByb2ZpbGUtMyBhbmQgNCAoMmsvNGsgZGMgcHJvZmlsZSkgcmVxdWlyZXM6Ck1heGltdW0gMTA0MTY2NiBjb21wcmVzc2VkIGJ5dGVzIEAgMjRmcHMKLT4gU3BlY2lmaWVkIHJhdGUgZXhjZWVkcyB0aGlzIGxpbWl0LiBSYXRlIHdpbGwgYmUgZm9yY2VkIHRvIDEwNDE2NjYgYnl0ZXMuCgBKUEVHIDIwMDAgUHJvZmlsZS0zICgyayBkYyBwcm9maWxlKSByZXF1aXJlczoKMyBjb21wb25lbnRzLT4gTnVtYmVyIG9mIGNvbXBvbmVudHMgb2YgaW5wdXQgaW1hZ2UgKCVkKSBpcyBub3QgY29tcGxpYW50Ci0+IE5vbi1wcm9maWxlLTMgY29kZXN0cmVhbSB3aWxsIGJlIGdlbmVyYXRlZAoAc2lnbmVkAHVuc2lnbmVkAEpQRUcgMjAwMCBQcm9maWxlLTMgKDJrIGRjIHByb2ZpbGUpIHJlcXVpcmVzOgpQcmVjaXNpb24gb2YgZWFjaCBjb21wb25lbnQgc2hhbGwgYmUgMTIgYml0cyB1bnNpZ25lZC0+IEF0IGxlYXN0IGNvbXBvbmVudCAlZCBvZiBpbnB1dCBpbWFnZSAoJWQgYml0cywgJXMpIGlzIG5vdCBjb21wbGlhbnQKLT4gTm9uLXByb2ZpbGUtMyBjb2Rlc3RyZWFtIHdpbGwgYmUgZ2VuZXJhdGVkCgBKUEVHIDIwMDAgUHJvZmlsZS0zICgyayBkYyBwcm9maWxlKSByZXF1aXJlczoKd2lkdGggPD0gMjA0OCBhbmQgaGVpZ2h0IDw9IDEwODAKLT4gSW5wdXQgaW1hZ2Ugc2l6ZSAlZCB4ICVkIGlzIG5vdCBjb21wbGlhbnQKLT4gTm9uLXByb2ZpbGUtMyBjb2Rlc3RyZWFtIHdpbGwgYmUgZ2VuZXJhdGVkCgBKUEVHIDIwMDAgUHJvZmlsZS00ICg0ayBkYyBwcm9maWxlKSByZXF1aXJlczoKd2lkdGggPD0gNDA5NiBhbmQgaGVpZ2h0IDw9IDIxNjAKLT4gSW1hZ2Ugc2l6ZSAlZCB4ICVkIGlzIG5vdCBjb21wbGlhbnQKLT4gTm9uLXByb2ZpbGUtNCBjb2Rlc3RyZWFtIHdpbGwgYmUgZ2VuZXJhdGVkCgBKUEVHIDIwMDAgTG9uZyBUZXJtIFN0b3JhZ2UgcHJvZmlsZSBub3QgeWV0IHN1cHBvcnRlZAoASlBFRyAyMDAwIEJyb2FkY2FzdCBwcm9maWxlcyBub3QgeWV0IHN1cHBvcnRlZAoASlBFRyAyMDAwIElNRiBwcm9maWxlcyBub3QgeWV0IHN1cHBvcnRlZAoASlBFRyAyMDAwIFBhcnQtMiBwcm9maWxlIGRlZmluZWQKYnV0IG5vIFBhcnQtMiBleHRlbnNpb24gZW5hYmxlZC4KUHJvZmlsZSBzZXQgdG8gTk9ORS4KAFVuc3VwcG9ydGVkIFBhcnQtMiBleHRlbnNpb24gZW5hYmxlZApQcm9maWxlIHNldCB0byBOT05FLgoATm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgY29weSBvZiB1c2VyIGVuY29kaW5nIHBhcmFtZXRlcnMgbWF0cml4IAoATm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgY29weSBvZiBjb21tZW50IHN0cmluZwoATm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgY29tbWVudCBzdHJpbmcKACVzJXMAQ3JlYXRlZCBieSBPcGVuSlBFRyB2ZXJzaW9uIABOb3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSB0aWxlIGNvZGluZyBwYXJhbWV0ZXJzCgBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgY2hlY2tpbmcgdGhlIHBvYyB2YWx1ZXMuCgBNaXNzaW5nIHBhY2tldHMgcG9zc2libGUgbG9zcyBvZiBkYXRhCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSB0aWxlIGNvbXBvbmVudCBjb2RpbmcgcGFyYW1ldGVycwoATm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgdGVtcCBidWZmZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFsbG9jYXRlIGVuY29kZXIgTUNUIGNvZGluZyBtYXRyaXggCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSBlbmNvZGVyIE1DVCBkZWNvZGluZyBtYXRyaXggCgBGYWlsZWQgdG8gaW52ZXJzZSBlbmNvZGVyIE1DVCBkZWNvZGluZyBtYXRyaXggCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSBlbmNvZGVyIE1DVCBub3JtcyAKAEZhaWxlZCB0byBzZXR1cCBqMmsgbWN0IGVuY29kaW5nCgBDYW5ub3QgcGVyZm9ybSBNQ1Qgb24gY29tcG9uZW50cyB3aXRoIGRpZmZlcmVudCBzaXplcy4gRGlzYWJsaW5nIE1DVC4KAENhbm5vdCBkZWNvZGUgdGlsZSwgbWVtb3J5IGVycm9yCgBTdGFydCB0byByZWFkIGoyayBtYWluIGhlYWRlciAoJWQpLgoATm90IGVub3VnaCBtZW1vcnkgdG8gYWRkIG1oIG1hcmtlcgoARXhwZWN0ZWQgYSBTT0MgbWFya2VyIAoAU3RyZWFtIHRvbyBzaG9ydAoAQSBtYXJrZXIgSUQgd2FzIGV4cGVjdGVkICgweGZmLS0pIGluc3RlYWQgb2YgJS44eAoAVW5rbm93biBtYXJrZXIKAE1hcmtlciBpcyBub3QgY29tcGxpYW50IHdpdGggaXRzIHBvc2l0aW9uCgBVbmtub3cgbWFya2VyIGhhdmUgYmVlbiBkZXRlY3RlZCBhbmQgZ2VuZXJhdGVkIGVycm9yLgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBoZWFkZXIKAE1hcmtlciBoYW5kbGVyIGZ1bmN0aW9uIGZhaWxlZCB0byByZWFkIHRoZSBtYXJrZXIgc2VnbWVudAoAcmVxdWlyZWQgU0laIG1hcmtlciBub3QgZm91bmQgaW4gbWFpbiBoZWFkZXIKAHJlcXVpcmVkIENPRCBtYXJrZXIgbm90IGZvdW5kIGluIG1haW4gaGVhZGVyCgByZXF1aXJlZCBRQ0QgbWFya2VyIG5vdCBmb3VuZCBpbiBtYWluIGhlYWRlcgoATm90IGVub3VnaCBieXRlcyB0byByZWFkIE5wcG0KAENvcnJ1cHRlZCBQUE0gbWFya2VycwoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBQUE0gbWFya2VyCgBGYWlsZWQgdG8gbWVyZ2UgUFBNIGRhdGEKAE1haW4gaGVhZGVyIGhhcyBiZWVuIGNvcnJlY3RseSBkZWNvZGVkLgoARXJyb3IgcmVhZGluZyBNQ08gbWFya2VyCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgdHJhbnNmb3JtYXRpb24gc3RhZ2VzLgoARXJyb3IgcmVhZGluZyBNQ0MgbWFya2VyCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgZGF0YSBzcGFubmluZwoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBNQ0MgbWFya2VyCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgY29sbGVjdGlvbnMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBjb2xsZWN0aW9ucyBvdGhlciB0aGFuIGFycmF5IGRlY29ycmVsYXRpb24KAENhbm5vdCB0YWtlIGluIGNoYXJnZSBjb2xsZWN0aW9ucyB3aXRoIGluZGl4IHNodWZmbGUKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBjb2xsZWN0aW9ucyB3aXRob3V0IHNhbWUgbnVtYmVyIG9mIGluZGl4ZXMKAENycm9yIHJlYWRpbmcgQ0JEIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ1QgbWFya2VyCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbWN0IGRhdGEgd2l0aGluIG11bHRpcGxlIE1DVCByZWNvcmRzCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DVCBtYXJrZXIKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtdWx0aXBsZSBNQ1QgbWFya2VycwoARXJyb3IgcmVhZGluZyBDUkcgbWFya2VyCgBFcnJvciByZWFkaW5nIFBQVCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUFBUIG1hcmtlcjogcGFja2V0IGhlYWRlciBoYXZlIGJlZW4gcHJldmlvdXNseSBmb3VuZCBpbiB0aGUgbWFpbiBoZWFkZXIgKFBQTSBtYXJrZXIpLgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBQUFQgbWFya2VyCgBacHB0ICV1IGFscmVhZHkgcmVhZAoARXJyb3IgcmVhZGluZyBQUE0gbWFya2VyCgBacHBtICV1IGFscmVhZHkgcmVhZAoARXJyb3IgcmVhZGluZyBQTFQgbWFya2VyCgBFcnJvciByZWFkaW5nIFBMTSBtYXJrZXIKAEVycm9yIHJlYWRpbmcgVExNIG1hcmtlcgoARXJyb3Igd2l0aCBTSVogbWFya2VyIHNpemUKAEVycm9yIHdpdGggU0laIG1hcmtlcjogbnVtYmVyIG9mIGNvbXBvbmVudCBpcyBpbGxlZ2FsIC0+ICVkCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG51bWJlciBvZiBjb21wb25lbnQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBwYXJhbWV0ZXJzICggJWQgdnMgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG5lZ2F0aXZlIG9yIHplcm8gaW1hZ2Ugc2l6ZSAoJWxsZCB4ICVsbGQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IGludmFsaWQgdGlsZSBzaXplICh0ZHg6ICVkLCB0ZHk6ICVkKQoAUHJldmVudCBidWZmZXIgb3ZlcmZsb3cgKHgxOiAlZCwgeTE6ICVkKQoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBpbGxlZ2FsIHRpbGUgb2Zmc2V0CgBOb3QgZW5vdWdoIG1lbW9yeSB0byB0YWtlIGluIGNoYXJnZSBTSVogbWFya2VyCgBJbnZhbGlkIHZhbHVlcyBmb3IgY29tcCA9ICVkIDogZHg9JXUgZHk9JXUgKHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDI1NSBhY2NvcmRpbmcgdG8gdGhlIEpQRUcyMDAwIG5vcm0pCgBJbnZhbGlkIHZhbHVlcyBmb3IgY29tcCA9ICVkIDogcHJlYz0ldSAoc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMzggYWNjb3JkaW5nIHRvIHRoZSBKUEVHMjAwMCBub3JtKQoASW52YWxpZCBudW1iZXIgb2YgdGlsZXMgOiAldSB4ICV1IChtYXhpbXVtIGZpeGVkIGJ5IGpwZWcyMDAwIG5vcm0gaXMgNjU1MzUgdGlsZXMpCgBFcnJvciByZWFkaW5nIFBPQyBtYXJrZXIKAFRvbyBtYW55IFBPQ3MgJWQKAEVycm9yIHJlYWRpbmcgUUNDIG1hcmtlcgoASW52YWxpZCBjb21wb25lbnQgbnVtYmVyOiAlZCwgcmVnYXJkaW5nIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyAlZAoARXJyb3IgcmVhZGluZyBTUWNkIG9yIFNRY2MgZWxlbWVudAoAV2hpbGUgcmVhZGluZyBDQ1BfUU5UU1RZIGVsZW1lbnQgaW5zaWRlIFFDRCBvciBRQ0MgbWFya2VyIHNlZ21lbnQsIG51bWJlciBvZiBzdWJiYW5kcyAoJWQpIGlzIGdyZWF0ZXIgdG8gT1BKX0oyS19NQVhCQU5EUyAoJWQpLiBTbyB3ZSBsaW1pdCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHN0b3JlZCB0byBPUEpfSjJLX01BWEJBTkRTICglZCkgYW5kIHNraXAgdGhlIHJlc3QuIAoARXJyb3IgcmVhZGluZyBRQ0QgbWFya2VyCgBFcnJvciByZWFkaW5nIFJHTiBtYXJrZXIKAGJhZCBjb21wb25lbnQgbnVtYmVyIGluIFJHTiAoJWQgd2hlbiB0aGVyZSBhcmUgb25seSAlZCkKAEVycm9yIHJlYWRpbmcgQ09DIG1hcmtlcgoARXJyb3IgcmVhZGluZyBDT0MgbWFya2VyIChiYWQgbnVtYmVyIG9mIGNvbXBvbmVudHMpCgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQKAEludmFsaWQgdmFsdWUgZm9yIG51bXJlc29sdXRpb25zIDogJWQsIG1heCB2YWx1ZSBpcyBzZXQgaW4gb3BlbmpwZWcuaCBhdCAlZAoARXJyb3IgZGVjb2RpbmcgY29tcG9uZW50ICVkLgpUaGUgbnVtYmVyIG9mIHJlc29sdXRpb25zIHRvIHJlbW92ZSBpcyBoaWdoZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHJlc29sdXRpb25zIG9mIHRoaXMgY29tcG9uZW50Ck1vZGlmeSB0aGUgY3BfcmVkdWNlIHBhcmFtZXRlci4KCgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQsIEludmFsaWQgY2Jsa3cvY2Jsa2ggY29tYmluYXRpb24KAEVycm9yIHJlYWRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudCwgSW52YWxpZCBjb2RlLWJsb2NrIHN0eWxlIGZvdW5kCgBJbnZhbGlkIHByZWNpbmN0IHNpemUKAENPRCBtYXJrZXIgYWxyZWFkeSByZWFkLiBObyBtb3JlIHRoYW4gb25lIENPRCBtYXJrZXIgcGVyIHRpbGUuCgBFcnJvciByZWFkaW5nIENPRCBtYXJrZXIKAFVua25vd24gU2NvZCB2YWx1ZSBpbiBDT0QgbWFya2VyCgBVbmtub3duIHByb2dyZXNzaW9uIG9yZGVyIGluIENPRCBtYXJrZXIKAEludmFsaWQgbnVtYmVyIG9mIGxheWVycyBpbiBDT0QgbWFya2VyIDogJWQgbm90IGluIHJhbmdlIFsxLTY1NTM1XQoARXJyb3IgcmVhZGluZyBTT1QgbWFya2VyCgBJbnZhbGlkIHRpbGUgbnVtYmVyICVkCgBFbXB0eSBTT1QgbWFya2VyIGRldGVjdGVkOiBQc290PSVkLgoAUHNvdCB2YWx1ZSBpcyBub3QgY29ycmVjdCByZWdhcmRzIHRvIHRoZSBKUEVHMjAwMCBub3JtOiAlZC4KAFBzb3QgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdGlsZS1wYXJ0IGlzIGVxdWFsIHRvIHplcm8sIHdlIGFzc3VtaW5nIGl0IGlzIHRoZSBsYXN0IHRpbGUtcGFydCBvZiB0aGUgY29kZXN0cmVhbS4KAEluIFNPVCBtYXJrZXIsIFRQU290ICglZCkgaXMgbm90IHZhbGlkIHJlZ2FyZHMgdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHRpbGUtcGFydCAoJWQpLCBnaXZpbmcgdXAKAEluIFNPVCBtYXJrZXIsIFRQU290ICglZCkgaXMgbm90IHZhbGlkIHJlZ2FyZHMgdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHRpbGUtcGFydCAoaGVhZGVyKSAoJWQpLCBnaXZpbmcgdXAKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgU09UIG1hcmtlci4gVGlsZSBpbmRleCBhbGxvY2F0aW9uIGZhaWxlZAoASW5jb25zaXN0ZW50IG1hcmtlciBzaXplCgBNYXJrZXIgc2l6ZSBpbmNvbnNpc3RlbnQgd2l0aCBzdHJlYW0gbGVuZ3RoCgBOb3Qgc3VyZSBob3cgdGhhdCBoYXBwZW5lZC4KAEZhaWwgdG8gcmVhZCB0aGUgY3VycmVudCBtYXJrZXIgc2VnbWVudCAoJSN4KQoATm90IGVub3VnaCBtZW1vcnkgdG8gYWRkIHRsIG1hcmtlcgoAVGlsZSBwYXJ0IGxlbmd0aCBzaXplIGluY29uc2lzdGVudCB3aXRoIHN0cmVhbSBsZW5ndGgKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGRlY29kZSB0aWxlCgBvcGpfajJrX2FwcGx5X25iX3RpbGVfcGFydHNfY29ycmVjdGlvbiBlcnJvcgoATm9uIGNvbmZvcm1hbnQgY29kZXN0cmVhbSBUUHNvdD09VE5zb3QuCgBGYWlsZWQgdG8gbWVyZ2UgUFBUIGRhdGEKAEhlYWRlciBvZiB0aWxlICVkIC8gJWQgaGFzIGJlZW4gcmVhZC4KAEZhaWxlZCB0byBkZWNvZGUuCgBObyBFT0MgbWFya2VyLiBQb3NzaWJseSBhIHRydW5jYXRlZCBzdHJlYW0KAFN0cmVhbSBkb2VzIG5vdCBlbmQgd2l0aCBFT0MKAFN0cmVhbSB0b28gc2hvcnQsIGV4cGVjdGVkIFNPVAoATmVlZCB0byBkZWNvZGUgdGhlIG1haW4gaGVhZGVyIGJlZm9yZSBiZWdpbiB0byBkZWNvZGUgdGhlIHJlbWFpbmluZyBjb2Rlc3RyZWFtAE5vIGRlY29kZWQgYXJlYSBwYXJhbWV0ZXJzLCBzZXQgdGhlIGRlY29kZWQgYXJlYSB0byB0aGUgd2hvbGUgaW1hZ2UKAExlZnQgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3gwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChYc2l6PSVkKS4KAExlZnQgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3gwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChYT3Npej0lZCkuCgBVcCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTA9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFlzaXo9JWQpLgoAVXAgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZT3Npej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhPc2l6PSVkKS4KAFJpZ2h0IHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl94MT0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWHNpej0lZCkuCgBCb3R0b20gcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kxPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZT3Npej0lZCkuCgBCb3R0b20gcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kxPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZc2l6PSVkKS4KAFNpemUgeCBvZiB0aGUgZGVjb2RlZCBjb21wb25lbnQgaW1hZ2UgaXMgaW5jb3JyZWN0IChjb21wWyVkXS53PSVkKS4KAFNpemUgeSBvZiB0aGUgZGVjb2RlZCBjb21wb25lbnQgaW1hZ2UgaXMgaW5jb3JyZWN0IChjb21wWyVkXS5oPSVkKS4KAFNldHRpbmcgZGVjb2RpbmcgYXJlYSB0byAlZCwlZCwlZCwlZAoAV3JvbmcgZmxhZwoAQ29kZXN0cmVhbSBpbmZvIGZyb20gbWFpbiBoZWFkZXI6IHsKAAkgdHgwPSVkLCB0eTA9JWQKAAkgdGR4PSVkLCB0ZHk9JWQKAAkgdHc9JWQsIHRoPSVkCgB9CgBDb2Rlc3RyZWFtIGluZGV4IGZyb20gbWFpbiBoZWFkZXI6IHsKAAkgTWFpbiBoZWFkZXIgc3RhcnQgcG9zaXRpb249JWxsaQoJIE1haW4gaGVhZGVyIGVuZCBwb3NpdGlvbj0lbGxpCgAJIE1hcmtlciBsaXN0OiB7CgAJCSB0eXBlPSUjeCwgcG9zPSVsbGksIGxlbj0lZAoACSB9CgAJIFRpbGUgaW5kZXg6IHsKAAkJIG5iIG9mIHRpbGUtcGFydCBpbiB0aWxlIFslZF09JWQKAAkJCSB0aWxlLXBhcnRbJWRdOiBzdGFyX3Bvcz0lbGxpLCBlbmRfaGVhZGVyPSVsbGksIGVuZF9wb3M9JWxsaS4KAAkgZGVmYXVsdCB0aWxlIHsKAAkJIGNzdHk9JSN4CgAJCSBwcmc9JSN4CgAJCSBudW1sYXllcnM9JWQKAAkJIG1jdD0leAoACQkgY29tcCAlZCB7CgAJCQkgY3N0eT0lI3gKAAkJCSBudW1yZXNvbHV0aW9ucz0lZAoACQkJIGNibGt3PTJeJWQKAAkJCSBjYmxraD0yXiVkCgAJCQkgY2Jsa3N0eT0lI3gKAAkJCSBxbWZiaWQ9JWQKAAkJCSBwcmVjY2ludHNpemUgKHcsaCk9ACglZCwlZCkgAAkJCSBxbnRzdHk9JWQKAAkJCSBudW1nYml0cz0lZAoACQkJIHN0ZXBzaXplcyAobSxlKT0ACQkJIHJvaXNoaWZ0PSVkCgAJCSB9CgBbREVWXSBEdW1wIGFuIGltYWdlX2hlYWRlciBzdHJ1Y3QgewoASW1hZ2UgaW5mbyB7CgAlcyB4MD0lZCwgeTA9JWQKACVzIHgxPSVkLCB5MT0lZAoAJXMgbnVtY29tcHM9JWQKACVzCSBjb21wb25lbnQgJWQgewoAJXN9CgBbREVWXSBEdW1wIGFuIGltYWdlX2NvbXBfaGVhZGVyIHN0cnVjdCB7CgAlcyBkeD0lZCwgZHk9JWQKACVzIHByZWM9JWQKACVzIHNnbmQ9JWQKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGRlY29kZSB0aWxlcwoATm90IGVub3VnaCBtZW1vcnkgdG8gZGVjb2RlIHRpbGUgJWQvJWQKAEZhaWxlZCB0byBkZWNvZGUgdGlsZSAlZC8lZAoAVGlsZSAlZC8lZCBoYXMgYmVlbiBkZWNvZGVkLgoASW1hZ2UgZGF0YSBoYXMgYmVlbiB1cGRhdGVkIHdpdGggdGlsZSAlZC4KCgBXZSBuZWVkIGFuIGltYWdlIHByZXZpb3VzbHkgY3JlYXRlZC4KAFRpbGUgaW5kZXggcHJvdmlkZWQgYnkgdGhlIHVzZXIgaXMgaW5jb3JyZWN0ICVkIChtYXggPSAlZCkgCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBkZWNvZGUgb25lIHRpbGUKAFByb2JsZW0gd2l0aCBzZWVrIGZ1bmN0aW9uCgBUaWxlIHJlYWQsIGRlY29kZWQgYW5kIHVwZGF0ZWQgaXMgbm90IHRoZSBkZXNpcmVkIG9uZSAoJWQgdnMgJWQpLgoAUmVzb2x1dGlvbiBmYWN0b3IgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHJlc29sdXRpb24gaW4gdGhlIGNvbXBvbmVudC4KAFRoZSBnaXZlbiB0aWxlIGluZGV4IGRvZXMgbm90IG1hdGNoLgB0aWxlIG51bWJlciAlZCAvICVkCgBFcnJvciBhbGxvY2F0aW5nIHRpbGUgY29tcG9uZW50IGRhdGEuAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGVuY29kZSBhbGwgdGlsZXMKAFNpemUgbWlzbWF0Y2ggYmV0d2VlbiB0aWxlIGRhdGEgYW5kIHNlbnQgZGF0YS4AQ2Fubm90IGVuY29kZSB0aWxlCgBGYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UgaGVhZGVyLgBOb3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgVGlsZSBDb2RlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gd3JpdGUgQ0JEIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gd3JpdGUgTUNUIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gd3JpdGUgTUNDIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gd3JpdGUgTUNPIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gd3JpdGUgdGhlIENPTSBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHdyaXRlIFBPQyBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHdyaXRlIFRMTSBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHdyaXRlIFFDQyBtYXJrZXIKAEVycm9yIHdyaXRpbmcgU1FjZCBTUWNjIGVsZW1lbnQKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHdyaXRlIENPQyBtYXJrZXIKAEVycm9yIHdyaXRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudAoATm90IGVub3VnaCBtZW1vcnkgdG8gd3JpdGUgUUNEIG1hcmtlcgoARXJyb3Igd3JpdGluZyBRQ0QgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byB3cml0ZSBDT0QgbWFya2VyCgBFcnJvciB3cml0aW5nIENPRCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aGUgU0laIG1hcmtlcgoATnVtYmVyIG9mIHJlc29sdXRpb25zIGlzIHRvbyBoaWdoIGluIGNvbXBhcmlzb24gdG8gdGhlIHNpemUgb2YgdGlsZXMKAEVycm9yIHdoaWxlIG9wal9qMmtfcHJlX3dyaXRlX3RpbGUgd2l0aCB0aWxlIGluZGV4ID0gJWQKAEVycm9yIHdoaWxlIG9wal9qMmtfcG9zdF93cml0ZV90aWxlIHdpdGggdGlsZSBpbmRleCA9ICVkCgBGYWlsZWQgdG8gZGVjb2RlIHRoZSBjb2Rlc3RyZWFtIGluIHRoZSBKUDIgZmlsZQoAb3BqX2pwMl9hcHBseV9jZGVmOiBjbj0lZCwgbnVtY29tcHM9JWQKAG9wal9qcDJfYXBwbHlfY2RlZjogYWNuPSVkLCBudW1jb21wcz0lZAoASW52YWxpZCBjb21wb25lbnQgaW5kZXggJWQgKD49ICVkKS4KAEluY29tcGxldGUgY2hhbm5lbCBkZWZpbml0aW9ucy4KAFVuZXhwZWN0ZWQgT09NLgoASW52YWxpZCBjb21wb25lbnQvcGFsZXR0ZSBpbmRleCBmb3IgZGlyZWN0IG1hcHBpbmcgJWQuCgBDb21wb25lbnQgJWQgaXMgbWFwcGVkIHR3aWNlLgoARGlyZWN0IHVzZSBhdCAjJWQgaG93ZXZlciBwY29sPSVkLgoAQ29tcG9uZW50ICVkIGRvZXNuJ3QgaGF2ZSBhIG1hcHBpbmcuCgBDb21wb25lbnQgbWFwcGluZyBzZWVtcyB3cm9uZy4gVHJ5aW5nIHRvIGNvcnJlY3QuCgBJbnZhbGlkIG51bWJlciBvZiBjb21wb25lbnRzIHNwZWNpZmllZCB3aGlsZSBzZXR0aW5nIHVwIEpQMiBlbmNvZGVyCgBOb3QgZW5vdWdoIG1lbW9yeSB3aGVuIHNldHVwIHRoZSBKUDIgZW5jb2RlcgoAQWxwaGEgY2hhbm5lbCBzcGVjaWZpZWQgYnV0IHVua25vd24gZW51bWNzLiBObyBjZGVmIGJveCB3aWxsIGJlIGNyZWF0ZWQuCgBBbHBoYSBjaGFubmVsIHNwZWNpZmllZCBidXQgbm90IGVub3VnaCBpbWFnZSBjb21wb25lbnRzIGZvciBhbiBhdXRvbWF0aWMgY2RlZiBib3ggY3JlYXRpb24uCgBBbHBoYSBjaGFubmVsIHBvc2l0aW9uIGNvbmZsaWN0cyB3aXRoIGNvbG9yIGNoYW5uZWwuIE5vIGNkZWYgYm94IHdpbGwgYmUgY3JlYXRlZC4KAE11bHRpcGxlIGFscGhhIGNoYW5uZWxzIHNwZWNpZmllZC4gTm8gY2RlZiBib3ggd2lsbCBiZSBjcmVhdGVkLgoATm90IGVub3VnaCBtZW1vcnkgdG8gc2V0dXAgdGhlIEpQMiBlbmNvZGVyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUganBlZzIwMDAgZmlsZSBoZWFkZXIKAENhbm5vdCBoYW5kbGUgYm94IHNpemVzIGhpZ2hlciB0aGFuIDJeMzIKAGJhZCBwbGFjZWQganBlZyBjb2Rlc3RyZWFtCgBDYW5ub3QgaGFuZGxlIGJveCBvZiB1bmRlZmluZWQgc2l6ZXMKAGludmFsaWQgYm94IHNpemUgJWQgKCV4KQoARm91bmQgYSBtaXNwbGFjZWQgJyVjJWMlYyVjJyBib3ggb3V0c2lkZSBqcDJoIGJveAoASlBFRzIwMDAgSGVhZGVyIGJveCBub3QgcmVhZCB5ZXQsICclYyVjJWMlYycgYm94IHdpbGwgYmUgaWdub3JlZAoAUHJvYmxlbSB3aXRoIHNraXBwaW5nIEpQRUcyMDAwIGJveCwgc3RyZWFtIGVycm9yCgBJbnZhbGlkIGJveCBzaXplICVkIGZvciBib3ggJyVjJWMlYyVjJy4gTmVlZCAlZCBieXRlcywgJWQgYnl0ZXMgcmVtYWluaW5nIAoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGpwZWcyMDAwIGJveAoAUHJvYmxlbSB3aXRoIHJlYWRpbmcgSlBFRzIwMDAgYm94LCBzdHJlYW0gZXJyb3IKAE1hbGZvcm1lZCBKUDIgZmlsZSBmb3JtYXQ6IGZpcnN0IGJveCBtdXN0IGJlIEpQRUcgMjAwMCBzaWduYXR1cmUgYm94CgBNYWxmb3JtZWQgSlAyIGZpbGUgZm9ybWF0OiBzZWNvbmQgYm94IG11c3QgYmUgZmlsZSB0eXBlIGJveAoASW5zdWZmaWNpZW50IGRhdGEgZm9yIENERUYgYm94LgoATnVtYmVyIG9mIGNoYW5uZWwgZGVzY3JpcHRpb24gaXMgZXF1YWwgdG8gemVybyBpbiBDREVGIGJveC4KAE5lZWQgdG8gcmVhZCBhIFBDTFIgYm94IGJlZm9yZSB0aGUgQ01BUCBib3guCgBPbmx5IG9uZSBDTUFQIGJveCBpcyBhbGxvd2VkLgoASW5zdWZmaWNpZW50IGRhdGEgZm9yIENNQVAgYm94LgoASW52YWxpZCBQQ0xSIGJveC4gUmVwb3J0cyAlZCBlbnRyaWVzCgBJbnZhbGlkIFBDTFIgYm94LiBSZXBvcnRzIDAgcGFsZXR0ZSBjb2x1bW5zCgBBIEJQQ0MgaGVhZGVyIGJveCBpcyBhdmFpbGFibGUgYWx0aG91Z2ggQlBDIGdpdmVuIGJ5IHRoZSBJSERSIGJveCAoJWQpIGluZGljYXRlIGNvbXBvbmVudHMgYml0IGRlcHRoIGlzIGNvbnN0YW50CgBCYWQgQlBDQyBoZWFkZXIgYm94IChiYWQgc2l6ZSkKAEJhZCBDT0xSIGhlYWRlciBib3ggKGJhZCBzaXplKQoAQSBjb25mb3JtaW5nIEpQMiByZWFkZXIgc2hhbGwgaWdub3JlIGFsbCBDb2xvdXIgU3BlY2lmaWNhdGlvbiBib3hlcyBhZnRlciB0aGUgZmlyc3QsIHNvIHdlIGlnbm9yZSB0aGlzIG9uZS4KAEJhZCBDT0xSIGhlYWRlciBib3ggKGJhZCBzaXplOiAlZCkKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjaWVsYWIKAEJhZCBDT0xSIGhlYWRlciBib3ggKENJRUxhYiwgYmFkIHNpemU6ICVkKQoAQ09MUiBCT1ggbWV0aCB2YWx1ZSBpcyBub3QgYSByZWd1bGFyIHZhbHVlICglZCksIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBlbnRpcmUgQ29sb3VyIFNwZWNpZmljYXRpb24gYm94LiAKAElnbm9yaW5nIGloZHIgYm94LiBGaXJzdCBpaGRyIGJveCBhbHJlYWR5IHJlYWQKAEJhZCBpbWFnZSBoZWFkZXIgYm94IChiYWQgc2l6ZSkKAEludmFsaWQgbnVtYmVyIG9mIGNvbXBvbmVudHMgKGloZHIpCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUgaW1hZ2UgaGVhZGVyIChpaGRyKQoASlAyIElIRFIgYm94OiBjb21wcmVzc2lvbiB0eXBlIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgaXMgbm90IGEgY29uZm9ybWluZyBKUDIgZmlsZSAoJWQpIAoAVGhlICBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAQ2Fubm90IGhhbmRsZSBib3ggb2YgbGVzcyB0aGFuIDggYnl0ZXMKAENhbm5vdCBoYW5kbGUgWEwgYm94IG9mIGxlc3MgdGhhbiAxNiBieXRlcwoAQm94IGxlbmd0aCBpcyBpbmNvbnNpc3RlbnQuCgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveAoAU3RyZWFtIGVycm9yIHdoaWxlIHJlYWRpbmcgSlAyIEhlYWRlciBib3g6IGJveCBsZW5ndGggaXMgaW5jb25zaXN0ZW50LgoAU3RyZWFtIGVycm9yIHdoaWxlIHJlYWRpbmcgSlAyIEhlYWRlciBib3g6IG5vICdpaGRyJyBib3guCgBUaGUgZnR5cCBib3ggbXVzdCBiZSB0aGUgc2Vjb25kIGJveCBpbiB0aGUgZmlsZS4KAEVycm9yIHdpdGggRlRZUCBzaWduYXR1cmUgQm94IHNpemUKAE5vdCBlbm91Z2ggbWVtb3J5IHdpdGggRlRZUCBCb3gKAFRoZSBzaWduYXR1cmUgYm94IG11c3QgYmUgdGhlIGZpcnN0IGJveCBpbiB0aGUgZmlsZS4KAEVycm9yIHdpdGggSlAgc2lnbmF0dXJlIEJveCBzaXplCgBFcnJvciB3aXRoIEpQIFNpZ25hdHVyZSA6IGJhZCBtYWdpYyBudW1iZXIKAEZhaWxlZCB0byBzZWVrIGluIHRoZSBzdHJlYW0uCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBob2xkIEpQMiBIZWFkZXIgZGF0YQoAU3RyZWFtIGVycm9yIHdoaWxlIHdyaXRpbmcgSlAyIEhlYWRlciBib3gKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGhhbmRsZSBmdHlwIGRhdGEKAEVycm9yIHdoaWxlIHdyaXRpbmcgZnR5cCBkYXRhIHRvIHN0cmVhbQoASlAyIGJveCB3aGljaCBhcmUgYWZ0ZXIgdGhlIGNvZGVzdHJlYW0gd2lsbCBub3QgYmUgcmVhZCBieSB0aGlzIGZ1bmN0aW9uLgoAVGlsZSBYIGNvb3JkaW5hdGVzIGFyZSBub3Qgc3VwcG9ydGVkCgBUaWxlIFkgY29vcmRpbmF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKAHRpbGVzIHJlcXVpcmUgYXQgbGVhc3Qgb25lIHJlc29sdXRpb24KAE5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aWxlIGRhdGEKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aWxlIHJlc29sdXRpb25zCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUgYmFuZCBwcmVjaW50cwoATm90IGVub3VnaCBtZW1vcnkgZm9yIGN1cnJlbnQgcHJlY2luY3QgY29kZWJsb2NrIGVsZW1lbnQKAE5vIGluY2x0cmVlIGNyZWF0ZWQuCgBObyBpbXNidHJlZSBjcmVhdGVkLgoAVGlsZXMgZG9uJ3QgYWxsIGhhdmUgdGhlIHNhbWUgZGltZW5zaW9uLiBTa2lwIHRoZSBNQ1Qgc3RlcC4KAE51bWJlciBvZiBjb21wb25lbnRzICglZCkgaXMgaW5jb25zaXN0ZW50IHdpdGggYSBNQ1QuIFNraXAgdGhlIE1DVCBzdGVwLgoATm90IGVub3VnaCBtZW1vcnkgdG8gY3JlYXRlIFRhZy10cmVlCgB0Z3RfY3JlYXRlIHRyZWUtPm51bW5vZGVzID09IDAsIG5vIHRyZWUgY3JlYXRlZC4KAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGNyZWF0ZSBUYWctdHJlZSBub2RlcwoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVpbml0aWFsaXplIHRoZSB0YWcgdHJlZQoATm90IGVub3VnaCBtZW1vcnkgdG8gYWRkIGEgbmV3IHZhbGlkYXRpb24gcHJvY2VkdXJlCgAAAQECAQICAgECAgICAgICAwMDAwMDAwMDAwMDAwMDAwUGBgYGBgYGBgYGBgYGBgYHBwcHBwcHBwcHBwcHBwcHAwMDAwMDAwMDAwMDAwMDAwQEBAQEBAQEBAQEBAQEBAQHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwUGBgYGBgYGBgYGBgYGBgYHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAEBAgECAgIBAgICAgICAgUGBgYGBgYGBgYGBgYGBgYDAwMDAwMDAwMDAwMDAwMDBwcHBwcHBwcHBwcHBwcHBwUGBgYGBgYGBgYGBgYGBgYICAgICAgICAgICAgICAgIBwcHBwcHBwcHBwcHBwcHBwgICAgICAgICAgICAgICAgDAwMDAwMDAwMDAwMDAwMDBwcHBwcHBwcHBwcHBwcHBwQEBAQEBAQEBAQEBAQEBAQHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwgICAgICAgICAgICAgICAgHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgICAgICAgICAABAQIBAgICAQICAgICAgIDAwMDAwMDAwMDAwMDAwMDBQYGBgYGBgYGBgYGBgYGBgcHBwcHBwcHBwcHBwcHBwcDAwMDAwMDAwMDAwMDAwMDBAQEBAQEBAQEBAQEBAQEBAcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBQYGBgYGBgYGBgYGBgYGBgcHBwcHBwcHBwcHBwcHBwcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAAwMGAwYGCAMGBggGCAgIAQQEBwQHBwgEBwcIBwgICAEEBAcEBwcIBAcHCAcICAgCBQUHBQcHCAUHBwgHCAgIAQQEBwQHBwgEBwcIBwgICAIFBQcFBwcIBQcHCAcICAgCBQUHBQcHCAUHBwgHCAgIAgUFBwUHBwgFBwcIBwgICAEEBAcEBwcIBAcHCAcICAgCBQUHBQcHCAUHBwgHCAgIAgUFBwUHBwgFBwcIBwgICAIFBQcFBwcIBQcHCAcICAgCBQUHBQcHCAUHBwgHCAgIAgUFBwUHBwgFBwcIBwgICAIFBQcFBwcIBQcHCAcICAgCBQUHBQcHCAUHBwgHCAgICQoMDQoKDQ0MDQwNDQ0NDQkKDAsKCQ0MDAsMCw0MDQwJCgwLCgoLCwwNCQoNDQoKCQoMDQoJCwwMCwkKDQwKCQkKDA0KCQsMDA0MDQsMCwwJCgwLCgoLCwwLDAsLCwsLCQoMCwoJDQwMDQkKCwwKCQkKDA0KCg0NDAsJCgsLCgoJCgwNCgoNDQwLCQoLCwoKCQoMCwoJDQwMDQkKCwwKCQkKDAsKCgsLDAsMCwsLCwsJCgwNCgkLDAwNDA0LDAsMCQoMDQoJCwwMCwkKDQwKCQkKDAsKCgsLDA0JCg0NCgoJCgwL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ZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24=\";var tempDoublePtr=STATICTOP;STATICTOP+=16;function ___lock(){}var SYSCALLS={varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){var fflush=Module[\"_fflush\"];if(fflush)fflush(0);var printChar=___syscall146.printChar;if(!printChar)return;var buffers=___syscall146.buffers;if(buffers[1].length)printChar(1,10);if(buffers[2].length)printChar(2,10)}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?Module[\"print\"]:Module[\"printErr\"])(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],\"i8\",ALLOC_STATIC);function ___unlock(){}var _llvm_ceil_f32=Math_ceil;var _llvm_floor_f32=Math_floor;var _llvm_floor_f64=Math_floor;var _llvm_pow_f64=Math_pow;function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,\"Character code \"+chr+\" (\"+String.fromCharCode(chr)+\") at offset \"+i+\" not in 0x00-0xFF.\")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join(\"\")}var decodeBase64=typeof atob===\"function\"?atob:(function(input){var keyStr=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";var output=\"\";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i2147483648)return false;b=new a(newBuffer);d=new c(newBuffer);f=new e(newBuffer);h=new g(newBuffer);j=new i(newBuffer);l=new k(newBuffer);n=new m(newBuffer);p=new o(newBuffer);buffer=newBuffer;return true}\n// EMSCRIPTEN_START_FUNCS\nfunction Wa(a){a=a|0;var b=0;b=u;u=u+a|0;u=u+15&-16;return b|0}function Xa(){return u|0}function Ya(a){a=a|0;u=a}function Za(a,b){a=a|0;b=b|0;u=a;v=b}function _a(a,b){a=a|0;b=b|0;if(!x){x=a;y=b}}function $a(a){a=a|0;I=a}function ab(){return I|0}function bb(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0;p=u;u=u+8272|0;q=p+16|0;n=p+12|0;m=p;f[n>>2]=0;o=Wb((f[a>>2]|0)==1375686655?0:2)|0;pc(o,1,0)|0;qc(o,2,0)|0;oc(o,3,0)|0;mc(q);f[m>>2]=a;f[m+4>>2]=a;f[m+8>>2]=b;m=uc(m,1)|0;if(!(rc(o,q)|0)){Si(4211)|0;jb(m);Zb(o);q=1;u=p;return q|0}if(!(hc(m,o,n)|0)){Si(4263)|0;jb(m);Zb(o);Qb(f[n>>2]|0);q=1;u=p;return q|0}if(!(Xb(o,m,f[n>>2]|0)|0)){Si(4313)|0;Zb(o);jb(m);Qb(f[n>>2]|0);q=1;u=p;return q|0}a=f[n>>2]|0;f[e>>2]=f[a+8>>2];f[g>>2]=f[a+12>>2];f[h>>2]=f[a+16>>2];b=a+24|0;q=f[b>>2]|0;f[j>>2]=f[q+24>>2];f[k>>2]=f[q+32>>2];f[i>>2]=f[q+28>>2];f[l>>2]=f[a+20>>2];a=X(X(f[e>>2]<<2,f[g>>2]|0)|0,f[h>>2]|0)|0;f[d>>2]=a;k=sh(a)|0;f[c>>2]=k;switch(f[h>>2]|0){case 1:{hj(k|0,f[(f[b>>2]|0)+44>>2]|0,a|0)|0;break}case 3:{j=X(f[g>>2]|0,f[e>>2]|0)|0;if((j|0)>0){i=f[b>>2]|0;b=f[i+44>>2]|0;l=f[i+96>>2]|0;i=f[i+148>>2]|0;a=0;do{q=a*3|0;f[k+(q<<2)>>2]=f[b+(a<<2)>>2];f[k+(q+1<<2)>>2]=f[l+(a<<2)>>2];f[k+(q+2<<2)>>2]=f[i+(a<<2)>>2];a=a+1|0}while((a|0)<(j|0))}break}default:{}}jb(m);Zb(o);Qb(f[n>>2]|0);q=0;u=p;return q|0}function cb(a,b,c,d,e,g,i,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;i=i|0;k=k|0;l=l|0;m=m|0;var o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0;w=u;u=u+18880|0;t=w+160|0;o=w+16|0;v=w;nc(t);f[t+18200>>2]=0;f[t+4788>>2]=1;f[t+20>>2]=1;a:do if(!e)switch(d|0){case 0:case 100:{n[t+4792>>2]=0.0;break a}default:{n[t+5192>>2]=+(d|0);f[t+28>>2]=1;break a}}else n[t+4792>>2]=+(e|0);while(0);f[o+24>>2]=c;f[o+28>>2]=c;f[o+32>>2]=0;f[o>>2]=1;f[o+4>>2]=1;f[o+8>>2]=a;f[o+12>>2]=b;f[o+60>>2]=c;f[o+64>>2]=c;f[o+68>>2]=0;f[o+36>>2]=1;f[o+40>>2]=1;f[o+44>>2]=a;f[o+48>>2]=b;f[o+96>>2]=c;f[o+100>>2]=c;f[o+104>>2]=0;f[o+72>>2]=1;f[o+76>>2]=1;f[o+80>>2]=a;f[o+84>>2]=b;f[o+132>>2]=c;f[o+136>>2]=c;f[o+140>>2]=0;f[o+108>>2]=1;f[o+112>>2]=1;f[o+116>>2]=a;f[o+120>>2]=b;s=Pb(4,o,1)|0;if(!s){m=0;u=w;return m|0}if((c|0)==16){if((b|0)>0&(a|0)>0){q=f[s+24>>2]|0;e=f[q+200>>2]|0;c=f[q+44>>2]|0;p=f[q+96>>2]|0;q=f[q+148>>2]|0;o=0;do{r=X(o,a)|0;d=0;do{x=d+r|0;y=x<<2;f[c+(x<<2)>>2]=j[g+(y<<1)>>1];f[p+(x<<2)>>2]=j[g+((y|1)<<1)>>1];f[q+(x<<2)>>2]=j[g+((y|2)<<1)>>1];f[e+(x<<2)>>2]=j[g+((y|3)<<1)>>1];d=d+1|0}while((d|0)!=(a|0));o=o+1|0}while((o|0)!=(b|0))}}else if((b|0)>0&(a|0)>0){q=f[s+24>>2]|0;e=f[q+200>>2]|0;c=f[q+44>>2]|0;p=f[q+96>>2]|0;q=f[q+148>>2]|0;o=0;do{r=X(o,a)|0;d=0;do{y=d+r|0;x=y<<2;f[c+(y<<2)>>2]=h[g+x>>0];f[p+(y<<2)>>2]=h[g+(x|1)>>0];f[q+(y<<2)>>2]=h[g+(x|2)>>0];f[e+(y<<2)>>2]=h[g+(x|3)>>0];d=d+1|0}while((d|0)!=(a|0));o=o+1|0}while((o|0)!=(b|0))}f[s>>2]=0;f[s+4>>2]=0;f[s+8>>2]=a;f[s+12>>2]=b;if((k|0)>0){f[s+28>>2]=i;f[s+32>>2]=k}pc(0,1,0)|0;qc(0,2,0)|0;oc(0,3,0)|0;e=Vb(2)|0;pc(e,1,0)|0;qc(e,2,0)|0;oc(e,3,0)|0;sc(e,t,s)|0;d=sh(67108864)|0;f[v>>2]=d;o=v+4|0;f[o>>2]=d;f[v+8>>2]=67108864;d=uc(v,0)|0;if(!d){y=0;u=w;return y|0}if(!(tc(e,s,d)|0)){jb(d);Zb(e);Qb(s);y=0;u=w;return y|0}if(!(bc(e,d)|0)){jb(d);Zb(e);Qb(s);y=0;u=w;return y|0}if(!(cc(e,d)|0)){jb(d);Zb(e);Qb(s);y=0;u=w;return y|0}else{x=f[v>>2]|0;y=(f[o>>2]|0)-x|0;v=sh(y)|0;f[l>>2]=v;hj(v|0,x|0,y|0)|0;f[m>>2]=y;jb(d);Zb(e);Qb(s);y=1;u=w;return y|0}return 0}function db(){return xc()|0}function eb(a,b){a=a|0;b=b|0;return}function fb(a,b){a=a|0;b=b|0;return}function gb(a,b){a=a|0;b=b|0;var c=0;b=u;u=u+16|0;c=b;f[c>>2]=a;Pi(4200,c)|0;u=b;return}function hb(a,b){a=a|0;b=b|0;var c=0;c=Ic(1,72)|0;if(!c){c=0;return c|0}f[c+64>>2]=a;a=Hc(a)|0;f[c+32>>2]=a;if(!a){Mc(c);c=0;return c|0}else{f[c+36>>2]=a;b=(b|0)==0;a=c+68|0;f[a>>2]=f[a>>2]|(b?1:2);f[c+40>>2]=b?29:30;f[c+44>>2]=b?31:32;f[c+16>>2]=4;f[c+20>>2]=5;f[c+24>>2]=6;f[c+28>>2]=7;return c|0}return 0}function ib(a){a=a|0;var b=0,c=0;b=Ic(1,72)|0;if(!b){c=0;return c|0}f[b+64>>2]=1048576;c=Hc(1048576)|0;f[b+32>>2]=c;if(!c){Mc(b);c=0;return c|0}else{f[b+36>>2]=c;c=(a|0)==0;a=b+68|0;f[a>>2]=f[a>>2]|(c?1:2);f[b+40>>2]=c?29:30;f[b+44>>2]=c?31:32;f[b+16>>2]=4;f[b+20>>2]=5;f[b+24>>2]=6;f[b+28>>2]=7;c=b;return c|0}return 0}function jb(a){a=a|0;var b=0;if(!a)return;b=f[a+4>>2]|0;if(b|0)Sa[b&7](f[a>>2]|0);b=a+32|0;Mc(f[b>>2]|0);f[b>>2]=0;Mc(a);return}function kb(a,b){a=a|0;b=b|0;if(!a)return;if(!(f[a+68>>2]&2))return;f[a+16>>2]=b;return}function lb(a,b){a=a|0;b=b|0;if(!a)return;f[a+28>>2]=b;return}function mb(a,b){a=a|0;b=b|0;if(!a)return;f[a+24>>2]=b;return}function nb(a,b,c){a=a|0;b=b|0;c=c|0;if(!a)return;f[a>>2]=b;f[a+4>>2]=c;return}function ob(a,b,c){a=a|0;b=b|0;c=c|0;if(!a)return;a=a+8|0;f[a>>2]=b;f[a+4>>2]=c;return}function pb(a,b){a=a|0;b=b|0;if(!a)return;if(!(f[a+68>>2]&1))return;f[a+20>>2]=b;return}function qb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=u;u=u+16|0;o=p+8|0;k=p;n=a+68|0;if(f[n>>2]&8|0){o=-1;a=-1;I=o;u=p;return a|0}j=a+32|0;e=f[j>>2]|0;m=a+36|0;f[m>>2]=e;h=a+48|0;g=f[h>>2]|0;do if(g){i=a+20|0;while(1){g=Ma[f[i>>2]&63](e,g,f[a>>2]|0)|0;if((g|0)==-1)break;e=(f[m>>2]|0)+g|0;f[m>>2]=e;g=(f[h>>2]|0)-g|0;f[h>>2]=g;if(!g){l=6;break}}if((l|0)==6){e=f[j>>2]|0;break}f[n>>2]=f[n>>2]|8;Mb(d,4,4360,k)|0;f[n>>2]=f[n>>2]|8;f[h>>2]=0;o=-1;a=-1;I=o;u=p;return a|0}while(0);f[m>>2]=e;a:do if((c|0)>0|(c|0)==0&b>>>0>0){j=a+24|0;g=0;e=0;while(1){h=Ma[f[j>>2]&63](b,c,f[a>>2]|0)|0;i=I;if((h|0)==-1&(i|0)==-1)break;b=_i(b|0,c|0,h|0,i|0)|0;c=I;g=Zi(h|0,i|0,g|0,e|0)|0;e=I;if(!((c|0)>0|(c|0)==0&b>>>0>0))break a}Mb(d,4,4412,o)|0;f[n>>2]=f[n>>2]|8;a=a+56|0;o=a;o=Zi(f[o>>2]|0,f[o+4>>2]|0,g|0,e|0)|0;f[a>>2]=o;f[a+4>>2]=I;a=(g|0)!=0|(e|0)!=0;o=a?e:-1;a=a?g:-1;I=o;u=p;return a|0}else{g=0;e=0}while(0);o=a+56|0;a=o;a=Zi(f[a>>2]|0,f[a+4>>2]|0,g|0,e|0)|0;f[o>>2]=a;f[o+4>>2]=I;o=e;a=g;I=o;u=p;return a|0}function rb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=u;u=u+16|0;l=m;e=a+48|0;g=f[e>>2]|0;if(g>>>0>=b>>>0){l=a+36|0;f[l>>2]=(f[l>>2]|0)+b;f[e>>2]=g-b;l=a+56|0;a=l;a=Zi(f[a>>2]|0,f[a+4>>2]|0,b|0,c|0)|0;f[l>>2]=a;f[l+4>>2]=I;l=c;a=b;I=l;u=m;return a|0}k=a+68|0;if(f[k>>2]&4|0){l=a+36|0;f[l>>2]=(f[l>>2]|0)+g;f[e>>2]=0;a=a+56|0;l=a;l=Zi(f[l>>2]|0,f[l+4>>2]|0,g|0,0)|0;f[a>>2]=l;f[a+4>>2]=I;a=(g|0)!=0;l=a?0:-1;a=a?g:-1;I=l;u=m;return a|0}if(!g){g=0;e=0}else{f[a+36>>2]=f[a+32>>2];b=_i(b|0,c|0,g|0,0)|0;f[e>>2]=0;e=0;c=I}a:do if((c|0)>0|(c|0)==0&b>>>0>0){j=a+24|0;while(1){h=Ma[f[j>>2]&63](b,c,f[a>>2]|0)|0;i=I;if((h|0)==-1&(i|0)==-1)break;b=_i(b|0,c|0,h|0,i|0)|0;c=I;g=Zi(h|0,i|0,g|0,e|0)|0;e=I;if(!((c|0)>0|(c|0)==0&b>>>0>0))break a}Mb(d,4,4386,l)|0;f[k>>2]=f[k>>2]|4;a=a+56|0;l=a;l=Zi(f[l>>2]|0,f[l+4>>2]|0,g|0,e|0)|0;f[a>>2]=l;f[a+4>>2]=I;a=(g|0)!=0|(e|0)!=0;l=a?e:-1;a=a?g:-1;I=l;u=m;return a|0}while(0);l=a+56|0;a=l;a=Zi(f[a>>2]|0,f[a+4>>2]|0,g|0,e|0)|0;f[l>>2]=a;f[l+4>>2]=I;l=e;a=g;I=l;u=m;return a|0}function sb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=u;u=u+16|0;i=n;k=a+32|0;e=f[k>>2]|0;l=a+36|0;f[l>>2]=e;m=a+48|0;g=f[m>>2]|0;do if(!g)g=a;else{h=a+20|0;while(1){g=Ma[f[h>>2]&63](e,g,f[a>>2]|0)|0;if((g|0)==-1)break;e=(f[l>>2]|0)+g|0;f[l>>2]=e;g=(f[m>>2]|0)-g|0;f[m>>2]=g;if(!g){j=6;break}}if((j|0)==6){g=a;e=f[k>>2]|0;break}m=a+68|0;f[m>>2]=f[m>>2]|8;Mb(d,4,4360,i)|0;f[m>>2]=f[m>>2]|8;m=0;u=n;return m|0}while(0);f[l>>2]=e;f[m>>2]=0;if(!(Ma[f[a+28>>2]&63](b,c,f[g>>2]|0)|0)){m=a+68|0;f[m>>2]=f[m>>2]|8;m=0;u=n;return m|0}else{m=a+56|0;f[m>>2]=b;f[m+4>>2]=c;m=1;u=n;return m|0}return 0}function tb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;f[a+36>>2]=f[a+32>>2];f[a+48>>2]=0;g=(Ma[f[a+28>>2]&63](b,c,f[a>>2]|0)|0)==0;d=a+68|0;e=f[d>>2]|0;if(g){f[d>>2]=e|4;g=0;return g|0}else{f[d>>2]=e&-5;g=a+56|0;f[g>>2]=b;f[g+4>>2]=c;g=1;return g|0}return 0}function ub(a,b,c){a=a|0;b=b|0;c=c|0;return -1}function vb(a,b,c){a=a|0;b=b|0;c=c|0;return -1}function wb(a,b,c){a=a|0;b=b|0;c=c|0;I=-1;return -1}function xb(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function yb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0;h=u;u=u+16|0;e=h;f[e>>2]=c;if(!d){u=h;return}g=0;c=e+d|0;while(1){c=c+-1|0;b[a>>0]=b[c>>0]|0;g=g+1|0;if((g|0)==(d|0))break;else a=a+1|0}u=h;return}function zb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;f[c>>2]=0;if(!d)return;e=c+d|0;c=a;a=0;while(1){e=e+-1|0;b[e>>0]=b[c>>0]|0;a=a+1|0;if((a|0)==(d|0))break;else c=c+1|0}return}function Ab(a,c){a=a|0;c=+c;var d=0,e=0,g=0;p[s>>3]=c;d=f[s>>2]|0;e=f[s+4>>2]|0;g=ej(d|0,e|0,56)|0;b[a>>0]=g;g=ej(d|0,e|0,48)|0;b[a+1>>0]=g;g=ej(d|0,e|0,40)|0;b[a+2>>0]=g;b[a+3>>0]=e;g=ej(d|0,e|0,24)|0;b[a+4>>0]=g;g=ej(d|0,e|0,16)|0;b[a+5>>0]=g;e=ej(d|0,e|0,8)|0;b[a+6>>0]=e;b[a+7>>0]=d;return}function Bb(a,c){a=a|0;c=c|0;var d=0;d=c+8|0;b[d+-1>>0]=b[a>>0]|0;b[d+-2>>0]=b[a+1>>0]|0;b[d+-3>>0]=b[a+2>>0]|0;b[d+-4>>0]=b[a+3>>0]|0;b[d+-5>>0]=b[a+4>>0]|0;b[d+-6>>0]=b[a+5>>0]|0;b[d+-7>>0]=b[a+6>>0]|0;b[c>>0]=b[a+7>>0]|0;return}function Cb(a,c){a=a|0;c=+c;var d=0;d=(n[s>>2]=c,f[s>>2]|0);b[a>>0]=d>>>24;b[a+1>>0]=d>>>16;b[a+2>>0]=d>>>8;b[a+3>>0]=d;return}function Db(a,c){a=a|0;c=c|0;var d=0;d=c+4|0;b[d+-1>>0]=b[a>>0]|0;b[d+-2>>0]=b[a+1>>0]|0;b[d+-3>>0]=b[a+2>>0]|0;b[c>>0]=b[a+3>>0]|0;return}function Eb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=u;u=u+16|0;r=s+8|0;q=s;p=a+48|0;e=f[p>>2]|0;if(e>>>0>=c>>>0){r=a+36|0;hj(b|0,f[r>>2]|0,c|0)|0;f[r>>2]=(f[r>>2]|0)+c;f[p>>2]=(f[p>>2]|0)-c;r=a+56|0;q=r;q=Zi(f[q>>2]|0,f[q+4>>2]|0,c|0,0)|0;f[r>>2]=q;f[r+4>>2]=I;r=c;u=s;return r|0}o=a+68|0;if(f[o>>2]&4|0){r=a+36|0;hj(b|0,f[r>>2]|0,e|0)|0;q=f[p>>2]|0;f[r>>2]=(f[r>>2]|0)+q;r=a+56|0;d=r;q=Zi(f[d>>2]|0,f[d+4>>2]|0,q|0,0)|0;f[r>>2]=q;f[r+4>>2]=I;f[p>>2]=0;r=e|0?e:-1;u=s;return r|0}if(!e){n=a+32|0;g=f[n>>2]|0;m=a+36|0;f[m>>2]=g;e=0}else{m=a+36|0;hj(b|0,f[m>>2]|0,e|0)|0;n=a+32|0;g=f[n>>2]|0;f[m>>2]=g;l=f[p>>2]|0;k=a+56|0;j=k;j=Zi(f[j>>2]|0,f[j+4>>2]|0,l|0,0)|0;f[k>>2]=j;f[k+4>>2]=I;f[p>>2]=0;c=c-l|0;b=b+l|0}k=a+64|0;l=a+16|0;j=a+56|0;while(1){h=f[k>>2]|0;i=f[l>>2]|0;if(c>>>0>=h>>>0){h=Ma[i&63](b,c,f[a>>2]|0)|0;f[p>>2]=h;if((h|0)==-1){g=16;break}e=h+e|0;if(h>>>0>>0)g=h;else{g=19;break}}else{g=Ma[i&63](g,h,f[a>>2]|0)|0;f[p>>2]=g;if((g|0)==-1){g=11;break}if(g>>>0>=c>>>0){g=14;break}hj(b|0,f[m>>2]|0,g|0)|0;e=g+e|0;g=f[p>>2]|0}i=f[n>>2]|0;f[m>>2]=i;t=j;t=Zi(f[t>>2]|0,f[t+4>>2]|0,g|0,0)|0;h=j;f[h>>2]=t;f[h+4>>2]=I;f[p>>2]=0;c=c-g|0;b=b+g|0;g=i}if((g|0)==11){Mb(d,4,4386,q)|0;f[p>>2]=0;f[o>>2]=f[o>>2]|4;t=e|0?e:-1;u=s;return t|0}else if((g|0)==14){hj(b|0,f[m>>2]|0,c|0)|0;f[m>>2]=(f[m>>2]|0)+c;f[p>>2]=(f[p>>2]|0)-c;t=a+56|0;r=t;r=Zi(f[r>>2]|0,f[r+4>>2]|0,c|0,0)|0;f[t>>2]=r;f[t+4>>2]=I;t=e+c|0;u=s;return t|0}else if((g|0)==16){Mb(d,4,4386,r)|0;f[p>>2]=0;f[o>>2]=f[o>>2]|4;t=e|0?e:-1;u=s;return t|0}else if((g|0)==19){t=a+56|0;r=t;r=Zi(f[r>>2]|0,f[r+4>>2]|0,h|0,0)|0;f[t>>2]=r;f[t+4>>2]=I;f[m>>2]=f[n>>2];f[p>>2]=0;t=e;u=s;return t|0}return 0}function Fb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0;s=u;u=u+16|0;p=s;n=a+68|0;if(f[n>>2]&8|0){r=-1;u=s;return r|0}o=a+64|0;r=a+48|0;j=f[r>>2]|0;e=(f[o>>2]|0)-j|0;do if(e>>>0>>0){l=a+32|0;g=a+36|0;m=a+20|0;h=a+56|0;i=0;k=e;a:while(1){if(!k)e=f[l>>2]|0;else{hj(f[g>>2]|0,b|0,k|0)|0;e=f[l>>2]|0;f[g>>2]=e;j=(f[r>>2]|0)+k|0;f[r>>2]=j;v=h;v=Zi(f[v>>2]|0,f[v+4>>2]|0,k|0,0)|0;t=h;f[t>>2]=v;f[t+4>>2]=I;i=k+i|0;c=c-k|0;b=b+k|0}f[g>>2]=e;if(j){do{j=Ma[f[m>>2]&63](e,j,f[a>>2]|0)|0;if((j|0)==-1)break a;e=(f[g>>2]|0)+j|0;f[g>>2]=e;j=(f[r>>2]|0)-j|0;f[r>>2]=j}while((j|0)!=0);e=f[l>>2]|0}f[g>>2]=e;k=f[o>>2]|0;if(c>>>0<=k>>>0){q=5;break}else j=0}if((q|0)==5)break;f[n>>2]=f[n>>2]|8;Mb(d,4,4360,p)|0;v=-1;u=s;return v|0}else{e=a+36|0;i=0;h=a+56|0;g=e;e=f[e>>2]|0}while(0);hj(e|0,b|0,c|0)|0;f[g>>2]=(f[g>>2]|0)+c;f[r>>2]=(f[r>>2]|0)+c;t=h;t=Zi(f[t>>2]|0,f[t+4>>2]|0,c|0,0)|0;v=h;f[v>>2]=t;f[v+4>>2]=I;v=i+c|0;u=s;return v|0}function Gb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;l=u;u=u+16|0;i=l;e=a+32|0;c=f[e>>2]|0;k=a+36|0;f[k>>2]=c;g=a+48|0;d=f[g>>2]|0;do if(d){h=a+20|0;while(1){d=Ma[f[h>>2]&63](c,d,f[a>>2]|0)|0;if((d|0)==-1)break;c=(f[k>>2]|0)+d|0;f[k>>2]=c;d=(f[g>>2]|0)-d|0;f[g>>2]=d;if(!d){j=6;break}}if((j|0)==6){c=f[e>>2]|0;break}k=a+68|0;f[k>>2]=f[k>>2]|8;Mb(b,4,4360,i)|0;k=0;u=l;return k|0}while(0);f[k>>2]=c;k=1;u=l;return k|0}function Hb(a){a=a|0;a=a+56|0;I=f[a+4>>2]|0;return f[a>>2]|0}function Ib(a){a=a|0;var b=0,c=0;c=a+8|0;b=f[c>>2]|0;c=f[c+4>>2]|0;if((b|0)==0&(c|0)==0){b=0;c=0;I=b;return c|0}a=a+56|0;c=_i(b|0,c|0,f[a>>2]|0,f[a+4>>2]|0)|0;b=I;I=b;return c|0}function Jb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=Na[f[a+40>>2]&63](a,b,c,d)|0;return d|0}function Kb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Na[f[a+44>>2]&63](a,b,c,d)|0}function Lb(a){a=a|0;return (f[a+28>>2]|0)!=7|0}function Mb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+528|0;g=i;h=i+16|0;a:do if(a){switch(b|0){case 1:{b=a+12|0;break}case 2:{b=a+16|0;a=a+4|0;break}case 4:{b=a+20|0;a=a+8|0;break}default:{b=0;break a}}e=f[b>>2]|0;b=f[a>>2]|0;if(e)if(!c)b=1;else{ij(h|0,0,512)|0;f[g>>2]=d;Hi(h,512,c,g)|0;Ta[e&7](h,b);b=1}else b=0}else b=0;while(0);u=i;return b|0}function Nb(a){a=a|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=4;f[a+20>>2]=4;f[a+16>>2]=4;return}function Ob(a,b){a=a|0;b=b|0;return}function Pb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;d=Ic(1,36)|0;if(!d){i=d;return i|0}f[d+20>>2]=c;h=d+16|0;f[h>>2]=a;e=Ic(1,a*52|0)|0;i=d+24|0;f[i>>2]=e;if(!e){c=f[d+28>>2]|0;if(c|0)Mc(c);Mc(d);i=0;return i|0}if(!a){i=d;return i|0}c=0;while(1){f[e+(c*52|0)>>2]=f[b+(c*36|0)>>2];f[e+(c*52|0)+4>>2]=f[b+(c*36|0)+4>>2];j=f[b+(c*36|0)+8>>2]|0;f[e+(c*52|0)+8>>2]=j;k=f[b+(c*36|0)+12>>2]|0;f[e+(c*52|0)+12>>2]=k;f[e+(c*52|0)+16>>2]=f[b+(c*36|0)+16>>2];f[e+(c*52|0)+20>>2]=f[b+(c*36|0)+20>>2];f[e+(c*52|0)+24>>2]=f[b+(c*36|0)+24>>2];f[e+(c*52|0)+28>>2]=f[b+(c*36|0)+28>>2];f[e+(c*52|0)+32>>2]=f[b+(c*36|0)+32>>2];j=Ic(X(k,j)|0,4)|0;f[e+(c*52|0)+44>>2]=j;c=c+1|0;if(!j)break;if(c>>>0>=a>>>0){g=22;break}e=f[i>>2]|0}if((g|0)==22)return d|0;c=f[i>>2]|0;if(c|0){e=f[h>>2]|0;if(e){a=0;while(1){c=f[c+(a*52|0)+44>>2]|0;if(c){Mc(c);e=f[h>>2]|0}c=a+1|0;if(c>>>0>=e>>>0)break;a=c;c=f[i>>2]|0}c=f[i>>2]|0}Mc(c)}c=f[d+28>>2]|0;if(c|0)Mc(c);Mc(d);k=0;return k|0}function Qb(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;if(!a)return;e=a+24|0;b=f[e>>2]|0;if(b|0){g=a+16|0;c=f[g>>2]|0;if(c){d=0;while(1){b=f[b+(d*52|0)+44>>2]|0;if(b){Mc(b);c=f[g>>2]|0}b=d+1|0;if(b>>>0>=c>>>0)break;d=b;b=f[e>>2]|0}b=f[e>>2]|0}Mc(b)}b=f[a+28>>2]|0;if(b|0)Mc(b);Mc(a);return}function Rb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=Ic(1,36)|0;if(!d){b=d;return b|0}f[d+20>>2]=c;f[d+16>>2]=a;e=Ic(a,52)|0;f[d+24>>2]=e;if(!e){c=f[d+28>>2]|0;if(c|0)Mc(c);Mc(d);b=0;return b|0}else{if(!a){b=d;return b|0}else c=0;do{f[e+(c*52|0)>>2]=f[b+(c*36|0)>>2];f[e+(c*52|0)+4>>2]=f[b+(c*36|0)+4>>2];f[e+(c*52|0)+8>>2]=f[b+(c*36|0)+8>>2];f[e+(c*52|0)+12>>2]=f[b+(c*36|0)+12>>2];f[e+(c*52|0)+16>>2]=f[b+(c*36|0)+16>>2];f[e+(c*52|0)+20>>2]=f[b+(c*36|0)+20>>2];f[e+(c*52|0)+24>>2]=f[b+(c*36|0)+24>>2];f[e+(c*52|0)+32>>2]=f[b+(c*36|0)+32>>2];f[e+(c*52|0)+44>>2]=0;c=c+1|0}while((c|0)!=(a|0));return d|0}return 0}function Sb(){return Ic(1,36)|0}function Tb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;c=f[b+4>>2]|0;d=f[a>>2]|0;g=f[b+8>>2]|0;h=f[a+4>>2]|0;e=f[b+12>>2]|0;l=(X((f[b+24>>2]|0)+-1|0,e)|0)+c|0;i=f[b+16>>2]|0;j=(X((f[b+28>>2]|0)+-1|0,i)|0)+g|0;b=Zi(l|0,0,e|0,0)|0;b=0-I|b;e=f[a+8>>2]|0;i=Zi(j|0,0,i|0,0)|0;i=0-I|i;j=f[a+12>>2]|0;l=f[a+16>>2]|0;if(!l)return;k=(c>>>0>d>>>0?c:d)+-1|0;g=(g>>>0>h>>>0?g:h)+-1|0;e=(b>>>0>>0?b:e)+-1|0;d=(i>>>0>>0?i:j)+-1|0;c=0;b=f[a+24>>2]|0;while(1){h=f[b>>2]|0;j=((k+h|0)>>>0)/(h>>>0)|0;o=f[b+4>>2]|0;a=((g+o|0)>>>0)/(o>>>0)|0;i=f[b+40>>2]|0;n=fj(1,0,i|0)|0;m=I;h=Zi((((e+h|0)>>>0)/(h>>>0)|0)-j|0,0,-1,-1)|0;h=Zi(h|0,I|0,n|0,m|0)|0;h=ej(h|0,I|0,i|0)|0;o=Zi((((d+o|0)>>>0)/(o>>>0)|0)-a|0,0,-1,-1)|0;m=Zi(o|0,I|0,n|0,m|0)|0;i=ej(m|0,I|0,i|0)|0;f[b+8>>2]=h;f[b+12>>2]=i;f[b+16>>2]=j;f[b+20>>2]=a;c=c+1|0;if(c>>>0>=l>>>0)break;else b=b+52|0}return}function Ub(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0;f[b>>2]=f[a>>2];f[b+4>>2]=f[a+4>>2];f[b+8>>2]=f[a+8>>2];f[b+12>>2]=f[a+12>>2];j=b+24|0;d=f[j>>2]|0;i=b+16|0;if(!d)c=j;else{e=f[i>>2]|0;if(!e)c=j;else{c=0;while(1){d=f[d+(c*52|0)+44>>2]|0;if(d){Mc(d);e=f[i>>2]|0}c=c+1|0;if(c>>>0>=e>>>0)break;d=f[j>>2]|0}c=j;d=f[j>>2]|0}Mc(d);f[j>>2]=0}d=f[a+16>>2]|0;f[i>>2]=d;d=Hc(d*52|0)|0;f[c>>2]=d;if(!d){f[j>>2]=0;f[i>>2]=0;return}if(f[i>>2]|0){h=a+24|0;g=0;c=d;do{c=c+(g*52|0)|0;d=(f[h>>2]|0)+(g*52|0)|0;e=c+52|0;do{f[c>>2]=f[d>>2];c=c+4|0;d=d+4|0}while((c|0)<(e|0));c=f[j>>2]|0;f[c+(g*52|0)+44>>2]=0;g=g+1|0}while(g>>>0<(f[i>>2]|0)>>>0)}f[b+20>>2]=f[a+20>>2];e=a+32|0;c=f[e>>2]|0;g=b+32|0;f[g>>2]=c;if(!c){f[b+28>>2]=0;return}d=Hc(c)|0;c=b+28|0;f[c>>2]=d;if(!d){f[c>>2]=0;f[g>>2]=0;return}else{hj(d|0,f[a+28>>2]|0,f[e>>2]|0)|0;return}}function Vb(a){a=a|0;var b=0;b=Ic(1,84)|0;if(!b){b=0;return b|0}f[b+68>>2]=0;switch(a|0){case 0:{f[b+4>>2]=8;f[b+12>>2]=9;f[b>>2]=33;f[b+8>>2]=1;f[b+16>>2]=1;f[b+20>>2]=34;a=Pc()|0;f[b+40>>2]=a;if(!a){Mc(b);b=0;return b|0}break}case 2:{f[b+4>>2]=10;f[b+12>>2]=11;f[b>>2]=35;f[b+8>>2]=2;f[b+16>>2]=2;f[b+20>>2]=36;a=nf(0)|0;f[b+40>>2]=a;if(!a){Mc(b);b=0;return b|0}break}default:{Mc(b);b=0;return b|0}}Nb(b+44|0);return b|0}function Wb(a){a=a|0;var b=0;b=Ic(1,84)|0;if(!b){b=0;return b|0}f[b+68>>2]=1;switch(a|0){case 0:{f[b+72>>2]=13;f[b+76>>2]=2;f[b+80>>2]=3;f[b+4>>2]=37;f[b+16>>2]=12;f[b>>2]=38;f[b+20>>2]=1;f[b+24>>2]=5;f[b+8>>2]=1;f[b+12>>2]=3;f[b+28>>2]=1;f[b+32>>2]=1;f[b+36>>2]=13;a=Jd()|0;f[b+40>>2]=a;if(!a){Mc(b);b=0;return b|0}break}case 2:{f[b+72>>2]=14;f[b+76>>2]=4;f[b+80>>2]=5;f[b+4>>2]=39;f[b+16>>2]=14;f[b>>2]=40;f[b+8>>2]=2;f[b+12>>2]=4;f[b+20>>2]=2;f[b+24>>2]=6;f[b+28>>2]=2;f[b+32>>2]=2;f[b+36>>2]=15;a=nf(1)|0;f[b+40>>2]=a;if(!a){Mc(b);b=0;return b|0}break}default:{Mc(b);b=0;return b|0}}Nb(b+44|0);return b|0}function Xb(a,b,c){a=a|0;b=b|0;c=c|0;if(!((a|0)!=0&(b|0)!=0)){c=0;return c|0}if(!(f[a+68>>2]|0)){c=0;return c|0}c=Na[f[a+4>>2]&63](f[a+40>>2]|0,b,c,a+44|0)|0;return c|0}function Yb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(!((a|0)!=0&(c|0)!=0&(e|0)!=0)){e=0;return e|0}if(!(f[a+68>>2]|0)){e=0;return e|0}e=Pa[f[a+12>>2]&7](f[a+40>>2]|0,b,c,d,e,a+44|0)|0;return e|0}function Zb(a){a=a|0;var b=0;if(!a)return;if(!(f[a+68>>2]|0)){b=a+40|0;Sa[f[a+16>>2]&7](f[b>>2]|0)}else{b=a+40|0;Sa[f[a+20>>2]&7](f[b>>2]|0)}f[b>>2]=0;Mc(a);return}function _b(a){a=a|0;var b=0;b=f[a>>2]|0;if(!b)return;Sc(b);f[a>>2]=0;return}function $b(a){a=a|0;var b=0,c=0;if(!a)return;b=f[a>>2]|0;c=f[b+48>>2]|0;if(c){Mc(c);b=f[a>>2]|0}Mc(b);f[a>>2]=0;return}function ac(a,b,c){a=a|0;b=b|0;c=c|0;if(!a)return;Ua[f[a+72>>2]&15](f[a+40>>2]|0,b,c);return}function bc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(f[a+68>>2]|0){b=0;return b|0}b=Ma[f[a+4>>2]&63](f[a+40>>2]|0,b,a+44|0)|0;return b|0}function cc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(f[a+68>>2]|0){b=0;return b|0}b=Ma[f[a+12>>2]&63](f[a+40>>2]|0,b,a+44|0)|0;return b|0}function dc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(!(f[a+68>>2]|0)){b=0;return b|0}b=Ma[f[a+16>>2]&63](f[a+40>>2]|0,b,a+44|0)|0;return b|0}function ec(a){a=a|0;if(!a){a=0;return a|0}a=Ka[f[a+80>>2]&15](f[a+40>>2]|0)|0;return a|0}function fc(a){a=a|0;if(!a){a=0;return a|0}a=Ka[f[a+76>>2]&15](f[a+40>>2]|0)|0;return a|0}function gc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(!((a|0)!=0&(b|0)!=0)){d=0;return d|0}if(!(f[a+68>>2]|0)){d=0;return d|0}d=Oa[f[a+32>>2]&3](f[a+40>>2]|0,b,c,a+44|0,d)|0;return d|0}function hc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=u;u=u+16|0;if(!((a|0)!=0&(b|0)!=0)){c=0;u=d;return c|0}if(!(f[b+68>>2]|0)){Mb(b+44|0,1,4520,d)|0;c=0;u=d;return c|0}else{c=Na[f[b>>2]&63](a,f[b+40>>2]|0,c,b+44|0)|0;u=d;return c|0}return 0}function ic(a,b,c,d,e,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;if(!((c|0)!=0&((a|0)!=0&(b|0)!=0&(d|0)!=0))){k=0;return k|0}if(!(f[a+68>>2]|0)){k=0;return k|0}k=Ra[f[a+8>>2]&3](f[a+40>>2]|0,c,d,e,g,h,i,j,k,b,a+44|0)|0;return k|0}function jc(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,k=0;k=g<<2;i=X(k,g)|0;h=a+18704|0;g=j[h>>1]|0;d[h>>1]=(g&32768|0)==0?-32512:(g|256)&65535;f[a+5608>>2]=1;b[a+18690>>0]=2;h=Hc(i+k|0)|0;g=a+18696|0;f[g>>2]=h;if(!h){k=0;return k|0}hj(h|0,c|0,i|0)|0;hj((f[g>>2]|0)+i|0,e|0,k|0)|0;k=1;return k|0}function kc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;if(!a){g=0;return g|0}if(!(f[a+68>>2]|0)){g=0;return g|0}g=Qa[f[a+28>>2]&3](f[a+40>>2]|0,b,c,d,e,g,a+44|0)|0;return g|0}function lc(a,b){a=a|0;b=b|0;if(!a){b=0;return b|0}b=Ma[f[a+36>>2]&63](f[a+40>>2]|0,b,a+44|0)|0;return b|0}function mc(a){a=a|0;if(!a)return;ij(a|0,0,8248)|0;f[a+8200>>2]=-1;f[a+8204>>2]=-1;f[a+8248>>2]=0;return}function nc(a){a=a|0;if(!a)return;ij(a|0,0,18708)|0;f[a+5592>>2]=6;f[a+18684>>2]=0;f[a+5596>>2]=64;f[a+5600>>2]=64;f[a+44>>2]=0;f[a+5612>>2]=-1;f[a+18188>>2]=1;f[a+18192>>2]=1;b[a+18688>>0]=0;f[a+18196>>2]=-1;f[a+18200>>2]=-1;n[a+4792>>2]=0.0;f[a+4788>>2]=0;f[a+20>>2]=0;f[a+24>>2]=0;f[a+28>>2]=0;f[a+18692>>2]=0;return}function oc(a,b,c){a=a|0;b=b|0;c=c|0;if(!a){c=0;return c|0}f[a+56>>2]=b;f[a+44>>2]=c;c=1;return c|0}function pc(a,b,c){a=a|0;b=b|0;c=c|0;if(!a){c=0;return c|0}f[a+64>>2]=b;f[a+52>>2]=c;c=1;return c|0}function qc(a,b,c){a=a|0;b=b|0;c=c|0;if(!a){c=0;return c|0}f[a+60>>2]=b;f[a+48>>2]=c;c=1;return c|0}function rc(a,b){a=a|0;b=b|0;var c=0;c=u;u=u+16|0;if(!((a|0)!=0&(b|0)!=0)){b=0;u=c;return b|0}if(!(f[a+68>>2]|0)){Mb(a+44|0,1,4439,c)|0;b=0;u=c;return b|0}else{Ta[f[a+24>>2]&7](f[a+40>>2]|0,b);b=1;u=c;return b|0}return 0}function sc(a,b,c){a=a|0;b=b|0;c=c|0;if(!((a|0)!=0&(b|0)!=0&(c|0)!=0)){c=0;return c|0}if(f[a+68>>2]|0){c=0;return c|0}c=Na[f[a+20>>2]&63](f[a+40>>2]|0,b,c,a+44|0)|0;return c|0}function tc(a,b,c){a=a|0;b=b|0;c=c|0;if(!((a|0)!=0&(c|0)!=0)){c=0;return c|0}if(f[a+68>>2]|0){c=0;return c|0}c=Na[f[a>>2]&63](f[a+40>>2]|0,c,b,a+44|0)|0;return c|0}function uc(a,b){a=a|0;b=b|0;var c=0;if(!a){c=0;return c|0}c=ib(b)|0;if(!c){c=0;return c|0}nb(c,a,0);ob(c,f[a+8>>2]|0,0);if(!b)pb(c,17);else kb(c,16);mb(c,18);lb(c,19);return c|0}function vc(a,b){a=a|0;b=b|0;return wc(a,1048576,b)|0}function wc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!a){d=0;return d|0}d=Xh(a,(c|0)==0?4433:4436)|0;if(!d){d=0;return d|0}a=hb(b,c)|0;if(!a){ei(d)|0;d=0;return d|0}else{nb(a,d,6);ji(d,0,2)|0;c=Vi(d)|0;ji(d,0,0)|0;ob(a,c,((c|0)<0)<<31>>31);kb(a,20);pb(a,21);mb(a,22);lb(a,23);d=a;return d|0}return 0}function xc(){return 4427}function yc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(!((c|0)!=0&((a|0)!=0&(e|0)!=0))){e=0;return e|0}if(f[a+68>>2]|0){e=0;return e|0}e=Pa[f[a+8>>2]&7](f[a+40>>2]|0,b,c,d,e,a+44|0)|0;return e|0}function zc(a,b,c){a=a|0;b=b|0;c=c|0;c=Qi(a,1,b,c)|0;return (c|0?c:-1)|0}function Ac(a,b,c){a=a|0;b=b|0;c=c|0;return Mh(a,1,b,c)|0}function Bc(a,b,c){a=a|0;b=b|0;c=c|0;c=(ji(c,a,1)|0)==0;I=c?b:-1;return (c?a:-1)|0}function Cc(a,b,c){a=a|0;b=b|0;c=c|0;return (ji(c,a,0)|0)==0|0}function Dc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=c+4|0;e=f[d>>2]|0;c=(f[c>>2]|0)+(f[c+8>>2]|0)-e|0;if(!c){e=-1;return e|0}b=c>>>0>b>>>0?b:c;hj(a|0,e|0,b|0)|0;f[d>>2]=(f[d>>2]|0)+b;e=b;return e|0}function Ec(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0;j=c+4|0;d=f[j>>2]|0;h=c+8|0;e=f[h>>2]|0;i=d-(f[c>>2]|0)|0;g=(e|0)==0?1:e;while(1)if((g-i|0)>>>0>>0)g=g<<1;else break;if((g|0)!=(e|0)){d=Hc(g)|0;if(!d){j=-1;return j|0}e=f[c>>2]|0;if(e|0){hj(d|0,e|0,i|0)|0;Mc(f[c>>2]|0)}f[c>>2]=d;d=d+i|0;f[j>>2]=d;f[h>>2]=g}hj(d|0,a|0,b|0)|0;f[j>>2]=(f[j>>2]|0)+b;j=b;return j|0}function Fc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0;e=c+4|0;g=f[e>>2]|0;c=(f[c>>2]|0)+(f[c+8>>2]|0)-g|0;d=((c|0)<0)<<31>>31;if(!c){e=-1;g=-1;I=e;return g|0}h=(d|0)>(b|0)|(d|0)==(b|0)&c>>>0>a>>>0;f[e>>2]=g+a;e=h?b:d;g=h?a:c;I=e;return g|0}function Gc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=f[c+8>>2]|0;f[c+4>>2]=(f[c>>2]|0)+(0>(b|0)|0==(b|0)&d>>>0>a>>>0?a:d);return 1}function Hc(a){a=a|0;if(!a)a=0;else a=sh(a)|0;return a|0}function Ic(a,b){a=a|0;b=b|0;if((a|0)==0|(b|0)==0){b=0;return b|0}b=uh(a,b)|0;return b|0}function Jc(a){a=a|0;var b=0,c=0;c=u;u=u+16|0;b=c;do if(a)if(!(zh(b,16,a)|0)){a=f[b>>2]|0;break}else{f[b>>2]=0;a=0;break}else a=0;while(0);u=c;return a|0}function Kc(a){a=a|0;th(a);return}function Lc(a,b){a=a|0;b=b|0;if(!b)a=0;else a=vh(a,b)|0;return a|0}function Mc(a){a=a|0;th(a);return}function Nc(a){a=a|0;var b=0,c=0;b=696;while(1){c=f[b>>2]|0;if((c|0)==-1|(c|0)==(a|0))break;else b=b+12|0}return b+4|0}function Oc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0))return;f[a+172>>2]=f[b+4>>2];f[a+168>>2]=f[b>>2];return}function Pc(){var a=0,c=0;a=Ic(1,208)|0;if(!a){a=0;return a|0}f[a>>2]=0;c=a+184|0;b[c>>0]=b[c>>0]&-3;c=Hc(1e3)|0;f[a+44>>2]=c;if(!c){Qc(a);c=0;return c|0}f[a+48>>2]=1e3;c=ig()|0;f[a+192>>2]=c;if(!c){Qc(a);c=0;return c|0}c=ig()|0;f[a+188>>2]=c;if(c|0){c=a;return c|0}Qc(a);c=0;return c|0}function Qc(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0;if(!a)return;if(!(f[a>>2]|0)){c=a+36|0;d=f[c>>2]|0;if(d|0){Mc(d);f[c>>2]=0}c=a+24|0;d=f[c>>2]|0;if(d|0){Mc(d);f[c>>2]=0;f[a+28>>2]=0}c=a+44|0;d=f[c>>2]|0;if(d|0){Mc(d);f[c>>2]=0;f[a+48>>2]=0}}else{c=a+12|0;d=f[c>>2]|0;if(d|0){Rc(d);Mc(f[c>>2]|0);f[c>>2]=0}c=a+16|0;d=f[c>>2]|0;if(d|0){Mc(d);f[c>>2]=0;f[a+20>>2]=0}}Qf(f[a+204>>2]|0);c=a+88|0;h=a+164|0;d=f[h>>2]|0;if(d|0){g=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;if(g){e=0;while(1){Rc(d);e=e+1|0;if((e|0)==(g|0))break;else d=d+5640|0}d=f[h>>2]|0}Mc(d);f[h>>2]=0}h=a+124|0;d=f[h>>2]|0;if(d|0){i=a+120|0;e=f[i>>2]|0;if(e){g=0;while(1){d=f[d+(g<<3)>>2]|0;if(d){Mc(d);e=f[i>>2]|0}d=g+1|0;if(d>>>0>=e>>>0)break;g=d;d=f[h>>2]|0}d=f[h>>2]|0}f[i>>2]=0;Mc(d);f[h>>2]=0}i=a+144|0;Mc(f[i>>2]|0);f[i>>2]=0;f[a+128>>2]=0;i=a+108|0;Mc(f[i>>2]|0);f[i>>2]=0;if(!(b[a+184>>0]&2)){i=a+176|0;Mc(f[i>>2]|0);f[i>>2]=0}d=c+100|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));i=a+188|0;jg(f[i>>2]|0);f[i>>2]=0;jg(f[a+192>>2]|0);f[i>>2]=0;i=a+196|0;Sc(f[i>>2]|0);f[i>>2]=0;i=a+80|0;Qb(f[i>>2]|0);f[i>>2]=0;i=a+84|0;Qb(f[i>>2]|0);f[i>>2]=0;Mc(a);return}function Rc(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0;if(!a)return;e=a+5164|0;b=f[e>>2]|0;if(b|0){g=a+5160|0;c=f[g>>2]|0;if(c){d=0;while(1){b=f[b+(d<<3)>>2]|0;if(b){Mc(b);c=f[g>>2]|0}b=d+1|0;if(b>>>0>=c>>>0)break;d=b;b=f[e>>2]|0}b=f[e>>2]|0}f[g>>2]=0;Mc(b);f[e>>2]=0}b=a+5172|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}b=a+5584|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}b=a+5608|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}b=a+5604|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}b=a+5624|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0;f[a+5632>>2]=0;f[a+5628>>2]=0}i=a+5612|0;b=f[i>>2]|0;if(b|0){h=a+5616|0;c=f[h>>2]|0;if(c){g=0;while(1){d=b+12|0;e=f[d>>2]|0;if(e){Mc(e);f[d>>2]=0;c=f[h>>2]|0}g=g+1|0;if(g>>>0>=c>>>0)break;else b=b+20|0}b=f[i>>2]|0}Mc(b);f[i>>2]=0}b=a+5600|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}b=a+5592|0;c=f[b>>2]|0;if(!c)return;Mc(c);f[b>>2]=0;f[a+5596>>2]=0;return}function Sc(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;if(!a)return;b=a+28|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}g=a+40|0;b=f[g>>2]|0;if(b|0){e=a+36|0;if(f[e>>2]|0){d=0;do{c=f[b+(d*40|0)+36>>2]|0;if(c){Mc(c);b=f[g>>2]|0;f[b+(d*40|0)+36>>2]=0}c=f[b+(d*40|0)+16>>2]|0;if(c){Mc(c);b=f[g>>2]|0;f[b+(d*40|0)+16>>2]=0}c=f[b+(d*40|0)+24>>2]|0;if(c){Mc(c);b=f[g>>2]|0;f[b+(d*40|0)+24>>2]=0}d=d+1|0}while(d>>>0<(f[e>>2]|0)>>>0)}Mc(b);f[g>>2]=0}Mc(a);return}function Tc(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,o=0,q=0.0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0.0;ia=u;u=u+320|0;ha=ia+296|0;ga=ia+288|0;fa=ia+280|0;ea=ia+272|0;da=ia+264|0;ca=ia+256|0;ba=ia+248|0;aa=ia+240|0;V=ia+232|0;U=ia+224|0;T=ia+216|0;S=ia+208|0;R=ia+200|0;Q=ia+192|0;P=ia+184|0;v=ia+176|0;t=ia+168|0;s=ia+160|0;r=ia+152|0;o=ia+144|0;I=ia+136|0;H=ia+128|0;N=ia+112|0;G=ia+104|0;F=ia+96|0;E=ia+88|0;D=ia+80|0;C=ia+72|0;A=ia+64|0;z=ia+56|0;y=ia+48|0;x=ia+32|0;w=ia+24|0;m=ia+16|0;k=ia+8|0;i=ia;L=ia+309|0;M=ia+300|0;if(!((a|0)!=0&(c|0)!=0&(e|0)!=0)){ha=0;u=ia;return ha|0}$=c+5592|0;h=f[$>>2]|0;if((h+-1|0)>>>0>32){f[i>>2]=h;f[i+4>>2]=33;Mb(g,1,4599,i)|0;ha=0;u=ia;return ha|0}Z=a+112|0;f[Z>>2]=1;_=a+116|0;f[_>>2]=1;K=c+18704|0;do if(!(d[K>>1]|0)){switch(f[c+18676>>2]|0){case 1:{h=1041666;i=1302083;j=3;Y=8;break}case 2:{h=520833;i=651041;j=3;Y=8;break}case 3:{h=1041666;i=1302083;j=4;Y=8;break}default:i=0}if((Y|0)==8){d[K>>1]=j;f[c+18700>>2]=i;f[c+18680>>2]=h;i=1}h=f[c+18684>>2]|0;a:do if((h|0)<4){switch(h|0){case 3:break;default:{Y=13;break a}}h=3;Y=12}else{if((h|0)<33024)switch(h|0){case 4:{h=4;Y=12;break a}default:{Y=13;break a}}switch(h|0){case 33024:break;default:{Y=13;break a}}h=-32512;Y=12}while(0);if((Y|0)==12)d[K>>1]=h;else if((Y|0)==13?(i|0)==0:0)break;Mb(g,2,4655,k)|0}while(0);B=c+18700|0;h=f[B>>2]|0;do if((h|0)<1){q=+n[c+4792+((f[c+4788>>2]|0)+-1<<2)>>2];if(q>0.0){W=f[e+24>>2]|0;m=X(f[W+8>>2]|0,f[e+16>>2]|0)|0;m=X(m,f[W+12>>2]|0)|0;ja=+((X(m,f[W+24>>2]|0)|0)>>>0);W=~~+J(+(ja/(q*8.0*+((f[W>>2]|0)>>>0)*+((f[W+4>>2]|0)>>>0))));f[B>>2]=W;break}else{f[B>>2]=0;break}}else{l=f[e+24>>2]|0;W=X(f[l+8>>2]|0,f[e+16>>2]|0)|0;W=X(W,f[l+12>>2]|0)|0;q=+((X(W,f[l+24>>2]|0)|0)>>>0);h=X(h<<3,f[l>>2]|0)|0;q=q/+((X(h,f[l+4>>2]|0)|0)>>>0);l=c+4788|0;h=f[l>>2]|0;if(h|0){k=0;i=0;do{j=c+4792+(k<<2)|0;if(+n[j>>2]>2]=q;i=1;h=f[l>>2]|0}k=k+1|0}while(k>>>0>>0);if(i|0)Mb(g,2,4792,m)|0}}while(0);h=d[K>>1]|0;b:do if((h+-3&65535)>=4){if(h<<16>>16==7){Mb(g,2,6952,o)|0;d[K>>1]=0;break}if((h+-256&65535)<524){Mb(g,2,7007,r)|0;d[K>>1]=0;break}if((h+-1024&65535)<1180){Mb(g,2,7055,s)|0;d[K>>1]=0;break}if(h<<16>>16<=-1)switch(h<<16>>16){case -32512:break b;case -32768:{Mb(g,2,7097,t)|0;d[K>>1]=0;break b}default:{Mb(g,2,7185,v)|0;d[K>>1]=0;break b}}}else{if((h+-5&65535)<2){Mb(g,2,4884,w)|0;d[K>>1]=0;break}f[c>>2]=0;f[c+12>>2]=1;f[c+16>>2]=1;b[c+18689>>0]=67;b[c+18688>>0]=1;f[c+4>>2]=0;f[c+8>>2]=0;f[c+18180>>2]=0;f[c+18184>>2]=0;f[c+5596>>2]=32;f[c+5600>>2]=32;f[c+5604>>2]=0;f[c+5612>>2]=-1;f[c+18188>>2]=1;f[c+18192>>2]=1;f[c+5608>>2]=1;i=c+4788|0;j=f[i>>2]|0;if((j|0)>1){ja=+n[c+4792+(j+-1<<2)>>2];f[x>>2]=j;p[x+8>>3]=ja;Mb(g,2,4946,x)|0;f[c+4792>>2]=f[c+4792+((f[i>>2]|0)+-1<<2)>>2];f[i>>2]=1;h=d[K>>1]|0}c:do switch(h<<16>>16){case 3:{h=f[$>>2]|0;if((h|0)>6){f[y>>2]=h+1;Mb(g,2,5119,y)|0;f[$>>2]=6;h=6}break}case 4:{h=f[$>>2]|0;if((h|0)<2){f[z>>2]=h+1;Mb(g,2,5265,z)|0;f[$>>2]=1;h=1;break c}if((h|0)>7){f[A>>2]=h+1;Mb(g,2,5419,A)|0;f[$>>2]=7;h=7}break}default:h=f[$>>2]|0}while(0);i=c+40|0;f[i>>2]=f[i>>2]|1;i=c+5620|0;f[i>>2]=h+-1;if((h|0)>1){h=0;do{f[c+5624+(h<<2)>>2]=256;f[c+5756+(h<<2)>>2]=256;h=h+1|0}while((h|0)<(f[i>>2]|0))}f[c+44>>2]=4;if((d[K>>1]|0)==4){h=f[$>>2]|0;f[c+96>>2]=1;f[c+48>>2]=0;f[c+52>>2]=0;f[c+56>>2]=1;W=h+-1|0;f[c+60>>2]=W;f[c+64>>2]=3;f[c+80>>2]=4;f[c+244>>2]=1;f[c+196>>2]=W;f[c+200>>2]=0;f[c+204>>2]=1;f[c+208>>2]=h;f[c+212>>2]=3;f[c+228>>2]=4;h=2}else h=0;f[c+4784>>2]=h;f[c+20>>2]=1;h=f[B>>2]|0;if((h|0)>=1){if((h|0)>1302083){Mb(g,2,5722,D)|0;f[B>>2]=1302083}}else{f[B>>2]=1302083;Mb(g,2,5573,C)|0}h=c+18680|0;i=f[h>>2]|0;if((i|0)>=1){if((i|0)>1041666){Mb(g,2,6044,F)|0;f[h>>2]=1041666}}else{f[h>>2]=1041666;Mb(g,2,5895,E)|0}h=f[e+16>>2]|0;i=f[e+24>>2]|0;k=f[i+8>>2]|0;j=X(k,h)|0;m=f[i+12>>2]|0;j=X(j,m)|0;ja=+((X(j,f[i+24>>2]|0)|0)>>>0);j=X(f[B>>2]<<3,f[i>>2]|0)|0;ja=ja/+((X(j,f[i+4>>2]|0)|0)>>>0);n[c+4792>>2]=ja;j=d[K>>1]|0;d:do if((h|0)==3){h=f[i+28>>2]|0;l=f[i+32>>2]|0;if(!(l|(h|0)!=12)){h=f[i+80>>2]|0;l=f[i+84>>2]|0;if(!(l|(h|0)!=12)){h=f[i+132>>2]|0;i=f[i+136>>2]|0;if(!(i|(h|0)!=12))switch(j<<16>>16){case 3:{if(!(k>>>0>2048|m>>>0>1080))break b;f[H>>2]=k;f[H+4>>2]=m;Mb(g,2,6616,H)|0;break d}case 4:{if(!(k>>>0>4096|m>>>0>2160))break b;f[I>>2]=k;f[I+4>>2]=m;Mb(g,2,6787,I)|0;break d}default:break b}else{m=2;l=i}}else m=1}else m=0;b[L>>0]=b[6383]|0;b[L+1>>0]=b[6384]|0;b[L+2>>0]=b[6385]|0;b[L+3>>0]=b[6386]|0;b[L+4>>0]=b[6387]|0;b[L+5>>0]=b[6388]|0;b[L+6>>0]=b[6389]|0;i=M;j=6390;k=i+9|0;do{b[i>>0]=b[j>>0]|0;i=i+1|0;j=j+1|0}while((i|0)<(k|0));f[N>>2]=m;f[N+4>>2]=h;f[N+8>>2]=l|0?L:M;Mb(g,2,6399,N)|0}else{f[G>>2]=h;Mb(g,2,6217,G)|0}while(0);d[K>>1]=0}while(0);f[a+168>>2]=f[c+18680>>2];W=a+88|0;d[W>>1]=d[K>>1]|0;N=a+181|0;L=b[N>>0]&-2|f[c+20>>2]&1;b[N>>0]=L;M=c+24|0;L=(f[M>>2]&255)<<1&2|L&-3;b[N>>0]=L;b[N>>0]=L&-5|(f[c+28>>2]&255)<<2&4;do if(f[M>>2]|0?(O=c+32|0,f[O>>2]|0):0){h=X((f[c+4788>>2]|0)*12|0,f[$>>2]|0)|0;i=Hc(h)|0;f[a+176>>2]=i;if(i|0){hj(i|0,f[O>>2]|0,h|0)|0;break}Mb(g,1,7244,P)|0;ha=0;u=ia;return ha|0}while(0);k=a+100|0;f[k>>2]=f[c+12>>2];l=a+104|0;f[l>>2]=f[c+16>>2];j=a+92|0;f[j>>2]=f[c+4>>2];m=a+96|0;f[m>>2]=f[c+8>>2];i=c+36|0;h=f[i>>2]|0;do if(!h){h=xc()|0;i=Hc((Kh(h)|0)+29|0)|0;f[a+108>>2]=i;if(i|0){f[S>>2]=7421;f[S+4>>2]=h;Li(i,7416,S)|0;break}Mb(g,1,7370,R)|0;ha=0;u=ia;return ha|0}else{h=Hc((Kh(h)|0)+1|0)|0;f[a+108>>2]=h;if(h|0){Ji(h,f[i>>2]|0)|0;break}Mb(g,1,7316,Q)|0;ha=0;u=ia;return ha|0}while(0);h=(f[e+8>>2]|0)-(f[j>>2]|0)|0;if(!(f[c>>2]|0)){f[k>>2]=h;f[l>>2]=(f[e+12>>2]|0)-(f[m>>2]|0)}else{S=f[k>>2]|0;f[Z>>2]=(h+-1+S|0)/(S|0)|0;S=f[l>>2]|0;f[_>>2]=((f[e+12>>2]|0)+-1-(f[m>>2]|0)+S|0)/(S|0)|0}if(b[c+18688>>0]|0){b[a+180>>0]=b[c+18689>>0]|0;b[N>>0]=b[N>>0]|8}S=Ic(X(f[_>>2]|0,f[Z>>2]|0)|0,5640)|0;M=a+164|0;f[M>>2]=S;if(!S){Mb(g,1,7450,T)|0;ha=0;u=ia;return ha|0}L=c+4784|0;A=f[L>>2]|0;do if(A|0){w=c+48|0;B=f[$>>2]|0;C=f[e+16>>2]|0;D=f[c+4788>>2]|0;E=X(C,B)|0;F=Ic(X(E,D)|0,4)|0;if(!F){Mb(g,1,7504,U)|0;break}h=f[w>>2]|0;r=c+60|0;j=f[r>>2]|0;if(h>>>0>>0){o=X(h,C)|0;s=c+52|0;t=c+64|0;v=c+56|0;i=f[t>>2]|0;while(1){k=f[s>>2]|0;if(k>>>0>>0){m=k+o|0;j=f[v>>2]|0;while(1){if(!j)j=0;else{i=m;l=0;while(1){f[F+(i<<2)>>2]=1;l=l+1|0;j=f[v>>2]|0;if(l>>>0>=j>>>0)break;else i=i+E|0}i=f[t>>2]|0}k=k+1|0;if(k>>>0>=i>>>0)break;else m=m+1|0}j=f[r>>2]|0}h=h+1|0;if(h>>>0>=j>>>0)break;else o=o+C|0}}if(A>>>0>1){t=1;do{h=w;w=w+148|0;x=f[h+8>>2]|0;v=h+156|0;l=f[v>>2]|0;x=l>>>0>x>>>0?x:0;i=f[w>>2]|0;y=h+160|0;j=f[y>>2]|0;if(i>>>0>>0){o=X(i,C)|0;z=h+152|0;r=h+164|0;s=X(x,E)|0;h=f[r>>2]|0;while(1){k=f[z>>2]|0;if(k>>>0>>0){m=k+o|0;while(1){if(x>>>0>>0){h=m+s|0;j=x;while(1){f[F+(h<<2)>>2]=1;j=j+1|0;l=f[v>>2]|0;if(j>>>0>=l>>>0)break;else h=h+E|0}h=f[r>>2]|0}k=k+1|0;if(k>>>0>=h>>>0)break;else m=m+1|0}j=f[y>>2]|0}i=i+1|0;if(i>>>0>=j>>>0)break;else o=o+C|0}}t=t+1|0}while((t|0)!=(A|0))}if(!((D|0)==0|(B|0)==0|(C|0)==0)){h=0;m=0;o=0;while(1){j=0;l=m;while(1){k=0;i=l;while(1){h=h|(f[F+(i<<2)>>2]|0)!=1;k=k+1|0;if((k|0)==(C|0))break;else i=i+1|0}j=j+1|0;if((j|0)==(B|0))break;else l=l+C|0}o=o+1|0;if((o|0)==(D|0))break;else m=m+E|0}if(h|0)Mb(g,1,7552,V)|0}Mc(F)}while(0);e:do if(X(f[_>>2]|0,f[Z>>2]|0)|0){x=c+4788|0;y=c+40|0;z=c+44|0;A=c+18690|0;B=e+16|0;i=c+18696|0;C=e+24|0;D=c+5596|0;E=c+5600|0;F=c+5604|0;G=c+5608|0;H=c+5612|0;I=c+5616|0;K=c+5620|0;w=0;f:while(1){o=f[M>>2]|0;r=o+(w*5640|0)|0;V=f[x>>2]|0;j=o+(w*5640|0)+8|0;f[j>>2]=V;g:do if(V|0){if(((d[W>>1]|0)+-3&65535)<4)h=0;else{h=0;while(1){V=(b[N>>0]&4)==0;f[(V?o+(w*5640|0)+20+(h<<2)|0:o+(w*5640|0)+5184+(h<<2)|0)>>2]=f[(V?c+4792+(h<<2)|0:c+5192+(h<<2)|0)>>2];h=h+1|0;if(h>>>0>=(f[j>>2]|0)>>>0)break g}}do{if(b[N>>0]&4)f[o+(w*5640|0)+5184+(h<<2)>>2]=f[c+5192+(h<<2)>>2];f[o+(w*5640|0)+20+(h<<2)>>2]=f[c+4792+(h<<2)>>2];h=h+1|0}while(h>>>0<(f[j>>2]|0)>>>0)}while(0);f[r>>2]=f[y>>2];f[o+(w*5640|0)+4>>2]=f[z>>2];m=o+(w*5640|0)+16|0;f[m>>2]=b[A>>0];h=o+(w*5640|0)+5636|0;j=b[h>>0]|0;b[h>>0]=j&-5;if(!(f[L>>2]|0))h=0;else{b[h>>0]=j|4;k=f[L>>2]|0;if(!k)h=0;else{l=w+1|0;h=0;j=0;do{if((l|0)==(f[c+48+(j*148|0)+48>>2]|0)){f[o+(w*5640|0)+424+(h*148|0)>>2]=f[c+48+(h*148|0)>>2];f[o+(w*5640|0)+424+(h*148|0)+4>>2]=f[c+48+(h*148|0)+4>>2];f[o+(w*5640|0)+424+(h*148|0)+8>>2]=f[c+48+(h*148|0)+8>>2];f[o+(w*5640|0)+424+(h*148|0)+12>>2]=f[c+48+(h*148|0)+12>>2];f[o+(w*5640|0)+424+(h*148|0)+16>>2]=f[c+48+(h*148|0)+16>>2];f[o+(w*5640|0)+424+(h*148|0)+32>>2]=f[c+48+(h*148|0)+32>>2];f[o+(w*5640|0)+424+(h*148|0)+48>>2]=f[c+48+(h*148|0)+48>>2];h=h+1|0}j=j+1|0}while(j>>>0>>0)}h=h+-1|0}f[o+(w*5640|0)+420>>2]=h;V=Ic(f[B>>2]|0,1080)|0;v=o+(w*5640|0)+5584|0;f[v>>2]=V;if(!V){Y=141;break}do if(f[i>>2]|0){j=f[B>>2]|0;j=X(j<<2,j)|0;k=Hc(j)|0;l=(f[i>>2]|0)+j|0;if(!k){Y=144;break f}f[m>>2]=2;h=Hc(j)|0;f[o+(w*5640|0)+5608>>2]=h;if(!h){Y=146;break f}hj(h|0,f[i>>2]|0,j|0)|0;hj(k|0,f[i>>2]|0,j|0)|0;h=Hc(j)|0;j=o+(w*5640|0)+5604|0;f[j>>2]=h;if(!h){Y=148;break f}if(!(Ng(k,h,f[B>>2]|0)|0)){Y=150;break f}h=Hc(f[B>>2]<<3)|0;f[o+(w*5640|0)+5600>>2]=h;if(!h){Y=152;break f}Af(h,f[B>>2]|0,f[j>>2]|0);Mc(k);j=f[B>>2]|0;if(j|0){k=f[v>>2]|0;h=0;do{f[k+(h*1080|0)+1076>>2]=f[l+(h<<2)>>2];h=h+1|0}while(h>>>0>>0)}if(!(Uc(r,e)|0)){Y=158;break f}if(f[B>>2]|0){r=0;Y=172}}else{h:do if((f[m>>2]|0)==1){h=f[B>>2]|0;if(h>>>0<=2){k=h;break}j=f[C>>2]|0;h=f[j>>2]|0;do if((h|0)==(f[j+52>>2]|0)){if((h|0)!=(f[j+104>>2]|0))break;h=f[j+4>>2]|0;if((h|0)!=(f[j+56>>2]|0))break;if((h|0)==(f[j+108>>2]|0)){Y=166;break h}}while(0);Mb(g,2,7948,ha)|0;f[m>>2]=0;Y=166}else Y=166;while(0);if((Y|0)==166){Y=0;k=f[B>>2]|0}if(!k)break;j=f[C>>2]|0;h=0;do{if(!(f[j+(h*52|0)+32>>2]|0))f[(f[v>>2]|0)+(h*1080|0)+1076>>2]=1<<(f[j+(h*52|0)+24>>2]|0)+-1;h=h+1|0}while(h>>>0>>0);r=0;Y=172}while(0);if((Y|0)==172)while(1){Y=0;s=f[v>>2]|0;t=s+(r*1080|0)|0;k=f[y>>2]&1;f[t>>2]=k;l=f[$>>2]|0;m=s+(r*1080|0)+4|0;f[m>>2]=l;h=f[D>>2]|0;if((h|0)>1){j=h;h=0;while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}else h=0;f[s+(r*1080|0)+8>>2]=h;h=f[E>>2]|0;if((h|0)>1){j=h;h=0;while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}else h=0;f[s+(r*1080|0)+12>>2]=h;f[s+(r*1080|0)+16>>2]=f[F>>2];V=f[G>>2]|0;f[s+(r*1080|0)+20>>2]=(V|0)==0&1;f[s+(r*1080|0)+24>>2]=V|0?2:0;f[s+(r*1080|0)+804>>2]=2;if((r|0)==(f[H>>2]|0))h=f[I>>2]|0;else h=0;f[s+(r*1080|0)+808>>2]=h;do if(!k){if(!l)break;else h=0;do{f[s+(r*1080|0)+812+(h<<2)>>2]=15;f[s+(r*1080|0)+944+(h<<2)>>2]=15;h=h+1|0}while(h>>>0<(f[m>>2]|0)>>>0)}else{if((l|0)>0)o=0;else break;while(1){m=l;l=l+-1|0;h=f[K>>2]|0;do if((o|0)<(h|0)){h=f[c+5624+(o<<2)>>2]|0;do if((h|0)<1)h=1;else{if((h|0)==1){h=0;break}else{j=h;h=0}while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}while(0);f[s+(r*1080|0)+812+(l<<2)>>2]=h;h=f[c+5756+(o<<2)>>2]|0;if((h|0)<1){h=1;break}if((h|0)==1){h=0;break}else{j=h;h=0}while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}else{V=h+-1|0;j=o-V|0;h=f[c+5624+(V<<2)>>2]>>j;j=f[c+5756+(V<<2)>>2]>>j;do if((h|0)<1)h=1;else{if((h|0)==1){h=0;break}else{k=h;h=0}while(1){h=h+1|0;if(k>>>0>3)k=k>>>1;else break}}while(0);f[s+(r*1080|0)+812+(l<<2)>>2]=h;if((j|0)<1){h=1;break}if((j|0)==1){h=0;break}else h=0;while(1){h=h+1|0;if(j>>>0>3)j=j>>>1;else break}}while(0);f[s+(r*1080|0)+944+(l<<2)>>2]=h;if((m|0)<=1)break;else o=o+1|0}}while(0);Ig(t,f[(f[C>>2]|0)+(r*52|0)+24>>2]|0);r=r+1|0;if(r>>>0>=(f[B>>2]|0)>>>0)break;else Y=172}w=w+1|0;if(w>>>0>=(X(f[_>>2]|0,f[Z>>2]|0)|0)>>>0)break e}if((Y|0)==141){Mb(g,1,7591,aa)|0;ha=0;u=ia;return ha|0}else if((Y|0)==144){Mb(g,1,7655,ba)|0;ha=0;u=ia;return ha|0}else if((Y|0)==146){Mc(k);Mb(g,1,7698,ca)|0;ha=0;u=ia;return ha|0}else if((Y|0)==148){Mc(k);Mb(g,1,7756,da)|0;ha=0;u=ia;return ha|0}else if((Y|0)==150){Mc(k);Mb(g,1,7816,ea)|0;ha=0;u=ia;return ha|0}else if((Y|0)==152){Mc(k);Mb(g,1,7864,fa)|0;ha=0;u=ia;return ha|0}else if((Y|0)==158){Mb(g,1,7914,ga)|0;ha=0;u=ia;return ha|0}}else i=c+18696|0;while(0);h=f[i>>2]|0;if(!h){ha=1;u=ia;return ha|0}Mc(h);f[i>>2]=0;ha=1;u=ia;return ha|0}function Uc(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0;if((f[a+16>>2]|0)!=2){a=1;return a|0}l=a+5604|0;r=a+5616|0;e=f[r>>2]|0;m=a+5620|0;do if(f[l>>2]|0){do if((e|0)==(f[m>>2]|0)){e=e+10|0;f[m>>2]=e;d=a+5612|0;e=Lc(f[d>>2]|0,e*20|0)|0;if(e|0){f[d>>2]=e;q=f[r>>2]|0;ij(e+(q*20|0)|0,0,((f[m>>2]|0)-q|0)*20|0)|0;e=f[r>>2]|0;break}Mc(f[d>>2]|0);f[d>>2]=0;f[m>>2]=0;f[r>>2]=0;a=0;return a|0}else d=a+5612|0;while(0);j=f[d>>2]|0;g=j+(e*20|0)|0;k=j+(e*20|0)+12|0;d=f[k>>2]|0;if(d|0){Mc(d);f[k>>2]=0}f[j+(e*20|0)+8>>2]=1;f[j+(e*20|0)+4>>2]=1;f[g>>2]=2;d=f[c+16>>2]|0;d=X(d,d)|0;h=d<<2;i=Hc(h)|0;f[k>>2]=i;if(!i){a=0;return a|0}else{Ua[f[768+(f[g>>2]<<2)>>2]&15](f[l>>2]|0,i,d);f[j+(e*20|0)+16>>2]=h;e=(f[r>>2]|0)+1|0;f[r>>2]=e;h=2;break}}else{h=1;g=0}while(0);do if((e|0)==(f[m>>2]|0)){e=e+10|0;f[m>>2]=e;d=a+5612|0;e=Lc(f[d>>2]|0,e*20|0)|0;if(e|0){f[d>>2]=e;q=f[r>>2]|0;e=e+(q*20|0)|0;ij(e|0,0,((f[m>>2]|0)-q|0)*20|0)|0;g=(g|0)==0?0:e+-20|0;e=f[r>>2]|0;break}Mc(f[d>>2]|0);f[d>>2]=0;f[m>>2]=0;f[r>>2]=0;a=0;return a|0}else d=a+5612|0;while(0);m=f[d>>2]|0;q=m+(e*20|0)|0;o=m+(e*20|0)+12|0;d=f[o>>2]|0;if(d|0){Mc(d);f[o>>2]=0}p=h+1|0;f[m+(e*20|0)+8>>2]=h;f[m+(e*20|0)+4>>2]=2;f[q>>2]=2;c=c+16|0;j=f[c>>2]|0;k=j<<2;l=Hc(k)|0;f[o>>2]=l;if(!l){a=0;return a|0}l=Hc(k)|0;if(!l){Mc(f[o>>2]|0);f[o>>2]=0;a=0;return a|0}if(j|0){d=0;h=f[a+5584>>2]|0;i=l;while(1){n[i>>2]=+(f[h+1076>>2]|0);d=d+1|0;if((d|0)==(j|0))break;else{h=h+1080|0;i=i+4|0}}}Ua[f[768+(f[q>>2]<<2)>>2]&15](l,f[o>>2]|0,j);Mc(l);f[m+(e*20|0)+16>>2]=k;f[r>>2]=(f[r>>2]|0)+1;i=a+5628|0;d=f[i>>2]|0;h=a+5632|0;do if((d|0)==(f[h>>2]|0)){d=d+10|0;f[h>>2]=d;e=a+5624|0;d=Lc(f[e>>2]|0,d*20|0)|0;if(d|0){f[e>>2]=d;a=f[i>>2]|0;ij(d+(a*20|0)|0,0,((f[h>>2]|0)-a|0)*20|0)|0;d=f[i>>2]|0;break}Mc(f[e>>2]|0);f[e>>2]=0;f[h>>2]=0;f[i>>2]=0;a=0;return a|0}else e=a+5624|0;while(0);a=f[e>>2]|0;f[a+(d*20|0)+8>>2]=g;r=a+(d*20|0)+16|0;b[r>>0]=b[r>>0]|1;f[a+(d*20|0)+4>>2]=f[c>>2];f[a+(d*20|0)>>2]=p;f[a+(d*20|0)+12>>2]=q;f[i>>2]=(f[i>>2]|0)+1;a=1;return a|0}function Vc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){yb(b,~~+n[a>>2]>>>0,2);d=d+1|0;if((d|0)==(c|0))break;else{a=a+4|0;b=b+2|0}}return}function Wc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){yb(b,~~+n[a>>2]>>>0,4);d=d+1|0;if((d|0)==(c|0))break;else{a=a+4|0;b=b+4|0}}return}function Xc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){Cb(b,+n[a>>2]);d=d+1|0;if((d|0)==(c|0))break;else{a=a+4|0;b=b+4|0}}return}function Yc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){Ab(b,+n[a>>2]);d=d+1|0;if((d|0)==(c|0))break;else{a=a+4|0;b=b+8|0}}return}function Zc(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function _c(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;j=Sb()|0;k=b+80|0;f[k>>2]=j;if(!j){k=0;return k|0}e=b+192|0;if(kg(f[e>>2]|0,24,d)|0?kg(f[e>>2]|0,25,d)|0:0){i=f[e>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](b,a,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){Qb(f[k>>2]|0);f[k>>2]=0;k=0;return k|0}}else ng(i);e=b+188|0;if(kg(f[e>>2]|0,26,d)|0?kg(f[e>>2]|0,27,d)|0:0){i=f[e>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](b,a,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){Qb(f[k>>2]|0);f[k>>2]=0;k=0;return k|0}}else ng(i);e=Sb()|0;f[c>>2]=e;if(!e){k=0;return k|0}Ub(f[k>>2]|0,e);g=X(f[b+116>>2]|0,f[b+112>>2]|0)|0;i=b+196|0;f[(f[i>>2]|0)+36>>2]=g;g=Ic(g,40)|0;e=f[i>>2]|0;f[e+40>>2]=g;if(!g){k=0;return k|0}if(!(f[e+36>>2]|0)){k=1;return k|0}h=0;while(1){f[g+(h*40|0)+28>>2]=100;f[g+(h*40|0)+20>>2]=0;k=Ic(100,24)|0;e=f[i>>2]|0;g=f[e+40>>2]|0;f[g+(h*40|0)+24>>2]=k;h=h+1|0;if(!k){e=0;g=30;break}if(h>>>0>=(f[e+36>>2]|0)>>>0){e=1;g=30;break}}if((g|0)==30)return e|0}Qb(f[k>>2]|0);f[k>>2]=0;k=0;return k|0}Qb(f[k>>2]|0);f[k>>2]=0;k=0;return k|0}function $c(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function ad(a,b,c){a=a|0;b=b|0;c=c|0;return (f[a+8>>2]|0)==0&(f[a+188>>2]|0)!=0&(f[a+192>>2]|0)!=0&1|0}function bd(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;X=u;u=u+224|0;W=X+200|0;T=X+192|0;S=X+184|0;P=X+176|0;O=X+168|0;N=X+160|0;M=X+152|0;L=X+144|0;K=X+136|0;H=X+128|0;G=X+120|0;F=X+112|0;E=X+104|0;D=X+96|0;C=X+88|0;B=X+80|0;A=X+72|0;z=X+64|0;y=X+56|0;x=X+48|0;w=X+40|0;J=X+32|0;o=X+24|0;n=X+16|0;m=X+8|0;R=X;g=X+216|0;h=X+212|0;t=X+208|0;v=X+204|0;V=a+8|0;f[V>>2]=1;a:do if((Eb(c,g,2,e)|0)==2?(zb(g,h,2),(f[h>>2]|0)==65359):0){f[V>>2]=2;l=Hb(c)|0;l=Zi(l|0,I|0,-2,-1)|0;k=I;U=a+196|0;h=f[U>>2]|0;f[h>>2]=l;f[h+4>>2]=k;h=R;f[h>>2]=l;f[h+4>>2]=k;Mb(e,4,8053,R)|0;h=f[U>>2]|0;k=f[h>>2]|0;l=h+24|0;g=f[l>>2]|0;j=h+32|0;i=f[j>>2]|0;do if((g+1|0)>>>0>i>>>0){s=~~(+(i>>>0)+100.0)>>>0;f[j>>2]=s;g=h+28|0;h=Lc(f[g>>2]|0,s*24|0)|0;if(!h){Mc(f[g>>2]|0);f[g>>2]=0;f[j>>2]=0;f[l>>2]=0;Mb(e,1,8090,m)|0;break a}else{f[g>>2]=h;g=f[l>>2]|0;break}}else h=f[h+28>>2]|0;while(0);d[h+(g*24|0)>>1]=-177;r=dj(0,k|0,32)|0;s=h+(g*24|0)+8|0;f[s>>2]=r;f[s+4>>2]=I;f[h+(g*24|0)+16>>2]=2;f[l>>2]=g+1;s=a+16|0;if((Eb(c,f[s>>2]|0,2,e)|0)!=2){Mb(e,1,8150,o)|0;W=0;u=X;return W|0}zb(f[s>>2]|0,t,2);j=f[t>>2]|0;if((j|0)!=65424){r=a+20|0;i=0;h=0;g=0;b:do{if(j>>>0<65280){Q=14;break}else k=784;while(1){l=f[k>>2]|0;m=(l|0)==0;if(m|(l|0)==(j|0))break;else k=k+12|0}if(m){Mb(e,2,8219,w)|0;q=2;c:while(1){while(1){if((Eb(c,f[s>>2]|0,2,e)|0)!=2){Q=20;break b}zb(f[s>>2]|0,R,2);j=f[R>>2]|0;if(j>>>0>=65280){p=784;break}}while(1){k=f[p>>2]|0;if((k|0)==0|(k|0)==(j|0))break;else p=p+12|0}if(!(f[p+4>>2]&f[V>>2])){Q=24;break b}if((k|0)>=65424){Q=99;break}switch(k|0){case 0:break;default:break c}q=q+2|0}if((Q|0)==99){Q=0;switch(k|0){case 65424:{Q=26;break b}default:{}}}k=f[U>>2]|0;n=Hb(c)|0;n=n-q|0;o=k+24|0;j=f[o>>2]|0;m=k+32|0;l=f[m>>2]|0;if((j+1|0)>>>0>l>>>0){l=~~(+(l>>>0)+100.0)>>>0;f[m>>2]=l;j=k+28|0;k=Lc(f[j>>2]|0,l*24|0)|0;if(!k){Q=31;break}f[j>>2]=k;j=f[o>>2]|0}else k=f[k+28>>2]|0;d[k+(j*24|0)>>1]=0;m=k+(j*24|0)+8|0;f[m>>2]=n;f[m+4>>2]=((n|0)<0)<<31>>31;f[k+(j*24|0)+16>>2]=q;f[o>>2]=j+1;k=f[p>>2]|0;f[t>>2]=k;if((k|0)==65424)break;else j=784;while(1){l=f[j>>2]|0;if((l|0)==0|(l|0)==(k|0)){m=j;break}else j=j+12|0}}else m=k;g=(l|0)==65361?1:g;h=(l|0)==65362?1:h;i=(l|0)==65372?1:i;if(!(f[m+4>>2]&f[V>>2])){Q=37;break}if((Eb(c,f[s>>2]|0,2,e)|0)!=2){Q=39;break}zb(f[s>>2]|0,v,2);k=(f[v>>2]|0)+-2|0;f[v>>2]=k;j=f[s>>2]|0;if(k>>>0>(f[r>>2]|0)>>>0){j=Lc(j,k)|0;if(!j){Q=42;break}f[s>>2]=j;k=f[v>>2]|0;f[r>>2]=k}j=Eb(c,j,k,e)|0;if((j|0)!=(f[v>>2]|0)){Q=45;break}if(!(Na[f[m+8>>2]&63](a,f[s>>2]|0,j,e)|0)){Q=47;break}l=f[U>>2]|0;n=f[m>>2]|0;o=Hb(c)|0;p=f[v>>2]|0;o=-4-p+o|0;p=p+4|0;q=l+24|0;j=f[q>>2]|0;m=l+32|0;k=f[m>>2]|0;if((j+1|0)>>>0>k>>>0){k=~~(+(k>>>0)+100.0)>>>0;f[m>>2]=k;j=l+28|0;k=Lc(f[j>>2]|0,k*24|0)|0;if(!k){Q=52;break}f[j>>2]=k;j=f[q>>2]|0}else k=f[l+28>>2]|0;d[k+(j*24|0)>>1]=n;n=k+(j*24|0)+8|0;f[n>>2]=o;f[n+4>>2]=((o|0)<0)<<31>>31;f[k+(j*24|0)+16>>2]=p;f[q>>2]=j+1;if((Eb(c,f[s>>2]|0,2,e)|0)!=2){Q=54;break}zb(f[s>>2]|0,t,2);j=f[t>>2]|0}while((j|0)!=65424);switch(Q|0){case 14:{f[J>>2]=j;Mb(e,1,8168,J)|0;W=0;u=X;return W|0}case 20:{Mb(e,1,8150,x)|0;Q=33;break}case 24:{Mb(e,1,8235,y)|0;Q=33;break}case 26:{f[t>>2]=65424;break}case 31:{Mc(f[j>>2]|0);f[j>>2]=0;f[m>>2]=0;f[o>>2]=0;Mb(e,1,8090,z)|0;Q=33;break}case 37:{Mb(e,1,8235,B)|0;W=0;u=X;return W|0}case 39:{Mb(e,1,8150,C)|0;W=0;u=X;return W|0}case 42:{Mc(f[s>>2]|0);f[s>>2]=0;f[r>>2]=0;Mb(e,1,8333,D)|0;W=0;u=X;return W|0}case 45:{Mb(e,1,8150,E)|0;W=0;u=X;return W|0}case 47:{Mb(e,1,8367,F)|0;W=0;u=X;return W|0}case 52:{Mc(f[j>>2]|0);f[j>>2]=0;f[m>>2]=0;f[q>>2]=0;Mb(e,1,8090,G)|0;W=0;u=X;return W|0}case 54:{Mb(e,1,8150,H)|0;W=0;u=X;return W|0}}if((Q|0)==33){Mb(e,1,8278,A)|0;W=0;u=X;return W|0}if(g|0){if(!h){Mb(e,1,8472,L)|0;W=0;u=X;return W|0}if(!i){Mb(e,1,8518,M)|0;W=0;u=X;return W|0}d:do if(b[a+184>>0]&1){r=a+120|0;g=f[r>>2]|0;do if(g){o=a+124|0;m=0;h=0;n=0;e:while(1){i=f[o>>2]|0;k=f[i+(n<<3)>>2]|0;if(!k)i=m;else{i=f[i+(n<<3)+4>>2]|0;j=m>>>0>>0;l=i-m|0;i=j?0:m-i|0;if(!((l|0)==0|j^1)){g=j?k+m|0:k;while(1){if(l>>>0<4){Q=72;break e}zb(g,R,4);g=g+4|0;M=l+-4|0;j=f[R>>2]|0;h=j+h|0;k=M>>>0>>0;i=k?j-M|0:i;l=k?0:M-j|0;if(!l)break;else g=k?g:g+j|0}g=f[r>>2]|0}}n=n+1|0;if(n>>>0>=g>>>0)break;else m=i}if((Q|0)==72){Mb(e,1,8564,N)|0;break}if(!i)Q=76;else Mb(e,1,8595,O)|0}else{h=0;Q=76}while(0);f:do if((Q|0)==76){i=Hc(h)|0;o=a+144|0;f[o>>2]=i;if(!i){Mb(e,1,8618,P)|0;break}p=a+132|0;f[p>>2]=h;j=f[r>>2]|0;q=a+124|0;do if(j){g=f[q>>2]|0;n=0;k=0;m=0;h=g;g:while(1){l=f[h+(n<<3)>>2]|0;if(!l)i=m;else{h=f[h+(n<<3)+4>>2]|0;g=(f[o>>2]|0)+k|0;h:do if(m>>>0>>0){hj(g|0,l|0,m|0)|0;i=h-m|0;g=k+m|0;if(!i){i=0;break}h=l+m|0;while(1){if(i>>>0<4){Q=91;break g}zb(h,R,4);k=h+4|0;j=i+-4|0;h=f[R>>2]|0;i=(f[o>>2]|0)+g|0;if(j>>>0>>0)break;hj(i|0,k|0,h|0)|0;h=f[R>>2]|0;i=j-h|0;g=h+g|0;if(!i){i=0;break h}else h=k+h|0}hj(i|0,k|0,j|0)|0;i=(f[R>>2]|0)-j|0;g=j+g|0}else{hj(g|0,l|0,h|0)|0;i=m-h|0;g=h+k|0}while(0);Mc(f[(f[q>>2]|0)+(n<<3)>>2]|0);h=f[q>>2]|0;f[h+(n<<3)>>2]=0;f[h+(n<<3)+4>>2]=0;k=g;j=f[r>>2]|0;g=h}n=n+1|0;if(n>>>0>=j>>>0){Q=93;break}else m=i}if((Q|0)==91){Mb(e,1,8564,S)|0;break f}else if((Q|0)==93){i=f[o>>2]|0;h=f[p>>2]|0;break}}else g=f[q>>2]|0;while(0);f[a+128>>2]=i;f[a+152>>2]=h;f[r>>2]=0;Mc(g);f[q>>2]=0;break d}while(0);Mb(e,1,8656,T)|0;W=0;u=X;return W|0}while(0);Mb(e,4,8682,W)|0;e=Hb(c)|0;W=(f[U>>2]|0)+8|0;f[W>>2]=e+-2;f[W+4>>2]=0;f[V>>2]=8;W=1;u=X;return W|0}}Mb(e,1,8426,K)|0;W=0;u=X;return W|0}while(0);Mb(e,1,8126,n)|0;W=0;u=X;return W|0}function cd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+16|0;F=G;D=f[a+80>>2]|0;E=a+88|0;p=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;s=f[D+16>>2]|0;q=s*1080|0;r=f[a+12>>2]|0;s=X(s<<2,s)|0;a:do if(p|0){t=r+5604|0;v=r+5620|0;w=r+5612|0;x=r+5616|0;y=r+5632|0;z=r+5624|0;A=r+5584|0;n=f[a+164>>2]|0;o=0;b:while(1){j=n+5584|0;B=f[j>>2]|0;hj(n|0,r|0,5640)|0;c=n+5636|0;b[c>>0]=b[c>>0]&-4;f[n+5168>>2]=0;c=n+5604|0;f[c>>2]=0;k=n+5620|0;f[k>>2]=0;C=n+5612|0;f[C>>2]=0;l=n+5632|0;f[l>>2]=0;m=n+5624|0;f[m>>2]=0;f[j>>2]=B;if(f[t>>2]|0){e=Hc(s)|0;f[c>>2]=e;if(!e){c=0;e=25;break}hj(e|0,f[t>>2]|0,s|0)|0}c=(f[v>>2]|0)*20|0;e=Hc(c)|0;f[C>>2]=e;if(!e){c=0;e=25;break}hj(e|0,f[w>>2]|0,c|0)|0;c=f[x>>2]|0;if(c|0){h=f[C>>2]|0;i=f[w>>2]|0;j=0;while(1){g=i+12|0;if(f[g>>2]|0){c=i+16|0;e=Hc(f[c>>2]|0)|0;f[h+12>>2]=e;if(!e){c=0;e=25;break b}hj(e|0,f[g>>2]|0,f[c>>2]|0)|0;c=f[x>>2]|0}f[k>>2]=(f[k>>2]|0)+1;j=j+1|0;if(j>>>0>=c>>>0)break;else{h=h+20|0;i=i+20|0}}}c=(f[y>>2]|0)*20|0;e=Hc(c)|0;f[m>>2]=e;if(!e){c=0;e=25;break}hj(e|0,f[z>>2]|0,c|0)|0;f[l>>2]=f[y>>2];i=f[y>>2]|0;if(i|0){h=f[z>>2]|0;e=f[m>>2]|0;g=0;while(1){c=f[h+8>>2]|0;if(c|0)f[e+8>>2]=(f[C>>2]|0)+(((c-(f[w>>2]|0)|0)/20|0)*20|0);c=f[h+12>>2]|0;if(c|0)f[e+12>>2]=(f[C>>2]|0)+(((c-(f[w>>2]|0)|0)/20|0)*20|0);g=g+1|0;if(g>>>0>=i>>>0)break;else{h=h+20|0;e=e+20|0}}}hj(B|0,f[A>>2]|0,q|0)|0;o=o+1|0;if(o>>>0>=p>>>0)break a;else n=n+5640|0}if((e|0)==25){u=G;return c|0}}while(0);e=Lf(1)|0;c=a+204|0;f[c>>2]=e;if(!e){d=0;u=G;return d|0}if(Pf(e,D,E)|0){d=1;u=G;return d|0}Qf(f[c>>2]|0);f[c>>2]=0;Mb(d,1,8019,F)|0;d=0;u=G;return d|0}function dd(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=u;u=u+112|0;z=B+88|0;w=B+80|0;x=B+72|0;v=B+64|0;r=B+56|0;q=B+48|0;m=B+40|0;k=B+32|0;j=B+24|0;g=B+16|0;s=B+100|0;t=B+96|0;y=B+92|0;f[t>>2]=0;A=a+200|0;if((d|0)!=8){Mb(e,1,11669,B)|0;Mb(e,1,11669,B+8|0)|0;A=0;u=B;return A|0}zb(c,A,2);zb(c+2|0,s,4);zb(c+6|0,y,1);zb(c+7|0,t,1);l=f[A>>2]|0;c=f[a+112>>2]|0;if(l>>>0>=(X(f[a+116>>2]|0,c)|0)>>>0){f[g>>2]=l;Mb(e,1,11695,g)|0;A=0;u=B;return A|0}d=f[a+164>>2]|0;p=(l>>>0)%(c>>>0)|0;o=(l>>>0)/(c>>>0)|0;c=f[s>>2]|0;do if((c+-1|0)>>>0<13){if((c|0)==12){f[j>>2]=12;Mb(e,2,11719,j)|0;c=f[s>>2]|0;break}f[k>>2]=c;Mb(e,1,11756,k)|0;A=0;u=B;return A|0}while(0);if(!c){Mb(e,4,11817,m)|0;f[a+72>>2]=1}c=f[t>>2]|0;do if(!c){c=f[d+(l*5640|0)+5588>>2]|0;if(c|0){i=c;n=18}}else{i=c+((h[a+76>>0]|0)>>>4&1)|0;f[t>>2]=i;d=d+(l*5640|0)+5588|0;g=f[d>>2]|0;c=f[y>>2]|0;if((g+-1|0)>>>0>>0){f[q>>2]=c;f[q+4>>2]=g;Mb(e,1,11928,q)|0;f[a+72>>2]=1;A=0;u=B;return A|0}if(c>>>0>>0){f[d>>2]=i;n=18;break}f[r>>2]=c;f[r+4>>2]=i;Mb(e,1,12027,r)|0;f[a+72>>2]=1;A=0;u=B;return A|0}while(0);if((n|0)==18?(i|0)==((f[y>>2]|0)+1|0):0){r=a+76|0;b[r>>0]=b[r>>0]|1}f[a+24>>2]=(f[a+72>>2]|0)==0?(f[s>>2]|0)+-12|0:0;f[a+8>>2]=16;c=f[a+60>>2]|0;if((c|0)==-1)if((p>>>0>=(f[a+28>>2]|0)>>>0?p>>>0<(f[a+36>>2]|0)>>>0:0)?o>>>0>=(f[a+32>>2]|0)>>>0:0)c=(o>>>0>=(f[a+40>>2]|0)>>>0&1)<<2&255;else c=4;else c=((f[A>>2]|0)!=(c|0)&1)<<2&255;j=a+76|0;b[j>>0]=b[j>>0]&-5|c;j=a+196|0;c=f[j>>2]|0;if(!c){A=1;u=B;return A|0}i=f[A>>2]|0;c=f[c+40>>2]|0;f[c+(i*40|0)>>2]=i;g=f[y>>2]|0;f[c+(i*40|0)+12>>2]=g;d=f[t>>2]|0;if(d|0){f[c+(i*40|0)+4>>2]=d;f[c+(i*40|0)+8>>2]=d;c=f[c+(i*40|0)+16>>2]|0;if(!c){z=Ic(d,24)|0;f[(f[(f[j>>2]|0)+40>>2]|0)+((f[A>>2]|0)*40|0)+16>>2]=z;if(z|0){A=1;u=B;return A|0}Mb(e,1,12135,v)|0;A=0;u=B;return A|0}c=Lc(c,d*24|0)|0;d=(f[(f[j>>2]|0)+40>>2]|0)+((f[A>>2]|0)*40|0)+16|0;if(!c){Mc(f[d>>2]|0);f[(f[(f[j>>2]|0)+40>>2]|0)+((f[A>>2]|0)*40|0)+16>>2]=0;Mb(e,1,12135,x)|0;A=0;u=B;return A|0}else{f[d>>2]=c;A=1;u=B;return A|0}}do if(!(f[c+(i*40|0)+16>>2]|0)){f[c+(i*40|0)+8>>2]=10;x=Ic(10,24)|0;c=f[(f[j>>2]|0)+40>>2]|0;d=f[A>>2]|0;f[c+(d*40|0)+16>>2]=x;if(x|0){i=d;g=f[y>>2]|0;break}f[c+(d*40|0)+8>>2]=0;Mb(e,1,12135,w)|0;A=0;u=B;return A|0}while(0);d=c+(i*40|0)+8|0;if(g>>>0<(f[d>>2]|0)>>>0){A=1;u=B;return A|0}y=g+1|0;f[d>>2]=y;c=Lc(f[c+(i*40|0)+16>>2]|0,y*24|0)|0;d=(f[(f[j>>2]|0)+40>>2]|0)+((f[A>>2]|0)*40|0)+16|0;if(!c){Mc(f[d>>2]|0);y=f[(f[j>>2]|0)+40>>2]|0;A=f[A>>2]|0;f[y+(A*40|0)+16>>2]=0;f[y+(A*40|0)+8>>2]=0;Mb(e,1,12135,z)|0;A=0;u=B;return A|0}else{f[d>>2]=c;A=1;u=B;return A|0}return 0}function ed(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=u;u=u+64|0;o=r+48|0;p=r+40|0;j=r+32|0;m=r+52|0;i=r+56|0;f[m>>2]=d;q=a+80|0;k=f[q>>2]|0;n=a+8|0;if((f[n>>2]|0)==16)l=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else l=f[a+12>>2]|0;g=l+5636|0;h=b[g>>0]|0;if(h&1){Mb(e,1,11436,r)|0;q=0;u=r;return q|0}b[g>>0]=h|1;if(d>>>0<5){Mb(e,1,11500,r+8|0)|0;q=0;u=r;return q|0}zb(c,l,1);if((f[l>>2]|0)>>>0>7){Mb(e,1,11526,r+16|0)|0;q=0;u=r;return q|0}zb(c+1|0,i,1);i=f[i>>2]|0;g=l+4|0;f[g>>2]=i;if((i|0)>4){Mb(e,1,11560,r+24|0)|0;f[g>>2]=-1}g=l+8|0;zb(c+2|0,g,2);g=f[g>>2]|0;if((g+-1|0)>>>0>65534){f[j>>2]=g;Mb(e,1,11601,j)|0;q=0;u=r;return q|0}j=f[a+172>>2]|0;f[l+12>>2]=(j|0)==0?g:j;zb(c+4|0,l+16|0,1);j=c+5|0;f[m>>2]=d+-5;i=f[k+16>>2]|0;if(i|0){c=f[l>>2]&1;h=f[l+5584>>2]|0;g=0;do{f[h+(g*1080|0)>>2]=c;g=g+1|0}while(g>>>0>>0)}if(!(Fd(a,0,j,m,e)|0)){Mb(e,1,11500,p)|0;q=0;u=r;return q|0}if(f[m>>2]|0){Mb(e,1,11500,o)|0;q=0;u=r;return q|0}if((f[n>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;g=f[g+5584>>2]|0;k=g+4|0;h=f[k>>2]|0;l=h<<2;if((f[(f[q>>2]|0)+16>>2]|0)>>>0<=1){q=1;u=r;return q|0}a=g+8|0;e=g+12|0;m=g+16|0;n=g+20|0;o=g+812|0;p=g+944|0;f[g+1084>>2]=h;i=f[a>>2]|0;f[g+1088>>2]=i;c=f[e>>2]|0;f[g+1092>>2]=c;j=f[m>>2]|0;f[g+1096>>2]=j;d=f[n>>2]|0;f[g+1100>>2]=d;hj(g+1892|0,o|0,l|0)|0;hj(g+2024|0,p|0,l|0)|0;if((f[(f[q>>2]|0)+16>>2]|0)>>>0<=2){q=1;u=r;return q|0}f[g+2164>>2]=h;f[g+2168>>2]=i;f[g+2172>>2]=c;f[g+2176>>2]=j;f[g+2180>>2]=d;hj(g+2972|0,o|0,l|0)|0;hj(g+3104|0,p|0,l|0)|0;if((f[(f[q>>2]|0)+16>>2]|0)>>>0>3)h=3;else{q=1;u=r;return q|0}while(1){i=f[a>>2]|0;c=f[e>>2]|0;j=f[m>>2]|0;d=f[n>>2]|0;f[g+3244>>2]=f[k>>2];f[g+3248>>2]=i;f[g+3252>>2]=c;f[g+3256>>2]=j;f[g+3260>>2]=d;hj(g+4052|0,o|0,l|0)|0;hj(g+4184|0,p|0,l|0)|0;h=h+1|0;if(h>>>0>=(f[(f[q>>2]|0)+16>>2]|0)>>>0){g=1;break}else g=g+1080|0}u=r;return g|0}function fd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+48|0;i=k+28|0;j=k+32|0;f[i>>2]=c;if((f[a+8>>2]|0)==16)h=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else h=f[a+12>>2]|0;g=(f[a+80>>2]|0)+16|0;e=(f[g>>2]|0)>>>0<257?1:2;if(e>>>0>=c>>>0){Mb(d,1,10929,k)|0;j=0;u=k;return j|0}f[i>>2]=c+-1-e;zb(b,j,e);b=b+e|0;c=f[j>>2]|0;if(c>>>0>=(f[g>>2]|0)>>>0){Mb(d,1,10955,k+8|0)|0;j=0;u=k;return j|0}zb(b,(f[h+5584>>2]|0)+(c*1080|0)|0,1);if(!(Fd(a,f[j>>2]|0,b+1|0,i,d)|0)){Mb(d,1,10929,k+16|0)|0;j=0;u=k;return j|0}if(!(f[i>>2]|0)){j=1;u=k;return j|0}Mb(d,1,10929,k+24|0)|0;j=0;u=k;return j|0}function gd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+32|0;j=k+8|0;h=k+20|0;i=f[(f[a+80>>2]|0)+16>>2]|0;e=i>>>0<257?1:2;if((e+2|0)!=(c|0)){Mb(d,1,10846,k)|0;j=0;u=k;return j|0}if((f[a+8>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;zb(b,h,e);c=b+e|0;zb(c,k+16|0,1);a=f[h>>2]|0;if(a>>>0>>0){zb(c+1|0,(f[g+5584>>2]|0)+(a*1080|0)+808|0,1);j=1;u=k;return j|0}else{f[j>>2]=a;f[j+4>>2]=i;Mb(d,1,10872,j)|0;j=0;u=k;return j|0}return 0}function hd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0;h=u;u=u+16|0;e=h+12|0;f[e>>2]=c;if(!(Ed(a,0,b,e,d)|0)){Mb(d,1,10820,h)|0;g=0;u=h;return g|0}if(f[e>>2]|0){Mb(d,1,10820,h+8|0)|0;g=0;u=h;return g|0}if((f[a+8>>2]|0)==16)b=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else b=f[a+12>>2]|0;b=f[b+5584>>2]|0;d=a+80|0;if((f[(f[d>>2]|0)+16>>2]|0)>>>0<=1){g=1;u=h;return g|0}e=b+24|0;a=b+804|0;g=b+28|0;c=1;while(1){f[b+1104>>2]=f[e>>2];f[b+1884>>2]=f[a>>2];hj(b+1108|0,g|0,776)|0;c=c+1|0;if(c>>>0>=(f[(f[d>>2]|0)+16>>2]|0)>>>0){b=1;break}else b=b+1080|0}u=h;return b|0}function id(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+48|0;n=o+32|0;m=o+24|0;l=o+16|0;g=o+8|0;e=o;k=o+36|0;i=o+40|0;f[k>>2]=c;j=a+80|0;do if((f[(f[j>>2]|0)+16>>2]|0)>>>0<257){if(c|0){zb(b,i,1);e=-1;h=1;break}Mb(d,1,10473,e)|0;n=0;u=o;return n|0}else{if(c>>>0>=2){zb(b,i,2);e=-2;h=2;break}Mb(d,1,10473,g)|0;n=0;u=o;return n|0}while(0);f[k>>2]=e+c;g=f[i>>2]|0;e=f[(f[j>>2]|0)+16>>2]|0;if(g>>>0>=e>>>0){f[l>>2]=g;f[l+4>>2]=e;Mb(d,1,10499,l)|0;n=0;u=o;return n|0}if(!(Ed(a,g,b+h|0,k,d)|0)){Mb(d,1,10473,m)|0;n=0;u=o;return n|0}if(!(f[k>>2]|0)){n=1;u=o;return n|0}Mb(d,1,10473,n)|0;n=0;u=o;return n|0}function jd(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=u;u=u+16|0;i=p+8|0;n=p+12|0;o=f[(f[a+80>>2]|0)+16>>2]|0;m=o>>>0<257?1:2;g=(m<<1)+5|0;if(((d>>>0)%(g>>>0)|0|0)!=0|g>>>0>d>>>0){Mb(e,1,10429,p)|0;o=0;u=p;return o|0}if((f[a+8>>2]|0)==16)l=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else l=f[a+12>>2]|0;a=l+5636|0;h=b[a>>0]|0;if(!(h&4))k=0;else k=(f[l+420>>2]|0)+1|0;j=k+((d>>>0)/(g>>>0)|0)|0;if(j>>>0>31){f[i>>2]=j;Mb(e,1,10455,i)|0;o=0;u=p;return o|0}b[a>>0]=h|4;if(k>>>0>>0){h=l+8|0;a=c;d=k;g=l+424+(k*148|0)|0;while(1){zb(a,g,1);a=a+1|0;zb(a,g+4|0,m);a=a+m|0;k=g+8|0;zb(a,k,2);i=f[k>>2]|0;c=f[h>>2]|0;f[k>>2]=i>>>0>>0?i:c;a=a+2|0;zb(a,g+12|0,1);a=a+1|0;k=g+16|0;zb(a,k,m);a=a+m|0;zb(a,n,1);f[g+36>>2]=f[n>>2];c=f[k>>2]|0;f[k>>2]=c>>>0>>0?c:o;d=d+1|0;if(d>>>0>=j>>>0)break;else{a=a+1|0;g=g+148|0}}}f[l+420>>2]=j+-1;o=1;u=p;return o|0}function kd(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0;N=u;u=u+160|0;M=N+144|0;H=N+136|0;G=N+128|0;F=N+120|0;E=N+112|0;D=N+104|0;z=N+96|0;y=N+80|0;s=N+72|0;p=N+64|0;o=N+56|0;r=N+48|0;q=N+32|0;k=N+24|0;j=N+16|0;h=N+152|0;w=N+148|0;K=f[a+80>>2]|0;L=a+88|0;if(e>>>0<36){Mb(g,1,9677,N)|0;g=0;u=N;return g|0}J=e+-36|0;n=(J>>>0)/3|0;if((J>>>0)%3|0|0){Mb(g,1,9677,N+8|0)|0;g=0;u=N;return g|0}zb(c,h,2);d[L>>1]=f[h>>2];x=K+8|0;zb(c+2|0,x,4);C=K+12|0;zb(c+6|0,C,4);zb(c+10|0,K,4);m=K+4|0;zb(c+14|0,m,4);v=a+100|0;zb(c+18|0,v,4);B=a+104|0;zb(c+22|0,B,4);t=a+92|0;zb(c+26|0,t,4);A=a+96|0;zb(c+30|0,A,4);zb(c+34|0,h,2);i=c+36|0;e=f[h>>2]|0;if(e>>>0>=16385){f[j>>2]=e;Mb(g,1,9705,j)|0;g=0;u=N;return g|0}e=e&65535;J=K+16|0;f[J>>2]=e;if((e|0)!=(n|0)){f[k>>2]=e;f[k+4>>2]=n;Mb(g,1,9766,k)|0;g=0;u=N;return g|0}k=f[K>>2]|0;l=f[x>>2]|0;if(k>>>0>>0){j=f[m>>2]|0;c=f[C>>2]|0;if(j>>>0>>0){h=f[v>>2]|0;e=f[B>>2]|0;if(h)if(!e)e=0;else{if((4294967295/(l>>>0)|0)>>>0>>0){f[o>>2]=l;f[o+4>>2]=c;Mb(g,1,10007,o)|0;g=0;u=N;return g|0}l=f[t>>2]|0;q=Zi(l|0,0,h|0,0)|0;o=I;m=f[A>>2]|0;r=Zi(m|0,0,e|0,0)|0;if(l>>>0<=k>>>0?m>>>0<=j>>>0&(0-o|q)>>>0>k>>>0&(0-I|r)>>>0>j>>>0:0){e=Ic(n,52)|0;n=K+24|0;f[n>>2]=e;if(!e){f[J>>2]=0;Mb(g,1,10093,s)|0;g=0;u=N;return g|0}a:do if(f[J>>2]|0){l=a+168|0;k=e;j=0;while(1){zb(i,w,1);c=f[w>>2]|0;e=k+24|0;f[e>>2]=(c&127)+1;f[k+32>>2]=c>>>7;zb(i+1|0,w,1);f[k>>2]=f[w>>2];zb(i+2|0,w,1);c=f[w>>2]|0;f[k+4>>2]=c;h=f[k>>2]|0;if((c+-1|0)>>>0>254|(h+-1|0)>>>0>254){e=26;break}c=f[e>>2]|0;if(c>>>0>38){e=28;break}f[k+36>>2]=0;f[k+40>>2]=f[l>>2];e=j+1|0;if(e>>>0<(f[J>>2]|0)>>>0){k=k+52|0;i=i+3|0;j=e}else break a}if((e|0)==26){f[y>>2]=j;f[y+4>>2]=h;f[y+8>>2]=c;Mb(g,1,10141,y)|0}else if((e|0)==28){f[z>>2]=j;f[z+4>>2]=c;Mb(g,1,10246,z)|0}g=0;u=N;return g|0}while(0);l=f[t>>2]|0;k=f[v>>2]|0;i=((f[x>>2]|0)+-1-l+k|0)/(k|0)|0;f[a+112>>2]=i;j=f[A>>2]|0;h=f[B>>2]|0;e=((f[C>>2]|0)+-1-j+h|0)/(h|0)|0;f[a+116>>2]=e;if(!((e|0)==0|(i|0)==0)?i>>>0<=(65535/(e>>>0)|0)>>>0:0){m=X(i,e)|0;c=a+28|0;if(!(b[a+76>>0]&2)){f[c>>2]=0;f[a+32>>2]=0;f[a+36>>2]=i;c=a+40|0}else{f[c>>2]=(((f[c>>2]|0)-l|0)>>>0)/(k>>>0)|0;e=a+32|0;f[e>>2]=(((f[e>>2]|0)-j|0)>>>0)/(h>>>0)|0;e=a+36|0;f[e>>2]=((f[e>>2]|0)+-1-l+k|0)/(k|0)|0;e=a+40|0;c=e;e=((f[e>>2]|0)+-1-j+h|0)/(h|0)|0}f[c>>2]=e;D=Ic(m,5640)|0;j=a+164|0;f[j>>2]=D;if(!D){Mb(g,1,10093,E)|0;g=0;u=N;return g|0}E=Ic(f[J>>2]|0,1080)|0;i=a+12|0;f[(f[i>>2]|0)+5584>>2]=E;if(!(f[(f[i>>2]|0)+5584>>2]|0)){Mb(g,1,10093,F)|0;g=0;u=N;return g|0}e=Ic(10,20)|0;f[(f[i>>2]|0)+5612>>2]=e;e=f[i>>2]|0;if(!(f[e+5612>>2]|0)){Mb(g,1,10093,G)|0;g=0;u=N;return g|0}f[e+5620>>2]=10;e=Ic(10,20)|0;f[(f[i>>2]|0)+5624>>2]=e;e=f[i>>2]|0;if(!(f[e+5624>>2]|0)){Mb(g,1,10093,H)|0;g=0;u=N;return g|0}f[e+5632>>2]=10;h=f[J>>2]|0;if(h|0){c=f[n>>2]|0;e=0;do{if(!(f[c+(e*52|0)+32>>2]|0))f[(f[(f[i>>2]|0)+5584>>2]|0)+(e*1080|0)+1076>>2]=1<<(f[c+(e*52|0)+24>>2]|0)+-1;e=e+1|0}while(e>>>0>>0)}b:do if(m|0){e=f[j>>2]|0;H=Ic(h,1080)|0;f[e+5584>>2]=H;if(H|0){c=0;while(1){c=c+1|0;if(c>>>0>=m>>>0)break b;H=Ic(f[J>>2]|0,1080)|0;f[e+11224>>2]=H;if(!H)break;else e=e+5640|0}}Mb(g,1,10093,M)|0;g=0;u=N;return g|0}while(0);f[a+8>>2]=4;Tb(K,L);g=1;u=N;return g|0}f[D>>2]=i;f[D+4>>2]=e;Mb(g,1,10346,D)|0;g=0;u=N;return g|0}Mb(g,1,10049,p)|0;g=0;u=N;return g|0}f[r>>2]=h;f[r+4>>2]=e;Mb(g,1,9946,r)|0;g=0;u=N;return g|0}else e=j}else{c=f[C>>2]|0;e=f[m>>2]|0}a=_i(l|0,0,k|0,0)|0;K=I;L=_i(c|0,0,e|0,0)|0;M=q;f[M>>2]=a;f[M+4>>2]=K;M=q+8|0;f[M>>2]=L;f[M+4>>2]=I;Mb(g,1,9880,q)|0;g=0;u=N;return g|0}function ld(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=u;u=u+32|0;a=e+12|0;if(c>>>0<2){Mb(d,1,9651,e)|0;d=0;u=e;return d|0}zb(b,e+16|0,1);zb(b+1|0,a,1);b=f[a>>2]|0;if(!(((c+-2|0)>>>0)%(((b>>>5&2)+2+(b>>>4&3)|0)>>>0)|0)){d=1;u=e;return d|0}Mb(d,1,9651,e+8|0)|0;d=0;u=e;return d|0}function md(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=u;u=u+16|0;if(!c){Mb(d,1,9625,b)|0;a=0}else a=1;u=b;return a|0}function nd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;j=u;u=u+32|0;i=j+8|0;h=j+12|0;if(!c){Mb(d,1,9599,j)|0;d=0;u=j;return d|0}zb(b,j+16|0,1);g=c+-1|0;if(!g){d=1;u=j;return d|0}else{e=0;a=b;c=0}do{a=a+1|0;zb(a,h,1);b=f[h>>2]|0;e=(b&128|0)==0?0:(b&127|e)<<7;c=c+1|0}while((c|0)!=(g|0));if(!e){d=1;u=j;return d|0}Mb(d,1,9599,i)|0;d=0;u=j;return d|0}function od(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+48|0;n=o+32|0;j=o+24|0;h=o+16|0;g=o+8|0;l=o+36|0;if(d>>>0<2){Mb(e,1,9551,o)|0;n=0;u=o;return n|0}m=a+184|0;b[m>>0]=b[m>>0]|1;zb(c,l,1);m=c+1|0;k=d+-1|0;i=a+124|0;d=f[i>>2]|0;do if(d){g=a+120|0;c=f[l>>2]|0;if((f[g>>2]|0)>>>0<=c>>>0){a=c+1|0;c=Lc(d,a<<3)|0;if(c|0){f[i>>2]=c;d=f[g>>2]|0;ij(c+(d<<3)|0,0,a-d<<3|0)|0;f[g>>2]=a;d=f[i>>2]|0;break}Mb(e,1,8618,h)|0;n=0;u=o;return n|0}}else{c=(f[l>>2]|0)+1|0;d=Ic(c,8)|0;f[i>>2]=d;if(d|0){f[a+120>>2]=c;break}Mb(e,1,8618,g)|0;n=0;u=o;return n|0}while(0);c=f[l>>2]|0;if(f[d+(c<<3)>>2]|0){f[j>>2]=c;Mb(e,1,9577,j)|0;n=0;u=o;return n|0}a=Hc(k)|0;d=f[i>>2]|0;c=f[l>>2]|0;f[d+(c<<3)>>2]=a;if(!a){Mb(e,1,8618,n)|0;n=0;u=o;return n|0}else{f[d+(c<<3)+4>>2]=k;hj(a|0,m|0,k|0)|0;n=1;u=o;return n|0}return 0}function pd(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=u;u=u+48|0;p=q+40|0;m=q+32|0;j=q+24|0;i=q+16|0;o=q+44|0;if(d>>>0<2){Mb(e,1,9364,q)|0;p=0;u=q;return p|0}if(b[a+184>>0]&1){Mb(e,1,9390,q+8|0)|0;p=0;u=q;return p|0}h=f[a+164>>2]|0;g=f[a+200>>2]|0;n=h+(g*5640|0)+5636|0;b[n>>0]=b[n>>0]|2;zb(c,o,1);n=c+1|0;l=d+-1|0;k=h+(g*5640|0)+5164|0;c=f[k>>2]|0;do if(c){g=h+(g*5640|0)+5160|0;a=f[o>>2]|0;if((f[g>>2]|0)>>>0<=a>>>0){d=a+1|0;a=Lc(c,d<<3)|0;if(a|0){f[k>>2]=a;c=f[g>>2]|0;ij(a+(c<<3)|0,0,d-c<<3|0)|0;f[g>>2]=d;c=f[k>>2]|0;break}Mb(e,1,9491,j)|0;p=0;u=q;return p|0}}else{a=(f[o>>2]|0)+1|0;c=Ic(a,8)|0;f[k>>2]=c;if(c|0){f[h+(g*5640|0)+5160>>2]=a;break}Mb(e,1,9491,i)|0;p=0;u=q;return p|0}while(0);a=f[o>>2]|0;if(f[c+(a<<3)>>2]|0){f[m>>2]=a;Mb(e,1,9529,m)|0;p=0;u=q;return p|0}d=Hc(l)|0;c=f[k>>2]|0;a=f[o>>2]|0;f[c+(a<<3)>>2]=d;if(!d){Mb(e,1,9491,p)|0;p=0;u=q;return p|0}else{f[c+(a<<3)+4>>2]=l;hj(d|0,n|0,l|0)|0;p=1;u=q;return p|0}return 0}function qd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=u;u=u+16|0;if((f[(f[a+80>>2]|0)+16>>2]<<2|0)==(c|0)){d=1;u=b;return d|0}Mb(d,1,9338,b)|0;d=0;u=b;return d|0}function rd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function sd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=u;u=u+48|0;q=r+40|0;p=r+32|0;k=r+24|0;o=r+44|0;if((f[a+8>>2]|0)==16)i=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else i=f[a+12>>2]|0;if(c>>>0<2){Mb(d,1,9170,r)|0;q=0;u=r;return q|0}zb(b,o,2);if(f[o>>2]|0){Mb(d,2,9196,r+8|0)|0;q=1;u=r;return q|0}if(c>>>0<7){Mb(d,1,9170,r+16|0)|0;q=0;u=r;return q|0}zb(b+2|0,o,2);m=b+4|0;n=f[o>>2]&255;j=i+5612|0;e=f[j>>2]|0;l=i+5616|0;a=f[l>>2]|0;a:do if(!a){g=e;h=0}else{g=e;h=0;do{if((f[g+8>>2]|0)==(n|0))break a;g=g+20|0;h=h+1|0}while(h>>>0>>0)}while(0);if((h|0)==(a|0)){g=i+5620|0;do if((a|0)==(f[g>>2]|0)){a=a+10|0;f[g>>2]=a;a=Lc(e,a*20|0)|0;if(a|0){f[j>>2]=a;e=f[l>>2]|0;ij(a+(e*20|0)|0,0,((f[g>>2]|0)-e|0)*20|0)|0;e=f[j>>2]|0;a=f[l>>2]|0;break}Mc(f[j>>2]|0);f[j>>2]=0;f[g>>2]=0;f[l>>2]=0;Mb(d,1,9256,k)|0;q=0;u=r;return q|0}while(0);f[l>>2]=a+1;g=e+(a*20|0)|0}h=g+12|0;a=f[h>>2]|0;if(a|0){Mc(a);f[h>>2]=0}f[g+8>>2]=n;n=f[o>>2]|0;f[g+4>>2]=n>>>8&3;f[g>>2]=n>>>10&3;zb(m,o,2);if(f[o>>2]|0){Mb(d,2,9294,p)|0;q=1;u=r;return q|0}a=c+-6|0;e=Hc(a)|0;f[h>>2]=e;if(!e){Mb(d,1,9170,q)|0;q=0;u=r;return q|0}else{hj(e|0,b+6|0,a|0)|0;f[g+16>>2]=a;q=1;u=r;return q|0}return 0}function td(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+32|0;e=i+16|0;h=i+12|0;a=a+80|0;g=f[(f[a>>2]|0)+16>>2]|0;if((g+2|0)!=(c|0)){Mb(d,1,9144,i)|0;h=0;u=i;return h|0}zb(b,e,2);if((f[e>>2]|0)!=(g|0)){Mb(d,1,9144,i+8|0)|0;h=0;u=i;return h|0}if(!g){h=1;u=i;return h|0}d=0;c=b+2|0;a=f[(f[a>>2]|0)+24>>2]|0;while(1){zb(c,h,1);b=f[h>>2]|0;f[a+32>>2]=b>>>7&1;f[a+24>>2]=(b&127)+1;d=d+1|0;if((d|0)==(g|0)){a=1;break}else{c=c+1|0;a=a+52|0}}u=i;return a|0}function ud(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=u;u=u+144|0;J=K+120|0;I=K+112|0;H=K+104|0;G=K+96|0;F=K+88|0;E=K+80|0;D=K+72|0;C=K+64|0;B=K+56|0;A=K+48|0;o=K+40|0;n=K+32|0;l=K+24|0;v=K+136|0;w=K+132|0;x=K+128|0;y=K+124|0;if((f[a+8>>2]|0)==16)p=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else p=f[a+12>>2]|0;if(d>>>0<2){Mb(e,1,8804,K)|0;J=0;u=K;return J|0}zb(c,v,2);if(f[v>>2]|0){Mb(e,2,8830,K+8|0)|0;J=1;u=K;return J|0}if(d>>>0<7){Mb(e,1,8804,K+16|0)|0;J=0;u=K;return J|0}zb(c+2|0,w,1);m=c+3|0;k=p+5624|0;g=f[k>>2]|0;z=p+5628|0;a=f[z>>2]|0;a:do if(!a){i=g;h=0}else{j=f[w>>2]|0;i=g;h=0;do{if((f[i>>2]|0)==(j|0))break a;i=i+20|0;h=h+1|0}while(h>>>0>>0)}while(0);if((h|0)==(a|0)){h=p+5632|0;do if((a|0)==(f[h>>2]|0)){a=a+10|0;f[h>>2]=a;a=Lc(g,a*20|0)|0;if(a|0){f[k>>2]=a;g=f[z>>2]|0;ij(a+(g*20|0)|0,0,((f[h>>2]|0)-g|0)*20|0)|0;g=f[k>>2]|0;a=f[z>>2]|0;break}Mc(f[k>>2]|0);f[k>>2]=0;f[h>>2]=0;f[z>>2]=0;Mb(e,1,8876,l)|0;J=0;u=K;return J|0}while(0);t=1;h=g+(a*20|0)|0}else{t=0;h=i}f[h>>2]=f[w>>2];zb(m,v,2);if(f[v>>2]|0){Mb(e,2,8830,n)|0;J=1;u=K;return J|0}zb(c+5|0,x,2);g=f[x>>2]|0;if(g>>>0>1){Mb(e,2,8914,o)|0;J=1;u=K;return J|0}a=d+-7|0;b:do if(g){q=h+4|0;r=h+16|0;s=h+8|0;d=h+12|0;o=p+5612|0;n=p+5616|0;l=c+7|0;m=0;c:while(1){if(a>>>0<3){g=27;break}zb(l,v,1);if((f[v>>2]|0)!=1){g=29;break}zb(l+1|0,y,2);g=a+-3|0;i=f[y>>2]|0;j=(i>>>15)+1|0;i=i&32767;f[q>>2]=i;h=(X(j,i)|0)+2|0;if(g>>>0>>0){g=31;break}a=l+3|0;k=g-h|0;if(i){g=0;do{zb(a,v,j);if((f[v>>2]|0)!=(g|0)){g=34;break c}a=a+j|0;g=g+1|0}while(g>>>0<(f[q>>2]|0)>>>0)}zb(a,y,2);g=a+2|0;h=f[y>>2]|0;i=(h>>>15)+1|0;h=h&32767;f[y>>2]=h;if((h|0)!=(f[q>>2]|0)){g=37;break}a=(X(i,h)|0)+3|0;if(k>>>0>>0){g=39;break}a=k-a|0;if(h){h=0;do{zb(g,v,i);if((f[v>>2]|0)!=(h|0)){g=42;break c}g=g+i|0;h=h+1|0}while(h>>>0<(f[q>>2]|0)>>>0)}zb(g,v,3);l=g+3|0;i=f[v>>2]|0;b[r>>0]=(i>>>16^1)&1|b[r>>0]&-2;f[s>>2]=0;f[d>>2]=0;j=i&255;f[w>>2]=j;if(j|0){k=f[n>>2]|0;if(!k){g=50;break}g=f[o>>2]|0;h=0;while(1){if((f[g+8>>2]|0)==(j|0))break;h=h+1|0;if(h>>>0>=k>>>0){g=50;break c}else g=g+20|0}f[s>>2]=g}i=i>>>8&255;f[w>>2]=i;if(i|0){j=f[n>>2]|0;if(!j){g=57;break}g=f[o>>2]|0;h=0;while(1){if((f[g+8>>2]|0)==(i|0))break;h=h+1|0;if(h>>>0>=j>>>0){g=57;break c}else g=g+20|0}f[d>>2]=g}m=m+1|0;if(m>>>0>=(f[x>>2]|0)>>>0)break b}if((g|0)==27){Mb(e,1,8804,A)|0;J=0;u=K;return J|0}else if((g|0)==29){Mb(e,2,8958,B)|0;J=1;u=K;return J|0}else if((g|0)==31){Mb(e,1,8804,C)|0;J=0;u=K;return J|0}else if((g|0)==34){Mb(e,2,9024,D)|0;J=1;u=K;return J|0}else if((g|0)==37){Mb(e,2,9078,E)|0;J=1;u=K;return J|0}else if((g|0)==39){Mb(e,1,8804,F)|0;J=0;u=K;return J|0}else if((g|0)==42){Mb(e,2,9024,G)|0;J=1;u=K;return J|0}else if((g|0)==50){Mb(e,1,8804,H)|0;J=0;u=K;return J|0}else if((g|0)==57){Mb(e,1,8804,I)|0;J=0;u=K;return J|0}}while(0);if(a|0){Mb(e,1,8804,J)|0;J=0;u=K;return J|0}if(!t){J=1;u=K;return J|0}f[z>>2]=(f[z>>2]|0)+1;J=1;u=K;return J|0}function vd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=u;u=u+32|0;m=r+24|0;p=r+20|0;q=a+80|0;e=f[q>>2]|0;if((f[a+8>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;if(!c){Mb(d,1,8723,r)|0;q=0;u=r;return q|0}zb(b,p,1);a=f[p>>2]|0;if(a>>>0>1){Mb(d,2,8749,r+8|0)|0;q=1;u=r;return q|0}if((a+1|0)!=(c|0)){Mb(d,2,8723,r+16|0)|0;q=0;u=r;return q|0}l=g+5584|0;e=f[e+16>>2]|0;if(e|0){c=f[l>>2]|0;d=0;while(1){f[c+1076>>2]=0;d=d+1|0;if(d>>>0>=e>>>0)break;else c=c+1080|0}}k=g+5604|0;c=f[k>>2]|0;if(c){Mc(c);f[k>>2]=0;a=f[p>>2]|0}if(!a){q=1;u=r;return q|0}j=g+5624|0;i=g+5628|0;h=0;while(1){b=b+1|0;zb(b,m,1);a=f[q>>2]|0;e=f[j>>2]|0;if((f[i>>2]|0?(f[e>>2]|0)==(f[m>>2]|0):0)?(n=f[e+4>>2]|0,o=a+16|0,(n|0)==(f[o>>2]|0)):0){a=f[e+8>>2]|0;if(a|0){c=X(n,n)|0;g=X(f[1036+(f[a>>2]<<2)>>2]|0,c)|0;if((f[a+16>>2]|0)!=(g|0)){a=0;c=32;break}d=Hc(c<<2)|0;f[k>>2]=d;if(!d){a=0;c=32;break}Ua[f[1052+(f[a>>2]<<2)>>2]&15](f[a+12>>2]|0,d,c)}a=f[e+12>>2]|0;if(a|0){c=f[o>>2]|0;g=X(c,f[1036+(f[a>>2]<<2)>>2]|0)|0;if((f[a+16>>2]|0)!=(g|0)){a=0;c=32;break}g=Hc(c<<2)|0;if(!g){a=0;c=32;break}Ua[f[1068+(f[a>>2]<<2)>>2]&15](f[a+12>>2]|0,g,c);e=f[o>>2]|0;if(e|0){a=g;c=f[l>>2]|0;d=0;while(1){f[c+1076>>2]=f[a>>2];d=d+1|0;if((d|0)==(e|0))break;else{a=a+4|0;c=c+1080|0}}}Mc(g)}}h=h+1|0;if(h>>>0>=(f[p>>2]|0)>>>0){a=1;c=32;break}}if((c|0)==32){u=r;return a|0}return 0}function wd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){zb(a,e,2);f[b>>2]=f[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+2|0}}u=g;return}function xd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){zb(a,e,4);f[b>>2]=f[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}u=g;return}function yd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){Db(a,e);f[b>>2]=~~+n[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}u=g;return}function zd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){Bb(a,e);f[b>>2]=~~+p[e>>3];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+8|0}}u=g;return}function Ad(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){zb(a,e,2);n[b>>2]=+((f[e>>2]|0)>>>0);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+2|0}}u=g;return}function Bd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){zb(a,e,4);n[b>>2]=+((f[e>>2]|0)>>>0);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}u=g;return}function Cd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=u;u=u+16|0;e=g;if(!c){u=g;return}d=0;while(1){Db(a,e);f[b>>2]=f[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}u=g;return}function Dd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;f=u;u=u+16|0;e=f;if(!c){u=f;return}d=0;while(1){Bb(a,e);n[b>>2]=+p[e>>3];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+8|0}}u=f;return}function Ed(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=u;u=u+32|0;h=m+8|0;j=m+20|0;if((f[a+8>>2]|0)==16)a=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else a=f[a+12>>2]|0;l=f[a+5584>>2]|0;a=f[d>>2]|0;if(!a){Mb(e,1,10568,m)|0;b=0;u=m;return b|0}f[d>>2]=a+-1;zb(c,j,1);c=c+1|0;a=f[j>>2]|0;g=a&31;i=l+(b*1080|0)+24|0;f[i>>2]=g;f[l+(b*1080|0)+804>>2]=a>>>5;do if((g|0)==1){a=1;k=8}else{a=(f[d>>2]|0)>>>((g|0)!=0&1);if(a>>>0>97){f[h>>2]=a;f[h+4>>2]=97;f[h+8>>2]=97;Mb(e,2,10604,h)|0;g=f[i>>2]|0}e=(a|0)==0;if(g|0)if(e){a=0;k=20;break}else{k=8;break}if(!e){g=0;while(1){zb(c,j,1);if(g>>>0<97){f[l+(b*1080|0)+28+(g<<3)>>2]=(f[j>>2]|0)>>>3;f[l+(b*1080|0)+28+(g<<3)+4>>2]=0}g=g+1|0;if((g|0)==(a|0))break;else c=c+1|0}}a=(f[d>>2]|0)-a|0}while(0);if((k|0)==8){g=0;while(1){zb(c,j,2);if(g>>>0<97){k=f[j>>2]|0;f[l+(b*1080|0)+28+(g<<3)>>2]=k>>>11;f[l+(b*1080|0)+28+(g<<3)+4>>2]=k&2047}g=g+1|0;if((g|0)==(a|0)){k=20;break}else c=c+2|0}}if((k|0)==20)a=(f[d>>2]|0)-(a<<1)|0;f[d>>2]=a;if((f[i>>2]|0)!=1){b=1;u=m;return b|0}c=l+(b*1080|0)+28|0;g=l+(b*1080|0)+32|0;a=1;do{d=(f[c>>2]|0)-(((a+-1|0)>>>0)/3|0)|0;f[l+(b*1080|0)+28+(a<<3)>>2]=(d|0)>0?d:0;f[l+(b*1080|0)+28+(a<<3)+4>>2]=f[g>>2];a=a+1|0}while((a|0)!=97);a=1;u=m;return a|0}function Fd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=u;u=u+64|0;o=q+48|0;k=q+40|0;j=q+16|0;i=q+8|0;n=q+52|0;h=a+8|0;if((f[h>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;l=f[g+5584>>2]|0;if((f[d>>2]|0)>>>0<5){Mb(e,1,11008,q)|0;d=0;u=q;return d|0}m=l+(b*1080|0)+4|0;zb(c,m,1);g=(f[m>>2]|0)+1|0;f[m>>2]=g;if(g>>>0>33){f[i>>2]=g;f[i+4>>2]=33;Mb(e,1,11043,i)|0;d=0;u=q;return d|0}if((f[a+168>>2]|0)>>>0>=g>>>0){f[j>>2]=b;Mb(e,1,11120,j)|0;f[h>>2]=f[h>>2]|32768;d=0;u=q;return d|0}i=l+(b*1080|0)+8|0;zb(c+1|0,i,1);f[i>>2]=(f[i>>2]|0)+2;h=l+(b*1080|0)+12|0;zb(c+2|0,h,1);j=(f[h>>2]|0)+2|0;f[h>>2]=j;i=f[i>>2]|0;if(j>>>0>10|i>>>0>10|(i+j|0)>>>0>12){Mb(e,1,11278,q+24|0)|0;d=0;u=q;return d|0}j=l+(b*1080|0)+16|0;zb(c+3|0,j,1);if(f[j>>2]&192|0){Mb(e,1,11346,q+32|0)|0;d=0;u=q;return d|0}zb(c+4|0,l+(b*1080|0)+20|0,1);g=(f[d>>2]|0)+-5|0;f[d>>2]=g;a=f[m>>2]|0;if(!(f[l+(b*1080|0)>>2]&1)){if(!a){d=1;u=q;return d|0}else g=0;do{f[l+(b*1080|0)+812+(g<<2)>>2]=15;f[l+(b*1080|0)+944+(g<<2)>>2]=15;g=g+1|0}while(g>>>0<(f[m>>2]|0)>>>0);g=1;u=q;return g|0}if(g>>>0>>0){Mb(e,1,11008,k)|0;d=0;u=q;return d|0}do if(!a)a=0;else{i=0;h=c+5|0;while(1){zb(h,n,1);h=h+1|0;g=f[n>>2]|0;if(i|0?g>>>0<16|(g&15|0)==0:0)break;f[l+(b*1080|0)+812+(i<<2)>>2]=g&15;f[l+(b*1080|0)+944+(i<<2)>>2]=g>>>4;i=i+1|0;a=f[m>>2]|0;if(i>>>0>=a>>>0){p=24;break}}if((p|0)==24){g=f[d>>2]|0;break}Mb(e,1,11413,o)|0;d=0;u=q;return d|0}while(0);f[d>>2]=g-a;d=1;u=q;return d|0}function Gd(a,c,e,g,h,i,j,k,l,m,n){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;Ca=u;u=u+256|0;Ba=Ca+200|0;Aa=Ca+192|0;ya=Ca+184|0;xa=Ca+176|0;ta=Ca+168|0;sa=Ca+160|0;ra=Ca+152|0;qa=Ca+144|0;pa=Ca+136|0;oa=Ca+128|0;ma=Ca+120|0;la=Ca+112|0;ka=Ca+104|0;ja=Ca+96|0;ia=Ca+88|0;ha=Ca+80|0;ga=Ca+72|0;fa=Ca+64|0;ea=Ca+56|0;da=Ca+48|0;wa=Ca+40|0;va=Ca+32|0;ua=Ca+24|0;na=Ca+16|0;ca=Ca+8|0;ba=Ca;C=Ca+240|0;D=Ca+236|0;E=Ca+232|0;F=Ca+228|0;H=Ca+224|0;J=Ca+220|0;K=Ca+216|0;L=Ca+212|0;M=Ca+208|0;f[L>>2]=65424;za=a+8|0;switch(f[za>>2]|0){case 256:{f[L>>2]=65497;o=a+76|0;break}case 8:{o=a+76|0;if(!(b[o>>0]&1)){N=a+164|0;O=a+200|0;P=a+72|0;Q=a+24|0;R=a+196|0;S=a+112|0;V=a+116|0;W=C+2|0;Y=C+6|0;Z=C+7|0;_=a+16|0;$=a+20|0;aa=a+64|0;p=65424;a:do{b:do if((p|0)!=65427){while(1){A=Ib(m)|0;if((A|0)==0&(I|0)==0){B=50;break}if((Eb(m,f[_>>2]|0,2,n)|0)!=2){B=8;break a}zb(f[_>>2]|0,M,2);if((f[M>>2]|0)>>>0<2){B=10;break a}if((f[L>>2]|0)==32896?(A=Ib(m)|0,(A|0)==0&(I|0)==0):0){B=50;break}r=f[za>>2]|0;p=f[M>>2]|0;if(r&16|0)f[Q>>2]=-2-p+(f[Q>>2]|0);q=p+-2|0;f[M>>2]=q;p=f[L>>2]|0;z=784;while(1){A=f[z>>2]|0;if((A|0)==0|(A|0)==(p|0))break;else z=z+12|0}if(!(f[z+4>>2]&r)){B=18;break a}if(q>>>0>(f[$>>2]|0)>>>0){A=Ib(m)|0;y=I;if((y|0)<0|(y|0)==0&A>>>0>>0){B=22;break a}p=Lc(f[_>>2]|0,f[M>>2]|0)|0;if(!p){B=24;break a}f[_>>2]=p;q=f[M>>2]|0;f[$>>2]=q}else p=f[_>>2]|0;p=Eb(m,p,q,n)|0;if((p|0)!=(f[M>>2]|0)){B=27;break a}q=f[z+8>>2]|0;if(!q){B=29;break a}if(!(Na[q&63](a,f[_>>2]|0,p,n)|0)){B=31;break a}v=f[O>>2]|0;t=f[R>>2]|0;w=f[z>>2]|0;x=Hb(m)|0;y=f[M>>2]|0;x=x-y+-4|0;y=y+4|0;t=t+40|0;s=f[t>>2]|0;p=f[s+(v*40|0)+20>>2]|0;q=s+(v*40|0)+28|0;r=f[q>>2]|0;if((p+1|0)>>>0>r>>>0){r=~~(+(r>>>0)+100.0)>>>0;f[q>>2]=r;q=Lc(f[s+(v*40|0)+24>>2]|0,r*24|0)|0;r=f[t>>2]|0;p=r+(v*40|0)+24|0;if(!q){B=39;break a}f[p>>2]=q;t=r;p=f[r+(v*40|0)+20>>2]|0}else{t=s;q=f[s+(v*40|0)+24>>2]|0}d[q+(p*24|0)>>1]=w;A=q+(p*24|0)+8|0;f[A>>2]=x;f[A+4>>2]=((x|0)<0)<<31>>31;f[q+(p*24|0)+16>>2]=y;f[t+(v*40|0)+20>>2]=p+1;if((w|0)==65424?(G=f[t+(v*40|0)+16>>2]|0,G|0):0){A=G+((f[t+(v*40|0)+12>>2]|0)*24|0)|0;f[A>>2]=x;f[A+4>>2]=0}do if((f[z>>2]|0)==65424){p=Hb(m)|0;p=-4-(f[M>>2]|0)+p|0;A=aa;z=f[A+4>>2]|0;if(!((z|0)<0|((z|0)==0?(f[A>>2]|0)>>>0

>>0:0)))break;A=aa;f[A>>2]=p;f[A+4>>2]=0}while(0);if(b[o>>0]&4)break;if((Eb(m,f[_>>2]|0,2,n)|0)!=2){B=48;break a}zb(f[_>>2]|0,L,2);if((f[L>>2]|0)==65427)break b}if((B|0)==50){B=0;f[za>>2]=64;break}A=Jb(m,f[Q>>2]|0,0,n)|0;if(!((I|0)==0?(A|0)==(f[Q>>2]|0):0)){B=45;break a}f[L>>2]=65427}while(0);A=Ib(m)|0;if((A|0)==0&(I|0)==0?(f[za>>2]|0)==64:0){B=114;break}p=b[o>>0]|0;if(!(p&4)){q=f[N>>2]|0;r=f[O>>2]|0;if(!(f[P>>2]|0)){p=f[Q>>2]|0;if(p>>>0>1){p=p+-2|0;B=57}}else{p=Ib(m)|0;p=Zi(p|0,I|0,-2,0)|0;B=57}if((B|0)==57){B=0;f[Q>>2]=p}A=q+(r*5640|0)+5592|0;z=q+(r*5640|0)+5596|0;do if(!p)x=1;else{y=Ib(m)|0;x=I;if((x|0)<0|(x|0)==0&y>>>0

>>0)Mb(n,2,12386,ia)|0;p=f[A>>2]|0;if(!p){y=Hc(f[Q>>2]|0)|0;f[A>>2]=y;if(!y){B=66;break a}else{x=0;break}}p=Lc(p,(f[Q>>2]|0)+(f[z>>2]|0)|0)|0;if(!p){B=64;break a}f[A>>2]=p;x=0}while(0);p=f[R>>2]|0;if(p|0){Da=Hb(m)|0;r=I;y=Zi(Da|0,r|0,-2,-1)|0;t=p+40|0;s=f[t>>2]|0;v=f[O>>2]|0;w=f[s+(v*40|0)+12>>2]|0;q=f[s+(v*40|0)+16>>2]|0;p=q+(w*24|0)+8|0;f[p>>2]=y;f[p+4>>2]=I;p=Zi(Da|0,r|0,f[Q>>2]|0,0)|0;w=q+(w*24|0)+16|0;f[w>>2]=p;f[w+4>>2]=I;w=(f[Q>>2]|0)+2|0;p=f[s+(v*40|0)+20>>2]|0;q=s+(v*40|0)+28|0;r=f[q>>2]|0;if((p+1|0)>>>0>r>>>0){r=~~(+(r>>>0)+100.0)>>>0;f[q>>2]=r;q=Lc(f[s+(v*40|0)+24>>2]|0,r*24|0)|0;r=f[t>>2]|0;p=r+(v*40|0)+24|0;if(!q){B=73;break}f[p>>2]=q;t=r;p=f[r+(v*40|0)+20>>2]|0}else{t=s;q=f[s+(v*40|0)+24>>2]|0}d[q+(p*24|0)>>1]=-109;y=dj(0,y|0,32)|0;Da=q+(p*24|0)+8|0;f[Da>>2]=y;f[Da+4>>2]=I;f[q+(p*24|0)+16>>2]=w;f[t+(v*40|0)+20>>2]=p+1}if(!x)p=Eb(m,(f[A>>2]|0)+(f[z>>2]|0)|0,f[Q>>2]|0,n)|0;else p=0;f[za>>2]=(p|0)!=(f[Q>>2]|0)?64:8;f[z>>2]=(f[z>>2]|0)+p;p=b[o>>0]|0;if((p&9)==1){b[o>>0]=p|8;q=f[O>>2]|0;do if((Lb(m)|0)!=0?(T=Hb(m)|0,U=I,!((T|0)==-1&(U|0)==-1)):0){while(1){if((Eb(m,C,2,n)|0)!=2){B=80;break}zb(C,D,2);if((f[D>>2]|0)!=65424){B=82;break}if((Eb(m,C,2,n)|0)!=2){B=84;break}zb(C,E,2);if((f[E>>2]|0)!=10){B=86;break}f[E>>2]=8;p=Eb(m,C,8,n)|0;if((p|0)!=(f[E>>2]|0)){B=88;break}if((p|0)!=8){B=90;break}zb(C,F,2);zb(W,H,4);zb(Y,J,1);zb(Z,K,1);if((f[F>>2]|0)==(q|0)){B=96;break}p=f[H>>2]|0;if(p>>>0<14){B=93;break}Da=p+-12|0;f[H>>2]=Da;Da=Jb(m,Da,0,n)|0;if(!((I|0)==0?(Da|0)==(f[H>>2]|0):0)){B=95;break}}if((B|0)==80){B=0;p=(Kb(m,T,U,n)|0)!=0;q=0;break}else if((B|0)==82){B=0;p=(Kb(m,T,U,n)|0)!=0;q=0;break}else if((B|0)==84){B=0;Mb(n,1,8150,la)|0;p=0;q=0;break}else if((B|0)==86){B=0;Mb(n,1,12203,ma)|0;p=0;q=0;break}else if((B|0)==88){B=0;Mb(n,1,8150,oa)|0;p=0;q=0;break}else if((B|0)==90){B=0;Mb(n,1,11669,pa)|0;p=0;q=0;break}else if((B|0)==93){B=0;p=(Kb(m,T,U,n)|0)!=0;q=0;break}else if((B|0)==95){B=0;p=(Kb(m,T,U,n)|0)!=0;q=0;break}else if((B|0)==96){B=0;q=(f[J>>2]|0)==(f[K>>2]|0)&1;p=(Kb(m,T,U,n)|0)!=0;break}}else{p=1;q=0}while(0);if(!p){B=98;break}if(q|0){q=X(f[V>>2]|0,f[S>>2]|0)|0;b[o>>0]=b[o>>0]&-18|16;if(q|0){r=f[N>>2]|0;p=0;do{s=r+(p*5640|0)+5588|0;t=f[s>>2]|0;if(t|0)f[s>>2]=t+1;p=p+1|0}while((p|0)!=(q|0))}Mb(n,2,12521,ra)|0}}if(!(b[o>>0]&1)){if((Eb(m,f[_>>2]|0,2,n)|0)!=2){B=108;break}zb(f[_>>2]|0,L,2)}}else{b[o>>0]=p&-6;f[za>>2]=8;if((Eb(m,f[_>>2]|0,2,n)|0)!=2){B=112;break}zb(f[_>>2]|0,L,2)}p=f[L>>2]|0}while((p|0)!=65497&(b[o>>0]&1)==0);switch(B|0){case 8:{Mb(n,1,8150,ba)|0;Da=0;u=Ca;return Da|0}case 10:{Mb(n,1,12203,ca)|0;Da=0;u=Ca;return Da|0}case 18:{Mb(n,1,8235,na)|0;Da=0;u=Ca;return Da|0}case 22:{Mb(n,1,12229,ua)|0;Da=0;u=Ca;return Da|0}case 24:{Mc(f[_>>2]|0);f[_>>2]=0;f[$>>2]=0;Mb(n,1,8333,va)|0;Da=0;u=Ca;return Da|0}case 27:{Mb(n,1,8150,wa)|0;Da=0;u=Ca;return Da|0}case 29:{Mb(n,1,12274,da)|0;Da=0;u=Ca;return Da|0}case 31:{f[ea>>2]=f[L>>2];Mb(n,1,12303,ea)|0;Da=0;u=Ca;return Da|0}case 39:{Mc(f[p>>2]|0);Da=f[t>>2]|0;f[Da+(v*40|0)+24>>2]=0;f[Da+(v*40|0)+28>>2]=0;f[Da+(v*40|0)+20>>2]=0;Mb(n,1,12350,fa)|0;Da=0;u=Ca;return Da|0}case 45:{Mb(n,1,8150,ga)|0;Da=0;u=Ca;return Da|0}case 48:{Mb(n,1,8150,ha)|0;Da=0;u=Ca;return Da|0}case 64:{Mc(f[A>>2]|0);f[A>>2]=0;B=66;break}case 73:{Mc(f[p>>2]|0);Da=f[t>>2]|0;f[Da+(v*40|0)+24>>2]=0;f[Da+(v*40|0)+28>>2]=0;f[Da+(v*40|0)+20>>2]=0;Mb(n,1,12350,ka)|0;Da=0;u=Ca;return Da|0}case 98:{Mb(n,1,12475,qa)|0;Da=0;u=Ca;return Da|0}case 108:{Mb(n,1,8150,sa)|0;Da=0;u=Ca;return Da|0}case 112:{Mb(n,1,8150,ta)|0;Da=0;u=Ca;return Da|0}case 114:{p=f[L>>2]|0;break}}if((B|0)==66){Mb(n,1,12441,ja)|0;Da=0;u=Ca;return Da|0}if((p|0)==65497?(f[za>>2]|0)!=256:0){f[a+200>>2]=0;f[za>>2]=256}}break}default:{Da=0;u=Ca;return Da|0}}if(!(b[o>>0]&1)){q=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;s=f[a+164>>2]|0;r=a+200|0;o=f[r>>2]|0;c:do if(o>>>0>>0){p=s+(o*5640|0)|0;while(1){if(f[p+5592>>2]|0)break c;o=o+1|0;f[r>>2]=o;if(o>>>0>>0)p=p+5640|0;else break}}while(0);if((o|0)==(q|0)){f[l>>2]=0;Da=1;u=Ca;return Da|0}}else{o=a+200|0;r=o;s=f[a+164>>2]|0;o=f[o>>2]|0}if(b[s+(o*5640|0)+5636>>0]&2){B=s+(o*5640|0)+5160|0;t=f[B>>2]|0;if(!t)p=0;else{v=f[s+(o*5640|0)+5164>>2]|0;q=0;p=0;do{p=(f[v+(q<<3)+4>>2]|0)+p|0;q=q+1|0}while((q|0)!=(t|0))}Da=Hc(p)|0;A=s+(o*5640|0)+5172|0;f[A>>2]=Da;if(!Da){Mb(n,1,9491,xa)|0;Mb(n,1,12562,ya)|0;Da=0;u=Ca;return Da|0}z=s+(o*5640|0)+5180|0;f[z>>2]=p;q=f[B>>2]|0;y=s+(o*5640|0)+5164|0;if(!q)p=f[y>>2]|0;else{p=f[y>>2]|0;x=0;v=0;w=p;while(1){t=f[w+(x<<3)>>2]|0;if(!t)t=w;else{hj((f[A>>2]|0)+v|0,t|0,f[w+(x<<3)+4>>2]|0)|0;t=f[y>>2]|0;v=(f[t+(x<<3)+4>>2]|0)+v|0;Mc(f[t+(x<<3)>>2]|0);t=f[y>>2]|0;f[t+(x<<3)>>2]=0;f[t+(x<<3)+4>>2]=0;q=f[B>>2]|0;p=t}x=x+1|0;if(x>>>0>=q>>>0)break;else w=t}}f[B>>2]=0;Mc(p);f[y>>2]=0;f[s+(o*5640|0)+5168>>2]=f[A>>2];f[s+(o*5640|0)+5176>>2]=f[z>>2]}o=a+204|0;if(!(Wf(f[o>>2]|0,f[r>>2]|0,n)|0)){Mb(n,1,8019,Aa)|0;Da=0;u=Ca;return Da|0}else{Da=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;f[Ba>>2]=(f[r>>2]|0)+1;f[Ba+4>>2]=Da;Mb(n,4,12588,Ba)|0;f[c>>2]=f[r>>2];f[l>>2]=1;Da=Xf(f[o>>2]|0)|0;f[e>>2]=Da;Da=f[f[(f[o>>2]|0)+20>>2]>>2]|0;f[g>>2]=f[Da>>2];f[h>>2]=f[Da+4>>2];f[i>>2]=f[Da+8>>2];f[j>>2]=f[Da+12>>2];f[k>>2]=f[Da+16>>2];f[za>>2]=f[za>>2]|128;Da=1;u=Ca;return Da|0}return 0}function Hd(a,c,d,e,g,h){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=u;u=u+48|0;p=s+28|0;q=s+32|0;r=a+8|0;if(!(f[r>>2]&128)){r=0;u=s;return r|0}n=a+200|0;if((f[n>>2]|0)!=(c|0)){r=0;u=s;return r|0}i=f[a+164>>2]|0;j=i+(c*5640|0)|0;o=i+(c*5640|0)+5592|0;k=f[o>>2]|0;if(!k){Rc(j);r=0;u=s;return r|0}l=a+204|0;m=i+(c*5640|0)+5596|0;if(!(Zf(f[l>>2]|0,k,f[m>>2]|0,c,f[a+196>>2]|0,h)|0)){Rc(j);f[r>>2]=f[r>>2]|32768;Mb(h,1,12627,s)|0;r=0;u=s;return r|0}if(!(_f(f[l>>2]|0,d,e)|0)){r=0;u=s;return r|0}i=f[o>>2]|0;if(i|0){Mc(i);f[o>>2]=0;f[m>>2]=0}a=a+76|0;b[a>>0]=b[a>>0]&-2;f[r>>2]=f[r>>2]&-129;a=Ib(g)|0;o=f[r>>2]|0;if((o|0)==256|(a|0)==0&(I|0)==0&(o|0)==64){r=1;u=s;return r|0}if((Eb(g,q,2,h)|0)!=2){Mb(h,2,12646,s+8|0)|0;r=1;u=s;return r|0}zb(q,p,2);switch(f[p>>2]|0){case 65497:{f[n>>2]=0;f[r>>2]=256;r=1;u=s;return r|0}case 65424:{r=1;u=s;return r|0}default:if((Ib(g)|0)==0&(I|0)==0){f[r>>2]=64;Mb(h,2,12690,s+16|0)|0;r=1;u=s;return r|0}else{Mb(h,1,12720,s+24|0)|0;r=0;u=s;return r|0}}return 0}function Id(a,c,d,e,g,h,i){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0;z=u;u=u+112|0;y=z+96|0;x=z+88|0;w=z+80|0;v=z+72|0;t=z+64|0;s=z+56|0;q=z+48|0;n=z+40|0;m=z+32|0;l=z+24|0;k=z+16|0;p=f[a+80>>2]|0;if((f[a+8>>2]|0)!=8){Mb(i,1,12752,z)|0;y=0;u=z;return y|0}if(!(e|d|g|h)){Mb(i,4,12831,z+8|0)|0;f[a+28>>2]=0;f[a+32>>2]=0;f[a+36>>2]=f[a+112>>2];f[a+40>>2]=f[a+116>>2];y=1;u=z;return y|0}r=p+8|0;j=f[r>>2]|0;if(j>>>0>>0){f[k>>2]=d;f[k+4>>2]=j;Mb(i,1,12900,k)|0;y=0;u=z;return y|0}j=f[p>>2]|0;if(j>>>0>d>>>0){f[l>>2]=d;f[l+4>>2]=j;Mb(i,2,12987,l)|0;f[a+28>>2]=0;d=f[p>>2]|0}else f[a+28>>2]=((d-(f[a+92>>2]|0)|0)>>>0)/((f[a+100>>2]|0)>>>0)|0;f[c>>2]=d;o=p+12|0;d=f[o>>2]|0;if(d>>>0>>0){f[m>>2]=e;f[m+4>>2]=d;Mb(i,1,13075,m)|0;y=0;u=z;return y|0}k=p+4|0;d=f[k>>2]|0;if(d>>>0>e>>>0){f[n>>2]=e;f[n+4>>2]=d;Mb(i,2,13160,n)|0;f[a+32>>2]=0;d=f[k>>2]|0}else{f[a+32>>2]=((e-(f[a+96>>2]|0)|0)>>>0)/((f[a+104>>2]|0)>>>0)|0;d=e}l=c+4|0;f[l>>2]=d;d=f[p>>2]|0;if(d>>>0>g>>>0){f[q>>2]=g;f[q+4>>2]=d;Mb(i,1,13246,q)|0;y=0;u=z;return y|0}d=f[r>>2]|0;if(d>>>0>>0){f[s>>2]=g;f[s+4>>2]=d;Mb(i,2,13335,s)|0;f[a+36>>2]=f[a+112>>2];g=f[r>>2]|0}else{s=f[a+100>>2]|0;f[a+36>>2]=(g+-1-(f[a+92>>2]|0)+s|0)/(s|0)|0}j=c+8|0;f[j>>2]=g;g=f[k>>2]|0;if(g>>>0>h>>>0){f[t>>2]=h;f[t+4>>2]=g;Mb(i,1,13423,t)|0;y=0;u=z;return y|0}g=f[o>>2]|0;if(g>>>0>>0){f[v>>2]=h;f[v+4>>2]=g;Mb(i,2,13513,v)|0;f[a+40>>2]=f[a+116>>2];h=f[o>>2]|0}else{v=f[a+104>>2]|0;f[a+40>>2]=(h+-1-(f[a+96>>2]|0)+v|0)/(v|0)|0}v=c+12|0;f[v>>2]=h;t=a+76|0;b[t>>0]=b[t>>0]|2;t=f[c+16>>2]|0;a=f[c>>2]|0;a:do if(t){d=f[l>>2]|0;s=d+-1|0;g=f[j>>2]|0;q=g+-1|0;r=a+-1|0;p=0;o=f[c+24>>2]|0;while(1){c=f[o>>2]|0;n=(r+c|0)/(c|0)|0;f[o+16>>2]=n;j=f[o+4>>2]|0;k=(s+j|0)/(j|0)|0;f[o+20>>2]=k;c=(q+c|0)/(c|0)|0;l=f[o+40>>2]|0;m=fj(1,0,l|0)|0;e=I;c=Zi(c|0,((c|0)<0)<<31>>31|0,-1,-1)|0;c=Zi(c|0,I|0,m|0,e|0)|0;c=dj(c|0,I|0,l|0)|0;n=Zi(n|0,((n|0)<0)<<31>>31|0,-1,-1)|0;n=Zi(n|0,I|0,m|0,e|0)|0;n=dj(n|0,I|0,l|0)|0;n=c-n|0;if((n|0)<0){j=29;break}h=f[v>>2]|0;c=(j+-1+h|0)/(j|0)|0;f[o+8>>2]=n;c=Zi(c|0,((c|0)<0)<<31>>31|0,-1,-1)|0;c=Zi(c|0,I|0,m|0,e|0)|0;c=dj(c|0,I|0,l|0)|0;k=Zi(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;k=Zi(k|0,I|0,m|0,e|0)|0;k=dj(k|0,I|0,l|0)|0;k=c-k|0;if((k|0)<0){j=31;break}f[o+12>>2]=k;j=p+1|0;if(j>>>0>>0){p=j;o=o+52|0}else break a}if((j|0)==29){f[w>>2]=p;f[w+4>>2]=n;Mb(i,1,13602,w)|0;y=0;u=z;return y|0}else if((j|0)==31){f[x>>2]=p;f[x+4>>2]=k;Mb(i,1,13671,x)|0;y=0;u=z;return y|0}}else{d=f[l>>2]|0;g=f[j>>2]|0;h=f[v>>2]|0}while(0);f[y>>2]=a;f[y+4>>2]=d;f[y+8>>2]=g;f[y+12>>2]=h;Mb(i,4,13740,y)|0;y=1;u=z;return y|0}function Jd(){var a=0,c=0,d=0;a=Ic(1,208)|0;if(!a){c=0;return c|0}f[a>>2]=1;c=a+184|0;b[c>>0]=b[c>>0]|2;c=Ic(1,5640)|0;f[a+12>>2]=c;if(!c){Qc(a);c=0;return c|0}c=Ic(1,1e3)|0;f[a+16>>2]=c;if(!c){Qc(a);c=0;return c|0}f[a+20>>2]=1e3;f[a+60>>2]=-1;c=a+64|0;f[c>>2]=0;f[c+4>>2]=0;c=Ic(1,48)|0;do if(c|0){f[c+32>>2]=100;f[c+24>>2]=0;d=Ic(100,24)|0;f[c+28>>2]=d;if(!d){Mc(c);break}f[c+40>>2]=0;f[a+196>>2]=c;d=ig()|0;f[a+192>>2]=d;if(!d){Qc(a);d=0;return d|0}d=ig()|0;f[a+188>>2]=d;if(d|0){d=a;return d|0}Qc(a);d=0;return d|0}while(0);f[a+196>>2]=0;Qc(a);d=0;return d|0}function Kd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;x=u;u=u+128|0;w=x+104|0;v=x+72|0;t=x+64|0;q=x+40|0;o=x+24|0;l=x+16|0;k=x+8|0;i=x;if(b&384|0){Mh(13778,11,1,c)|0;u=x;return}if(b&1|0?(h=f[a+80>>2]|0,h|0):0)Ld(h,0,c);if(b&2|0?(e=a+80|0,f[e>>2]|0):0){Mh(13790,36,1,c)|0;h=f[a+96>>2]|0;f[i>>2]=f[a+92>>2];f[i+4>>2]=h;ki(c,13827,i)|0;i=f[a+104>>2]|0;f[k>>2]=f[a+100>>2];f[k+4>>2]=i;ki(c,13845,k)|0;k=f[a+116>>2]|0;f[l>>2]=f[a+112>>2];f[l+4>>2]=k;ki(c,13863,l)|0;Md(f[a+12>>2]|0,f[(f[e>>2]|0)+16>>2]|0,c);Mh(13879,2,1,c)|0}if((b&8|0?(m=X(f[a+112>>2]|0,f[a+116>>2]|0)|0,n=a+80|0,g=f[n>>2]|0,!((g|0)==0|(m|0)==0)):0)?(d=f[a+164>>2]|0,Md(d,f[g+16>>2]|0,c),(m|0)!=1):0){e=1;do{d=d+5640|0;Md(d,f[(f[n>>2]|0)+16>>2]|0,c);e=e+1|0}while((e|0)!=(m|0))}if(!(b&16)){u=x;return}h=f[a+196>>2]|0;Mh(13882,37,1,c)|0;b=h;m=f[b+4>>2]|0;e=h+8|0;n=f[e>>2]|0;e=f[e+4>>2]|0;g=o;f[g>>2]=f[b>>2];f[g+4>>2]=m;g=o+8|0;f[g>>2]=n;f[g+4>>2]=e;ki(c,13920,o)|0;Mh(13987,17,1,c)|0;g=h+28|0;e=f[g>>2]|0;a:do if(e|0?(p=h+24|0,f[p>>2]|0):0){d=0;while(1){m=e+(d*24|0)+8|0;b=f[m>>2]|0;m=f[m+4>>2]|0;o=f[e+(d*24|0)+16>>2]|0;f[q>>2]=j[e+(d*24|0)>>1];n=q+8|0;f[n>>2]=b;f[n+4>>2]=m;f[q+16>>2]=o;ki(c,14005,q)|0;d=d+1|0;if(d>>>0>=(f[p>>2]|0)>>>0)break a;e=f[g>>2]|0}}while(0);Mh(14036,4,1,c)|0;k=h+40|0;g=f[k>>2]|0;if(g|0?(s=h+36|0,r=f[s>>2]|0,r|0):0){d=0;e=0;do{d=(f[g+(e*40|0)+4>>2]|0)+d|0;e=e+1|0}while((e|0)!=(r|0));if(d|0){Mh(14041,16,1,c)|0;if(f[s>>2]|0){i=0;d=f[k>>2]|0;do{h=f[d+(i*40|0)+4>>2]|0;f[t>>2]=i;f[t+4>>2]=h;ki(c,14058,t)|0;d=f[k>>2]|0;g=f[d+(i*40|0)+16>>2]|0;b:do if((h|0)!=0&(g|0)!=0){e=0;d=g;while(1){n=d+(e*24|0)|0;m=f[n>>2]|0;n=f[n+4>>2]|0;p=d+(e*24|0)+8|0;o=f[p>>2]|0;p=f[p+4>>2]|0;r=d+(e*24|0)+16|0;q=f[r>>2]|0;r=f[r+4>>2]|0;f[v>>2]=e;d=v+8|0;f[d>>2]=m;f[d+4>>2]=n;d=v+16|0;f[d>>2]=o;f[d+4>>2]=p;d=v+24|0;f[d>>2]=q;f[d+4>>2]=r;ki(c,14094,v)|0;e=e+1|0;d=f[k>>2]|0;if((e|0)==(h|0))break b;d=f[d+(i*40|0)+16>>2]|0}}while(0);g=f[d+(i*40|0)+24>>2]|0;c:do if((g|0)!=0?(f[d+(i*40|0)+20>>2]|0)!=0:0){e=0;d=g;while(1){q=d+(e*24|0)+8|0;p=f[q>>2]|0;q=f[q+4>>2]|0;r=f[d+(e*24|0)+16>>2]|0;f[w>>2]=j[d+(e*24|0)>>1];d=w+8|0;f[d>>2]=p;f[d+4>>2]=q;f[w+16>>2]=r;ki(c,14005,w)|0;e=e+1|0;d=f[k>>2]|0;if(e>>>0>=(f[d+(i*40|0)+20>>2]|0)>>>0)break c;d=f[d+(i*40|0)+24>>2]|0}}while(0);i=i+1|0}while(i>>>0<(f[s>>2]|0)>>>0)}Mh(14036,4,1,c)|0}}Mh(13879,2,1,c)|0;u=x;return}function Ld(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=u;u=u+64|0;l=m+48|0;k=m+40|0;i=m+32|0;h=m+16|0;g=m;j=m+52|0;if(!c){Mh(14492,13,1,d)|0;b[j>>0]=9;e=1}else{Mh(14455,36,1,f[665]|0)|0;e=0}b[j+e>>0]=0;n=f[a>>2]|0;e=f[a+4>>2]|0;f[g>>2]=j;f[g+4>>2]=n;f[g+8>>2]=e;ki(d,14506,g)|0;e=f[a+8>>2]|0;g=f[a+12>>2]|0;f[h>>2]=j;f[h+4>>2]=e;f[h+8>>2]=g;ki(d,14523,h)|0;h=a+16|0;g=f[h>>2]|0;f[i>>2]=j;f[i+4>>2]=g;ki(d,14540,i)|0;g=a+24|0;if(!(f[g>>2]|0)){Mh(13879,2,1,d)|0;u=m;return}if(!(f[h>>2]|0)){Mh(13879,2,1,d)|0;u=m;return}else e=0;do{f[k>>2]=j;f[k+4>>2]=e;ki(d,14556,k)|0;Nd((f[g>>2]|0)+(e*52|0)|0,c,d);f[l>>2]=j;ki(d,14576,l)|0;e=e+1|0}while(e>>>0<(f[h>>2]|0)>>>0);Mh(13879,2,1,d)|0;u=m;return}function Md(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;w=u;u=u+128|0;t=w+120|0;s=w+112|0;r=w+104|0;q=w+96|0;p=w+88|0;o=w+80|0;n=w+72|0;m=w+64|0;l=w+56|0;k=w+48|0;j=w+40|0;i=w+32|0;h=w+24|0;g=w+16|0;e=w+8|0;d=w;if(!a){u=w;return}Mh(14160,17,1,c)|0;f[d>>2]=f[a>>2];ki(c,14178,d)|0;f[e>>2]=f[a+4>>2];ki(c,14191,e)|0;f[g>>2]=f[a+8>>2];ki(c,14203,g)|0;f[h>>2]=f[a+16>>2];ki(c,14220,h)|0;if((b|0)>0){g=a+5584|0;e=0;do{h=f[g>>2]|0;f[i>>2]=e;ki(c,14231,i)|0;f[j>>2]=f[h+(e*1080|0)>>2];ki(c,14245,j)|0;d=h+(e*1080|0)+4|0;f[k>>2]=f[d>>2];ki(c,14259,k)|0;f[l>>2]=f[h+(e*1080|0)+8>>2];ki(c,14282,l)|0;f[m>>2]=f[h+(e*1080|0)+12>>2];ki(c,14298,m)|0;f[n>>2]=f[h+(e*1080|0)+16>>2];ki(c,14314,n)|0;f[o>>2]=f[h+(e*1080|0)+20>>2];ki(c,14331,o)|0;Mh(14346,23,1,c)|0;if(f[d>>2]|0){a=0;do{x=f[h+(e*1080|0)+944+(a<<2)>>2]|0;f[p>>2]=f[h+(e*1080|0)+812+(a<<2)>>2];f[p+4>>2]=x;ki(c,14370,p)|0;a=a+1|0}while(a>>>0<(f[d>>2]|0)>>>0)}Ri(10,c)|0;x=h+(e*1080|0)+24|0;f[q>>2]=f[x>>2];ki(c,14379,q)|0;f[r>>2]=f[h+(e*1080|0)+804>>2];ki(c,14394,r)|0;Mh(14411,20,1,c)|0;if((f[x>>2]|0)!=1){a=(f[d>>2]|0)*3|0;if((a|0)>2){d=a+-2|0;v=8}}else{d=1;v=8}if((v|0)==8){v=0;a=0;do{x=f[h+(e*1080|0)+28+(a<<3)>>2]|0;f[s>>2]=f[h+(e*1080|0)+28+(a<<3)+4>>2];f[s+4>>2]=x;ki(c,14370,s)|0;a=a+1|0}while((a|0)!=(d|0))}Ri(10,c)|0;f[t>>2]=f[h+(e*1080|0)+808>>2];ki(c,14432,t)|0;Mh(14449,5,1,c)|0;e=e+1|0}while((e|0)!=(b|0))}Mh(14036,4,1,c)|0;u=w;return}function Nd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;k=u;u=u+48|0;j=k+24|0;i=k+16|0;h=k;g=k+32|0;e=(c|0)!=0;if(e){Mh(14581,41,1,f[665]|0)|0;c=0}else{b[g>>0]=9;b[g+1>>0]=9;c=2}b[g+c>>0]=0;l=f[a>>2]|0;c=f[a+4>>2]|0;f[h>>2]=g;f[h+4>>2]=l;f[h+8>>2]=c;ki(d,14623,h)|0;h=f[a+24>>2]|0;f[i>>2]=g;f[i+4>>2]=h;ki(d,14640,i)|0;i=f[a+32>>2]|0;f[j>>2]=g;f[j+4>>2]=i;ki(d,14652,j)|0;if(!e){u=k;return}Mh(13879,2,1,d)|0;u=k;return}function Od(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;l=u;u=u+16|0;d=l;c=a+80|0;j=f[(f[c>>2]|0)+16>>2]|0;b=Ic(1,56)|0;f[d>>2]=b;if(!b){k=0;u=l;return k|0}c=f[(f[c>>2]|0)+16>>2]|0;f[b+24>>2]=c;f[b>>2]=f[a+92>>2];f[b+4>>2]=f[a+96>>2];f[b+8>>2]=f[a+100>>2];f[b+12>>2]=f[a+104>>2];f[b+16>>2]=f[a+112>>2];f[b+20>>2]=f[a+116>>2];f[b+52>>2]=0;a=f[a+12>>2]|0;f[b+32>>2]=f[a>>2];f[b+36>>2]=f[a+4>>2];f[b+40>>2]=f[a+8>>2];f[b+44>>2]=f[a+16>>2];c=Ic(c,1080)|0;i=b+48|0;f[i>>2]=c;if(!c){$b(d);k=0;u=l;return k|0}if(!j){k=b;u=l;return k|0}h=a+5584|0;a=0;while(1){g=f[h>>2]|0;f[c+(a*1080|0)+4>>2]=f[g+(a*1080|0)>>2];d=g+(a*1080|0)+4|0;e=f[d>>2]|0;f[c+(a*1080|0)+8>>2]=e;f[c+(a*1080|0)+12>>2]=f[g+(a*1080|0)+8>>2];f[c+(a*1080|0)+16>>2]=f[g+(a*1080|0)+12>>2];f[c+(a*1080|0)+20>>2]=f[g+(a*1080|0)+16>>2];f[c+(a*1080|0)+24>>2]=f[g+(a*1080|0)+20>>2];if(e>>>0<33){hj(c+(a*1080|0)+948|0,g+(a*1080|0)+944|0,e|0)|0;hj(c+(a*1080|0)+816|0,g+(a*1080|0)+812|0,f[d>>2]|0)|0}e=f[g+(a*1080|0)+24>>2]|0;f[c+(a*1080|0)+28>>2]=e;f[c+(a*1080|0)+808>>2]=f[g+(a*1080|0)+804>>2];if((e|0)!=1){d=(f[d>>2]|0)*3|0;if((d+-3|0)>>>0<96){e=d+-2|0;k=10}}else{e=1;k=10}if((k|0)==10){k=0;d=0;do{f[c+(a*1080|0)+32+(d<<2)>>2]=f[g+(a*1080|0)+28+(d<<3)+4>>2];f[c+(a*1080|0)+420+(d<<2)>>2]=f[g+(a*1080|0)+28+(d<<3)>>2];d=d+1|0}while((d|0)!=(e|0))}f[c+(a*1080|0)+812>>2]=f[g+(a*1080|0)+808>>2];a=a+1|0;if((a|0)==(j|0))break;c=f[i>>2]|0}u=l;return b|0}function Pd(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0;b=Ic(1,48)|0;if(!b){k=0;return k|0}h=a+196|0;c=f[h>>2]|0;j=c;k=f[j+4>>2]|0;a=b;f[a>>2]=f[j>>2];f[a+4>>2]=k;a=c+8|0;k=f[a+4>>2]|0;j=b+8|0;f[j>>2]=f[a>>2];f[j+4>>2]=k;j=c+16|0;k=f[j+4>>2]|0;a=b+16|0;f[a>>2]=f[j>>2];f[a+4>>2]=k;c=f[c+24>>2]|0;a=b+24|0;f[a>>2]=c;c=Hc(c*24|0)|0;k=b+28|0;f[k>>2]=c;if(!c){Mc(b);k=0;return k|0}d=f[(f[h>>2]|0)+28>>2]|0;if(!d){Mc(c);f[k>>2]=0}else hj(c|0,d|0,(f[a>>2]|0)*24|0)|0;a=f[(f[h>>2]|0)+36>>2]|0;g=b+36|0;f[g>>2]=a;a=Ic(a,40)|0;j=b+40|0;f[j>>2]=a;if(!a){Mc(f[k>>2]|0);Mc(b);k=0;return k|0}c=f[(f[h>>2]|0)+40>>2]|0;if(!c){Mc(a);f[j>>2]=0;k=b;return k|0}if(!(f[g>>2]|0)){k=b;return k|0}c=f[c+20>>2]|0;f[a+20>>2]=c;c=Hc(c*24|0)|0;a=f[j>>2]|0;f[a+24>>2]=c;a:do if(!c)d=0;else{d=0;while(1){e=f[(f[(f[h>>2]|0)+40>>2]|0)+(d*40|0)+24>>2]|0;if(!e){Mc(c);a=f[j>>2]|0;f[a+(d*40|0)+24>>2]=0}else{hj(c|0,e|0,(f[a+(d*40|0)+20>>2]|0)*24|0)|0;a=f[j>>2]|0}c=f[(f[(f[h>>2]|0)+40>>2]|0)+(d*40|0)+4>>2]|0;f[a+(d*40|0)+4>>2]=c;c=Hc(c*24|0)|0;a=f[j>>2]|0;f[a+(d*40|0)+16>>2]=c;if(!c)break;e=f[(f[(f[h>>2]|0)+40>>2]|0)+(d*40|0)+16>>2]|0;if(!e){Mc(c);a=f[j>>2]|0;f[a+(d*40|0)+16>>2]=0}else{hj(c|0,e|0,(f[a+(d*40|0)+4>>2]|0)*24|0)|0;a=f[j>>2]|0}f[a+(d*40|0)+32>>2]=0;f[a+(d*40|0)+36>>2]=0;d=d+1|0;if(d>>>0>=(f[g>>2]|0)>>>0){i=28;break}c=f[(f[(f[h>>2]|0)+40>>2]|0)+(d*40|0)+20>>2]|0;f[a+(d*40|0)+20>>2]=c;c=Hc(c*24|0)|0;a=f[j>>2]|0;f[a+(d*40|0)+24>>2]=c;if(!c)break a}if((i|0)==28)return b|0;if(d){c=0;do{Mc(f[a+(c*40|0)+24>>2]|0);Mc(f[(f[j>>2]|0)+(c*40|0)+16>>2]|0);c=c+1|0;a=f[j>>2]|0}while((c|0)!=(d|0))}Mc(a);Mc(f[k>>2]|0);Mc(b);k=0;return k|0}while(0);if(d){c=0;do{Mc(f[a+(c*40|0)+24>>2]|0);c=c+1|0;a=f[j>>2]|0}while((c|0)!=(d|0))}Mc(a);Mc(f[k>>2]|0);Mc(b);k=0;return k|0}function Qd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;if(!c){c=0;return c|0}e=Sb()|0;k=a+84|0;f[k>>2]=e;if(!e){c=0;return c|0}Ub(c,e);i=a+188|0;kg(f[i>>2]|0,28,d)|0;i=f[i>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](a,b,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){c=a+80|0;Qb(f[c>>2]|0);f[c>>2]=0;c=0;return c|0}}else ng(i);i=f[c+16>>2]|0;if(!i){c=1;return c|0}h=f[(f[k>>2]|0)+24>>2]|0;g=f[c+24>>2]|0;e=0;do{f[g+(e*52|0)+36>>2]=f[h+(e*52|0)+36>>2];c=h+(e*52|0)+44|0;f[g+(e*52|0)+44>>2]=f[c>>2];f[c>>2]=0;e=e+1|0}while(e>>>0>>0);e=1;return e|0}function Rd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=u;u=u+80|0;v=C+32|0;w=C+24|0;B=C+16|0;A=C+8|0;o=C+64|0;z=C+60|0;p=C+56|0;q=C+52|0;r=C+48|0;s=C+44|0;t=C+40|0;k=C+36|0;f[o>>2]=1;d=Hc(1e3)|0;if(!d){Mb(c,1,14664,C)|0;B=0;u=C;return B|0}x=a+116|0;y=a+112|0;l=a+204|0;m=a+84|0;n=a+8|0;j=0;e=1e3;while(1){if(!(Gd(a,z,p,q,r,s,t,k,o,b,c)|0)){e=5;break}if(!(f[o>>2]|0)){e=17;break}i=f[p>>2]|0;if(i>>>0>e>>>0){e=Lc(d,i)|0;if(!e){e=9;break}else{d=e;h=i}}else h=e;g=f[z>>2]|0;if(!(Hd(a,g,d,i,b,c)|0)){e=11;break}e=g+1|0;i=X(f[y>>2]|0,f[x>>2]|0)|0;f[w>>2]=e;f[w+4>>2]=i;Mb(c,4,14768,w)|0;i=f[l>>2]|0;if(!(Sd(f[(f[f[i+20>>2]>>2]|0)+20>>2]|0,f[i+24>>2]|0,d,f[(f[m>>2]|0)+24>>2]|0)|0)){e=13;break}f[v>>2]=e;Mb(c,4,14798,v)|0;i=Ib(b)|0;if((i|0)==0&(I|0)==0?(f[n>>2]|0)==64:0){e=17;break}j=j+1|0;if((j|0)==(X(f[y>>2]|0,f[x>>2]|0)|0)){e=17;break}else e=h}if((e|0)==5){Mc(d);B=0;u=C;return B|0}else if((e|0)==9){Mc(d);B=X(f[y>>2]|0,f[x>>2]|0)|0;f[A>>2]=(f[z>>2]|0)+1;f[A+4>>2]=B;Mb(c,1,14699,A)|0;B=0;u=C;return B|0}else if((e|0)==11){Mc(d);A=X(f[y>>2]|0,f[x>>2]|0)|0;f[B>>2]=g+1;f[B+4>>2]=A;Mb(c,1,14739,B)|0;B=0;u=C;return B|0}else if((e|0)==13){Mc(d);B=0;u=C;return B|0}else if((e|0)==17){Mc(d);B=1;u=C;return B|0}return 0}function Sd(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=c+16|0;if(!(f[E>>2]|0)){E=1;return E|0}D=0;C=f[c+24>>2]|0;while(1){l=g+44|0;c=f[l>>2]|0;m=g+8|0;if(!c){c=f[m>>2]|0;k=g+12|0;i=f[k>>2]|0;if(!i){e=0;a=66;break}if(c>>>0>(4294967295/(i>>>0)|0)>>>0){e=0;a=66;break}c=Ic(X(i,c)|0,4)|0;f[l>>2]=c;if(!c){e=0;a=66;break}}else k=g+12|0;o=C+36|0;f[g+36>>2]=f[o>>2];v=f[C+24>>2]|0;t=f[a+24>>2]|0;o=f[o>>2]|0;v=(v>>>3)+((v&7|0)!=0&1)|0;w=(v|0)==3;n=f[t+(o*136|0)+8>>2]|0;i=f[t+(o*136|0)>>2]|0;y=n-i|0;s=f[t+(o*136|0)+12>>2]|0;o=f[t+(o*136|0)+4>>2]|0;t=s-o|0;l=f[g+16>>2]|0;p=f[g+40>>2]|0;q=fj(1,0,p|0)|0;B=I;l=Zi(l|0,0,-1,-1)|0;l=Zi(l|0,I|0,q|0,B|0)|0;l=ej(l|0,I|0,p|0)|0;A=Zi(f[g+20>>2]|0,0,-1,-1)|0;B=Zi(A|0,I|0,q|0,B|0)|0;p=ej(B|0,I|0,p|0)|0;B=f[m>>2]|0;m=B+l|0;k=f[k>>2]|0;q=k+p|0;do if(i>>>0<=l>>>0){i=l-i|0;if(n>>>0>m>>>0){A=B;x=i;r=0;u=n-m|0;break}else{A=y-i|0;x=i;r=0;u=0;break}}else{z=n>>>0>m>>>0;u=m-i|0;A=z?u:y;x=0;r=i-l|0;u=z?y-u|0:0}while(0);do if(o>>>0<=p>>>0){i=p-o|0;if(s>>>0>q>>>0){z=k;n=i;l=0;i=s-q|0;break}else{z=t-i|0;n=i;l=0;i=0;break}}else{s=s>>>0>q>>>0;i=q-o|0;z=s?i:t;n=0;l=o-p|0;i=s?t-i|0:0}while(0);if((x|u|A|i|n|z|0)<0){e=0;a=66;break}m=X(n,y)|0;k=m+x|0;p=x+u|0;q=(X(i,y)|0)-x|0;l=c+((X(B,l)|0)+r<<2)|0;switch((w?4:v)&1073741823|0){case 1:{i=e+k|0;c=(z|0)!=0;do if(!(f[C+32>>2]|0))if(c){if(!A){e=e+(u+m+(X(p,z+-1|0)|0)+(x<<1))|0;break}o=A+u+m+(X(A+x+u|0,z+-1|0)|0)+(x<<1)|0;n=0;c=i;while(1){m=c+A|0;k=0;i=l;while(1){f[i>>2]=h[c>>0];k=k+1|0;if((k|0)==(A|0))break;else{c=c+1|0;i=i+4|0}}n=n+1|0;if((n|0)==(z|0))break;else{c=m+p|0;l=l+(B<<2)|0}}e=e+o|0}else e=i;else if(c){if(!A){e=e+(u+m+(X(p,z+-1|0)|0)+(x<<1))|0;break}o=A+u+m+(X(A+x+u|0,z+-1|0)|0)+(x<<1)|0;c=i;k=0;while(1){n=c+A|0;m=0;i=l;while(1){f[i>>2]=b[c>>0];m=m+1|0;if((m|0)==(A|0))break;else{c=c+1|0;i=i+4|0}}k=k+1|0;if((k|0)==(z|0))break;else{c=n+p|0;l=l+(B<<2)|0}}e=e+o|0}else e=i;while(0);e=e+q|0;break}case 2:{c=e+(k<<1)|0;i=(z|0)!=0;do if(!(f[C+32>>2]|0))if(i){if(!A){e=e+((X(n<<1,y)|0)+(X(p<<1,z+-1|0)|0)+(x<<2)+(u<<1))|0;break}e=e+((X(A+p<<1,z+-1|0)|0)+(x<<2)+(A+u+m<<1))|0;n=0;while(1){m=c+(A<<1)|0;k=0;i=l;while(1){f[i>>2]=j[c>>1];k=k+1|0;if((k|0)==(A|0))break;else{c=c+2|0;i=i+4|0}}n=n+1|0;if((n|0)==(z|0))break;else{c=m+(p<<1)|0;l=l+(B<<2)|0}}}else e=c;else if(i){if(!A){e=e+((X(n<<1,y)|0)+(X(p<<1,z+-1|0)|0)+(x<<2)+(u<<1))|0;break}e=e+((X(A+p<<1,z+-1|0)|0)+(x<<2)+(A+u+m<<1))|0;n=0;while(1){m=c+(A<<1)|0;i=0;k=l;while(1){f[k>>2]=d[c>>1];i=i+1|0;if((i|0)==(A|0))break;else{c=c+2|0;k=k+4|0}}n=n+1|0;if((n|0)==(z|0))break;else{c=m+(p<<1)|0;l=l+(B<<2)|0}}}else e=c;while(0);e=e+(q<<1)|0;break}case 4:{c=e+(k<<2)|0;do if(!z)e=c;else{if(!A){e=e+((X(n<<2,y)|0)+(X(p<<2,z+-1|0)|0)+(x<<3)+(u<<2))|0;break}e=e+((X(A+p<<2,z+-1|0)|0)+(x<<3)+(A+u+m<<2))|0;n=0;while(1){m=c+(A<<2)|0;i=0;k=l;while(1){f[k>>2]=f[c>>2];i=i+1|0;if((i|0)==(A|0))break;else{c=c+4|0;k=k+4|0}}n=n+1|0;if((n|0)==(z|0))break;else{c=m+(p<<2)|0;l=l+(B<<2)|0}}}while(0);e=e+(q<<2)|0;break}default:{}}D=D+1|0;if(D>>>0>=(f[E>>2]|0)>>>0){e=1;a=66;break}else{a=a+52|0;g=g+52|0;C=C+52|0}}if((a|0)==66)return e|0;return 0}function Td(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0;s=u;u=u+16|0;i=s+8|0;if(!c){Mb(d,1,14842,s)|0;r=0;u=s;return r|0}h=f[a+112>>2]|0;g=X(f[a+116>>2]|0,h)|0;if(g>>>0<=e>>>0){f[i>>2]=e;f[i+4>>2]=g+-1;Mb(d,1,14880,i)|0;r=0;u=s;return r|0}r=(e>>>0)%(h>>>0)|0;q=(e>>>0)/(h>>>0)|0;h=a+100|0;g=X(f[h>>2]|0,r)|0;i=a+92|0;g=g+(f[i>>2]|0)|0;f[c>>2]=g;p=a+80|0;j=f[f[p>>2]>>2]|0;g=g>>>0>>0?j:g;f[c>>2]=g;r=X(f[h>>2]|0,r+1|0)|0;i=r+(f[i>>2]|0)|0;r=c+8|0;f[r>>2]=i;h=f[(f[p>>2]|0)+8>>2]|0;i=i>>>0>h>>>0?h:i;f[r>>2]=i;r=a+104|0;h=X(f[r>>2]|0,q)|0;j=a+96|0;h=h+(f[j>>2]|0)|0;n=c+4|0;f[n>>2]=h;o=f[(f[p>>2]|0)+4>>2]|0;h=h>>>0>>0?o:h;f[n>>2]=h;q=X(f[r>>2]|0,q+1|0)|0;j=q+(f[j>>2]|0)|0;q=c+12|0;f[q>>2]=j;r=f[(f[p>>2]|0)+12>>2]|0;j=j>>>0>r>>>0?r:j;f[q>>2]=j;q=c+24|0;r=c+16|0;n=f[r>>2]|0;if(n|0){o=f[(f[p>>2]|0)+24>>2]|0;m=g+-1|0;l=h+-1|0;k=i+-1|0;i=j+-1|0;g=0;h=f[q>>2]|0;while(1){j=f[o+(g*52|0)+40>>2]|0;f[h+40>>2]=j;z=f[h>>2]|0;y=(m+z|0)/(z|0)|0;f[h+16>>2]=y;t=f[h+4>>2]|0;x=(l+t|0)/(t|0)|0;f[h+20>>2]=x;z=(k+z|0)/(z|0)|0;t=(i+t|0)/(t|0)|0;w=fj(1,0,j|0)|0;v=I;z=Zi(z|0,((z|0)<0)<<31>>31|0,-1,-1)|0;z=Zi(z|0,I|0,w|0,v|0)|0;z=dj(z|0,I|0,j|0)|0;y=Zi(y|0,((y|0)<0)<<31>>31|0,-1,-1)|0;y=Zi(y|0,I|0,w|0,v|0)|0;y=dj(y|0,I|0,j|0)|0;f[h+8>>2]=z-y;t=Zi(t|0,((t|0)<0)<<31>>31|0,-1,-1)|0;t=Zi(t|0,I|0,w|0,v|0)|0;t=dj(t|0,I|0,j|0)|0;x=Zi(x|0,((x|0)<0)<<31>>31|0,-1,-1)|0;v=Zi(x|0,I|0,w|0,v|0)|0;j=dj(v|0,I|0,j|0)|0;f[h+12>>2]=t-j;g=g+1|0;if(g>>>0>=n>>>0)break;else h=h+52|0}}l=a+84|0;g=f[l>>2]|0;if(g|0)Qb(g);g=Sb()|0;f[l>>2]=g;if(!g){z=0;u=s;return z|0}Ub(c,g);f[a+60>>2]=e;j=a+188|0;kg(f[j>>2]|0,29,d)|0;j=f[j>>2]|0;k=lg(j)|0;g=mg(j)|0;if(k){h=1;i=0;while(1){if(!h)h=0;else h=(Ma[f[g>>2]&63](a,b,d)|0)!=0;i=i+1|0;if((i|0)==(k|0))break;else{g=g+4|0;h=h&1}}ng(j);if(!h){Qb(f[p>>2]|0);f[p>>2]=0;z=0;u=s;return z|0}}else ng(j);g=f[r>>2]|0;if(!g){z=1;u=s;return z|0}k=0;j=f[(f[l>>2]|0)+24>>2]|0;i=f[q>>2]|0;while(1){f[i+(k*52|0)+36>>2]=f[j+(k*52|0)+36>>2];h=f[i+(k*52|0)+44>>2]|0;if(!h)h=j;else{Mc(h);h=f[(f[l>>2]|0)+24>>2]|0;i=f[q>>2]|0;g=f[r>>2]|0}z=h+(k*52|0)+44|0;f[i+(k*52|0)+44>>2]=f[z>>2];f[z>>2]=0;k=k+1|0;if(k>>>0>=g>>>0){g=1;break}else j=h}u=s;return g|0}function Ud(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;E=u;u=u+96|0;A=E+56|0;z=E+48|0;y=E+40|0;C=E+32|0;B=E+24|0;j=E+16|0;i=E+8|0;q=E+92|0;r=E+88|0;s=E+84|0;t=E+80|0;v=E+76|0;w=E+72|0;x=E+68|0;o=E+64|0;f[q>>2]=1;d=Hc(1e3)|0;if(!d){Mb(c,1,14941,E)|0;D=0;u=E;return D|0}p=a+196|0;e=f[p>>2]|0;g=f[e+40>>2]|0;a:do if(!g){g=X(f[a+116>>2]|0,f[a+112>>2]|0)|0;f[e+36>>2]=g;g=Ic(g,40)|0;e=f[p>>2]|0;f[e+40>>2]=g;b:do if(g|0){if(f[e+36>>2]|0){h=0;do{f[g+(h*40|0)+28>>2]=100;f[g+(h*40|0)+20>>2]=0;n=Ic(100,24)|0;e=f[p>>2]|0;g=f[e+40>>2]|0;f[g+(h*40|0)+24>>2]=n;h=h+1|0;if(!n)break b}while(h>>>0<(f[e+36>>2]|0)>>>0)}e=f[a+60>>2]|0;if(!g)break a;else{h=e;D=11;break a}}while(0);Mc(d);D=0;u=E;return D|0}else{h=f[a+60>>2]|0;D=11}while(0);if((D|0)==11)if(f[g+16>>2]|0){if(!(f[g+(h*40|0)+4>>2]|0)){n=a+64|0;n=Zi(f[n>>2]|0,f[n+4>>2]|0,2,0)|0;if(!(tb(b,n,I,c)|0)){Mb(c,1,14979,i)|0;Mc(d);D=0;u=E;return D|0}}else{n=f[g+(h*40|0)+16>>2]|0;n=Zi(f[n>>2]|0,f[n+4>>2]|0,2,0)|0;if(!(tb(b,n,I,c)|0)){Mb(c,1,14979,j)|0;Mc(d);D=0;u=E;return D|0}}e=a+8|0;if((f[e>>2]|0)==256){f[e>>2]=8;e=h}else e=h}else e=h;c:do if(Gd(a,r,s,t,v,w,x,o,q,b,c)|0){j=a+116|0;k=a+112|0;l=a+204|0;m=a+84|0;n=e+1|0;g=1e3;while(1){if(!(f[q>>2]|0))break;h=f[s>>2]|0;if(h>>>0>g>>>0){g=Lc(d,h)|0;if(!g){D=25;break}else{d=g;g=h}}i=f[r>>2]|0;if(!(Hd(a,i,d,h,b,c)|0)){D=27;break}h=i+1|0;F=X(f[k>>2]|0,f[j>>2]|0)|0;f[C>>2]=h;f[C+4>>2]=F;Mb(c,4,14768,C)|0;F=f[l>>2]|0;if(!(Sd(f[(f[f[F+20>>2]>>2]|0)+20>>2]|0,f[F+24>>2]|0,d,f[(f[m>>2]|0)+24>>2]|0)|0)){D=29;break}f[y>>2]=h;Mb(c,4,14798,y)|0;if((i|0)==(e|0)){D=31;break}f[A>>2]=h;f[A+4>>2]=n;Mb(c,2,15007,A)|0;if(!(Gd(a,r,s,t,v,w,x,o,q,b,c)|0))break c}if((D|0)==25){Mc(d);F=X(f[k>>2]|0,f[j>>2]|0)|0;f[B>>2]=(f[r>>2]|0)+1;f[B+4>>2]=F;Mb(c,1,14699,B)|0;F=0;u=E;return F|0}else if((D|0)==27){Mc(d);F=0;u=E;return F|0}else if((D|0)==29){Mc(d);F=0;u=E;return F|0}else if((D|0)==31){F=(f[p>>2]|0)+8|0;F=Zi(f[F>>2]|0,f[F+4>>2]|0,2,0)|0;if(!(tb(b,F,I,c)|0)){Mb(c,1,14979,z)|0;Mc(d);F=0;u=E;return F|0}}Mc(d);F=1;u=E;return F|0}while(0);Mc(d);F=0;u=E;return F|0}function Vd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+16|0;j=k;f[a+168>>2]=b;e=f[a+80>>2]|0;a:do if((((e|0)!=0?(i=f[e+24>>2]|0,(i|0)!=0):0)?(h=a+12|0,d=f[h>>2]|0,(d|0)!=0):0)?(g=f[d+5584>>2]|0,(g|0)!=0):0){d=f[e+16>>2]|0;if(!d)a=1;else{if((f[g+4>>2]|0)>>>0>b>>>0){a=0;do{f[i+(a*52|0)+40>>2]=b;a=a+1|0;if(a>>>0>=d>>>0){a=1;break a}}while((f[(f[(f[h>>2]|0)+5584>>2]|0)+(a*1080|0)+4>>2]|0)>>>0>b>>>0)}Mb(c,1,15074,j)|0;a=0}}else a=0;while(0);u=k;return a|0}function Wd(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;Q=u;u=u+48|0;O=Q+32|0;N=Q+24|0;M=Q+16|0;L=Q+8|0;K=Q;G=a+204|0;g=f[G>>2]|0;H=a+116|0;I=a+112|0;J=X(f[I>>2]|0,f[H>>2]|0)|0;A=(J|0)==1;if(!J){P=1;u=Q;return P|0}B=a+200|0;C=a+12|0;D=a+164|0;E=a+8|0;F=g+20|0;z=g+24|0;y=0;m=0;g=0;a:while(1){if((f[B>>2]|0)!=(y|0)){P=5;break}w=y;y=y+1|0;x=X(f[H>>2]|0,f[I>>2]|0)|0;f[L>>2]=y;f[L+4>>2]=x;Mb(e,4,15187,L)|0;f[C>>2]=0;x=f[G>>2]|0;f[x+12>>2]=f[(f[D>>2]|0)+(w*5640|0)+5588>>2];f[E>>2]=0;if(!(Uf(x,f[B>>2]|0,e)|0))break;h=f[G>>2]|0;l=f[(f[h+24>>2]|0)+16>>2]|0;if(l)if(A){j=f[(f[f[F>>2]>>2]|0)+20>>2]|0;k=f[(f[z>>2]|0)+24>>2]|0;i=0;do{f[j+(i*52|0)+32>>2]=f[k+(i*52|0)+44>>2];f[j+(i*52|0)+36>>2]=0;i=i+1|0}while(i>>>0>>0)}else{i=0;do{if(!(Tf((f[(f[f[F>>2]>>2]|0)+20>>2]|0)+(i*52|0)|0)|0)){P=14;break a}i=i+1|0;h=f[G>>2]|0}while(i>>>0<(f[(f[h+24>>2]|0)+16>>2]|0)>>>0)}x=$f(h)|0;if(!A){if(x>>>0>g>>>0){g=Lc(m,x)|0;if(!g){P=20;break}else{h=g;g=x}}else h=m;i=f[G>>2]|0;w=i+24|0;j=f[w>>2]|0;if(f[j+16>>2]|0){v=i+20|0;i=h;t=0;do{p=f[(f[f[v>>2]>>2]|0)+20>>2]|0;n=f[j+24>>2]|0;R=f[n+(t*52|0)+24>>2]|0;R=(R>>>3)+((R&7|0)!=0&1)|0;l=f[p+(t*52|0)+8>>2]|0;m=f[p+(t*52|0)>>2]|0;r=l-m|0;o=f[p+(t*52|0)+12>>2]|0;p=f[p+(t*52|0)+4>>2]|0;s=o-p|0;T=f[j>>2]|0;S=f[n+(t*52|0)>>2]|0;k=f[n+(t*52|0)+4>>2]|0;q=(S+~T+(f[j+8>>2]|0)|0)/(S|0)|0;k=m-((T+-1+S|0)/(S|0)|0)+(X(q,p-(((f[j+4>>2]|0)+-1+k|0)/(k|0)|0)|0)|0)|0;k=(f[n+(t*52|0)+44>>2]|0)+(k<<2)|0;b:do switch(((R|0)==3?4:R)&1073741823|0){case 1:{j=(r|0)==0|(s|0)==0;if(!(f[n+(t*52|0)+32>>2]|0)){if(j)break b;p=o+-1-p|0;n=0;o=i;while(1){j=0;l=o;m=k;while(1){b[l>>0]=f[m>>2];j=j+1|0;if((j|0)==(r|0))break;else{l=l+1|0;m=m+4|0}}n=n+1|0;if((n|0)==(s|0))break;else{o=o+r|0;k=k+(q<<2)|0}}i=i+(r+(X(p,r)|0))|0;break b}else{if(j)break b;p=o+-1-p|0;o=i;j=k;k=0;while(1){l=0;m=o;n=j;while(1){b[m>>0]=f[n>>2];l=l+1|0;if((l|0)==(r|0))break;else{m=m+1|0;n=n+4|0}}k=k+1|0;if((k|0)==(s|0))break;else{o=o+r|0;j=j+(q<<2)|0}}i=i+(r+(X(p,r)|0))|0;break b}}case 2:{j=(r|0)==0|(s|0)==0;if(!(f[n+(t*52|0)+32>>2]|0)){if(j)break b;n=l-m<<1;p=n+(X(o+-1-p|0,n)|0)|0;n=i;o=0;while(1){j=0;l=n;m=k;while(1){d[l>>1]=f[m>>2];j=j+1|0;if((j|0)==(r|0))break;else{l=l+2|0;m=m+4|0}}o=o+1|0;if((o|0)==(s|0))break;else{n=n+(r<<1)|0;k=k+(q<<2)|0}}i=i+p|0;break b}else{if(j)break b;n=l-m<<1;p=n+(X(o+-1-p|0,n)|0)|0;n=i;o=0;while(1){j=n;l=0;m=k;while(1){d[j>>1]=f[m>>2];l=l+1|0;if((l|0)==(r|0))break;else{j=j+2|0;m=m+4|0}}o=o+1|0;if((o|0)==(s|0))break;else{n=n+(r<<1)|0;k=k+(q<<2)|0}}i=i+p|0;break b}}case 4:{if(!((r|0)==0|(s|0)==0)){n=l-m<<2;p=n+(X(o+-1-p|0,n)|0)|0;n=i;o=0;while(1){j=n;l=0;m=k;while(1){f[j>>2]=f[m>>2];l=l+1|0;if((l|0)==(r|0))break;else{j=j+4|0;m=m+4|0}}o=o+1|0;if((o|0)==(s|0))break;else{n=n+(r<<2)|0;k=k+(q<<2)|0}}i=i+p|0}break}default:{}}while(0);t=t+1|0;j=f[w>>2]|0}while(t>>>0<(f[j+16>>2]|0)>>>0);i=f[G>>2]|0}if(!(ag(i,h,x)|0)){P=61;break}}else h=m;if(!(Xd(a,c,e)|0)){P=63;break}if(y>>>0>=J>>>0){P=65;break}else m=h}if((P|0)==5)Mb(e,1,15150,K)|0;else if((P|0)==14){Mb(e,1,15208,M)|0;if(!m){T=0;u=Q;return T|0}Mc(m);T=0;u=Q;return T|0}else if((P|0)==20){if(m|0)Mc(m);Mb(e,1,15246,N)|0;T=0;u=Q;return T|0}else if((P|0)==61){Mb(e,1,15285,O)|0;Mc(h);T=0;u=Q;return T|0}else if((P|0)==63){if(!h){T=0;u=Q;return T|0}Mc(h);T=0;u=Q;return T|0}else if((P|0)==65){if(!h){T=1;u=Q;return T|0}Mc(h);T=1;u=Q;return T|0}if(!m){T=0;u=Q;return T|0}Mc(m);T=0;u=Q;return T|0}function Xd(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;H=u;u=u+32|0;D=H+16|0;s=H+8|0;k=H;C=H+20|0;F=f[a+40>>2]|0;G=a+36|0;m=f[G>>2]|0;n=a+204|0;j=f[n>>2]|0;f[j+16>>2]=0;z=a+8|0;f[z>>2]=0;yb(m,65424,2);yb(m+2|0,10,2);E=a+200|0;yb(m+4|0,f[E>>2]|0,2);A=a+12|0;yb(m+10|0,f[A>>2]|0,1);B=a+164|0;yb(m+11|0,f[(f[B>>2]|0)+((f[E>>2]|0)*5640|0)+5588>>2]|0,1);f[C>>2]=12;g=m+12|0;e=F+-12|0;l=a+88|0;if(((d[l>>1]|0)+-3&65535)>=4?(h=f[B>>2]|0,i=f[E>>2]|0,(f[h+(i*5640|0)+420>>2]|0)!=0):0){f[C>>2]=0;Yd(f[(f[a+80>>2]|0)+16>>2]|0,h,i,g,C);y=f[C>>2]|0;h=y+12|0;g=g+y|0;e=e-y|0}else h=12;f[C>>2]=0;yb(g,65427,2);f[j+4>>2]=f[z>>2];f[j+8>>2]=f[A>>2];if(!(f[A>>2]|0))f[(f[f[j+20>>2]>>2]|0)+840>>2]=0;f[C>>2]=0;if(!(Yf(j,f[E>>2]|0,g+2|0,C,e+-4|0,0)|0)){Mb(c,1,15332,k)|0;G=0;u=H;return G|0}e=(f[C>>2]|0)+2|0;f[C>>2]=e;e=e+h|0;yb(m+6|0,e,4);if(((d[l>>1]|0)+-3&65535)<4){y=a+28|0;yb(f[y>>2]|0,f[E>>2]|0,1);x=(f[y>>2]|0)+1|0;f[y>>2]=x;yb(x,e,4);f[y>>2]=(f[y>>2]|0)+4}h=m+e|0;y=F-e|0;v=f[n>>2]|0;w=a+88|0;q=f[B>>2]|0;r=f[E>>2]|0;l=Zd(w,0,r)|0;x=a+8|0;f[A>>2]=(f[A>>2]|0)+1;a:do if(l>>>0>1){m=v+4|0;n=v+8|0;o=v+20|0;p=a+28|0;j=h;g=y;e=0;k=1;while(1){f[x>>2]=k;f[C>>2]=0;yb(j,65424,2);yb(j+2|0,10,2);yb(j+4|0,f[E>>2]|0,2);yb(j+10|0,f[A>>2]|0,1);yb(j+11|0,f[(f[B>>2]|0)+((f[E>>2]|0)*5640|0)+5588>>2]|0,1);h=j+12|0;f[C>>2]=0;yb(h,65427,2);f[m>>2]=f[z>>2];f[n>>2]=f[A>>2];if(!(f[A>>2]|0))f[(f[f[o>>2]>>2]|0)+840>>2]=0;f[C>>2]=0;if(!(Yf(v,f[E>>2]|0,j+14|0,C,g+-16|0,0)|0))break;i=f[C>>2]|0;I=i+2|0;f[C>>2]=I;h=h+I|0;e=e+12+I|0;g=g+-12+(-2-i)|0;i=i+14|0;yb(j+6|0,i,4);if(((d[w>>1]|0)+-3&65535)<4){yb(f[p>>2]|0,f[E>>2]|0,1);I=(f[p>>2]|0)+1|0;f[p>>2]=I;yb(I,i,4);f[p>>2]=(f[p>>2]|0)+4}f[A>>2]=(f[A>>2]|0)+1;k=k+1|0;if(k>>>0>=l>>>0){t=12;break a}else j=h}Mb(c,1,15332,s)|0}else{g=y;e=0;t=12}while(0);b:do if((t|0)==12){o=q+(r*5640|0)+420|0;c:do if(f[o>>2]|0){p=v+16|0;q=v+4|0;r=v+8|0;s=v+20|0;n=a+28|0;m=1;d:while(1){f[p>>2]=m;l=Zd(w,m,f[E>>2]|0)|0;if(l){k=0;while(1){f[x>>2]=k;f[C>>2]=0;yb(h,65424,2);yb(h+2|0,10,2);yb(h+4|0,f[E>>2]|0,2);yb(h+10|0,f[A>>2]|0,1);yb(h+11|0,f[(f[B>>2]|0)+((f[E>>2]|0)*5640|0)+5588>>2]|0,1);i=h+12|0;f[C>>2]=0;yb(i,65427,2);f[q>>2]=f[z>>2];f[r>>2]=f[A>>2];if(!(f[A>>2]|0))f[(f[f[s>>2]>>2]|0)+840>>2]=0;f[C>>2]=0;if(!(Yf(v,f[E>>2]|0,h+14|0,C,g+-16|0,0)|0))break d;I=f[C>>2]|0;j=I+2|0;f[C>>2]=j;e=e+12+j|0;j=i+j|0;g=g+-12+(-2-I)|0;i=I+14|0;yb(h+6|0,i,4);if(((d[w>>1]|0)+-3&65535)<4){yb(f[n>>2]|0,f[E>>2]|0,1);I=(f[n>>2]|0)+1|0;f[n>>2]=I;yb(I,i,4);f[n>>2]=(f[n>>2]|0)+4}f[A>>2]=(f[A>>2]|0)+1;k=k+1|0;if(k>>>0>=l>>>0){h=j;break}else h=j}}m=m+1|0;if(m>>>0>(f[o>>2]|0)>>>0)break c}Mb(c,1,15332,D)|0;break b}while(0);I=e-y+F|0;if((Fb(b,f[G>>2]|0,I,c)|0)!=(I|0)){I=0;u=H;return I|0}f[E>>2]=(f[E>>2]|0)+1;I=1;u=H;return I|0}while(0);I=0;u=H;return I|0}function Yd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;g=f[b+(c*5640|0)+5584>>2]|0;l=(f[b+(c*5640|0)+420>>2]|0)+1|0;i=a>>>0<257?1:2;k=X(l,(i<<1)+5|0)|0;j=k+4|0;yb(d,65375,2);yb(d+2|0,k+2|0,2);if(!l){f[e>>2]=j;return}k=b+(c*5640|0)+8|0;h=g+4|0;b=b+(c*5640|0)+424|0;c=0;g=d+4|0;while(1){yb(g,f[b>>2]|0,1);g=g+1|0;yb(g,f[b+4>>2]|0,i);g=g+i|0;o=b+8|0;yb(g,f[o>>2]|0,2);g=g+2|0;m=b+12|0;yb(g,f[m>>2]|0,1);g=g+1|0;d=b+16|0;yb(g,f[d>>2]|0,i);g=g+i|0;yb(g,f[b+36>>2]|0,1);p=f[o>>2]|0;n=f[k>>2]|0;f[o>>2]=(p|0)<(n|0)?p:n;o=f[m>>2]|0;n=f[h>>2]|0;f[m>>2]=(o|0)<(n|0)?o:n;m=f[d>>2]|0;f[d>>2]=(m|0)<(a|0)?m:a;c=c+1|0;if((c|0)==(l|0))break;else{b=b+148|0;g=g+1|0}}f[e>>2]=j;return}function Zd(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;i=f[a+76>>2]|0;e=f[i+(d*5640|0)+4>>2]|0;j=696;while(1){m=f[j>>2]|0;if((m|0)==-1|(m|0)==(e|0))break;else j=j+12|0}if(!(b[a+93>>0]&8)){a=1;return a|0}m=h[a+92>>0]|0;g=i+(d*5640|0)+424+(c*148|0)+92|0;k=i+(d*5640|0)+424+(c*148|0)+88|0;l=i+(d*5640|0)+424+(c*148|0)+96|0;i=i+(d*5640|0)+424+(c*148|0)+84|0;c=b[j+4>>0]|0;switch(c|0){case 67:{e=g;n=8;break}case 82:{e=k;n=8;break}case 80:{e=l;n=8;break}case 76:{e=i;n=8;break}default:e=1}if((n|0)==8)e=f[e>>2]|0;if((m|0)!=(c|0)){d=b[j+5>>0]|0;switch(d|0){case 67:{c=g;n=16;break}case 82:{c=k;n=16;break}case 80:{c=l;n=16;break}case 76:{c=i;n=16;break}default:{}}if((n|0)==16)e=X(f[c>>2]|0,e)|0;if((m|0)!=(d|0)){d=b[j+6>>0]|0;switch(d|0){case 67:{c=g;n=22;break}case 82:{c=k;n=22;break}case 80:{c=l;n=22;break}case 76:{c=i;n=22;break}default:{}}if((n|0)==22)e=X(f[c>>2]|0,e)|0;if((m|0)!=(d|0)){c=b[j+7>>0]|0;switch(c|0){case 67:{n=28;break}case 82:{g=k;n=28;break}case 80:{g=l;n=28;break}case 76:{g=i;n=28;break}default:{}}if((n|0)==28)e=X(f[g>>2]|0,e)|0;if((m|0)==(c|0))g=3;else{a=e;return a|0}}else g=2}else g=1}else g=0;f[a+84>>2]=g;a=e;return a|0}function _d(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0;e=a+188|0;if(!(kg(f[e>>2]|0,30,c)|0)){j=0;return j|0}if(((d[a+88>>1]|0)+-3&65535)<4?(kg(f[e>>2]|0,31,c)|0)==0:0){j=0;return j|0}if(!(kg(f[e>>2]|0,32,c)|0)){j=0;return j|0}if(!(kg(f[e>>2]|0,33,c)|0)){j=0;return j|0}if(!(kg(f[e>>2]|0,34,c)|0)){j=0;return j|0}j=f[e>>2]|0;i=lg(j)|0;e=mg(j)|0;if(!i)e=1;else{g=e;e=1;h=0;while(1){if(!e)e=0;else e=(Ma[f[g>>2]&63](a,b,c)|0)!=0;e=e&1;h=h+1|0;if((h|0)==(i|0))break;else g=g+4|0}}ng(j);j=e;return j|0}function $d(a,b,c){a=a|0;b=b|0;c=c|0;a=a+44|0;yb(f[a>>2]|0,65497,2);if((Fb(b,f[a>>2]|0,2,c)|0)!=2){c=0;return c|0}c=(Gb(b,c)|0)!=0&1;return c|0}function ae(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;g=(f[a+32>>2]|0)*5|0;i=a+16|0;i=Zi(f[i>>2]|0,f[i+4>>2]|0,6,0)|0;h=I;d=Hb(b)|0;e=I;if(!(Kb(b,i,h,c)|0)){i=0;return i|0}if((Fb(b,f[a+24>>2]|0,g,c)|0)!=(g|0)){i=0;return i|0}i=(Kb(b,d,e,c)|0)!=0&1;return i|0}function be(a,b,c){a=a|0;b=b|0;c=c|0;a=f[a+196>>2]|0;if(!a)return 1;b=Hb(b)|0;c=a;c=_i(b|0,I|0,f[c>>2]|0,f[c+4>>2]|0)|0;b=a+16|0;f[b>>2]=c;f[b+4>>2]=I;return 1}function ce(a,b,c){a=a|0;b=b|0;c=c|0;b=a+204|0;Qf(f[b>>2]|0);f[b>>2]=0;b=a+24|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0;f[a+28>>2]=0}c=a+36|0;b=f[c>>2]|0;if(!b){a=a+40|0;f[a>>2]=0;return 1}Mc(b);f[c>>2]=0;a=a+40|0;f[a>>2]=0;return 1}function de(a,b,c){a=a|0;b=b|0;c=c|0;b=a+44|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}f[a+48>>2]=0;return 1}function ee(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=u;u=u+16|0;g=Sb()|0;k=a+80|0;f[k>>2]=g;if(!g){Mb(e,1,15352,l)|0;e=0;u=l;return e|0}Ub(c,g);i=f[c+24>>2]|0;if(i|0?(j=f[c+16>>2]|0,j|0):0){g=0;do{c=i+(g*52|0)+44|0;h=f[c>>2]|0;if(h|0){f[(f[(f[k>>2]|0)+24>>2]|0)+(g*52|0)+44>>2]=h;f[c>>2]=0}g=g+1|0}while(g>>>0>>0)}g=a+192|0;if(!(kg(f[g>>2]|0,35,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,36,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,37,e)|0)){e=0;u=l;return e|0}i=f[g>>2]|0;j=lg(i)|0;g=mg(i)|0;if(j){c=1;h=0;while(1){if(!c)c=0;else c=(Ma[f[g>>2]&63](a,b,e)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{g=g+4|0;c=c&1}}ng(i);if(!c){e=0;u=l;return e|0}}else ng(i);g=a+188|0;if(!(kg(f[g>>2]|0,38,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,39,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,40,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,41,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,42,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,43,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,44,e)|0)){e=0;u=l;return e|0}c=a+88|0;if(((d[c>>1]|0)+-3&65535)<4){if(!(kg(f[g>>2]|0,45,e)|0)){e=0;u=l;return e|0}if((d[c>>1]|0)==4?(kg(f[g>>2]|0,46,e)|0)==0:0){e=0;u=l;return e|0}}if(!(kg(f[g>>2]|0,47,e)|0)){e=0;u=l;return e|0}if(f[a+108>>2]|0?(kg(f[g>>2]|0,48,e)|0)==0:0){e=0;u=l;return e|0}if(d[c>>1]&256?(kg(f[g>>2]|0,49,e)|0)==0:0){e=0;u=l;return e|0}if(f[a+196>>2]|0?(kg(f[g>>2]|0,50,e)|0)==0:0){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,51,e)|0)){e=0;u=l;return e|0}if(!(kg(f[g>>2]|0,52,e)|0)){e=0;u=l;return e|0}j=f[g>>2]|0;i=lg(j)|0;g=mg(j)|0;if(!i)g=1;else{c=g;g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[c>>2]&63](a,b,e)|0)!=0;g=g&1;h=h+1|0;if((h|0)==(i|0))break;else c=c+4|0}}ng(j);e=g;u=l;return e|0}function fe(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function ge(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=u;u=u+32|0;d=(f[a+8>>2]|0)==0&(f[a+188>>2]|0)!=0&(f[a+192>>2]|0)!=0&1;b=(f[(f[(f[a+164>>2]|0)+5584>>2]|0)+4>>2]|0)+-1|0;if(b>>>0>31){Mb(c,1,16016,e)|0;c=0;u=e;return c|0}b=1<>2]|0)>>>0>>0){Mb(c,1,16016,e+8|0)|0;c=0;u=e;return c|0}if((f[a+104>>2]|0)>>>0>=b>>>0){c=d;u=e;return c|0}Mb(c,1,16016,e+16|0)|0;c=0;u=e;return c|0}function he(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0;if((d[a+88>>1]&-32256)<<16>>16!=-32256){j=1;return j|0}i=X(f[a+112>>2]|0,f[a+116>>2]|0)|0;if(!i){j=1;return j|0}j=a+80|0;g=f[a+164>>2]|0;b=1;h=0;while(1){if((f[g+16>>2]|0)==2){b=b&(f[g+5608>>2]|0)!=0;e=f[(f[j>>2]|0)+16>>2]|0;if(e){c=0;a=f[g+5584>>2]|0;while(1){b=(f[a+20>>2]&1^1)&b;c=c+1|0;if(c>>>0>=e>>>0)break;else a=a+1080|0}}}h=h+1|0;if((h|0)==(i|0))break;else g=g+5640|0}return b|0}function ie(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;h=a+88|0;i=a+32|0;j=f[a+80>>2]|0;g=X(f[a+116>>2]|0,f[a+112>>2]|0)|0;f[i>>2]=0;if(!g)return 1;a=f[a+164>>2]|0;d=0;while(1){Jf(j,h,d);e=a+420|0;b=0;c=0;do{k=Zd(h,b,d)|0;f[i>>2]=(f[i>>2]|0)+k;c=k+c|0;b=b+1|0}while(b>>>0<=(f[e>>2]|0)>>>0);f[a+5588>>2]=c;d=d+1|0;if((d|0)==(g|0))break;else a=a+5640|0}return 1}function je(a,b,c){a=a|0;b=b|0;c=c|0;a=f[a+44>>2]|0;yb(a,65359,2);return (Fb(b,a,2,c)|0)==2|0}function ke(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+16|0;h=o;i=f[a+80>>2]|0;m=i+16|0;k=(f[m>>2]|0)*3|0;n=k+40|0;g=f[i+24>>2]|0;e=a+48|0;l=a+44|0;d=f[l>>2]|0;do if(n>>>0>(f[e>>2]|0)>>>0){d=Lc(d,n)|0;if(d|0){f[l>>2]=d;f[e>>2]=n;break}Mc(f[l>>2]|0);f[l>>2]=0;f[e>>2]=0;Mb(c,1,15978,h)|0;n=0;u=o;return n|0}while(0);yb(d,65361,2);yb(d+2|0,k+38|0,2);yb(d+4|0,j[a+88>>1]|0,2);yb(d+6|0,f[i+8>>2]|0,4);yb(d+10|0,f[i+12>>2]|0,4);yb(d+14|0,f[i>>2]|0,4);yb(d+18|0,f[i+4>>2]|0,4);yb(d+22|0,f[a+100>>2]|0,4);yb(d+26|0,f[a+104>>2]|0,4);yb(d+30|0,f[a+92>>2]|0,4);yb(d+34|0,f[a+96>>2]|0,4);yb(d+38|0,f[m>>2]|0,2);if(f[m>>2]|0){d=d+40|0;e=0;while(1){yb(d,(f[g+24>>2]|0)+-1+(f[g+32>>2]<<7)|0,1);yb(d+1|0,f[g>>2]|0,1);yb(d+2|0,f[g+4>>2]|0,1);e=e+1|0;if(e>>>0>=(f[m>>2]|0)>>>0)break;else{g=g+52|0;d=d+3|0}}}n=(Fb(b,f[l>>2]|0,n,c)|0)==(n|0)&1;u=o;return n|0}function le(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=u;u=u+32|0;p=q+16|0;o=q+8|0;i=q;j=q+20|0;k=a+164|0;l=f[k>>2]|0;m=a+200|0;n=f[m>>2]|0;d=f[l+(n*5640|0)+5584>>2]|0;if(!(f[d>>2]&1))g=5;else g=(f[d+4>>2]|0)+5|0;h=g+9|0;f[j>>2]=h;e=a+48|0;a=a+44|0;d=f[a>>2]|0;do if(h>>>0>(f[e>>2]|0)>>>0){d=Lc(d,h)|0;if(d|0){f[a>>2]=d;f[e>>2]=h;break}Mc(f[a>>2]|0);f[a>>2]=0;f[e>>2]=0;Mb(c,1,15913,i)|0;p=0;u=q;return p|0}while(0);yb(d,65362,2);yb(d+2|0,g+7|0,2);yb(d+4|0,f[l+(n*5640|0)>>2]|0,1);yb(d+5|0,f[l+(n*5640|0)+4>>2]|0,1);yb(d+6|0,f[l+(n*5640|0)+8>>2]|0,2);yb(d+8|0,f[l+(n*5640|0)+16>>2]|0,1);f[j>>2]=g;if(!(Ae(f[k>>2]|0,f[m>>2]|0,d+9|0,j,c)|0)){Mb(c,1,15952,o)|0;p=0;u=q;return p|0}if(!(f[j>>2]|0)){p=(Fb(b,f[a>>2]|0,h,c)|0)==(h|0)&1;u=q;return p|0}else{Mb(c,1,15952,p)|0;p=0;u=q;return p|0}return 0}function me(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+32|0;n=o+16|0;m=o+8|0;i=o;k=o+20|0;l=a+200|0;j=a+164|0;d=f[(f[j>>2]|0)+((f[l>>2]|0)*5640|0)+5584>>2]|0;e=f[d+24>>2]|0;if((e|0)==1)d=1;else d=((f[d+4>>2]|0)*3|0)+-2|0;g=(e|0)==0?d+1|0:d<<1|1;h=g+4|0;f[k>>2]=h;e=a+48|0;a=a+44|0;d=f[a>>2]|0;do if(h>>>0>(f[e>>2]|0)>>>0){d=Lc(d,h)|0;if(d|0){f[a>>2]=d;f[e>>2]=h;break}Mc(f[a>>2]|0);f[a>>2]=0;f[e>>2]=0;Mb(c,1,15848,i)|0;n=0;u=o;return n|0}while(0);yb(d,65372,2);yb(d+2|0,g+2|0,2);f[k>>2]=g;if(!(ze(f[j>>2]|0,f[l>>2]|0,0,d+4|0,k,c)|0)){Mb(c,1,15887,m)|0;n=0;u=o;return n|0}if(!(f[k>>2]|0)){n=(Fb(b,f[a>>2]|0,h,c)|0)==(h|0)&1;u=o;return n|0}else{Mb(c,1,15887,n)|0;n=0;u=o;return n|0}return 0}function ne(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0;w=u;u=u+16|0;t=w;q=w+4|0;r=a+80|0;d=f[(f[r>>2]|0)+16>>2]|0;if(d>>>0<=1){v=1;u=w;return v|0}n=a+164|0;o=a+200|0;s=a+48|0;m=a+44|0;l=1;a=d;while(1){e=f[n>>2]|0;h=f[o>>2]|0;g=f[e+(h*5640|0)+5584>>2]|0;i=f[g+(l*1080|0)>>2]|0;a:do if((((((f[g>>2]|0)==(i|0)?(p=f[g+4>>2]|0,(p|0)==(f[g+(l*1080|0)+4>>2]|0)):0)?(f[g+8>>2]|0)==(f[g+(l*1080|0)+8>>2]|0):0)?(f[g+12>>2]|0)==(f[g+(l*1080|0)+12>>2]|0):0)?(f[g+16>>2]|0)==(f[g+(l*1080|0)+16>>2]|0):0)?(f[g+20>>2]|0)==(f[g+(l*1080|0)+20>>2]|0):0){if(p){d=0;do{if((f[g+812+(d<<2)>>2]|0)!=(f[g+(l*1080|0)+812+(d<<2)>>2]|0)){v=13;break a}if((f[g+944+(d<<2)>>2]|0)!=(f[g+(l*1080|0)+944+(d<<2)>>2]|0)){v=13;break a}d=d+1|0}while(d>>>0

>>0)}}else v=13;while(0);if((v|0)==13){v=0;if(!(i&1))d=5;else d=(f[g+(l*1080|0)+4>>2]|0)+5|0;k=d+(a>>>0<257?6:7)|0;d=f[m>>2]|0;if(k>>>0>(f[s>>2]|0)>>>0){d=Lc(d,k)|0;if(!d){v=17;break}f[m>>2]=d;f[s>>2]=k;j=f[n>>2]|0;h=f[o>>2]|0;g=f[j+(h*5640|0)+5584>>2]|0;a=f[(f[r>>2]|0)+16>>2]|0;i=f[g+(l*1080|0)>>2]|0}else j=e;e=a>>>0<257?1:2;if(!(i&1))a=5;else a=(f[g+(l*1080|0)+4>>2]|0)+5|0;yb(d,65363,2);yb(d+2|0,e+3+a|0,2);i=d+4|0;yb(i,l,e);i=i+e|0;yb(i,f[(f[j+(h*5640|0)+5584>>2]|0)+(l*1080|0)>>2]|0,1);f[q>>2]=a;Ae(f[n>>2]|0,f[o>>2]|0,i+1|0,q,c)|0;if((Fb(b,f[m>>2]|0,k,c)|0)!=(k|0)){a=0;v=24;break}a=f[(f[r>>2]|0)+16>>2]|0}l=l+1|0;if(l>>>0>=a>>>0){a=1;v=24;break}}if((v|0)==17){Mc(f[m>>2]|0);f[m>>2]=0;f[s>>2]=0;Mb(c,1,15774,t)|0;v=0;u=w;return v|0}else if((v|0)==24){u=w;return a|0}return 0}\nfunction oe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=u;u=u+16|0;r=t;o=t+4|0;p=a+80|0;d=f[(f[p>>2]|0)+16>>2]|0;if(d>>>0<=1){s=1;u=t;return s|0}m=a+164|0;n=a+200|0;q=a+48|0;l=a+44|0;k=1;a=d;while(1){i=f[(f[m>>2]|0)+((f[n>>2]|0)*5640|0)+5584>>2]|0;g=f[i+24>>2]|0;h=f[i+(k*1080|0)+24>>2]|0;a:do if((g|0)==(h|0)?(f[i+804>>2]|0)==(f[i+(k*1080|0)+804>>2]|0):0){if((g|0)!=1){j=(f[i+4>>2]|0)*3|0;d=j+-2|0;if((j|0)!=((f[i+(k*1080|0)+4>>2]|0)*3|0)){s=14;break}if(!d)break;else e=d}else e=1;d=0;do{if((f[i+28+(d<<3)>>2]|0)!=(f[i+(k*1080|0)+28+(d<<3)>>2]|0)){s=14;break a}d=d+1|0}while(d>>>0>>0);if(g){d=0;do{if((f[i+28+(d<<3)+4>>2]|0)!=(f[i+(k*1080|0)+28+(d<<3)+4>>2]|0)){s=14;break a}d=d+1|0}while(d>>>0>>0)}}else s=14;while(0);if((s|0)==14){s=0;if((h|0)==1)d=1;else d=((f[i+(k*1080|0)+4>>2]|0)*3|0)+-2|0;j=((h|0)==0?d+1|0:d<<1|1)+5+(a>>>0>256&1)|0;a=f[l>>2]|0;if(j>>>0>(f[q>>2]|0)>>>0){a=Lc(a,j)|0;if(!a){s=18;break}f[l>>2]=a;f[q>>2]=j;d=f[(f[m>>2]|0)+((f[n>>2]|0)*5640|0)+5584>>2]|0;e=f[d+(k*1080|0)+24>>2]|0;g=a}else{e=h;d=i;g=a}if((e|0)==1)a=1;else a=((f[d+(k*1080|0)+4>>2]|0)*3|0)+-2|0;d=(e|0)==0?a+1|0:a<<1|1;f[o>>2]=d+6;yb(g,65373,2);a=g+2|0;if((f[(f[p>>2]|0)+16>>2]|0)>>>0<257){yb(a,d+3|0,2);yb(g+4|0,k,1);a=5}else{yb(a,d+4|0,2);yb(g+4|0,k,2);a=6}f[o>>2]=d;ze(f[m>>2]|0,f[n>>2]|0,k,g+a|0,o,c)|0;if((Fb(b,f[l>>2]|0,j,c)|0)!=(j|0)){a=0;s=28;break}a=f[(f[p>>2]|0)+16>>2]|0}k=k+1|0;if(k>>>0>=a>>>0){a=1;s=28;break}}if((s|0)==18){Mc(f[l>>2]|0);f[l>>2]=0;f[q>>2]=0;Mb(c,1,15702,r)|0;s=0;u=t;return s|0}else if((s|0)==28){u=t;return a|0}return 0}function pe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+16|0;g=k;i=(f[a+32>>2]|0)*5|0;j=i+6|0;e=a+48|0;h=a+44|0;d=f[h>>2]|0;do if(j>>>0>(f[e>>2]|0)>>>0){d=Lc(d,j)|0;if(d|0){f[h>>2]=d;f[e>>2]=j;break}Mc(f[h>>2]|0);f[h>>2]=0;f[e>>2]=0;Mb(c,1,15663,g)|0;j=0;u=k;return j|0}while(0);g=Hb(b)|0;a=a+16|0;f[a>>2]=g;f[a+4>>2]=I;yb(d,65365,2);yb(d+2|0,i+4|0,2);yb(d+4|0,0,1);yb(d+5|0,80,1);j=(Fb(b,f[h>>2]|0,j,c)|0)==(j|0)&1;u=k;return j|0}function qe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=u;u=u+16|0;j=p;o=p+4|0;f[o>>2]=0;k=a+164|0;e=f[k>>2]|0;l=a+200|0;d=f[l>>2]|0;i=a+80|0;g=f[(f[i>>2]|0)+16>>2]|0;n=(X(g>>>0<257?7:9,(f[e+(d*5640|0)+420>>2]|0)+1|0)|0)+4|0;h=a+48|0;m=a+44|0;a=f[m>>2]|0;do if(n>>>0>(f[h>>2]|0)>>>0){a=Lc(a,n)|0;if(a|0){f[m>>2]=a;f[h>>2]=n;g=f[(f[i>>2]|0)+16>>2]|0;e=f[k>>2]|0;d=f[l>>2]|0;break}Mc(f[m>>2]|0);f[m>>2]=0;f[h>>2]=0;Mb(c,1,15624,j)|0;o=0;u=p;return o|0}while(0);Yd(g,e,d,a,o);o=(Fb(b,f[m>>2]|0,n,c)|0)==(n|0)&1;u=p;return o|0}function re(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;j=a+164|0;k=a+80|0;e=f[k>>2]|0;d=f[e+16>>2]|0;if(!d){k=1;return k|0}i=a+44|0;g=0;h=f[(f[j>>2]|0)+5584>>2]|0;a=e;while(1){if(f[h+808>>2]|0){a=f[(f[j>>2]|0)+5584>>2]|0;d=d>>>0<257?1:2;e=d+6|0;l=f[i>>2]|0;yb(l,65374,2);yb(l+2|0,d|4,2);l=l+4|0;yb(l,g,d);d=l+d|0;yb(d,0,1);yb(d+1|0,f[a+(g*1080|0)+808>>2]|0,1);if((Fb(b,f[i>>2]|0,e,c)|0)!=(e|0)){a=0;d=7;break}a=f[k>>2]|0}g=g+1|0;d=f[a+16>>2]|0;if(g>>>0>=d>>>0){a=1;d=7;break}else h=h+1080|0}if((d|0)==7)return a|0;return 0}function se(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+16|0;g=k;h=f[a+108>>2]|0;i=Kh(h)|0;j=i+6|0;e=a+48|0;d=a+44|0;a=f[d>>2]|0;do if(j>>>0>(f[e>>2]|0)>>>0){a=Lc(a,j)|0;if(a|0){f[d>>2]=a;f[e>>2]=j;break}Mc(f[d>>2]|0);f[d>>2]=0;f[e>>2]=0;Mb(c,1,15581,g)|0;j=0;u=k;return j|0}while(0);yb(a,65380,2);yb(a+2|0,i+4|0,2);yb(a+4|0,1,2);hj(a+6|0,h|0,i|0)|0;j=(Fb(b,f[d>>2]|0,j,c)|0)==(j|0)&1;u=k;return j|0}function te(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;x=u;u=u+32|0;v=x+24|0;r=x+16|0;n=x+8|0;g=x;h=f[a+80>>2]|0;j=h+16|0;i=f[j>>2]|0;k=i+6|0;t=a+48|0;w=a+44|0;e=f[w>>2]|0;do if(k>>>0>(f[t>>2]|0)>>>0){e=Lc(e,k)|0;if(e|0){f[w>>2]=e;f[t>>2]=k;break}Mc(f[w>>2]|0);f[w>>2]=0;f[t>>2]=0;Mb(d,1,15425,g)|0;d=0;u=x;return d|0}while(0);yb(e,65400,2);yb(e+2|0,i+4|0,2);yb(e+4|0,f[j>>2]|0,2);if(f[j>>2]|0){h=f[h+24>>2]|0;e=e+6|0;g=0;while(1){yb(e,(f[h+24>>2]|0)+-1|f[h+32>>2]<<7,1);g=g+1|0;if(g>>>0>=(f[j>>2]|0)>>>0)break;else{h=h+52|0;e=e+1|0}}}if((Fb(c,f[w>>2]|0,k,d)|0)!=(k|0)){d=0;u=x;return d|0}o=a+164|0;m=f[o>>2]|0;p=a+200|0;l=f[p>>2]|0;i=m+(l*5640|0)+5616|0;a:do if(f[i>>2]|0){g=f[m+(l*5640|0)+5612>>2]|0;h=0;while(1){j=g+16|0;k=f[j>>2]|0;a=k+10|0;e=f[w>>2]|0;if(a>>>0>(f[t>>2]|0)>>>0){e=Lc(e,a)|0;if(!e)break;f[w>>2]=e;f[t>>2]=a}yb(e,65396,2);yb(e+2|0,k+8|0,2);yb(e+4|0,0,2);yb(e+6|0,f[g+4>>2]<<8|f[g+8>>2]&255|f[g>>2]<<10,2);yb(e+8|0,0,2);hj(e+10|0,f[g+12>>2]|0,f[j>>2]|0)|0;if((Fb(c,f[w>>2]|0,a,d)|0)!=(a|0)){q=0;s=41;break}h=h+1|0;if(h>>>0>=(f[i>>2]|0)>>>0)break a;else g=g+20|0}if((s|0)==41){u=x;return q|0}Mc(f[w>>2]|0);f[w>>2]=0;f[t>>2]=0;Mb(d,1,15464,n)|0;d=0;u=x;return d|0}while(0);n=m+(l*5640|0)+5628|0;b:do if(f[n>>2]|0){a=f[m+(l*5640|0)+5624>>2]|0;l=0;while(1){k=a+4|0;g=f[k>>2]|0;i=g>>>0>255;j=i?2:1;i=i?32768:0;g=X(j,g<<1)|0;m=g+19|0;e=f[w>>2]|0;if(m>>>0>(f[t>>2]|0)>>>0){e=Lc(e,m)|0;if(!e)break;f[w>>2]=e;f[t>>2]=m}yb(e,65397,2);yb(e+2|0,g+17|0,2);yb(e+4|0,0,2);yb(e+6|0,f[a>>2]|0,1);yb(e+7|0,0,2);yb(e+9|0,1,2);yb(e+11|0,1,1);yb(e+12|0,f[k>>2]|i,2);e=e+14|0;if(!(f[k>>2]|0))g=0;else{h=0;do{yb(e,h,j);e=e+j|0;h=h+1|0;g=f[k>>2]|0}while(h>>>0>>0)}yb(e,g|i,2);e=e+2|0;if(!(f[k>>2]|0))h=e;else{g=0;do{yb(e,g,j);e=e+j|0;g=g+1|0}while(g>>>0<(f[k>>2]|0)>>>0);h=e}e=((b[a+16>>0]&1^1)&255)<<16;g=f[a+8>>2]|0;if(g)e=f[g+8>>2]|e;g=f[a+12>>2]|0;if(g)e=f[g+8>>2]<<8|e;yb(h,e,3);if((Fb(c,f[w>>2]|0,m,d)|0)!=(m|0)){q=0;s=41;break}l=l+1|0;if(l>>>0>=(f[n>>2]|0)>>>0)break b;else a=a+20|0}if((s|0)==41){u=x;return q|0}Mc(f[w>>2]|0);f[w>>2]=0;f[t>>2]=0;Mb(d,1,15503,r)|0;d=0;u=x;return d|0}while(0);j=f[o>>2]|0;i=f[p>>2]|0;k=j+(i*5640|0)+5628|0;g=f[k>>2]|0;a=g+5|0;e=f[w>>2]|0;do if(a>>>0>(f[t>>2]|0)>>>0){e=Lc(e,a)|0;if(e|0){f[w>>2]=e;f[t>>2]=a;break}Mc(f[w>>2]|0);f[w>>2]=0;f[t>>2]=0;Mb(d,1,15542,v)|0;d=0;u=x;return d|0}while(0);yb(e,65399,2);yb(e+2|0,g+3|0,2);yb(e+4|0,f[k>>2]|0,1);if(f[k>>2]|0){h=0;g=f[j+(i*5640|0)+5624>>2]|0;e=e+5|0;while(1){yb(e,f[g>>2]|0,1);h=h+1|0;if(h>>>0>=(f[k>>2]|0)>>>0)break;else{g=g+20|0;e=e+1|0}}}d=(Fb(c,f[w>>2]|0,a,d)|0)==(a|0)&1;u=x;return d|0}function ue(a,b,c){a=a|0;b=b|0;c=c|0;b=Hb(b)|0;c=(f[a+196>>2]|0)+8|0;f[c>>2]=b;f[c+4>>2]=I;return 1}function ve(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=u;u=u+16|0;b=Lf(0)|0;d=a+204|0;f[d>>2]=b;if(!b){Mb(c,1,15385,e)|0;c=0;u=e;return c|0}if(Pf(b,f[a+80>>2]|0,a+88|0)|0){c=1;u=e;return c|0}Qf(f[d>>2]|0);f[d>>2]=0;c=0;u=e;return c|0}function we(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0,H=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0,Q=0,R=0,S=0;P=a+80|0;E=f[P>>2]|0;S=a+164|0;h=f[S>>2]|0;O=E+24|0;D=f[O>>2]|0;g=f[D>>2]|0;e=f[D+4>>2]|0;G=E+16|0;D=X(f[D+24>>2]|0,f[G>>2]|0)|0;C=Hb(c)|0;Q=a+116|0;c=f[Q>>2]|0;R=a+112|0;i=f[R>>2]|0;F=(+(C>>>0)+4294967296.0*+(I|0))/+((X(i,c)|0)>>>0);C=(b[a+181>>0]&8)==0?1:2;if(c|0){s=a+92|0;u=a+100|0;x=a+96|0;y=a+104|0;z=E+4|0;A=E+8|0;B=E+12|0;w=+((X(g<<3,e)|0)>>>0);p=0;g=i;e=i;while(1){o=p;p=p+1|0;if(!e){r=c;q=g;e=0}else{l=0;do{v=+Ja[C&3](h);k=f[h+8>>2]|0;v=v/+(k>>>0);r=f[s>>2]|0;g=f[u>>2]|0;j=(X(g,l)|0)+r|0;e=f[E>>2]|0;e=(j|0)>(e|0)?j:e;j=f[x>>2]|0;i=f[y>>2]|0;q=(X(i,o)|0)+j|0;c=f[z>>2]|0;c=(q|0)>(c|0)?q:c;l=l+1|0;r=(X(g,l)|0)+r|0;g=f[A>>2]|0;g=(r|0)<(g|0)?r:g;j=(X(i,p)|0)+j|0;i=f[B>>2]|0;i=(j|0)<(i|0)?j:i;j=h+20|0;m=+n[j>>2];if(m>0.0){t=+((X(X(g-e|0,D)|0,i-c|0)|0)>>>0)/(m*w)-v;n[j>>2]=t}if(k>>>0>1){m=+((X(X(g-e|0,D)|0,i-c|0)|0)>>>0);e=h+24|0;c=1;while(1){t=+n[e>>2];if(t>0.0)n[e>>2]=m/(t*w)-v;c=c+1|0;if(c>>>0>=k>>>0)break;else e=e+4|0}}h=h+5640|0;e=f[R>>2]|0}while(l>>>0>>0);r=f[Q>>2]|0;q=e}if(p>>>0>=r>>>0)break;else{g=q;c=r}}if(r|0?(K=F+2.0,q|0):0){l=0;e=f[S>>2]|0;while(1){o=0;p=e;k=e+16|0;while(1){e=p+20|0;m=+n[e>>2];if(m>0.0?(w=m-F,n[e>>2]=w,w<30.0):0)n[e>>2]=30.0;c=p+24|0;e=f[p+8>>2]|0;j=e+-1|0;m=+n[c>>2];h=m>0.0;if(j>>>0>1){i=k+(e<<2)|0;g=1;e=h;do{if(e?(w=m-F,n[c>>2]=w,M=+n[c+-4>>2],w>2]=M+20.0;c=c+4|0;g=g+1|0;m=+n[c>>2];e=m>0.0}while((g|0)!=(j|0));if(e){H=i;J=m;N=25}}else if(h){H=c;J=m;N=25}if((N|0)==25?(N=0,w=J-K,n[H>>2]=w,L=+n[H+-4>>2],w>2]=L+20.0;p=p+5640|0;o=o+1|0;if(o>>>0>=q>>>0)break;else k=k+5640|0}l=l+1|0;if(l>>>0>=r>>>0)break;else e=p}}}h=f[G>>2]|0;if(!h)u=0;else{i=(f[a+100>>2]|0)+-1|0;j=(f[a+104>>2]|0)+-1|0;g=0;e=f[O>>2]|0;c=0;while(1){O=f[e>>2]|0;N=f[e+4>>2]|0;O=X(((j+N|0)>>>0)/(N>>>0)|0,((i+O|0)>>>0)/(O>>>0)|0)|0;g=(X(O,f[e+24>>2]|0)|0)+g|0;c=c+1|0;if(c>>>0>=h>>>0)break;else e=e+52|0}u=~~(+(g>>>0)*.1625)>>>0}o=f[(f[P>>2]|0)+16>>2]|0;r=o+-1|0;e=f[S>>2]|0;s=X(f[Q>>2]|0,f[R>>2]|0)|0;p=(s|0)==0;if(p)h=0;else{c=0;g=0;h=e;while(1){S=f[h+5588>>2]|0;c=c>>>0>S>>>0?c:S;g=g+1|0;if((g|0)==(s|0))break;else h=h+5640|0}h=c*12|0}q=a+88|0;if(((d[q>>1]|0)+-3&65535)>=4){if((o|0)==0|p){g=6;c=6}else{i=0;c=0;do{k=f[e+(i*5640|0)+5584>>2]|0;j=0;do{if(!(f[k+(j*1080|0)>>2]&1))g=5;else g=(f[k+(j*1080|0)+4>>2]|0)+5|0;c=c>>>0>g>>>0?c:g;j=j+1|0}while((j|0)!=(o|0));i=i+1|0}while((i|0)!=(s|0));c=c+6|0;j=0;g=0;do{l=f[e+(j*5640|0)+5584>>2]|0;k=0;do{if(!(f[l+(k*1080|0)>>2]&1))i=5;else i=(f[l+(k*1080|0)+4>>2]|0)+5|0;g=g>>>0>i>>>0?g:i;k=k+1|0}while((k|0)!=(o|0));j=j+1|0}while((j|0)!=(s|0));g=g+6|0}h=(X(g+c|0,r)|0)+h|0}if(p)e=13;else{g=0;c=0;while(1){S=f[e+420>>2]|0;g=g>>>0>S>>>0?g:S;c=c+1|0;if((c|0)==(s|0))break;else e=e+5640|0}e=(g*9|0)+13|0}S=h+u+e|0;f[a+40>>2]=S;S=Hc(S)|0;f[a+36>>2]=S;if(!S){a=0;return a|0}if(((d[q>>1]|0)+-3&65535)>=4){a=1;return a|0}e=Hc((f[a+32>>2]|0)*5|0)|0;f[a+24>>2]=e;if(!e){a=0;return a|0}f[a+28>>2]=e;a=1;return a|0}function xe(a){a=a|0;return 0.0}function ye(a){a=a|0;return +(+((((f[a+5588>>2]|0)*14|0)+-14|0)>>>0))}function ze(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;m=u;u=u+16|0;j=m+8|0;i=m;k=f[a+(b*5640|0)+5584>>2]|0;b=f[k+(c*1080|0)+24>>2]|0;do if((b|0)!=1){a=(f[k+(c*1080|0)+4>>2]|0)*3|0;h=a+-2|0;if(!b){a=a+-1|0;if((f[e>>2]|0)>>>0>>0){Mb(g,1,15741,i)|0;e=0;u=m;return e|0}else{yb(d,f[k+(c*1080|0)+804>>2]<<5,1);if(!h)break;else b=0;do{d=d+1|0;yb(d,f[k+(c*1080|0)+28+(b<<3)>>2]<<3,1);b=b+1|0}while((b|0)!=(h|0))}}else l=7}else{h=1;b=1;l=7}while(0);if((l|0)==7){a=h<<1|1;if((f[e>>2]|0)>>>0>>0){Mb(g,1,15741,j)|0;e=0;u=m;return e|0}yb(d,(f[k+(c*1080|0)+804>>2]<<5)+b|0,1);if(h){d=d+1|0;b=0;while(1){yb(d,(f[k+(c*1080|0)+28+(b<<3)>>2]<<11)+(f[k+(c*1080|0)+28+(b<<3)+4>>2]|0)|0,2);b=b+1|0;if((b|0)==(h|0))break;else d=d+2|0}}}f[e>>2]=(f[e>>2]|0)-a;e=1;u=m;return e|0}function Ae(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0;i=u;u=u+16|0;g=f[a+(b*5640|0)+5584>>2]|0;if((f[d>>2]|0)>>>0<5){Mb(e,1,15813,i)|0;d=0;u=i;return d|0}h=g+4|0;yb(c,(f[h>>2]|0)+-1|0,1);yb(c+1|0,(f[g+8>>2]|0)+-2|0,1);yb(c+2|0,(f[g+12>>2]|0)+-2|0,1);yb(c+3|0,f[g+16>>2]|0,1);yb(c+4|0,f[g+20>>2]|0,1);a=(f[d>>2]|0)+-5|0;f[d>>2]=a;if(!(f[g>>2]&1)){d=1;u=i;return d|0}b=f[h>>2]|0;if(a>>>0>>0){Mb(e,1,15813,i+8|0)|0;d=0;u=i;return d|0}if(!b)b=0;else{a=c+5|0;c=0;while(1){yb(a,(f[g+944+(c<<2)>>2]<<4)+(f[g+812+(c<<2)>>2]|0)|0,1);c=c+1|0;b=f[h>>2]|0;if(c>>>0>=b>>>0)break;else a=a+1|0}a=f[d>>2]|0}f[d>>2]=a-b;d=1;u=i;return d|0}function Be(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=u;u=u+48|0;m=o+40|0;n=o+32|0;l=o+24|0;j=o+16|0;h=o+8|0;i=a+200|0;if((f[i>>2]|0)!=(b|0)){Mb(g,1,15150,o)|0;f[j>>2]=b;Mb(g,1,16086,j)|0;u=o;return 0}k=X(f[a+116>>2]|0,f[a+112>>2]|0)|0;f[h>>2]=b+1;f[h+4>>2]=k;Mb(g,4,15187,h)|0;f[a+12>>2]=0;k=a+204|0;h=f[k>>2]|0;f[h+12>>2]=f[(f[a+164>>2]|0)+(b*5640|0)+5588>>2];f[a+8>>2]=0;if(!(Uf(h,f[i>>2]|0,g)|0)){f[j>>2]=b;Mb(g,1,16086,j)|0;u=o;return 0}h=f[k>>2]|0;a:do if(f[(f[h+24>>2]|0)+16>>2]|0){i=0;while(1){if(!(Tf((f[(f[f[h+20>>2]>>2]|0)+20>>2]|0)+(i*52|0)|0)|0))break;i=i+1|0;h=f[k>>2]|0;if(i>>>0>=(f[(f[h+24>>2]|0)+16>>2]|0)>>>0)break a}Mb(g,1,15208,l)|0;n=0;u=o;return n|0}while(0);if(!(ag(h,c,d)|0)){Mb(g,1,15285,n)|0;n=0;u=o;return n|0}if(Xd(a,e,g)|0){n=1;u=o;return n|0}f[m>>2]=b;Mb(g,1,16143,m)|0;n=0;u=o;return n|0}function Ce(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+16|0;if(!c){c=0;u=i;return c|0}if(!(Qd(f[a>>2]|0,b,c,d)|0)){Mb(d,1,16201,i)|0;c=0;u=i;return c|0}if(f[a+128>>2]|0){c=1;u=i;return c|0}h=a+108|0;if(!(De(c,h,d)|0)){c=0;u=i;return c|0}b=f[a+48>>2]|0;switch(b|0){case 16:{f[c+20>>2]=1;break}case 17:{f[c+20>>2]=2;break}case 18:{f[c+20>>2]=3;break}case 24:{f[c+20>>2]=4;break}default:f[c+20>>2]=(b|0)==12?5:-1}g=a+120|0;b=f[g>>2]|0;do if(b|0){if(f[b+12>>2]|0){Ee(c,h);break}Mc(f[b+4>>2]|0);Mc(f[(f[g>>2]|0)+8>>2]|0);Mc(f[f[g>>2]>>2]|0);b=f[g>>2]|0;e=f[b+12>>2]|0;if(e){Mc(e);b=f[g>>2]|0}Mc(b);f[g>>2]=0}while(0);if(f[a+116>>2]|0)Fe(c,h,d);b=f[h>>2]|0;if(!b){c=1;u=i;return c|0}f[c+28>>2]=b;f[c+32>>2]=f[a+112>>2];f[h>>2]=0;c=1;u=i;return c|0}function De(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=u;u=u+80|0;A=B+72|0;z=B+64|0;y=B+56|0;x=B+48|0;w=B+40|0;v=B+32|0;t=B+24|0;q=B+16|0;n=B+8|0;m=B;g=f[c+8>>2]|0;a:do if(!g)g=f[c+12>>2]|0;else{p=f[g>>2]|0;o=d[g+4>>1]|0;i=f[a+16>>2]|0;g=f[c+12>>2]|0;if((g|0)!=0?(f[g+12>>2]|0)!=0:0)i=h[g+18>>0]|0;b:do if(!(o<<16>>16)){if(!i)break a}else{l=0;c:while(1){c=l&65535;k=j[p+(c*6|0)>>1]|0;if(i>>>0<=k>>>0){l=14;break}c=d[p+(c*6|0)+4>>1]|0;switch(c<<16>>16){case 0:case -1:break;default:{c=(c&65535)+-1|0;if(c>>>0>=i>>>0){l=17;break c}}}l=l+1<<16>>16;if((l&65535)>=(o&65535)){l=8;break}}if((l|0)==8)while(1){i=i+-1|0;c=0;do{if((i|0)==(j[p+((c&65535)*6|0)>>1]|0))break;c=c+1<<16>>16}while((c&65535)<(o&65535));if(c<<16>>16==o<<16>>16)break b;if(!i)break a;else l=8}else if((l|0)==14){f[m>>2]=k;f[m+4>>2]=i;Mb(e,1,16331,m)|0;A=0;u=B;return A|0}else if((l|0)==17){f[n>>2]=c;f[n+4>>2]=i;Mb(e,1,16331,n)|0;A=0;u=B;return A|0}}while(0);Mb(e,1,16368,q)|0;A=0;u=B;return A|0}while(0);if(!g){A=1;u=B;return A|0}s=f[g+12>>2]|0;if(!s){A=1;u=B;return A|0}o=b[g+18>>0]|0;r=o&255;q=o<<24>>24==0;if(q)g=1;else{l=a+16|0;g=1;k=0;c=0;do{c=j[s+(c<<2)>>1]|0;i=f[l>>2]|0;if(i>>>0<=c>>>0){f[t>>2]=c;f[t+4>>2]=i;Mb(e,1,16331,t)|0;g=0}k=k+1<<16>>16;c=k&65535}while(c>>>0>>0)}p=Ic(r,4)|0;if(!p){Mb(e,1,16401,v)|0;A=0;u=B;return A|0}if(!q){m=0;n=0;do{i=b[s+(n<<2)+3>>0]|0;k=i&255;do if((i&255)<(o&255)){l=p+(k<<2)|0;c=b[s+(n<<2)+2>>0]|0;if((f[l>>2]|0)!=0&c<<24>>24==1){f[x>>2]=k;Mb(e,1,16474,x)|0;g=0;break}if(c<<24>>24!=0|i<<24>>24==0){f[l>>2]=1;break}else{f[y>>2]=n;f[y+4>>2]=k;Mb(e,1,16505,y)|0;g=0;break}}else{f[w>>2]=k;Mb(e,1,16418,w)|0;g=0}while(0);m=m+1<<16>>16;n=m&65535}while(n>>>0>>0);if(!q){i=0;c=0;do{if((f[p+(c<<2)>>2]|0)==0?(b[s+(c<<2)+2>>0]|0)!=0:0){f[z>>2]=c;Mb(e,1,16541,z)|0;g=0}i=i+1<<16>>16;c=i&65535}while(c>>>0>>0)}}if(!g){Mc(p);A=0;u=B;return A|0}d:do if(!((f[a+16>>2]|0)!=1|q)){c=0;g=0;while(1){c=c+1<<16>>16;if(!(f[p+(g<<2)>>2]|0))break;g=c&65535;if(g>>>0>=r>>>0)break d}f[A>>2]=g;Mb(e,2,16579,A)|0;g=0;c=0;do{b[s+(c<<2)+2>>0]=1;b[s+(c<<2)+3>>0]=g;g=g+1<<16>>16;c=g&65535}while(c>>>0>>0)}while(0);Mc(p);A=1;u=B;return A|0}function Ee(a,c){a=a|0;c=c|0;var e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=c+12|0;c=f[w>>2]|0;m=f[c+8>>2]|0;n=f[c+4>>2]|0;r=f[c>>2]|0;q=f[c+12>>2]|0;c=b[c+18>>0]|0;s=a+24|0;t=f[s>>2]|0;u=c&255;v=Hc(u*52|0)|0;if(!v)return;o=c<<24>>24==0;if(!o){k=0;l=0;do{c=d[q+(l<<2)>>1]|0;if(!(b[q+(l<<2)+2>>0]|0)){c=c&65535;e=v+(l*52|0)|0;g=t+(c*52|0)|0;i=e+52|0;do{f[e>>2]=f[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(i|0))}else{c=c&65535;e=v+((h[q+(l<<2)+3>>0]|0)*52|0)|0;g=t+(c*52|0)|0;i=e+52|0;do{f[e>>2]=f[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(i|0))}i=Hc(X(f[t+(c*52|0)+8>>2]<<2,f[t+(c*52|0)+12>>2]|0)|0)|0;f[v+(l*52|0)+44>>2]=i;if(!i){p=7;break}f[v+(l*52|0)+24>>2]=h[m+l>>0];f[v+(l*52|0)+32>>2]=h[n+l>>0];k=k+1<<16>>16;l=k&65535}while(l>>>0>>0);if((p|0)==7){Mc(v);return}m=j[(f[w>>2]|0)+16>>1]|0;n=m+-1|0;if(!o){i=0;c=0;do{k=f[t+((j[q+(c<<2)>>1]|0)*52|0)+44>>2]|0;g=h[q+(c<<2)+3>>0]|0;l=X(f[v+(g*52|0)+12>>2]|0,f[v+(g*52|0)+8>>2]|0)|0;if(!(b[q+(c<<2)+2>>0]|0)){e=f[v+(c*52|0)+44>>2]|0;if(l|0){c=0;do{f[e+(c<<2)>>2]=f[k+(c<<2)>>2];c=c+1|0}while((c|0)!=(l|0))}}else{e=f[v+(g*52|0)+44>>2]|0;if(l|0){c=0;do{p=f[k+(c<<2)>>2]|0;p=r+((X((p|0)<0?0:(p|0)<(m|0)?p:n,u)|0)+g<<2)|0;f[e+(c<<2)>>2]=f[p>>2];c=c+1|0}while((c|0)!=(l|0))}}i=i+1<<16>>16;c=i&65535}while(c>>>0>>0)}}g=a+16|0;i=f[g>>2]|0;if(i|0){e=0;c=0;do{c=f[t+(c*52|0)+44>>2]|0;if(c|0)Mc(c);e=e+1<<16>>16;c=e&65535}while(i>>>0>c>>>0)}Mc(t);f[s>>2]=v;f[g>>2]=u;Mc(f[(f[w>>2]|0)+4>>2]|0);Mc(f[(f[w>>2]|0)+8>>2]|0);Mc(f[f[w>>2]>>2]|0);c=f[w>>2]|0;e=f[c+12>>2]|0;if(e){Mc(e);c=f[w>>2]|0}Mc(c);f[w>>2]=0;return}function Fe(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=u;u=u+80|0;y=B+8|0;x=B;w=B+16|0;A=b+8|0;e=f[A>>2]|0;b=f[e>>2]|0;v=d[e+4>>1]|0;if(v<<16>>16){t=a+16|0;m=a+24|0;s=v&65535;q=1;r=0;while(1){n=d[b+(r*6|0)>>1]|0;o=n&65535;a=f[t>>2]|0;a:do if(a>>>0>o>>>0){e=d[b+(r*6|0)+4>>1]|0;switch(e<<16>>16){case -1:case 0:{d[(f[m>>2]|0)+(o*52|0)+48>>1]=d[b+(r*6|0)+2>>1]|0;break a}default:{}}p=(e&65535)+65535&65535;l=e+-1<<16>>16;j=l&65535;if(a>>>0<=j>>>0){f[y>>2]=j;f[y+4>>2]=a;Mb(c,2,16290,y)|0;break}k=b+(r*6|0)+2|0;if(n<<16>>16!=l<<16>>16?(d[k>>1]|0)==0:0){e=f[m>>2]|0;a=e+(o*52|0)|0;g=w;h=a;i=g+52|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=a;h=e+(j*52|0)|0;i=g+52|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=(f[m>>2]|0)+(j*52|0)|0;h=w;i=g+52|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));if((v&65535)>(r+1&65535)){g=q;do{a=b+(g*6|0)|0;e=d[a>>1]|0;if(e<<16>>16!=n<<16>>16){if(e<<16>>16==l<<16>>16){e=n;z=14}}else{e=p;z=14}if((z|0)==14){z=0;d[a>>1]=e}g=g+1|0}while(v<<16>>16!=(g&65535)<<16>>16)}}d[(f[m>>2]|0)+(o*52|0)+48>>1]=d[k>>1]|0}else{f[x>>2]=o;f[x+4>>2]=a;Mb(c,2,16250,x)|0}while(0);r=r+1|0;if((r|0)==(s|0))break;else q=q+1|0}b=f[A>>2]|0;e=b;b=f[b>>2]|0}if(!b){z=e;Mc(z);f[A>>2]=0;u=B;return}else{Mc(b);z=f[A>>2]|0;Mc(z);f[A>>2]=0;u=B;return}}function Ge(a,c){a=a|0;c=c|0;Oc(f[a>>2]|0,c);b[a+124>>0]=0;f[a+128>>2]=f[c+8248>>2]&1;return}function He(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;x=u;u=u+80|0;v=x+64|0;s=x+56|0;o=x+48|0;r=x+40|0;q=x+32|0;p=x+24|0;if(!((a|0)!=0&(c|0)!=0&(e|0)!=0)){c=0;u=x;return c|0}t=e+16|0;if(((f[t>>2]|0)+-1|0)>>>0>16383){Mb(g,1,16630,x)|0;c=0;u=x;return c|0}if(!(Tc(f[a>>2]|0,c,e,g)|0)){c=0;u=x;return c|0}f[a+56>>2]=1785737760;f[a+60>>2]=0;f[a+64>>2]=1;h=Hc(4)|0;f[a+68>>2]=h;if(!h){Mb(g,1,16699,x+8|0)|0;c=0;u=x;return c|0}f[h>>2]=1785737760;m=f[t>>2]|0;f[a+20>>2]=m;m=Hc(m*12|0)|0;f[a+72>>2]=m;if(!m){Mb(g,1,16699,x+16|0)|0;c=0;u=x;return c|0}f[a+16>>2]=(f[e+12>>2]|0)-(f[e+4>>2]|0);f[a+12>>2]=(f[e+8>>2]|0)-(f[e>>2]|0);w=e+24|0;n=f[w>>2]|0;i=f[n+24>>2]|0;j=f[n+32>>2]|0;k=a+24|0;f[k>>2]=i+-1+(j<<7);l=f[t>>2]|0;if(l>>>0>1){h=1;do{if((i|0)!=(f[n+(h*52|0)+24>>2]|0))f[k>>2]=255;h=h+1|0}while(h>>>0>>0)}f[a+28>>2]=7;f[a+32>>2]=0;f[a+36>>2]=0;if(l|0?(f[m+8>>2]=i+-1+(j<<7),(l|0)!=1):0){h=1;do{f[m+(h*12|0)+8>>2]=(f[n+(h*52|0)+24>>2]|0)+-1+(f[n+(h*52|0)+32>>2]<<7);h=h+1|0}while(h>>>0>>0)}h=e+32|0;i=f[h>>2]|0;j=a+40|0;a:do if(!i){f[j>>2]=1;switch(f[e+20>>2]|0){case 1:{f[a+48>>2]=16;break a}case 2:{f[a+48>>2]=17;break a}case 3:{f[a+48>>2]=18;break a}default:break a}}else{f[j>>2]=2;f[a+48>>2]=0;f[a+112>>2]=i;l=Ic(1,i)|0;f[a+108>>2]=l;hj(l|0,f[e+28>>2]|0,f[h>>2]|0)|0;b[a+124>>0]=1;l=f[t>>2]|0}while(0);b:do if(l|0){j=f[w>>2]|0;k=0;h=0;i=0;do{e=(d[j+(i*52|0)+48>>1]|0)==0;h=h+((e^1)&1)|0;k=e?k:i;i=i+1|0}while(i>>>0>>0);switch(h|0){case 0:break b;case 1:break;default:{Mb(g,2,16995,o)|0;break b}}switch(f[a+48>>2]|0){case 18:case 16:{h=3;break}case 17:{h=1;break}default:{Mb(g,2,16745,p)|0;break b}}if(l>>>0<=h>>>0){Mb(g,2,16819,q)|0;break}if(k>>>0>>0){Mb(g,2,16912,r)|0;break}r=Hc(8)|0;i=a+116|0;f[i>>2]=r;if(!r){Mb(g,1,17060,s)|0;c=0;u=x;return c|0}k=Hc((f[t>>2]|0)*6|0)|0;i=f[i>>2]|0;f[i>>2]=k;if(!k){Mb(g,1,17060,v)|0;c=0;u=x;return c|0}j=f[t>>2]|0;d[i+4>>1]=j;i=0;do{d[k+(i*6|0)>>1]=i;d[k+(i*6|0)+2>>1]=0;v=i;i=i+1|0;d[k+(v*6|0)+4>>1]=i}while((i|0)!=(h|0));if(h>>>0>>0){i=f[w>>2]|0;do{w=(d[i+(h*52|0)+48>>1]|0)==0;d[k+(h*6|0)>>1]=h;d[k+(h*6|0)+2>>1]=w?-1:1;d[k+(h*6|0)+4>>1]=w<<31>>31;h=h+1|0}while(h>>>0>>0)}}while(0);f[a+52>>2]=0;f[a+44>>2]=0;f[a+96>>2]=f[c+18692>>2];c=1;u=x;return c|0}function Ie(a,b,c){a=a|0;b=b|0;c=c|0;return Wd(f[a>>2]|0,b,c)|0}function Je(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;d=a+8|0;if(!(kg(f[d>>2]|0,53,c)|0)){c=0;return c|0}h=f[d>>2]|0;i=lg(h)|0;d=mg(h)|0;if(i){e=1;g=0;while(1){if(!e)e=0;else e=(Ma[f[d>>2]&63](a,b,c)|0)!=0;g=g+1|0;if((g|0)==(i|0))break;else{d=d+4|0;e=e&1}}ng(h);if(!e){c=0;return c|0}}else ng(h);c=Zc(f[a>>2]|0,b,c)|0;return c|0}function Ke(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0;J=u;u=u+192|0;D=J+152|0;C=J+144|0;B=J+136|0;A=J+128|0;z=J+120|0;x=J+88|0;w=J+80|0;v=J+64|0;t=J+48|0;F=J+40|0;E=J+32|0;H=J+24|0;y=J+16|0;s=J+8|0;n=J+176|0;o=J+168|0;p=J+156|0;d=Ic(1,1024)|0;if(!d){Mb(c,1,17104,J)|0;H=0;u=J;return H|0}q=n+4|0;r=p+4|0;G=a+100|0;l=d;k=1024;a:while(1){if((Eb(b,n,8,c)|0)!=8)break;b:while(1){zb(n,p,4);zb(q,r,4);switch(f[p>>2]|0){case 0:{d=Ib(b)|0;m=I;if((m|0)>0|(m|0)==0&d>>>0>4294967287){m=6;break a}f[p>>2]=d+8;h=8;break}case 1:{if((Eb(b,n,8,c)|0)!=8){m=12;break a}zb(n,o,4);if(f[o>>2]|0){m=10;break a}zb(q,p,4);h=16;break}default:h=8}g=f[r>>2]|0;if((g|0)==1785737827){m=14;break a}i=f[p>>2]|0;if(!i){m=18;break a}if(i>>>0>>0){m=20;break a}c:do if((g|0)<1718909296)if((g|0)<1668112752)if((g|0)<1667523942){switch(g|0){case 1651532643:break;default:{m=43;break c}}e=1124;m=30;break}else{switch(g|0){case 1667523942:break;default:{m=43;break c}}e=1148;m=30;break}else if((g|0)<1668246642){switch(g|0){case 1668112752:break;default:{m=43;break c}}e=1140;m=30;break}else{switch(g|0){case 1668246642:break;default:{m=43;break c}}e=1116;m=30;break}else{if((g|0)<1783636e3)if((g|0)<1768449138)switch(g|0){case 1718909296:{m=27;break b}default:{m=43;break c}}else switch(g|0){case 1768449138:{e=1108;m=30;break c}default:{m=43;break c}}if((g|0)<1785737832)switch(g|0){case 1783636e3:{d=1084;m=29;break b}default:{m=43;break c}}if((g|0)<1885564018)switch(g|0){case 1785737832:{m=28;break b}default:{m=43;break c}}switch(g|0){case 1885564018:break;default:{m=43;break c}}e=1132;m=30}while(0);if((m|0)==30){m=0;d=i-h|0;f[t>>2]=g>>>24;f[t+4>>2]=g>>>16&255;f[t+8>>2]=g>>>8&255;f[t+12>>2]=g&255;Mb(c,2,17288,t)|0;if(f[G>>2]&4|0){j=e;g=d;break}j=f[r>>2]|0;f[v>>2]=j>>>24;f[v+4>>2]=j>>>16&255;f[v+8>>2]=j>>>8&255;f[v+12>>2]=j&255;Mb(c,2,17339,v)|0;f[G>>2]=f[G>>2]|2147483647;j=Jb(b,d,0,c)|0;if(!((j|0)==(d|0)&(I|0)==0)){m=32;break a}}else if((m|0)==43){m=0;d=i-h|0;e=f[G>>2]|0;if(!(e&1)){m=44;break a}if(!(e&2)){m=46;break a}f[G>>2]=e|2147483647;j=Jb(b,d,0,c)|0;if(!((j|0)==(d|0)&(I|0)==0)){m=49;break a}}if((Eb(b,n,8,c)|0)!=8)break a}if((m|0)==27){d=1092;m=29}else if((m|0)==28){d=1100;m=29}if((m|0)==29){m=0;j=d;g=i-h|0}i=Ib(b)|0;h=I;if((h|0)<0|(h|0)==0&i>>>0>>0){m=34;break}if(g>>>0>k>>>0){d=Lc(l,g)|0;if(!d){m=37;break}else e=g}else{d=l;e=k}if((Eb(b,d,g,c)|0)!=(g|0)){m=39;break}if(!(Na[f[j+4>>2]&63](a,d,g,c)|0)){m=42;break}else{l=d;k=e}}switch(m|0){case 6:{Mb(c,1,17154,s)|0;break}case 10:{Mb(c,1,17154,y)|0;break}case 12:break;case 14:{d=f[G>>2]|0;if(!(d&4)){Mb(c,1,17196,H)|0;Mc(l);H=0;u=J;return H|0}else{f[G>>2]=d|8;Mc(l);H=1;u=J;return H|0}}case 18:{Mb(c,1,17224,E)|0;Mc(l);H=0;u=J;return H|0}case 20:{f[F>>2]=i;f[F+4>>2]=g;Mb(c,1,17262,F)|0;Mc(l);H=0;u=J;return H|0}case 32:{Mb(c,1,17405,w)|0;Mc(l);H=0;u=J;return H|0}case 34:{F=f[p>>2]|0;G=f[r>>2]|0;H=Ib(b)|0;f[x>>2]=F;f[x+4>>2]=G>>>24;f[x+8>>2]=G>>>16&255;f[x+12>>2]=G>>>8&255;f[x+16>>2]=G&255;f[x+20>>2]=g;f[x+24>>2]=H;Mb(c,1,17455,x)|0;Mc(l);H=0;u=J;return H|0}case 37:{Mc(l);Mb(c,1,17531,z)|0;H=0;u=J;return H|0}case 39:{Mb(c,1,17573,A)|0;Mc(d);H=0;u=J;return H|0}case 42:{Mc(d);H=0;u=J;return H|0}case 44:{Mb(c,1,17622,B)|0;Mc(l);H=0;u=J;return H|0}case 46:{Mb(c,1,17692,C)|0;Mc(l);H=0;u=J;return H|0}case 49:{Mb(c,1,17405,D)|0;Mc(l);H=0;u=J;return H|0}}Mc(l);H=1;u=J;return H|0}function Le(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0;h=u;u=u+48|0;g=h+32|0;e=a+72|0;if(f[e>>2]|0){Mb(d,2,18543,h)|0;g=1;u=h;return g|0}if((c|0)!=14){Mb(d,1,18591,h+8|0)|0;g=0;u=h;return g|0}zb(b,a+16|0,4);zb(b+4|0,a+12|0,4);c=a+20|0;zb(b+8|0,c,2);c=f[c>>2]|0;if((c+-1|0)>>>0>16383){Mb(d,1,18624,h+16|0)|0;g=0;u=h;return g|0}c=Ic(c,12)|0;f[e>>2]=c;if(!c){Mb(d,1,18661,h+24|0)|0;g=0;u=h;return g|0}zb(b+10|0,a+24|0,1);c=a+28|0;zb(b+11|0,c,1);c=f[c>>2]|0;if((c|0)!=7){f[g>>2]=c;Mb(d,4,18710,g)|0}zb(b+12|0,a+32|0,1);zb(b+13|0,a+36|0,1);g=1;u=h;return g|0}function Me(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0;y=u;u=u+96|0;i=y+48|0;o=y+40|0;l=y+32|0;k=y+24|0;j=y+16|0;m=y+80|0;n=y+76|0;r=y+72|0;p=y+68|0;s=y+64|0;q=y+60|0;t=y+56|0;v=y+52|0;if(d>>>0<3){Mb(e,1,18186,y)|0;x=0;u=y;return x|0}w=a+108|0;x=a+124|0;if(b[x>>0]|0){Mb(e,4,18218,y+8|0)|0;x=1;u=y;return x|0}h=a+40|0;zb(c,h,1);zb(c+1|0,a+52|0,1);zb(c+2|0,a+44|0,1);g=c+3|0;h=f[h>>2]|0;switch(h|0){case 1:{if(d>>>0<7){f[j>>2]=d;Mb(e,1,18327,j)|0;x=0;u=y;return x|0}h=a+48|0;if((d|0)!=7?(f[h>>2]|0)!=14:0){f[k>>2]=d;Mb(e,2,18327,k)|0}zb(g,h,4);i=c+7|0;if((f[h>>2]|0)==14){m=Hc(36)|0;if(!m){Mb(e,1,18363,l)|0;x=0;u=y;return x|0}f[m>>2]=14;f[t>>2]=0;f[s>>2]=0;f[r>>2]=0;f[q>>2]=0;f[p>>2]=0;f[n>>2]=0;f[v>>2]=4470064;g=m+4|0;f[g>>2]=1145390592;switch(d|0){case 35:{zb(i,n,4);zb(c+11|0,r,4);zb(c+15|0,p,4);zb(c+19|0,s,4);zb(c+23|0,q,4);zb(c+27|0,t,4);zb(c+31|0,v,4);f[g>>2]=0;c=f[n>>2]|0;l=f[p>>2]|0;k=f[q>>2]|0;j=f[r>>2]|0;i=f[s>>2]|0;h=f[t>>2]|0;g=f[v>>2]|0;break}case 7:{c=0;l=0;k=0;j=0;i=0;h=0;g=4470064;break}default:{f[o>>2]=d;Mb(e,2,18393,o)|0;c=0;l=0;k=0;j=0;i=0;h=0;g=4470064}}f[m+8>>2]=c;f[m+16>>2]=l;f[m+24>>2]=k;f[m+12>>2]=j;f[m+20>>2]=i;f[m+28>>2]=h;f[m+32>>2]=g;f[w>>2]=m;f[a+112>>2]=0}b[x>>0]=1;x=1;u=y;return x|0}case 2:{i=d+-3|0;h=a+112|0;f[h>>2]=i;a=Ic(1,i)|0;f[w>>2]=a;if(!a){f[h>>2]=0;x=0;u=y;return x|0}if((d|0)>3){h=0;while(1){zb(g,m,1);b[(f[w>>2]|0)+h>>0]=f[m>>2];h=h+1|0;if((h|0)==(i|0))break;else g=g+1|0}}b[x>>0]=1;x=1;u=y;return x|0}default:{if(h>>>0<=2){x=1;u=y;return x|0}f[i>>2]=h;Mb(e,4,18437,i)|0;x=1;u=y;return x|0}}return 0}function Ne(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+16|0;g=i;e=f[a+24>>2]|0;if((e|0)!=255){f[g>>2]=e;Mb(d,2,18040,g)|0}h=a+20|0;if((f[h>>2]|0)!=(c|0)){Mb(d,1,18154,i+8|0)|0;h=0;u=i;return h|0}if(!c){h=1;u=i;return h|0}g=a+72|0;e=0;while(1){zb(b,(f[g>>2]|0)+(e*12|0)+8|0,1);e=e+1|0;if(e>>>0>=(f[h>>2]|0)>>>0){b=1;break}else b=b+1|0}u=i;return b|0}function Oe(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=u;u=u+16|0;i=r;q=r+12|0;j=a+120|0;if(e>>>0<3|(f[j>>2]|0)!=0){q=0;u=r;return q|0}zb(c,q,2);k=f[q>>2]|0;p=k&65535;if((p+-1|0)>>>0>1023){f[i>>2]=p;Mb(g,1,17957,i)|0;q=0;u=r;return q|0}zb(c+2|0,q,1);o=f[q>>2]&65535;if(!o){Mb(g,1,17995,r+8|0)|0;q=0;u=r;return q|0}if((o+3|0)>>>0>e>>>0){q=0;u=r;return q|0}m=Hc(X(p<<2,o)|0)|0;if(!m){q=0;u=r;return q|0}n=Hc(o)|0;if(!n){Mc(m);q=0;u=r;return q|0}l=Hc(o)|0;if(!l){Mc(m);Mc(n);q=0;u=r;return q|0}a=Hc(20)|0;if(!a){Mc(m);Mc(n);Mc(l);q=0;u=r;return q|0}f[a+4>>2]=l;f[a+8>>2]=n;f[a>>2]=m;d[a+16>>1]=k;b[a+18>>0]=f[q>>2];f[a+12>>2]=0;f[j>>2]=a;a=0;g=c+3|0;i=0;do{zb(g,q,1);g=g+1|0;b[n+i>>0]=(f[q>>2]&127)+1;b[l+i>>0]=(f[q>>2]|0)>>>7&1;a=a+1<<16>>16;i=a&65535}while(o>>>0>i>>>0);if(!p){q=1;u=r;return q|0}l=c;k=0;i=m;a=g;a:while(1){j=0;g=a;a=0;do{a=((h[n+a>>0]|0)+7|0)>>>3;a=a>>>0<4?a:4;if((g-l+a|0)>(e|0)){a=0;i=22;break a}zb(g,q,a);g=g+a|0;f[i>>2]=f[q>>2];i=i+4|0;j=j+1<<16>>16;a=j&65535}while(o>>>0>a>>>0);k=k+1<<16>>16;if(p>>>0<=(k&65535)>>>0){a=1;i=22;break}else a=g}if((i|0)==22){u=r;return a|0}return 0}function Pe(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=u;u=u+32|0;k=l+20|0;j=a+120|0;a=f[j>>2]|0;if(!a){Mb(g,1,17847,l)|0;k=0;u=l;return k|0}if(f[a+12>>2]|0){Mb(g,1,17893,l+8|0)|0;k=0;u=l;return k|0}h=b[a+18>>0]|0;i=h&255;a=i<<2;if(a>>>0>e>>>0){Mb(g,1,17924,l+16|0)|0;k=0;u=l;return k|0}e=Hc(a)|0;if(!e){k=0;u=l;return k|0}if(h<<24>>24){a=c;h=0;while(1){zb(a,k,2);d[e+(h<<2)>>1]=f[k>>2];zb(a+2|0,k,1);b[e+(h<<2)+2>>0]=f[k>>2];zb(a+3|0,k,1);b[e+(h<<2)+3>>0]=f[k>>2];h=h+1|0;if((h|0)==(i|0))break;else a=a+4|0}}f[(f[j>>2]|0)+12>>2]=e;k=1;u=l;return k|0}function Qe(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,k=0;k=u;u=u+32|0;i=k+20|0;h=a+116|0;if(f[h>>2]|0){i=0;u=k;return i|0}if(c>>>0<2){Mb(e,1,17753,k)|0;i=0;u=k;return i|0}zb(b,i,2);g=f[i>>2]|0;a=g&65535;if(!a){Mb(e,1,17786,k+8|0)|0;i=0;u=k;return i|0}if(((a*6|0)+2|0)>>>0>c>>>0){Mb(e,1,17753,k+16|0)|0;i=0;u=k;return i|0}g=Hc(g*6|0)|0;if(!g){i=0;u=k;return i|0}a=Hc(8)|0;f[h>>2]=a;if(!a){Mc(g);i=0;u=k;return i|0}f[a>>2]=g;e=f[i>>2]&65535;d[a+4>>1]=e;if(!(e<<16>>16)){i=1;u=k;return i|0}else a=0;do{e=a&65535;zb(b+2|0,i,2);d[g+(e*6|0)>>1]=f[i>>2];zb(b+4|0,i,2);b=b+6|0;d[g+(e*6|0)+2>>1]=f[i>>2];zb(b,i,2);d[g+(e*6|0)+4>>1]=f[i>>2];a=a+1<<16>>16}while((a&65535)<(j[(f[h>>2]|0)+4>>1]|0));b=1;u=k;return b|0}function Re(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;g=u;u=u+32|0;e=g+20|0;a=a+100|0;if(f[a>>2]|0){Mb(d,1,19251,g)|0;e=0;u=g;return e|0}if((c|0)!=4){Mb(d,1,19305,g+8|0)|0;e=0;u=g;return e|0}zb(b,e,4);if((f[e>>2]|0)==218793738){f[a>>2]=f[a>>2]|1;e=1;u=g;return e|0}else{Mb(d,1,19339,g+16|0)|0;e=0;u=g;return e|0}return 0}function Se(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=u;u=u+32|0;g=i+24|0;h=a+100|0;if((f[h>>2]|0)!=1){Mb(d,1,19132,i)|0;h=0;u=i;return h|0}if(c>>>0<8){Mb(d,1,19182,i+8|0)|0;h=0;u=i;return h|0}zb(b,a+56|0,4);zb(b+4|0,a+60|0,4);b=b+8|0;c=c+-8|0;if(c&3|0){Mb(d,1,19182,i+16|0)|0;h=0;u=i;return h|0}c=c>>>2;e=a+64|0;f[e>>2]=c;if(c|0){c=Ic(c,4)|0;f[a+68>>2]=c;if(!c){Mb(d,1,19218,g)|0;h=0;u=i;return h|0}if(f[e>>2]|0){a=a+68|0;c=0;while(1){zb(b,(f[a>>2]|0)+(c<<2)|0,4);c=c+1|0;if(c>>>0>=(f[e>>2]|0)>>>0)break;else b=b+4|0}}}f[h>>2]=f[h>>2]|2;h=1;u=i;return h|0}function Te(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0;z=u;u=u+96|0;t=z+72|0;s=z+64|0;r=z+56|0;q=z+48|0;y=z+40|0;x=z+32|0;w=z+24|0;v=z+16|0;p=z+8|0;m=z+80|0;n=z+76|0;o=a+100|0;if(!(f[o>>2]&2)){Mb(d,1,18800,z)|0;y=0;u=z;return y|0}l=a+104|0;f[l>>2]=0;do if(c|0){i=0;a:while(1){if(c>>>0<8){h=6;break}zb(b,m,4);e=f[m>>2]|0;zb(b+4|0,m,4);k=f[m>>2]|0;switch(e|0){case 0:{h=15;break a}case 1:{if(c>>>0<16){h=9;break a}zb(b+8|0,n,4);if(f[n>>2]|0){h=11;break a}zb(b+12|0,m,4);e=f[m>>2]|0;if(!e){h=13;break a}j=16;break}default:j=8}if(e>>>0>>0){h=17;break}if(c>>>0>>0){h=20;break}b:do if((k|0)<1668246642){if((k|0)<1667523942){switch(k|0){case 1651532643:break;default:{h=28;break b}}g=1124;h=27;break}if((k|0)<1668112752){switch(k|0){case 1667523942:break;default:{h=28;break b}}g=1148;h=27;break}else{switch(k|0){case 1668112752:break;default:{h=28;break b}}g=1140;h=27;break}}else{if((k|0)<1768449138){switch(k|0){case 1668246642:break;default:{h=28;break b}}g=1116;h=27;break}if((k|0)<1885564018)switch(k|0){case 1768449138:{g=1108;h=27;break b}default:{h=28;break b}}switch(k|0){case 1885564018:break;default:{h=28;break b}}g=1132;h=27}while(0);if((h|0)==27){if(!(Na[f[g+4>>2]&63](a,b+j|0,e-j|0,d)|0)){b=0;h=33;break}}else if((h|0)==28)f[l>>2]=f[l>>2]|2147483647;i=(k|0)==1768449138?1:i;c=c-e|0;if(!c){h=30;break}else b=b+e|0}if((h|0)==6)Mb(d,1,18845,p)|0;else if((h|0)==9)Mb(d,1,18885,v)|0;else if((h|0)==11)Mb(d,1,17154,w)|0;else if((h|0)==13)Mb(d,1,17224,x)|0;else if((h|0)==15)Mb(d,1,17224,y)|0;else if((h|0)==17)Mb(d,1,18929,q)|0;else if((h|0)==20){Mb(d,1,19001,s)|0;y=0;u=z;return y|0}else if((h|0)==30){if(!i)break;f[o>>2]=f[o>>2]|4;y=1;u=z;return y|0}else if((h|0)==33){u=z;return b|0}Mb(d,1,18958,r)|0;y=0;u=z;return y|0}while(0);Mb(d,1,19073,t)|0;y=0;u=z;return y|0}function Ue(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;d=a+8|0;if(!(kg(f[d>>2]|0,54,c)|0)){i=0;return i|0}if(!(_d(f[a>>2]|0,b,c)|0)){i=0;return i|0}i=f[d>>2]|0;h=lg(i)|0;d=mg(i)|0;if(!h)d=1;else{e=d;d=1;g=0;while(1){if(!d)d=0;else d=(Ma[f[e>>2]&63](a,b,c)|0)!=0;d=d&1;g=g+1|0;if((g|0)==(h|0))break;else e=e+4|0}}ng(i);i=d;return i|0}function Ve(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;h=u;u=u+32|0;d=h+24|0;e=Hb(b)|0;g=I;a=a+80|0;i=a;i=_i(e|0,g|0,f[i>>2]|0,f[i+4>>2]|0)|0;yb(d,i,4);yb(d+4|0,1785737827,4);if(!(Kb(b,f[a>>2]|0,f[a+4>>2]|0,c)|0)){Mb(c,1,19383,h)|0;i=0;u=h;return i|0}if((Fb(b,d,8,c)|0)!=8){Mb(c,1,19383,h+8|0)|0;i=0;u=h;return i|0}if(Kb(b,e,g,c)|0){i=1;u=h;return i|0}Mb(c,1,19383,h+16|0)|0;i=0;u=h;return i|0}function We(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;e=a+4|0;if(!(kg(f[e>>2]|0,55,d)|0)){d=0;return d|0}i=f[e>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](a,b,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){d=0;return d|0}}else ng(i);e=a+8|0;if(!(kg(f[e>>2]|0,56,d)|0)){d=0;return d|0}if(!(kg(f[e>>2]|0,57,d)|0)){d=0;return d|0}if(!(kg(f[e>>2]|0,58,d)|0)){d=0;return d|0}if(f[a+96>>2]|0?(kg(f[e>>2]|0,59,d)|0)==0:0){d=0;return d|0}if(!(kg(f[e>>2]|0,60,d)|0)){d=0;return d|0}i=f[e>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](a,b,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){d=0;return d|0}}else ng(i);d=ee(f[a>>2]|0,b,c,d)|0;return d|0}function Xe(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;c=(f[a>>2]|0?(f[a+104>>2]|f[a+100>>2]|0)==0:0)&(f[a+8>>2]|0)!=0&(f[a+4>>2]|0)!=0&(f[a+64>>2]|0)!=0&(f[a+16>>2]|0)!=0&(f[a+12>>2]|0)!=0&1;e=f[a+20>>2]|0;if(!e){g=c;a=a+40|0;a=f[a>>2]|0;a=a+-1|0;a=a>>>0<2;a=a&1;b=Lb(b)|0;b=b&g;b=b&a;return b|0}g=f[a+72>>2]|0;d=0;do{c=c&(f[g+(d*12|0)+8>>2]&126)>>>0<38;d=d+1|0}while(d>>>0>>0);a=a+40|0;a=f[a>>2]|0;a=a+-1|0;a=a>>>0<2;a=a&1;b=Lb(b)|0;b=b&c;b=b&a;return b|0}function Ye(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=u;u=u+16|0;d=a;yb(d,12,4);yb(d+4|0,1783636e3,4);yb(d+8|0,218793738,4);c=(Fb(b,d,12,c)|0)==12&1;u=a;return c|0}function Ze(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+16|0;j=k+8|0;g=a+64|0;h=(f[g>>2]<<2)+16|0;i=Ic(1,h)|0;if(!i){Mb(c,1,19500,k)|0;j=0;u=k;return j|0}yb(i,h,4);yb(i+4|0,1718909296,4);yb(i+8|0,f[a+56>>2]|0,4);yb(i+12|0,f[a+60>>2]|0,4);e=i+16|0;if(f[g>>2]|0){d=a+68|0;a=0;do{yb(e,f[(f[d>>2]|0)+(a<<2)>>2]|0,4);a=a+1|0}while(a>>>0<(f[g>>2]|0)>>>0)}a=(Fb(b,i,h,c)|0)==(h|0);if(!a)Mb(c,1,19539,j)|0;Mc(i);j=a&1;u=k;return j|0}function _e(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=u;u=u+80|0;n=p+16|0;l=p+8|0;k=p;e=p+24|0;j=p+72|0;d=e;g=d+48|0;do{f[d>>2]=0;d=d+4|0}while((d|0)<(g|0));if((f[a+24>>2]|0)==255){f[e>>2]=1;d=3;g=2;h=1;i=4}else{d=2;g=1;h=0;i=1}f[e+(h*12|0)>>2]=i;f[e+(g*12|0)>>2]=2;if(!(f[a+116>>2]|0))o=d;else{f[e+(d*12|0)>>2]=3;o=d+1|0}yb(j+4|0,1785737832,4);d=8;g=0;h=e;while(1){i=h+8|0;q=La[f[h>>2]&7](a,i)|0;f[h+4>>2]=q;if(!q){m=7;break}d=(f[i>>2]|0)+d|0;g=g+1|0;if((g|0)>=(o|0))break;else h=h+12|0}if((m|0)==7){Mb(c,1,19414,k)|0;g=0;d=e;while(1){e=f[d+4>>2]|0;if(e|0)Mc(e);g=g+1|0;if((g|0)>=(o|0)){d=0;break}else d=d+12|0}u=p;return d|0}yb(j,d,4);a:do if((Fb(b,j,8,c)|0)==8){d=0;g=e;while(1){q=g+8|0;m=Fb(b,f[g+4>>2]|0,f[q>>2]|0,c)|0;if((m|0)!=(f[q>>2]|0))break;d=d+1|0;if((d|0)>=(o|0)){d=1;break a}else g=g+12|0}Mb(c,1,19457,n)|0;d=0}else{Mb(c,1,19457,l)|0;d=0}while(0);g=0;while(1){h=f[e+4>>2]|0;if(h|0)Mc(h);g=g+1|0;if((g|0)>=(o|0))break;else e=e+12|0}u=p;return d|0}function $e(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=Hb(b)|0;a=a+88|0;f[a>>2]=d;f[a+4>>2]=I;c=Jb(b,24,0,c)|0;return (c|0)==24&(I|0)==0&1|0}function af(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=Hb(b)|0;a=a+80|0;f[a>>2]=d;f[a+4>>2]=I;c=Jb(b,8,0,c)|0;return (c|0)==8&(I|0)==0&1|0}function bf(a,b){a=a|0;b=b|0;var c=0;c=Ic(1,22)|0;if(!c){c=0;return c|0}yb(c,22,4);yb(c+4|0,1768449138,4);yb(c+8|0,f[a+16>>2]|0,4);yb(c+12|0,f[a+12>>2]|0,4);yb(c+16|0,f[a+20>>2]|0,2);yb(c+18|0,f[a+24>>2]|0,1);yb(c+19|0,f[a+28>>2]|0,1);yb(c+20|0,f[a+32>>2]|0,1);yb(c+21|0,f[a+36>>2]|0,1);f[b>>2]=22;return c|0}function cf(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0;e=a+20|0;g=(f[e>>2]|0)+8|0;h=Ic(1,g)|0;if(!h){h=0;return h|0}yb(h,g,4);yb(h+4|0,1651532643,4);if(f[e>>2]|0){d=a+72|0;a=0;c=h+8|0;while(1){yb(c,f[(f[d>>2]|0)+(a*12|0)+8>>2]|0,1);a=a+1|0;if(a>>>0>=(f[e>>2]|0)>>>0)break;else c=c+1|0}}f[b>>2]=g;return h|0}function df(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,j=0;c=a+40|0;switch(f[c>>2]|0){case 1:{i=15;break}case 2:{i=(f[a+112>>2]|0)+11|0;break}default:{j=0;return j|0}}j=Ic(1,i)|0;if(!j){j=0;return j|0}yb(j,i,4);yb(j+4|0,1668246642,4);yb(j+8|0,f[c>>2]|0,1);yb(j+9|0,f[a+52>>2]|0,1);yb(j+10|0,f[a+44>>2]|0,1);d=j+11|0;switch(f[c>>2]|0){case 1:{yb(d,f[a+48>>2]|0,4);break}case 2:{g=a+112|0;if(f[g>>2]|0){e=a+108|0;c=d;a=0;while(1){yb(c,h[(f[e>>2]|0)+a>>0]|0,1);a=a+1|0;if(a>>>0>=(f[g>>2]|0)>>>0)break;else c=c+1|0}}break}default:{}}f[b>>2]=i;return j|0}function ef(a,b){a=a|0;b=b|0;var c=0,e=0,g=0,h=0,i=0,k=0;h=a+116|0;i=((j[(f[h>>2]|0)+4>>1]|0)*6|0)+10|0;k=Hc(i)|0;if(!k){b=0;return b|0}yb(k,i,4);yb(k+4|0,1667523942,4);yb(k+8|0,j[(f[h>>2]|0)+4>>1]|0,2);a=f[h>>2]|0;if(d[a+4>>1]|0){e=k+10|0;g=0;c=0;while(1){yb(e,j[(f[a>>2]|0)+(c*6|0)>>1]|0,2);yb(e+2|0,j[(f[f[h>>2]>>2]|0)+(c*6|0)+2>>1]|0,2);yb(e+4|0,j[(f[f[h>>2]>>2]|0)+(c*6|0)+4>>1]|0,2);c=g+1<<16>>16;a=f[h>>2]|0;if((c&65535)>=(j[a+4>>1]|0))break;else{e=e+6|0;g=c;c=c&65535}}}f[b>>2]=i;b=k;return b|0}function ff(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;i=b+8|0;if(!(kg(f[i>>2]|0,53,d)|0)){d=0;return d|0}j=f[b+4>>2]|0;k=lg(j)|0;e=mg(j)|0;if(k){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](b,a,d)|0)!=0;h=h+1|0;if((h|0)==(k|0))break;else{e=e+4|0;g=g&1}}ng(j);if(!g){d=0;return d|0}}else ng(j);i=f[i>>2]|0;j=lg(i)|0;e=mg(i)|0;if(j){g=1;h=0;while(1){if(!g)g=0;else g=(Ma[f[e>>2]&63](b,a,d)|0)!=0;h=h+1|0;if((h|0)==(j|0))break;else{e=e+4|0;g=g&1}}ng(i);if(!g){d=0;return d|0}}else ng(i);d=_c(a,f[b>>2]|0,c,d)|0;return d|0}function gf(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return Gd(f[a>>2]|0,b,c,d,e,g,h,i,j,k,l)|0}function hf(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;return Be(f[a>>2]|0,b,c,d,e,g)|0}function jf(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;return Hd(f[a>>2]|0,b,c,d,e,g)|0}function kf(a){a=a|0;var b=0,c=0,d=0;if(!a)return;Qc(f[a>>2]|0);f[a>>2]=0;b=a+72|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}b=a+68|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}c=a+108|0;b=f[c>>2]|0;if(b|0){Mc(b);f[c>>2]=0}d=a+116|0;b=f[d>>2]|0;if(b|0){c=f[b>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b>>2]=0}Mc(b);f[d>>2]=0}d=a+120|0;b=f[d>>2]|0;if(b|0){c=f[b+12>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b+12>>2]=0}c=f[b+4>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b+4>>2]=0}c=f[b+8>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b+8>>2]=0}c=f[b>>2]|0;if(c){Mc(c);b=f[d>>2]|0;f[b>>2]=0}Mc(b);f[d>>2]=0}b=a+4|0;c=f[b>>2]|0;if(c|0){jg(c);f[b>>2]=0}b=a+8|0;c=f[b>>2]|0;if(c|0){jg(c);f[b>>2]=0}Mc(a);return}function lf(a,b,c,d,e,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;return Id(f[a>>2]|0,b,c,d,e,g,h)|0}function mf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0;i=u;u=u+16|0;if(!c){c=0;u=i;return c|0}Mb(d,2,19580,i)|0;if(!(Td(f[a>>2]|0,b,c,d,e)|0)){Mb(d,1,16201,i+8|0)|0;c=0;u=i;return c|0}h=a+108|0;if(!(De(c,h,d)|0)){c=0;u=i;return c|0}b=f[a+48>>2]|0;switch(b|0){case 16:{f[c+20>>2]=1;break}case 17:{f[c+20>>2]=2;break}case 18:{f[c+20>>2]=3;break}case 24:{f[c+20>>2]=4;break}default:f[c+20>>2]=(b|0)==12?5:-1}g=a+120|0;b=f[g>>2]|0;do if(b|0){if(f[b+12>>2]|0){Ee(c,h);break}Mc(f[b+4>>2]|0);Mc(f[(f[g>>2]|0)+8>>2]|0);Mc(f[f[g>>2]>>2]|0);b=f[g>>2]|0;e=f[b+12>>2]|0;if(e){Mc(e);b=f[g>>2]|0}Mc(b);f[g>>2]=0}while(0);if(f[a+116>>2]|0)Fe(c,h,d);b=f[h>>2]|0;if(!b){c=1;u=i;return c|0}f[c+28>>2]=b;f[c+32>>2]=f[a+112>>2];f[h>>2]=0;c=1;u=i;return c|0}function nf(a){a=a|0;var c=0;c=Ic(1,136)|0;if(!c)return c|0;if(!a)a=Pc()|0;else a=Jd()|0;f[c>>2]=a;if(!a){kf(c);c=0;return c|0}a=c+108|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;b[a+16>>0]=0;a=ig()|0;f[c+4>>2]=a;if(!a){kf(c);c=0;return c|0}a=ig()|0;f[c+8>>2]=a;if(a|0)return c|0;kf(c);c=0;return c|0}function of(a,b,c){a=a|0;b=b|0;c=c|0;Kd(f[a>>2]|0,b,c);return}function pf(a){a=a|0;return Pd(f[a>>2]|0)|0}function qf(a){a=a|0;return Od(f[a>>2]|0)|0}function rf(a,b,c){a=a|0;b=b|0;c=c|0;return Vd(f[a>>2]|0,b,c)|0}function sf(){return 8}function tf(){return 32}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!d)return;else e=0;do{l=a+(e<<2)|0;i=f[l>>2]|0;j=b+(e<<2)|0;h=f[j>>2]|0;g=c+(e<<2)|0;k=f[g>>2]|0;f[l>>2]=(h<<1)+i+k>>2;f[j>>2]=k-h;f[g>>2]=i-h;e=e+1|0}while((e|0)!=(d|0));return}function vf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!d)return;else e=0;do{k=a+(e<<2)|0;j=b+(e<<2)|0;h=f[j>>2]|0;g=c+(e<<2)|0;l=f[g>>2]|0;i=(f[k>>2]|0)-(l+h>>2)|0;f[k>>2]=i+l;f[j>>2]=i;f[g>>2]=i+h;e=e+1|0}while((e|0)!=(d|0));return}function wf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!d)return;else e=0;do{o=a+(e<<2)|0;u=f[o>>2]|0;k=b+(e<<2)|0;t=f[k>>2]|0;g=c+(e<<2)|0;s=f[g>>2]|0;j=((u|0)<0)<<31>>31;q=Yi(u|0,j|0,2449,0)|0;q=Zi(q|0,I|0,4096,0)|0;q=ej(q|0,I|0,13)|0;i=((t|0)<0)<<31>>31;r=Yi(t|0,i|0,4809,0)|0;r=Zi(r|0,I|0,4096,0)|0;r=ej(r|0,I|0,13)|0;h=((s|0)<0)<<31>>31;p=Yi(s|0,h|0,934,0)|0;p=Zi(p|0,I|0,4096,0)|0;p=ej(p|0,I|0,13)|0;l=Yi(u|0,j|0,1382,0)|0;l=Zi(l|0,I|0,4096,0)|0;l=ej(l|0,I|0,13)|0;m=Yi(t|0,i|0,2714,0)|0;m=Zi(m|0,I|0,4096,0)|0;m=ej(m|0,I|0,13)|0;n=fj(s|0,h|0,12)|0;n=Zi(n|0,I|0,4096,0)|0;n=ej(n|0,I|0,13)|0;j=fj(u|0,j|0,12)|0;j=Zi(j|0,I|0,4096,0)|0;j=ej(j|0,I|0,13)|0;i=Yi(t|0,i|0,3430,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;h=Yi(s|0,h|0,666,0)|0;h=Zi(h|0,I|0,4096,0)|0;h=ej(h|0,I|0,13)|0;f[o>>2]=r+q+p;f[k>>2]=n-(m+l);f[g>>2]=j-i-h;e=e+1|0}while((e|0)!=(d|0));return}function xf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0.0,h=0.0,i=0,j=0.0,k=0;if(!d)return;else e=0;do{k=a+(e<<2)|0;h=+n[k>>2];i=b+(e<<2)|0;g=+n[i>>2];f=c+(e<<2)|0;j=+n[f>>2];n[k>>2]=h+j*1.4019999504089355;n[i>>2]=h-g*.3441300094127655-j*.714139997959137;n[f>>2]=h+g*1.7719999551773071;e=e+1|0}while((e|0)!=(d|0));return}function yf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0;g=X(d,d)|0;o=Hc(g+d<<2)|0;if(!o){b=0;return b|0}m=o+(d<<2)|0;if(g|0){e=a;a=0;while(1){f[m+(a<<2)>>2]=~~(+n[e>>2]*8192.0);a=a+1|0;if((a|0)==(g|0))break;else e=e+4|0}}a:do if(b|0){if(!d){e=0;while(1){e=e+1|0;if((e|0)==(b|0))break a}}else l=0;do{e=0;do{f[o+(e<<2)>>2]=f[f[c+(e<<2)>>2]>>2];e=e+1|0}while((e|0)!=(d|0));a=m;g=0;while(1){i=c+(g<<2)|0;j=f[i>>2]|0;f[j>>2]=0;e=0;h=a;k=0;while(1){p=f[h>>2]|0;q=f[o+(e<<2)>>2]|0;p=Yi(q|0,((q|0)<0)<<31>>31|0,p|0,((p|0)<0)<<31>>31|0)|0;p=Zi(p|0,I|0,4096,0)|0;p=ej(p|0,I|0,13)|0;k=k+p|0;f[j>>2]=k;e=e+1|0;if((e|0)==(d|0))break;else h=h+4|0}f[i>>2]=j+4;g=g+1|0;if((g|0)==(d|0))break;else a=a+(d<<2)|0}l=l+1|0}while((l|0)!=(b|0))}while(0);Mc(o);q=1;return q|0}function zf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0.0,l=0,m=0,o=0;o=Hc(d<<3)|0;if(!o){b=0;return b|0}m=o+(d<<2)|0;a:do if(b|0){if(!d){e=0;while(1){e=e+1|0;if((e|0)==(b|0))break a}}else l=0;do{e=0;do{f[o+(e<<2)>>2]=f[f[c+(e<<2)>>2]>>2];e=e+1|0}while((e|0)!=(d|0));g=a;i=0;while(1){j=m+(i<<2)|0;n[j>>2]=0.0;e=0;h=g;k=0.0;while(1){k=k+ +n[h>>2]*+n[o+(e<<2)>>2];n[j>>2]=k;e=e+1|0;if((e|0)==(d|0))break;else h=h+4|0}h=c+(i<<2)|0;j=f[h>>2]|0;f[h>>2]=j+4;n[j>>2]=k;i=i+1|0;if((i|0)==(d|0))break;else g=g+(d<<2)|0}l=l+1|0}while((l|0)!=(b|0))}while(0);Mc(o);b=1;return b|0}function Af(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0.0,h=0,i=0.0;if(!b)return;else f=0;do{h=a+(f<<3)|0;p[h>>3]=0.0;d=0;e=f;g=0.0;while(1){i=+n[c+(e<<2)>>2];g=g+i*i;d=d+1|0;if((d|0)==(b|0))break;else e=e+b|0}i=+L(+g);p[h>>3]=i;f=f+1|0}while((f|0)!=(b|0));return}function Bf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+32|0;n=G+28|0;k=G+24|0;o=G+20|0;q=G+16|0;p=G+12|0;r=G+8|0;l=G+4|0;j=G;e=c+76|0;E=f[e>>2]|0;A=E+(d*5640|0)+420|0;F=(f[A>>2]|0)+1|0;m=a+16|0;B=Hc((f[m>>2]|0)*528|0)|0;if(!B){F=0;u=G;return F|0}C=Hc(f[m>>2]<<2)|0;if(!C){Mc(B);F=0;u=G;return F|0}e=Cf(a,f[e>>2]|0,d)|0;if(!e){Mc(B);Mc(C);F=0;u=G;return F|0}i=f[m>>2]|0;if(i|0){g=B;h=0;while(1){f[C+(h<<2)>>2]=g;h=h+1|0;if(h>>>0>=i>>>0)break;else g=g+528|0}}Df(a,c,d,o,q,p,r,l,j,k,n,C);D=f[k>>2]|0;x=X(f[m>>2]|0,D)|0;z=f[n>>2]|0;w=X(z,x)|0;h=e+4|0;f[h>>2]=0;y=E+(d*5640|0)+8|0;g=(f[y>>2]|0)+1|0;if(w>>>0<=(4294967295/(g>>>0)|0)>>>0?(v=Ic(X(g,w)|0,2)|0,f[h>>2]=v,v|0):0){g=f[e+196>>2]|0;v=f[a+24>>2]|0;t=f[o>>2]|0;f[e+200>>2]=t;s=f[p>>2]|0;f[e+204>>2]=s;p=f[q>>2]|0;f[e+208>>2]=p;o=f[r>>2]|0;f[e+212>>2]=o;f[e+20>>2]=1;f[e+16>>2]=D;f[e+12>>2]=x;f[e+8>>2]=w;m=f[e+192>>2]|0;if(m|0){l=v;c=g;j=0;while(1){g=f[c+12>>2]|0;h=f[C+(j<<2)>>2]|0;f[c>>2]=f[l>>2];f[c+4>>2]=f[l+4>>2];k=f[c+8>>2]|0;if(k|0){i=0;while(1){f[g>>2]=f[h>>2];f[g+4>>2]=f[h+4>>2];f[g+8>>2]=f[h+8>>2];f[g+12>>2]=f[h+12>>2];i=i+1|0;if(i>>>0>=k>>>0)break;else{g=g+16|0;h=h+16|0}}}j=j+1|0;if(j>>>0>=m>>>0)break;else{l=l+52|0;c=c+16|0}}}if(F>>>0>1){l=1;n=e;do{g=f[n+428>>2]|0;f[n+432>>2]=t;f[n+436>>2]=s;f[n+440>>2]=p;f[n+444>>2]=o;f[n+252>>2]=1;f[n+248>>2]=D;f[n+244>>2]=x;f[n+240>>2]=w;a=f[n+424>>2]|0;if(a|0){m=v;j=0;while(1){h=f[g+12>>2]|0;i=f[C+(j<<2)>>2]|0;f[g>>2]=f[m>>2];f[g+4>>2]=f[m+4>>2];k=f[g+8>>2]|0;if(k|0){c=0;while(1){f[h>>2]=f[i>>2];f[h+4>>2]=f[i+4>>2];f[h+8>>2]=f[i+8>>2];f[h+12>>2]=f[i+12>>2];c=c+1|0;if(c>>>0>=k>>>0)break;else{h=h+16|0;i=i+16|0}}}j=j+1|0;if(j>>>0>=a>>>0)break;else{m=m+52|0;g=g+16|0}}}f[n+236>>2]=f[n+4>>2];n=n+232|0;l=l+1|0}while((l|0)!=(F|0))}Mc(B);Mc(C);j=(f[A>>2]|0)+1|0;g=(j|0)==0;if(!(b[E+(d*5640|0)+5636>>0]&4)){if(g){F=e;u=G;return F|0}c=f[E+(d*5640|0)+4>>2]|0;i=f[y>>2]|0;g=0;h=e;while(1){f[h+80>>2]=c;f[h+40>>2]=1;f[h+44>>2]=0;f[h+48>>2]=0;f[h+64>>2]=0;f[h+68>>2]=0;f[h+56>>2]=z;f[h+60>>2]=f[h+192>>2];f[h+52>>2]=i;f[h+72>>2]=D;g=g+1|0;if((g|0)==(j|0))break;else h=h+232|0}u=G;return e|0}else{if(g){F=e;u=G;return F|0}g=E+(d*5640|0)+424|0;h=e;i=0;while(1){f[h+80>>2]=f[g+36>>2];f[h+40>>2]=1;f[h+44>>2]=f[g>>2];f[h+48>>2]=f[g+4>>2];f[h+64>>2]=0;f[h+68>>2]=0;f[h+56>>2]=f[g+12>>2];f[h+60>>2]=f[g+16>>2];f[h+52>>2]=f[g+8>>2];f[h+72>>2]=D;i=i+1|0;if((i|0)==(j|0))break;else{g=g+148|0;h=h+232|0}}u=G;return e|0}}Mc(B);Mc(C);g=f[h>>2]|0;if(g|0){Mc(g);f[h>>2]=0}if(F|0){l=e;m=0;while(1){n=l+196|0;g=f[n>>2]|0;if(g|0){k=l+192|0;h=f[k>>2]|0;if(h){j=0;while(1){i=g+12|0;c=f[i>>2]|0;if(c){Mc(c);f[i>>2]=0;h=f[k>>2]|0}j=j+1|0;if(j>>>0>=h>>>0)break;else g=g+16|0}g=f[n>>2]|0}Mc(g);f[n>>2]=0}m=m+1|0;if((m|0)==(F|0))break;else l=l+232|0}}Mc(e);F=0;u=G;return F|0}function Cf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;l=(f[b+(c*5640|0)+420>>2]|0)+1|0;d=Ic(l,232)|0;if(!d){l=0;return l|0}if(!l){l=d;return l|0}j=a+16|0;i=b+(c*5640|0)+5584|0;g=d;h=0;a=f[j>>2]|0;a:while(1){b=Ic(a,16)|0;e=g+196|0;f[e>>2]=b;if(!b){a=5;break}k=f[j>>2]|0;f[g+192>>2]=k;b:do if(!k)a=0;else{a=(f[i>>2]|0)+4|0;k=Ic(f[a>>2]|0,16)|0;f[b+12>>2]=k;if(!k){a=19;break a}c=0;while(1){f[b+(c<<4)+8>>2]=f[a>>2];c=c+1|0;a=f[j>>2]|0;if(c>>>0>=a>>>0)break b;b=f[e>>2]|0;a=(f[i>>2]|0)+(c*1080|0)+4|0;k=Ic(f[a>>2]|0,16)|0;f[b+(c<<4)+12>>2]=k;if(!k){a=19;break a}}}while(0);h=h+1|0;if(h>>>0>=l>>>0){a=33;break}else g=g+232|0}if((a|0)==5){a=d+4|0;b=f[a>>2]|0;if(!b){i=d;j=0}else{Mc(b);f[a>>2]=0;i=d;j=0}while(1){k=i+196|0;a=f[k>>2]|0;if(a|0){h=i+192|0;b=f[h>>2]|0;if(b){g=0;while(1){c=a+12|0;e=f[c>>2]|0;if(e){Mc(e);f[c>>2]=0;b=f[h>>2]|0}g=g+1|0;if(g>>>0>=b>>>0)break;else a=a+16|0}a=f[k>>2]|0}Mc(a);f[k>>2]=0}j=j+1|0;if((j|0)==(l|0))break;else i=i+232|0}Mc(d);l=0;return l|0}else if((a|0)==19){a=d+4|0;b=f[a>>2]|0;if(!b){i=d;j=0}else{Mc(b);f[a>>2]=0;i=d;j=0}while(1){k=i+196|0;a=f[k>>2]|0;if(a|0){h=i+192|0;b=f[h>>2]|0;if(b){g=0;while(1){c=a+12|0;e=f[c>>2]|0;if(e){Mc(e);f[c>>2]=0;b=f[h>>2]|0}g=g+1|0;if(g>>>0>=b>>>0)break;else a=a+16|0}a=f[k>>2]|0}Mc(a);f[k>>2]=0}j=j+1|0;if((j|0)==(l|0))break;else i=i+232|0}Mc(d);l=0;return l|0}else if((a|0)==33)return d|0;return 0}function Df(a,b,c,d,e,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0;n=f[(f[b+76>>2]|0)+(c*5640|0)+5584>>2]|0;o=f[a+24>>2]|0;B=f[b+24>>2]|0;C=b+12|0;A=(X(f[C>>2]|0,(c>>>0)%(B>>>0)|0)|0)+(f[b+4>>2]|0)|0;z=f[a>>2]|0;f[d>>2]=A>>>0>z>>>0?A:z;A=Zi(f[C>>2]|0,0,A|0,0)|0;A=0-I|A;C=f[a+8>>2]|0;f[e>>2]=A>>>0>>0?A:C;C=b+16|0;B=(X(f[C>>2]|0,(c>>>0)/(B>>>0)|0)|0)+(f[b+8>>2]|0)|0;A=f[a+4>>2]|0;f[g>>2]=B>>>0>A>>>0?B:A;B=Zi(f[C>>2]|0,0,B|0,0)|0;B=0-I|B;C=f[a+12>>2]|0;f[h>>2]=B>>>0>>0?B:C;f[k>>2]=0;f[l>>2]=0;f[i>>2]=2147483647;f[j>>2]=2147483647;C=a+16|0;if(!(f[C>>2]|0))return;else z=0;while(1){u=f[m+(z<<2)>>2]|0;p=f[o>>2]|0;b=((f[d>>2]|0)+-1+p|0)/(p|0)|0;A=o+4|0;q=f[A>>2]|0;c=((f[g>>2]|0)+-1+q|0)/(q|0)|0;p=(p+-1+(f[e>>2]|0)|0)/(p|0)|0;q=(q+-1+(f[h>>2]|0)|0)/(q|0)|0;B=n+4|0;a=f[B>>2]|0;if(a>>>0>(f[l>>2]|0)>>>0){f[l>>2]=a;a=f[B>>2]|0}if(a|0){x=Zi(b|0,((b|0)<0)<<31>>31|0,-1,-1)|0;y=I;v=Zi(c|0,((c|0)<0)<<31>>31|0,-1,-1)|0;w=I;t=Zi(p|0,((p|0)<0)<<31>>31|0,-1,-1)|0;s=I;q=Zi(q|0,((q|0)<0)<<31>>31|0,-1,-1)|0;r=I;p=0;c=u;while(1){a=a+-1|0;b=f[n+812+(p<<2)>>2]|0;u=f[n+944+(p<<2)>>2]|0;f[c>>2]=b;f[c+4>>2]=u;F=f[o>>2]<>2]<>2]|0;f[i>>2]=(G|0)<(F|0)?G:F;F=f[j>>2]|0;f[j>>2]=(F|0)<(K|0)?F:K;K=fj(1,0,a|0)|0;F=I;G=Zi(x|0,y|0,K|0,F|0)|0;G=dj(G|0,I|0,a|0)|0;D=Zi(v|0,w|0,K|0,F|0)|0;D=dj(D|0,I|0,a|0)|0;J=Zi(t|0,s|0,K|0,F|0)|0;J=dj(J|0,I|0,a|0)|0;F=Zi(q|0,r|0,K|0,F|0)|0;F=dj(F|0,I|0,a|0)|0;K=fj(1,0,b|0)|0;H=I;E=Zi(J|0,((J|0)<0)<<31>>31|0,-1,-1)|0;H=Zi(E|0,I|0,K|0,H|0)|0;H=dj(H|0,I|0,b|0)|0;K=fj(1,0,u|0)|0;E=I;L=Zi(F|0,((F|0)<0)<<31>>31|0,-1,-1)|0;E=Zi(L|0,I|0,K|0,E|0)|0;E=dj(E|0,I|0,u|0)|0;b=(G|0)==(J|0)?0:(H<>b<>b;u=(D|0)==(F|0)?0:(E<>u<>u;f[c+8>>2]=b;f[c+12>>2]=u;b=X(u,b)|0;if(b>>>0>(f[k>>2]|0)>>>0)f[k>>2]=b;p=p+1|0;if(p>>>0>=(f[B>>2]|0)>>>0)break;else c=c+16|0}}z=z+1|0;if(z>>>0>=(f[C>>2]|0)>>>0)break;else{n=n+1080|0;o=o+52|0}}return}function Ef(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!a)return;c=a+4|0;d=f[c>>2]|0;if(d|0){Mc(d);f[c>>2]=0}if(b|0){j=a;k=0;while(1){l=j+196|0;c=f[l>>2]|0;if(c|0){i=j+192|0;d=f[i>>2]|0;if(d){h=0;while(1){e=c+12|0;g=f[e>>2]|0;if(g){Mc(g);f[e>>2]=0;d=f[i>>2]|0}h=h+1|0;if(h>>>0>=d>>>0)break;else c=c+16|0}c=f[l>>2]|0}Mc(c);f[l>>2]=0}k=k+1|0;if((k|0)==(b|0))break;else j=j+232|0}}Mc(a);return}function Ff(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;L=u;u=u+32|0;n=L+28|0;m=L+24|0;o=L+20|0;q=L+16|0;p=L+12|0;r=L+8|0;s=L+4|0;t=L;H=c+76|0;C=f[H>>2]|0;K=(f[C+(e*5640|0)+420>>2]|0)+1|0;G=a+16|0;D=Hc((f[G>>2]|0)*528|0)|0;if(!D){K=0;u=L;return K|0}E=Hc(f[G>>2]<<2)|0;if(!E){Mc(D);K=0;u=L;return K|0}i=Cf(a,f[H>>2]|0,e)|0;if(!i){Mc(D);Mc(E);K=0;u=L;return K|0}l=f[G>>2]|0;if(l|0){j=D;k=0;while(1){f[E+(k<<2)>>2]=j;k=k+1|0;if(k>>>0>=l>>>0)break;else j=j+528|0}}Df(a,c,e,o,q,p,r,s,t,m,n,E);J=f[m>>2]|0;x=X(f[G>>2]|0,J)|0;I=f[n>>2]|0;w=X(I,x)|0;b[i>>0]=(h[c+93>>0]|0)>>>3&1;F=Ic(X(f[C+(e*5640|0)+8>>2]|0,w)|0,2)|0;k=i+4|0;f[k>>2]=F;if(!F){Mc(D);Mc(E);j=f[k>>2]|0;if(j|0){Mc(j);f[k>>2]=0}if(K|0){o=i;p=0;while(1){q=o+196|0;j=f[q>>2]|0;if(j|0){a=o+192|0;k=f[a>>2]|0;if(k){n=0;while(1){l=j+12|0;m=f[l>>2]|0;if(m){Mc(m);f[l>>2]=0;k=f[a>>2]|0}n=n+1|0;if(n>>>0>=k>>>0)break;else j=j+16|0}j=f[q>>2]|0}Mc(j);f[q>>2]=0}p=p+1|0;if((p|0)==(K|0))break;else o=o+232|0}}Mc(i);K=0;u=L;return K|0}m=f[i+196>>2]|0;v=f[a+24>>2]|0;F=f[o>>2]|0;f[i+200>>2]=F;B=f[p>>2]|0;f[i+204>>2]=B;A=f[q>>2]|0;f[i+208>>2]=A;z=f[r>>2]|0;f[i+212>>2]=z;y=f[s>>2]|0;f[i+224>>2]=y;s=f[t>>2]|0;f[i+228>>2]=s;f[i+20>>2]=1;f[i+16>>2]=J;f[i+12>>2]=x;f[i+8>>2]=w;p=f[i+192>>2]|0;if(p|0){o=v;n=0;while(1){j=f[m+12>>2]|0;k=f[E+(n<<2)>>2]|0;f[m>>2]=f[o>>2];f[m+4>>2]=f[o+4>>2];a=f[m+8>>2]|0;if(a|0){l=0;while(1){f[j>>2]=f[k>>2];f[j+4>>2]=f[k+4>>2];f[j+8>>2]=f[k+8>>2];f[j+12>>2]=f[k+12>>2];l=l+1|0;if(l>>>0>=a>>>0)break;else{j=j+16|0;k=k+16|0}}}n=n+1|0;if(n>>>0>=p>>>0)break;else{o=o+52|0;m=m+16|0}}}if(K>>>0>1){o=1;q=i;do{j=f[q+428>>2]|0;f[q+432>>2]=F;f[q+436>>2]=B;f[q+440>>2]=A;f[q+444>>2]=z;f[q+456>>2]=y;f[q+460>>2]=s;f[q+252>>2]=1;f[q+248>>2]=J;f[q+244>>2]=x;f[q+240>>2]=w;r=f[q+424>>2]|0;if(r|0){p=v;n=0;while(1){k=f[j+12>>2]|0;l=f[E+(n<<2)>>2]|0;f[j>>2]=f[p>>2];f[j+4>>2]=f[p+4>>2];a=f[j+8>>2]|0;if(a|0){m=0;while(1){f[k>>2]=f[l>>2];f[k+4>>2]=f[l+4>>2];f[k+8>>2]=f[l+8>>2];f[k+12>>2]=f[l+12>>2];m=m+1|0;if(m>>>0>=a>>>0)break;else{k=k+16|0;l=l+16|0}}}n=n+1|0;if(n>>>0>=r>>>0)break;else{p=p+52|0;j=j+16|0}}}f[q+236>>2]=f[q+4>>2];q=q+232|0;o=o+1|0}while((o|0)!=(K|0))}Mc(D);Mc(E);do if(b[C+(e*5640|0)+5636>>0]&4){j=d[c>>1]|0;if((j&65535)>2){if(!((g|0)==1|(j&65535)<7))break}else if((g|0)!=1)break;Gf(f[H>>2]|0,e,F,A,B,z,J,y,s);K=i;u=L;return K|0}while(0);a=f[G>>2]|0;j=f[H>>2]|0;l=(f[j+(e*5640|0)+420>>2]|0)+1|0;if(!l){K=i;u=L;return K|0}m=f[j+(e*5640|0)+8>>2]|0;n=f[j+(e*5640|0)+4>>2]|0;k=0;j=j+(e*5640|0)+424|0;while(1){f[j+76>>2]=0;f[j+92>>2]=a;f[j+72>>2]=0;f[j+88>>2]=I;f[j+68>>2]=0;f[j+84>>2]=m;f[j+36>>2]=n;f[j+80>>2]=0;f[j+96>>2]=J;f[j+100>>2]=F;f[j+104>>2]=A;f[j+108>>2]=B;f[j+112>>2]=z;f[j+116>>2]=y;f[j+120>>2]=s;k=k+1|0;if((k|0)==(l|0))break;else j=j+148|0}u=L;return i|0}function Gf(a,b,c,d,e,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;l=(f[a+(b*5640|0)+420>>2]|0)+1|0;f[a+(b*5640|0)+500>>2]=f[a+(b*5640|0)+428>>2];f[a+(b*5640|0)+516>>2]=f[a+(b*5640|0)+440>>2];f[a+(b*5640|0)+496>>2]=f[a+(b*5640|0)+424>>2];f[a+(b*5640|0)+512>>2]=f[a+(b*5640|0)+436>>2];f[a+(b*5640|0)+508>>2]=f[a+(b*5640|0)+432>>2];f[a+(b*5640|0)+492>>2]=0;f[a+(b*5640|0)+460>>2]=f[a+(b*5640|0)+456>>2];f[a+(b*5640|0)+504>>2]=0;f[a+(b*5640|0)+520>>2]=h;f[a+(b*5640|0)+524>>2]=c;f[a+(b*5640|0)+528>>2]=d;f[a+(b*5640|0)+532>>2]=e;f[a+(b*5640|0)+536>>2]=g;f[a+(b*5640|0)+540>>2]=i;f[a+(b*5640|0)+544>>2]=j;if(l>>>0<=1)return;k=1;a=a+(b*5640|0)+572|0;while(1){f[a+76>>2]=f[a+4>>2];f[a+92>>2]=f[a+16>>2];f[a+72>>2]=f[a>>2];f[a+88>>2]=f[a+12>>2];b=f[a+8>>2]|0;f[a+84>>2]=b;f[a+36>>2]=f[a+32>>2];f[a+80>>2]=0;f[a+68>>2]=b>>>0>(f[a+-64>>2]|0)>>>0?b:0;f[a+96>>2]=h;f[a+100>>2]=c;f[a+104>>2]=d;f[a+108>>2]=e;f[a+112>>2]=g;f[a+116>>2]=i;f[a+120>>2]=j;k=k+1|0;if((k|0)==(l|0))break;else a=a+148|0}return}function Hf(a,c,e,g,h,i,j){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;V=f[c+76>>2]|0;Y=V+(e*5640|0)+424+(g*148|0)+36|0;W=Nc(f[Y>>2]|0)|0;f[a+(g*232|0)+40>>2]=1;X=a+(g*232|0)+44|0;f[a+(g*232|0)+80>>2]=f[Y>>2];do if(b[c+93>>0]&8){k=d[c>>1]|0;if((k&65535)>2){if(!((j|0)==1&(k&65535)>6|(k+-3&65535)<4))break}else if(!((j|0)==1|(k+-3&65535)<4))break;a:do if((i|0)<3){p=V+(e*5640|0)+424+(g*148|0)+72|0;q=V+(e*5640|0)+424+(g*148|0)+88|0;r=a+(g*232|0)+56|0;s=V+(e*5640|0)+424+(g*148|0)+76|0;t=a+(g*232|0)+48|0;u=V+(e*5640|0)+424+(g*148|0)+92|0;v=a+(g*232|0)+60|0;w=V+(e*5640|0)+424+(g*148|0)+68|0;x=a+(g*232|0)+64|0;y=V+(e*5640|0)+424+(g*148|0)+84|0;z=a+(g*232|0)+52|0;A=V+(e*5640|0)+424+(g*148|0)+80|0;B=a+(g*232|0)+68|0;C=V+(e*5640|0)+424+(g*148|0)+96|0;D=a+(g*232|0)+72|0;E=V+(e*5640|0)+424+(g*148|0)+100|0;F=a+(g*232|0)+96|0;G=V+(e*5640|0)+424+(g*148|0)+108|0;H=a+(g*232|0)+104|0;I=V+(e*5640|0)+424+(g*148|0)+104|0;J=a+(g*232|0)+100|0;K=V+(e*5640|0)+424+(g*148|0)+112|0;L=a+(g*232|0)+108|0;k=i;while(1){j=k;k=k+1|0;switch(b[W+k>>0]|0){case 82:{l=r;m=q;n=X;o=p;U=10;break}case 67:{l=v;m=u;n=t;o=s;U=10;break}case 76:{l=z;m=y;n=x;o=w;U=10;break}case 80:{if((f[Y>>2]|0)>>>0<2){l=D;m=C;n=B;o=A;U=10}else{f[F>>2]=f[E>>2];f[H>>2]=f[G>>2];l=L;m=K;n=J;o=I;U=10}break}default:{}}if((U|0)==10){U=0;f[n>>2]=f[o>>2];f[l>>2]=f[m>>2]}if((j|0)>=2)break a}}while(0);k=(i|0)>-1;if(!h){if(!k)return;m=V+(e*5640|0)+424+(g*148|0)+76|0;n=V+(e*5640|0)+424+(g*148|0)+132|0;o=a+(g*232|0)+48|0;p=a+(g*232|0)+60|0;q=V+(e*5640|0)+424+(g*148|0)+72|0;r=V+(e*5640|0)+424+(g*148|0)+128|0;s=a+(g*232|0)+56|0;t=V+(e*5640|0)+424+(g*148|0)+68|0;u=V+(e*5640|0)+424+(g*148|0)+124|0;v=a+(g*232|0)+64|0;w=a+(g*232|0)+52|0;x=V+(e*5640|0)+424+(g*148|0)+80|0;y=V+(e*5640|0)+424+(g*148|0)+136|0;z=a+(g*232|0)+68|0;A=a+(g*232|0)+72|0;B=V+(e*5640|0)+424+(g*148|0)+100|0;C=V+(e*5640|0)+424+(g*148|0)+140|0;D=V+(e*5640|0)+424+(g*148|0)+108|0;E=V+(e*5640|0)+424+(g*148|0)+144|0;F=a+(g*232|0)+96|0;G=V+(e*5640|0)+424+(g*148|0)+116|0;H=a+(g*232|0)+100|0;I=a+(g*232|0)+104|0;l=V+(e*5640|0)+424+(g*148|0)+120|0;j=a+(g*232|0)+108|0;k=i;while(1){b:do switch(b[W+k>>0]|0){case 67:{g=f[m>>2]|0;f[o>>2]=g;g=g+1|0;f[p>>2]=g;f[n>>2]=g;break}case 82:{g=f[q>>2]|0;f[X>>2]=g;g=g+1|0;f[s>>2]=g;f[r>>2]=g;break}case 76:{g=f[t>>2]|0;f[v>>2]=g;g=g+1|0;f[w>>2]=g;f[u>>2]=g;break}case 80:if((f[Y>>2]|0)>>>0<2){g=f[x>>2]|0;f[z>>2]=g;g=g+1|0;f[A>>2]=g;f[y>>2]=g;break b}else{g=f[B>>2]|0;i=f[D>>2]|0;f[F>>2]=g;e=f[G>>2]|0;e=e+g-((g>>>0)%(e>>>0)|0)|0;f[H>>2]=e;f[I>>2]=i;g=f[l>>2]|0;g=g+i-((i>>>0)%(g>>>0)|0)|0;f[j>>2]=g;f[C>>2]=e;f[E>>2]=g;break b}default:{}}while(0);if((k|0)>0)k=k+-1|0;else break}return}if(!k)return;P=V+(e*5640|0)+424+(g*148|0)+128|0;Q=V+(e*5640|0)+424+(g*148|0)+88|0;R=V+(e*5640|0)+424+(g*148|0)+72|0;S=a+(g*232|0)+56|0;T=V+(e*5640|0)+424+(g*148|0)+132|0;t=V+(e*5640|0)+424+(g*148|0)+92|0;u=V+(e*5640|0)+424+(g*148|0)+76|0;v=a+(g*232|0)+48|0;w=a+(g*232|0)+60|0;x=V+(e*5640|0)+424+(g*148|0)+124|0;y=V+(e*5640|0)+424+(g*148|0)+84|0;z=V+(e*5640|0)+424+(g*148|0)+68|0;A=a+(g*232|0)+64|0;B=a+(g*232|0)+52|0;C=V+(e*5640|0)+424+(g*148|0)+136|0;D=V+(e*5640|0)+424+(g*148|0)+96|0;E=V+(e*5640|0)+424+(g*148|0)+80|0;F=a+(g*232|0)+68|0;G=a+(g*232|0)+72|0;H=V+(e*5640|0)+424+(g*148|0)+140|0;I=V+(e*5640|0)+424+(g*148|0)+104|0;J=a+(g*232|0)+96|0;K=V+(e*5640|0)+424+(g*148|0)+116|0;L=a+(g*232|0)+100|0;h=V+(e*5640|0)+424+(g*148|0)+144|0;M=V+(e*5640|0)+424+(g*148|0)+112|0;N=a+(g*232|0)+104|0;O=V+(e*5640|0)+424+(g*148|0)+120|0;r=a+(g*232|0)+108|0;s=V+(e*5640|0)+424+(g*148|0)+100|0;q=V+(e*5640|0)+424+(g*148|0)+108|0;k=1;p=i;while(1){o=W+p|0;c:do switch(b[o>>0]|0){case 67:{j=w;l=T;m=(f[T>>2]|0)+-1|0;n=v;U=35;break}case 82:{j=S;l=P;m=(f[P>>2]|0)+-1|0;n=X;U=35;break}case 76:{j=B;l=x;m=(f[x>>2]|0)+-1|0;n=A;U=35;break}case 80:if((f[Y>>2]|0)>>>0<2){j=G;l=C;m=(f[C>>2]|0)+-1|0;n=F;U=35;break c}else{n=f[H>>2]|0;m=f[K>>2]|0;f[J>>2]=n-m-((n>>>0)%(m>>>0)|0);f[L>>2]=n;n=f[h>>2]|0;m=f[O>>2]|0;j=r;l=h;m=n-m-((n>>>0)%(m>>>0)|0)|0;n=N;U=35;break c}default:{}}while(0);if((U|0)==35){U=0;f[n>>2]=m;f[j>>2]=f[l>>2]}d:do if((k|0)==1)switch(b[o>>0]|0){case 82:{k=f[P>>2]|0;if((k|0)!=(f[Q>>2]|0)){f[X>>2]=k;k=k+1|0;f[S>>2]=k;f[P>>2]=k;k=0;break d}if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}k=f[R>>2]|0;f[X>>2]=k;k=k+1|0;f[S>>2]=k;f[P>>2]=k;k=1;break d}case 67:{k=f[T>>2]|0;if((k|0)!=(f[t>>2]|0)){f[v>>2]=k;k=k+1|0;f[w>>2]=k;f[T>>2]=k;k=0;break d}if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}k=f[u>>2]|0;f[v>>2]=k;k=k+1|0;f[w>>2]=k;f[T>>2]=k;k=1;break d}case 76:{k=f[x>>2]|0;if((k|0)!=(f[y>>2]|0)){f[A>>2]=k;k=k+1|0;f[B>>2]=k;f[x>>2]=k;k=0;break d}if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}k=f[z>>2]|0;f[A>>2]=k;k=k+1|0;f[B>>2]=k;f[x>>2]=k;k=1;break d}case 80:{if((f[Y>>2]|0)>>>0<2){k=f[C>>2]|0;if((k|0)!=(f[D>>2]|0)){f[F>>2]=k;k=k+1|0;f[G>>2]=k;f[C>>2]=k;k=0;break d}if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}k=f[E>>2]|0;f[F>>2]=k;k=k+1|0;f[G>>2]=k;f[C>>2]=k;k=1;break d}k=f[H>>2]|0;if(k>>>0<(f[I>>2]|0)>>>0){f[J>>2]=k;i=f[K>>2]|0;k=i+k-((k>>>0)%(i>>>0)|0)|0;f[L>>2]=k;f[H>>2]=k;k=0;break d}j=f[h>>2]|0;if(j>>>0<(f[M>>2]|0)>>>0){f[N>>2]=j;i=f[O>>2]|0;k=0;l=i+j|0;j=(j>>>0)%(i>>>0)|0}else{if(!(If(p+-1|0,c,e,g,W)|0)){k=0;break d}i=f[q>>2]|0;f[h>>2]=i;f[N>>2]=i;j=f[O>>2]|0;k=1;l=j+i|0;j=(i>>>0)%(j>>>0)|0}V=l-j|0;f[r>>2]=V;f[h>>2]=V;V=f[s>>2]|0;f[J>>2]=V;i=f[K>>2]|0;i=i+V-((V>>>0)%(i>>>0)|0)|0;f[L>>2]=i;f[H>>2]=i;break d}default:{k=1;break d}}while(0);if((p|0)>0)p=p+-1|0;else break}return}while(0);f[X>>2]=f[V+(e*5640|0)+424+(g*148|0)+72>>2];f[a+(g*232|0)+56>>2]=f[V+(e*5640|0)+424+(g*148|0)+88>>2];f[a+(g*232|0)+48>>2]=f[V+(e*5640|0)+424+(g*148|0)+76>>2];f[a+(g*232|0)+60>>2]=f[V+(e*5640|0)+424+(g*148|0)+92>>2];f[a+(g*232|0)+64>>2]=f[V+(e*5640|0)+424+(g*148|0)+68>>2];f[a+(g*232|0)+52>>2]=f[V+(e*5640|0)+424+(g*148|0)+84>>2];f[a+(g*232|0)+68>>2]=f[V+(e*5640|0)+424+(g*148|0)+80>>2];f[a+(g*232|0)+72>>2]=f[V+(e*5640|0)+424+(g*148|0)+96>>2];f[a+(g*232|0)+96>>2]=f[V+(e*5640|0)+424+(g*148|0)+100>>2];f[a+(g*232|0)+104>>2]=f[V+(e*5640|0)+424+(g*148|0)+108>>2];f[a+(g*232|0)+100>>2]=f[V+(e*5640|0)+424+(g*148|0)+104>>2];f[a+(g*232|0)+108>>2]=f[V+(e*5640|0)+424+(g*148|0)+112>>2];return}function If(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0;i=f[c+76>>2]|0;if((a|0)>-1)h=a;else{j=0;j=j&1;return j|0}a:while(1){switch(b[g+h>>0]|0){case 82:{j=3;break a}case 67:{j=5;break a}case 76:{j=7;break a}case 80:{j=9;break a}default:{}}h=h+-1|0}if((j|0)==3){if((f[i+(d*5640|0)+424+(e*148|0)+128>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+88>>2]|0)){j=1;j=j&1;return j|0}j=(If(a+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}else if((j|0)==5){if((f[i+(d*5640|0)+424+(e*148|0)+132>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+92>>2]|0)){j=1;j=j&1;return j|0}j=(If(a+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}else if((j|0)==7){if((f[i+(d*5640|0)+424+(e*148|0)+124>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+84>>2]|0)){j=1;j=j&1;return j|0}j=(If(a+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}else if((j|0)==9){if((f[i+(d*5640|0)+424+(e*148|0)+36>>2]|0)>>>0<2){if((f[i+(d*5640|0)+424+(e*148|0)+136>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+96>>2]|0)){j=1;j=j&1;return j|0}j=(If(h+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}if((f[i+(d*5640|0)+424+(e*148|0)+140>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+104>>2]|0)){j=1;j=j&1;return j|0}if((f[i+(d*5640|0)+424+(e*148|0)+144>>2]|0)!=(f[i+(d*5640|0)+424+(e*148|0)+112>>2]|0)){j=1;j=j&1;return j|0}j=(If(h+-1|0,c,d,e,g)|0)!=0;j=j&1;return j|0}return 0}function Jf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;E=f[c+76>>2]|0;F=f[c+24>>2]|0;J=(d>>>0)%(F>>>0)|0;F=(d>>>0)/(F>>>0)|0;G=f[c+4>>2]|0;B=f[c+12>>2]|0;A=(X(B,J)|0)+G|0;H=f[a>>2]|0;H=(A|0)>(H|0)?A:H;G=(X(B,J+1|0)|0)+G|0;J=f[a+8>>2]|0;J=(G|0)<(J|0)?G:J;G=f[c+8>>2]|0;B=f[c+16>>2]|0;A=(X(B,F)|0)+G|0;D=f[a+4>>2]|0;D=(A|0)>(D|0)?A:D;G=(X(B,F+1|0)|0)+G|0;F=f[a+12>>2]|0;F=(G|0)<(F|0)?G:F;G=f[a+16>>2]|0;if(!G){l=0;k=2147483647;j=2147483647;e=0}else{y=H+-1|0;z=D+-1|0;A=J+-1|0;B=F+-1|0;k=2147483647;x=f[E+(d*5640|0)+5584>>2]|0;v=f[a+24>>2]|0;w=0;j=2147483647;l=0;e=0;while(1){s=f[v>>2]|0;c=(y+s|0)/(s|0)|0;t=f[v+4>>2]|0;a=(z+t|0)/(t|0)|0;g=(A+s|0)/(s|0)|0;h=(B+t|0)/(t|0)|0;u=f[x+4>>2]|0;if(u>>>0<=l>>>0){if(u)C=5}else{l=u;C=5}if((C|0)==5){C=0;q=Zi(c|0,((c|0)<0)<<31>>31|0,-1,-1)|0;r=I;o=Zi(a|0,((a|0)<0)<<31>>31|0,-1,-1)|0;p=I;m=Zi(g|0,((g|0)<0)<<31>>31|0,-1,-1)|0;n=I;h=Zi(h|0,((h|0)<0)<<31>>31|0,-1,-1)|0;i=I;L=f[x+812>>2]|0;g=f[x+944>>2]|0;K=u+-1|0;N=s<>>0>>0?j:N;k=k>>>0>>0?k:c;c=fj(1,0,K|0)|0;N=I;M=Zi(q|0,r|0,c|0,N|0)|0;M=dj(M|0,I|0,K|0)|0;a=Zi(o|0,p|0,c|0,N|0)|0;a=dj(a|0,I|0,K|0)|0;O=Zi(m|0,n|0,c|0,N|0)|0;O=dj(O|0,I|0,K|0)|0;N=Zi(h|0,i|0,c|0,N|0)|0;K=dj(N|0,I|0,K|0)|0;N=fj(1,0,L|0)|0;N=Zi(N|0,I|0,-1,-1)|0;N=Zi(N|0,I|0,O|0,((O|0)<0)<<31>>31|0)|0;N=dj(N|0,I|0,L|0)|0;c=fj(1,0,g|0)|0;c=Zi(c|0,I|0,-1,-1)|0;c=Zi(c|0,I|0,K|0,((K|0)<0)<<31>>31|0)|0;c=dj(c|0,I|0,g|0)|0;g=X((M|0)==(O|0)?0:(N<>L<>L,(a|0)==(K|0)?0:(c<>g<>g)|0;e=g>>>0>e>>>0?g:e;if(u>>>0>1){a=-1;g=1;while(1){L=f[x+812+(g<<2)>>2]|0;c=f[x+944+(g<<2)>>2]|0;M=a+-1+u|0;a=s<>>0>>0?j:a;k=k>>>0>>0?k:N;N=fj(1,0,M|0)|0;a=I;K=Zi(q|0,r|0,N|0,a|0)|0;K=dj(K|0,I|0,M|0)|0;O=Zi(o|0,p|0,N|0,a|0)|0;O=dj(O|0,I|0,M|0)|0;P=Zi(m|0,n|0,N|0,a|0)|0;P=dj(P|0,I|0,M|0)|0;a=Zi(h|0,i|0,N|0,a|0)|0;M=dj(a|0,I|0,M|0)|0;a=fj(1,0,L|0)|0;a=Zi(a|0,I|0,-1,-1)|0;a=Zi(a|0,I|0,P|0,((P|0)<0)<<31>>31|0)|0;a=dj(a|0,I|0,L|0)|0;N=fj(1,0,c|0)|0;N=Zi(N|0,I|0,-1,-1)|0;N=Zi(N|0,I|0,M|0,((M|0)<0)<<31>>31|0)|0;N=dj(N|0,I|0,c|0)|0;c=X((K|0)==(P|0)?0:(a<>L<>L,(O|0)==(M|0)?0:(N<>c<>c)|0;e=c>>>0>e>>>0?c:e;c=g+1|0;if(c>>>0>>0){a=~g;g=c}else break}}}w=w+1|0;if(w>>>0>=G>>>0)break;else{x=x+1080|0;v=v+52|0}}}if(b[E+(d*5640|0)+5636>>0]&4){Gf(E,d,H,J,D,F,e,j,k);return}g=(f[E+(d*5640|0)+420>>2]|0)+1|0;if(!g)return;h=f[E+(d*5640|0)+8>>2]|0;i=f[E+(d*5640|0)+4>>2]|0;a=0;c=E+(d*5640|0)+424|0;while(1){f[c+76>>2]=0;f[c+92>>2]=G;f[c+72>>2]=0;f[c+88>>2]=l;f[c+68>>2]=0;f[c+84>>2]=h;f[c+36>>2]=i;f[c+80>>2]=0;f[c+96>>2]=e;f[c+100>>2]=H;f[c+104>>2]=J;f[c+108>>2]=D;f[c+112>>2]=F;f[c+116>>2]=j;f[c+120>>2]=k;a=a+1|0;if((a|0)==(g|0))break;else c=c+148|0}return}function Kf(a){a=a|0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0;switch(f[a+80>>2]|0){case 0:{c=a+40|0;if(!(f[c>>2]|0)){E=a+32|0;l=E;E=f[E>>2]|0;e=18}else{f[c>>2]=0;v=f[a+64>>2]|0;f[a+36>>2]=v;e=5}while(1){if((e|0)==5){if(v>>>0>=(f[a+52>>2]|0)>>>0){nb=0;e=153;break}z=f[a+44>>2]|0;f[a+28>>2]=z;e=7}else if((e|0)==18){j=E+1|0;f[l>>2]=j;h=l;e=14}while(1){if((e|0)==7){e=0;if(z>>>0>=(f[a+56>>2]|0)>>>0){e=21;break}A=f[a+48>>2]|0;p=a+24|0;f[p>>2]=A}else if((e|0)==14){if(j>>>0<(f[a+72>>2]|0)>>>0){e=16;break}F=a+24|0;n=F;F=f[F>>2]|0;e=19}while(1){if((e|0)==19){e=0;A=F+1|0;f[n>>2]=A;p=n}if(A>>>0>=(f[a+60>>2]|0)>>>0){e=20;break}B=f[a+196>>2]|0;C=f[a+28>>2]|0;if(C>>>0<(f[B+(A<<4)+8>>2]|0)>>>0)break;else{n=p;F=A;e=19}}if((e|0)==20){e=a+28|0;z=(f[e>>2]|0)+1|0;f[e>>2]=z;e=7;continue}c=f[B+(A<<4)+12>>2]|0;if(!(b[a>>0]|0)){mb=X(f[c+(C<<4)+12>>2]|0,f[c+(C<<4)+8>>2]|0)|0;f[a+72>>2]=mb}j=f[a+68>>2]|0;h=a+32|0;f[h>>2]=j;e=14}if((e|0)==16){e=0;D=X(f[a+8>>2]|0,f[a+36>>2]|0)|0;D=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+D|0;D=D+(X(f[a+16>>2]|0,f[a+24>>2]|0)|0)|0;D=D+(X(f[a+20>>2]|0,j)|0)|0;D=(f[a+4>>2]|0)+(D<<1)|0;if(!(d[D>>1]|0))break;else{l=h;E=j;e=18;continue}}else if((e|0)==21){e=a+36|0;v=(f[e>>2]|0)+1|0;f[e>>2]=v;e=5;continue}}if((e|0)==153)return nb|0;d[D>>1]=1;a=1;return a|0}case 1:{c=a+40|0;if(!(f[c>>2]|0)){x=a+32|0;k=x;x=f[x>>2]|0;e=38}else{f[c>>2]=0;G=f[a+44>>2]|0;f[a+28>>2]=G;e=25}while(1){if((e|0)==25){if(G>>>0>=(f[a+56>>2]|0)>>>0){nb=0;e=153;break}r=f[a+64>>2]|0;f[a+36>>2]=r;e=27}else if((e|0)==38){i=x+1|0;f[k>>2]=i;g=k;e=34}while(1){if((e|0)==27){e=0;if(r>>>0>=(f[a+52>>2]|0)>>>0){e=41;break}s=f[a+48>>2]|0;o=a+24|0;f[o>>2]=s}else if((e|0)==34){if(i>>>0<(f[a+72>>2]|0)>>>0){e=36;break}y=a+24|0;m=y;y=f[y>>2]|0;e=39}while(1){if((e|0)==39){e=0;s=y+1|0;f[m>>2]=s;o=m}if(s>>>0>=(f[a+60>>2]|0)>>>0){e=40;break}t=f[a+196>>2]|0;u=f[a+28>>2]|0;if(u>>>0<(f[t+(s<<4)+8>>2]|0)>>>0)break;else{m=o;y=s;e=39}}if((e|0)==40){e=a+36|0;r=(f[e>>2]|0)+1|0;f[e>>2]=r;e=27;continue}c=f[t+(s<<4)+12>>2]|0;if(!(b[a>>0]|0)){mb=X(f[c+(u<<4)+12>>2]|0,f[c+(u<<4)+8>>2]|0)|0;f[a+72>>2]=mb}i=f[a+68>>2]|0;g=a+32|0;f[g>>2]=i;e=34}if((e|0)==36){e=0;w=X(f[a+8>>2]|0,f[a+36>>2]|0)|0;w=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+w|0;w=w+(X(f[a+16>>2]|0,f[a+24>>2]|0)|0)|0;w=w+(X(f[a+20>>2]|0,i)|0)|0;w=(f[a+4>>2]|0)+(w<<1)|0;if(!(d[w>>1]|0))break;else{k=g;x=i;e=38;continue}}else if((e|0)==41){e=a+28|0;G=(f[e>>2]|0)+1|0;f[e>>2]=G;e=25;continue}}if((e|0)==153)return nb|0;d[w>>1]=1;a=1;return a|0}case 2:{c=a+40|0;if(!(f[c>>2]|0)){lb=a+36|0;Ta=lb;lb=f[lb>>2]|0;e=75}else{f[c>>2]=0;p=a+224|0;f[p>>2]=0;q=a+228|0;f[q>>2]=0;r=f[a+192>>2]|0;if(r|0){s=f[a+196>>2]|0;o=0;e=0;c=0;do{j=f[s+(o<<4)+8>>2]|0;if(j){k=f[s+(o<<4)+12>>2]|0;l=f[s+(o<<4)>>2]|0;m=f[s+(o<<4)+4>>2]|0;n=j+-1|0;Ra=l<<(f[k>>2]|0)+n;Sa=m<<(f[k+4>>2]|0)+n;e=(e|0)==0?Ra:e>>>0>>0?e:Ra;c=(c|0)==0?Sa:c>>>0>>0?c:Sa;if((j|0)!=1){h=-1;i=1;while(1){g=n+h|0;Sa=l<>2]|0);g=m<<(f[k+(i<<4)+4>>2]|0)+g;e=(e|0)==0?Sa:e>>>0>>0?e:Sa;c=(c|0)==0?g:c>>>0>>0?c:g;g=i+1|0;if(g>>>0>>0){h=~i;i=g}else break}}f[p>>2]=e;f[q>>2]=c}o=o+1|0}while((o|0)!=(r|0))}if(!(b[a>>0]|0)){f[a+104>>2]=f[a+204>>2];f[a+96>>2]=f[a+200>>2];f[a+108>>2]=f[a+212>>2];f[a+100>>2]=f[a+208>>2]}J=f[a+44>>2]|0;f[a+28>>2]=J;e=54}while(1){if((e|0)==54){if(J>>>0>=(f[a+56>>2]|0)>>>0){nb=0;e=153;break}Xa=f[a+104>>2]|0;f[a+220>>2]=Xa;e=56}else if((e|0)==75){jb=lb+1|0;f[Ta>>2]=jb;Ua=Ta;e=71}while(1){if((e|0)==56){if((Xa|0)>=(f[a+108>>2]|0)){e=79;break}Ya=f[a+96>>2]|0;f[a+216>>2]=Ya;e=58}else if((e|0)==71){if(jb>>>0<(f[a+52>>2]|0)>>>0){e=73;break}mb=a+24|0;Va=mb;mb=f[mb>>2]|0;e=76}while(1){if((e|0)==58){if((Ya|0)>=(f[a+100>>2]|0)){e=78;break}Za=f[a+48>>2]|0;Wa=a+24|0;f[Wa>>2]=Za}else if((e|0)==76){Za=mb+1|0;f[Va>>2]=Za;Wa=Va}if(Za>>>0>=(f[a+60>>2]|0)>>>0){Ya=f[a+224>>2]|0;e=a+216|0;Sa=f[e>>2]|0;Ya=Sa+Ya-((Sa|0)%(Ya|0)|0)|0;f[e>>2]=Ya;e=58;continue}e=f[a+196>>2]|0;m=f[a+28>>2]|0;c=f[e+(Za<<4)+8>>2]|0;if(m>>>0>=c>>>0){Va=Wa;mb=Za;e=76;continue}n=f[e+(Za<<4)+12>>2]|0;i=c+~m|0;j=f[a+200>>2]|0;k=f[e+(Za<<4)>>2]|0;_a=k<>2]|0;Sa=f[e+(Za<<4)+4>>2]|0;ab=Sa<>2]|0)|0)/(_a|0)|0;db=ab+-1|0;e=(db+(f[a+212>>2]|0)|0)/(ab|0)|0;eb=f[n+(m<<4)>>2]|0;g=eb+i|0;fb=f[n+(m<<4)+4>>2]|0;h=fb+i|0;gb=f[a+220>>2]|0;if((gb|0)%(Sa<>2]|0;if((hb|0)%(k<>2]|0;if(!ib){Va=Wa;mb=Za;e=76;continue}if((bb|0)==(e|0)|(($a|0)==(c|0)?1:(f[n+(m<<4)+12>>2]|0)==0)){Va=Wa;mb=Za;e=76}else{e=70;break}}if((e|0)==70){jb=(((cb+hb|0)/(_a|0)|0)>>eb)-($a>>eb)+(X((((db+gb|0)/(ab|0)|0)>>fb)-(bb>>fb)|0,ib)|0)|0;f[a+32>>2]=jb;jb=f[a+64>>2]|0;Ua=a+36|0;f[Ua>>2]=jb;e=71;continue}else if((e|0)==78){Xa=f[a+228>>2]|0;e=a+220|0;Sa=f[e>>2]|0;Xa=Sa+Xa-((Sa|0)%(Xa|0)|0)|0;f[e>>2]=Xa;e=56;continue}}if((e|0)==73){e=0;kb=X(f[a+8>>2]|0,jb)|0;kb=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+kb|0;kb=kb+(X(f[a+16>>2]|0,f[a+24>>2]|0)|0)|0;kb=kb+(X(f[a+20>>2]|0,f[a+32>>2]|0)|0)|0;kb=(f[a+4>>2]|0)+(kb<<1)|0;if(!(d[kb>>1]|0))break;else{Ta=Ua;lb=jb;e=75;continue}}else if((e|0)==79){e=a+28|0;J=(f[e>>2]|0)+1|0;f[e>>2]=J;e=54;continue}}if((e|0)==153)return nb|0;d[kb>>1]=1;a=1;return a|0}case 3:{e=a+40|0;if(!(f[e>>2]|0)){Ra=f[a+24>>2]|0;Oa=a+36|0;ra=(f[a+196>>2]|0)+(Ra<<4)|0;ta=Oa;Oa=f[Oa>>2]|0;e=113}else{f[e>>2]=0;p=a+224|0;f[p>>2]=0;q=a+228|0;f[q>>2]=0;r=f[a+192>>2]|0;if(r|0){s=f[a+196>>2]|0;o=0;e=0;c=0;do{j=f[s+(o<<4)+8>>2]|0;if(j){k=f[s+(o<<4)+12>>2]|0;l=f[s+(o<<4)>>2]|0;m=f[s+(o<<4)+4>>2]|0;n=j+-1|0;lb=l<<(f[k>>2]|0)+n;mb=m<<(f[k+4>>2]|0)+n;e=(e|0)==0?lb:e>>>0>>0?e:lb;c=(c|0)==0?mb:c>>>0>>0?c:mb;if((j|0)!=1){h=-1;i=1;while(1){g=n+h|0;mb=l<>2]|0);g=m<<(f[k+(i<<4)+4>>2]|0)+g;e=(e|0)==0?mb:e>>>0>>0?e:mb;c=(c|0)==0?g:c>>>0>>0?c:g;g=i+1|0;if(g>>>0>>0){h=~i;i=g}else break}}f[p>>2]=e;f[q>>2]=c}o=o+1|0}while((o|0)!=(r|0))}if(!(b[a>>0]|0)){c=f[a+204>>2]|0;f[a+104>>2]=c;f[a+96>>2]=f[a+200>>2];f[a+108>>2]=f[a+212>>2];f[a+100>>2]=f[a+208>>2]}else c=f[a+104>>2]|0;f[a+220>>2]=c;e=93}while(1){if((e|0)==93){if((c|0)>=(f[a+108>>2]|0)){nb=0;e=153;break}xa=f[a+96>>2]|0;f[a+216>>2]=xa;e=95}else if((e|0)==113){La=Oa+1|0;f[ta>>2]=La;qa=ra;ua=ta;Ma=Ra;e=109}while(1){if((e|0)==95){if((xa|0)>=(f[a+100>>2]|0)){e=117;break}ya=f[a+48>>2]|0;f[a+24>>2]=ya;e=97}else if((e|0)==109){if(La>>>0<(f[a+52>>2]|0)>>>0){e=111;break}Pa=a+28|0;sa=qa;va=Pa;Pa=f[Pa>>2]|0;Sa=Ma;e=114}while(1){if((e|0)==97){if(ya>>>0>=(f[a+60>>2]|0)>>>0){e=116;break}pa=(f[a+196>>2]|0)+(ya<<4)|0;za=f[a+44>>2]|0;wa=a+28|0;f[wa>>2]=za;Qa=ya}else if((e|0)==114){za=Pa+1|0;f[va>>2]=za;pa=sa;wa=va;Qa=Sa}mb=f[a+56>>2]|0;e=f[pa+8>>2]|0;if(za>>>0>=(mb>>>0>>0?mb:e)>>>0){ya=Qa+1|0;f[a+24>>2]=ya;e=97;continue}n=f[pa+12>>2]|0;e=e+~za|0;g=f[a+200>>2]|0;h=f[pa>>2]|0;Aa=h<>2]|0;mb=f[pa+4>>2]|0;Ca=mb<>2]|0)|0)/(Aa|0)|0;Fa=Ca+-1|0;k=(Fa+(f[a+212>>2]|0)|0)/(Ca|0)|0;Ga=f[n+(za<<4)>>2]|0;l=Ga+e|0;Ha=f[n+(za<<4)+4>>2]|0;m=Ha+e|0;Ia=f[a+220>>2]|0;if((Ia|0)%(mb<>2]|0;if((Ja|0)%(h<>2]|0;if(!Ka){sa=pa;va=wa;Pa=za;Sa=Qa;e=114;continue}if((Da|0)==(k|0)|((Ba|0)==(j|0)?1:(f[n+(za<<4)+12>>2]|0)==0)){sa=pa;va=wa;Pa=za;Sa=Qa;e=114}else{e=108;break}}if((e|0)==108){La=(((Ea+Ja|0)/(Aa|0)|0)>>Ga)-(Ba>>Ga)+(X((((Fa+Ia|0)/(Ca|0)|0)>>Ha)-(Da>>Ha)|0,Ka)|0)|0;f[a+32>>2]=La;La=f[a+64>>2]|0;ua=a+36|0;f[ua>>2]=La;qa=pa;Ma=Qa;e=109;continue}else if((e|0)==116){xa=f[a+224>>2]|0;e=a+216|0;mb=f[e>>2]|0;xa=mb+xa-((mb|0)%(xa|0)|0)|0;f[e>>2]=xa;e=95;continue}}if((e|0)==111){e=0;Na=X(f[a+8>>2]|0,La)|0;Na=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+Na|0;Na=Na+(X(f[a+16>>2]|0,Ma)|0)|0;Na=Na+(X(f[a+20>>2]|0,f[a+32>>2]|0)|0)|0;Na=(f[a+4>>2]|0)+(Na<<1)|0;if(!(d[Na>>1]|0))break;else{ra=qa;ta=ua;Oa=La;Ra=Ma;e=113;continue}}else if((e|0)==117){c=f[a+228>>2]|0;e=a+220|0;mb=f[e>>2]|0;c=mb+c-((mb|0)%(c|0)|0)|0;f[e>>2]=c;e=93;continue}}if((e|0)==153)return nb|0;d[Na>>1]=1;a=1;return a|0}case 4:{c=a+40|0;if(!(f[c>>2]|0)){la=f[a+24>>2]|0;ja=a+36|0;N=(f[a+196>>2]|0)+(la<<4)|0;P=ja;ja=f[ja>>2]|0;e=148}else{f[c>>2]=0;T=f[a+48>>2]|0;f[a+24>>2]=T;e=121}while(1){if((e|0)==121){if(T>>>0>=(f[a+60>>2]|0)>>>0){nb=0;e=153;break}c=f[a+196>>2]|0;q=c+(T<<4)|0;o=a+224|0;f[o>>2]=0;p=a+228|0;f[p>>2]=0;l=f[c+(T<<4)+8>>2]|0;if(l|0){m=f[c+(T<<4)+12>>2]|0;n=f[q>>2]|0;j=f[c+(T<<4)+4>>2]|0;k=l+-1|0;e=n<<(f[m>>2]|0)+k;c=j<<(f[m+4>>2]|0)+k;if((l|0)!=1){h=-1;i=1;while(1){g=k+h|0;mb=n<>2]|0);g=j<<(f[m+(i<<4)+4>>2]|0)+g;e=(e|0)==0?mb:e>>>0>>0?e:mb;c=(c|0)==0?g:c>>>0>>0?c:g;g=i+1|0;if(g>>>0>>0){h=~i;i=g}else break}}f[o>>2]=e;f[p>>2]=c}if(!(b[a>>0]|0)){c=f[a+204>>2]|0;f[a+104>>2]=c;f[a+96>>2]=f[a+200>>2];f[a+108>>2]=f[a+212>>2];f[a+100>>2]=f[a+208>>2]}else c=f[a+104>>2]|0;f[a+220>>2]=c;H=c;I=T;e=130}else if((e|0)==148){ga=ja+1|0;f[P>>2]=ga;M=N;Q=P;ha=la;e=144}while(1){if((e|0)==130){if((H|0)>=(f[a+108>>2]|0)){e=152;break}U=f[a+96>>2]|0;f[a+216>>2]=U;K=q;ma=I;e=132}else if((e|0)==144){if(ga>>>0<(f[a+52>>2]|0)>>>0){e=146;break}ka=a+28|0;O=M;R=ka;ka=f[ka>>2]|0;oa=ha;e=149}while(1){if((e|0)==132){if((U|0)>=(f[a+100>>2]|0)){e=151;break}V=f[a+44>>2]|0;S=a+28|0;f[S>>2]=V;L=K;na=ma}else if((e|0)==149){V=ka+1|0;f[R>>2]=V;L=O;S=R;na=oa}mb=f[a+56>>2]|0;c=f[L+8>>2]|0;if(V>>>0>=(mb>>>0>>0?mb:c)>>>0){U=f[a+224>>2]|0;K=a+216|0;ma=f[K>>2]|0;U=ma+U-((ma|0)%(U|0)|0)|0;f[K>>2]=U;K=L;ma=na;e=132;continue}m=f[L+12>>2]|0;c=c+~V|0;e=f[a+200>>2]|0;g=f[L>>2]|0;W=g<>2]|0;mb=f[L+4>>2]|0;Z=mb<>2]|0)|0)/(W|0)|0;aa=Z+-1|0;j=(aa+(f[a+212>>2]|0)|0)/(Z|0)|0;ba=f[m+(V<<4)>>2]|0;k=ba+c|0;ca=f[m+(V<<4)+4>>2]|0;l=ca+c|0;da=f[a+220>>2]|0;if((da|0)%(mb<>2]|0;if((ea|0)%(g<>2]|0;if(!fa){O=L;R=S;ka=V;oa=na;e=149;continue}if((_|0)==(j|0)|((Y|0)==(i|0)?1:(f[m+(V<<4)+12>>2]|0)==0)){O=L;R=S;ka=V;oa=na;e=149}else{e=143;break}}if((e|0)==143){ga=((($+ea|0)/(W|0)|0)>>ba)-(Y>>ba)+(X((((aa+da|0)/(Z|0)|0)>>ca)-(_>>ca)|0,fa)|0)|0;f[a+32>>2]=ga;ga=f[a+64>>2]|0;Q=a+36|0;f[Q>>2]=ga;M=L;ha=na;e=144;continue}else if((e|0)==151){H=f[a+228>>2]|0;q=a+220|0;I=f[q>>2]|0;H=I+H-((I|0)%(H|0)|0)|0;f[q>>2]=H;q=K;I=ma;e=130;continue}}if((e|0)==146){e=0;ia=X(f[a+8>>2]|0,ga)|0;ia=(X(f[a+12>>2]|0,f[a+28>>2]|0)|0)+ia|0;ia=ia+(X(f[a+16>>2]|0,ha)|0)|0;ia=ia+(X(f[a+20>>2]|0,f[a+32>>2]|0)|0)|0;ia=(f[a+4>>2]|0)+(ia<<1)|0;if(!(d[ia>>1]|0))break;else{N=M;P=Q;ja=ga;la=ha;e=148;continue}}else if((e|0)==152){T=I+1|0;f[a+24>>2]=T;e=121;continue}}if((e|0)==153)return nb|0;d[ia>>1]=1;a=1;return a|0}default:{a=0;return a|0}}return 0}function Lf(a){a=a|0;var c=0,d=0;c=Ic(1,44)|0;if(!c){c=0;return c|0}d=c+40|0;b[d>>0]=b[d>>0]&-2|(a|0)!=0;a=Ic(1,4)|0;f[c+20>>2]=a;if(a|0){d=c;return d|0}Mc(c);d=0;return d|0}function Mf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;O=u;u=u+1200|0;M=O;d=f[f[a+20>>2]>>2]|0;N=d+16|0;e=f[N>>2]|0;if(!e){u=O;return}J=d+20|0;K=(f[a+32>>2]|0)+8|0;L=(f[a+28>>2]|0)+88|0;H=a+24|0;I=(b|0)==0;F=(c|0)==0;G=b+-1|0;E=0;d=e;do{i=f[J>>2]|0;j=f[K>>2]|0;C=i+(E*52|0)+16|0;k=f[C>>2]|0;if(j){if(k){e=f[L>>2]|0;g=+((f[(f[(f[H>>2]|0)+24>>2]|0)+(E*52|0)+24>>2]|0)>>>0)*.0625;a=0;do{h=X(k,a)|0;c=0;do{D=(h+c|0)*3|0;f[M+(a*120|0)+(c*12|0)>>2]=~~(+(f[e+(D<<2)>>2]|0)*g);f[M+(a*120|0)+(c*12|0)+4>>2]=~~(+(f[e+(D+1<<2)>>2]|0)*g);f[M+(a*120|0)+(c*12|0)+8>>2]=~~(+(f[e+(D+2<<2)>>2]|0)*g);c=c+1|0}while(c>>>0>>0);a=a+1|0}while(a>>>0>>0);D=9}}else D=9;if((D|0)==9){D=0;if(k){B=i+(E*52|0)+24|0;A=0;d=k;do{y=f[B>>2]|0;z=y+(A*136|0)+24|0;a=f[z>>2]|0;if(a){w=y+(A*136|0)+16|0;x=y+(A*136|0)+20|0;v=0;c=f[x>>2]|0;d=f[w>>2]|0;do{if(X(c,d)|0){r=y+(A*136|0)+28+(v*36|0)+20|0;s=M+(b*120|0)+(A*12|0)+(v<<2)|0;t=M+(G*120|0)+(A*12|0)+(v<<2)|0;q=0;do{d=f[r>>2]|0;p=X(f[d+(q*40|0)+20>>2]|0,f[d+(q*40|0)+16>>2]|0)|0;a:do if(p|0){o=d+(q*40|0)+24|0;i=f[s>>2]|0;if(I){d=0;while(1){c=f[o>>2]|0;e=f[c+(d*52|0)+4>>2]|0;a=(f[(f[(f[H>>2]|0)+24>>2]|0)+(E*52|0)+24>>2]|0)-(f[c+(d*52|0)+28>>2]|0)|0;a=(i|0)>(a|0)?i-a|0:0;h=c+(d*52|0)+44|0;f[h>>2]=0;a=(a|0)==0?0:(a*3|0)+-2|0;f[e>>2]=a;if(a|0?(n=f[c+(d*52|0)>>2]|0,f[e+4>>2]=f[(f[c+(d*52|0)+8>>2]|0)+((a+-1|0)*24|0)>>2],f[e+16>>2]=n,!F):0)f[h>>2]=a;d=d+1|0;if(d>>>0>=p>>>0)break a}}n=f[t>>2]|0;m=i-n|0;j=0;do{a=f[o>>2]|0;c=a+(j*52|0)|0;k=f[a+(j*52|0)+4>>2]|0;l=(f[(f[(f[H>>2]|0)+24>>2]|0)+(E*52|0)+24>>2]|0)-(f[a+(j*52|0)+28>>2]|0)|0;d=m+(n-l)|0;d=(n|0)>(l|0)?m:(d|0)>0?d:0;l=a+(j*52|0)+44|0;e=f[l>>2]|0;h=(e|0)==0;if(h)i=(d|0)==0?0:(d*3|0)+-2|0;else i=(d*3|0)+e|0;d=i-e|0;f[k+(b*24|0)>>2]=d;do if(d|0){a=f[a+(j*52|0)+8>>2]|0;d=f[a+((i+-1|0)*24|0)>>2]|0;if(h)a=f[c>>2]|0;else{h=f[a+((e+-1|0)*24|0)>>2]|0;a=(f[c>>2]|0)+h|0;d=d-h|0}f[k+(b*24|0)+4>>2]=d;f[k+(b*24|0)+16>>2]=a;if(F)break;f[l>>2]=i}while(0);j=j+1|0}while(j>>>0

>>0)}while(0);q=q+1|0;d=f[w>>2]|0;c=f[x>>2]|0}while(q>>>0<(X(c,d)|0)>>>0);a=f[z>>2]|0}v=v+1|0}while(v>>>0>>0);d=f[C>>2]|0}A=A+1|0}while(A>>>0>>0);d=f[N>>2]|0}}E=E+1|0}while(E>>>0>>0);u=O;return}function Nf(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;a=f[f[a+20>>2]>>2]|0;G=a+40+(b<<3)|0;p[G>>3]=0.0;H=a+16|0;e=f[H>>2]|0;if(!e)return;E=a+20|0;F=(b|0)==0;D=(d|0)==0;C=0;a=e;do{d=f[E>>2]|0;B=d+(C*52|0)+16|0;e=f[B>>2]|0;if(e){A=d+(C*52|0)+24|0;z=0;a=e;do{x=f[A>>2]|0;y=x+(z*136|0)+24|0;d=f[y>>2]|0;if(d){v=x+(z*136|0)+16|0;w=x+(z*136|0)+20|0;u=0;e=f[w>>2]|0;a=f[v>>2]|0;do{if(X(e,a)|0){t=x+(z*136|0)+28+(u*36|0)+20|0;s=0;do{d=f[t>>2]|0;r=X(f[d+(s*40|0)+20>>2]|0,f[d+(s*40|0)+16>>2]|0)|0;if(r){n=d+(s*40|0)+24|0;m=0;do{j=f[n>>2]|0;k=j+(m*52|0)|0;o=f[j+(m*52|0)+4>>2]|0;q=j+(m*52|0)+44|0;if(F){f[q>>2]=0;l=0}else l=f[q>>2]|0;h=f[j+(m*52|0)+48>>2]|0;if(l>>>0>>0){i=f[j+(m*52|0)+8>>2]|0;a=l;e=l;do{d=f[i+(e*24|0)>>2]|0;if(!a)g=+p[i+(e*24|0)+8>>3];else{I=a+-1|0;g=+p[i+(e*24|0)+8>>3]-+p[i+(I*24|0)+8>>3];d=d-(f[i+(I*24|0)>>2]|0)|0}if(!d)d=g!=0.0;else d=c-g/+(d>>>0)<2.220446049250313e-16;e=e+1|0;a=d?e:a}while(e>>>0>>0);h=a}else h=l;I=h-l|0;f[o+(b*24|0)>>2]=I;if(I){d=f[j+(m*52|0)+8>>2]|0;e=h+-1|0;a=f[d+(e*24|0)>>2]|0;if(!l){f[o+(b*24|0)+16>>2]=f[k>>2];g=+p[d+(e*24|0)+8>>3]}else{l=l+-1|0;I=f[d+(l*24|0)>>2]|0;f[o+(b*24|0)+16>>2]=(f[k>>2]|0)+I;g=+p[d+(e*24|0)+8>>3]-+p[d+(l*24|0)+8>>3];a=a-I|0}f[o+(b*24|0)+4>>2]=a;p[o+(b*24|0)+8>>3]=g;p[G>>3]=g+ +p[G>>3];if(!D)f[q>>2]=h}else p[o+(b*24|0)+8>>3]=0.0;m=m+1|0}while(m>>>0>>0);e=f[w>>2]|0;a=f[v>>2]|0}s=s+1|0}while(s>>>0<(X(e,a)|0)>>>0);d=f[y>>2]|0}u=u+1|0}while(u>>>0>>0);a=f[B>>2]|0}z=z+1|0}while(z>>>0>>0);a=f[H>>2]|0}C=C+1|0}while(C>>>0>>0);return}function Of(a,c,e,g,h){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0.0,l=0.0,m=0.0,o=0.0,q=0.0,r=0.0,s=0,t=0,v=0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,Y=0,Z=0,_=0,$=0,aa=0;$=u;u=u+800|0;Y=$;Z=f[a+28>>2]|0;U=f[f[a+20>>2]>>2]|0;V=f[a+32>>2]|0;R=U+24|0;f[R>>2]=0;S=f[U+16>>2]|0;if(!S){J=1797693134862315708145274.0e284;m=0.0;k=0.0;i=0}else{T=a+24|0;Q=f[U+20>>2]|0;P=0;l=1797693134862315708145274.0e284;m=0.0;k=0.0;i=0;do{N=Q+(P*52|0)+48|0;f[N>>2]=0;O=f[Q+(P*52|0)+16>>2]|0;if(!O)j=0;else{L=f[Q+(P*52|0)+24>>2]|0;K=0;j=0;do{G=f[L+(K*136|0)+24>>2]|0;if(G){H=X(f[L+(K*136|0)+20>>2]|0,f[L+(K*136|0)+16>>2]|0)|0;I=(H|0)==0;F=0;do{if(!I){E=f[L+(K*136|0)+28+(F*36|0)+20>>2]|0;D=0;do{B=X(f[E+(D*40|0)+20>>2]|0,f[E+(D*40|0)+16>>2]|0)|0;if(B){C=E+(D*40|0)+24|0;A=0;do{y=f[C>>2]|0;v=f[y+(A*52|0)+48>>2]|0;if(v){w=f[y+(A*52|0)+8>>2]|0;x=w+8|0;t=0;do{s=f[w+(t*24|0)>>2]|0;if(!t)o=+p[x>>3];else{aa=t+-1|0;o=+p[w+(t*24|0)+8>>3]-+p[w+(aa*24|0)+8>>3];s=s-(f[w+(aa*24|0)>>2]|0)|0}if(s){J=o/+(s|0);l=Jm?J:m}t=t+1|0}while(t>>>0>>0)}aa=X((f[y+(A*52|0)+24>>2]|0)-(f[y+(A*52|0)+16>>2]|0)|0,(f[y+(A*52|0)+20>>2]|0)-(f[y+(A*52|0)+12>>2]|0)|0)|0;i=aa+i|0;f[R>>2]=i;j=aa+j|0;f[N>>2]=j;A=A+1|0}while(A>>>0>>0)}D=D+1|0}while(D>>>0>>0)}F=F+1|0}while(F>>>0>>0)}K=K+1|0}while(K>>>0>>0)}J=+(1<>2]|0)+24>>2]|0)+(P*52|0)+24>>2]|0)+-1.0;k=k+J*J*+(j|0);P=P+1|0}while(P>>>0>>0);J=l}I=(h|0)!=0;if(I){S=f[h+88>>2]|0;T=f[a+36>>2]|0;f[S+(T*592|0)+552>>2]=i;p[S+(T*592|0)+560>>3]=+p[U+32>>3];i=V+8|0;aa=Hc(f[i>>2]<<3)|0;f[S+(T*592|0)>>2]=aa;if(!aa){aa=0;u=$;return aa|0}}else i=V+8|0;if(!(f[i>>2]|0)){aa=1;u=$;return aa|0}A=U+32|0;B=Z+93|0;C=h+88|0;D=a+36|0;E=U+40|0;F=a+24|0;G=a+8|0;H=a+16|0;y=0;while(1){r=+n[V+20+(y<<2)>>2];T=r>0.0;v=~~+W(+r)>>>0;v=T&v>>>0>>0?v:g;r=+n[V+5184+(y<<2)>>2];z=+p[A>>3]-k/+M(10.0,+(r/10.0));aa=b[B>>0]|0;if((aa&1)==0|T^1?!((aa&4)!=0&r>0.0):0)l=J;else{x=Yg(f[F>>2]|0,Z)|0;if(!x){i=0;_=56;break}w=y+1|0;s=Y+(y+-1<<3)|0;t=U+40+(y<<3)|0;if(!y){j=0;l=0.0;q=m;r=J;do{o=(r+q)*.5;Nf(a,0,o,0);do if(!(b[B>>0]&4))if(!(Ug(x,f[D>>2]|0,U,w,c,e,v,h,f[G>>2]|0,f[a>>2]|0,f[H>>2]|0,0)|0))r=o;else{l=o;q=o;_=39}else{if(((d[Z>>1]|0)+-3&65535)>=4)if(+p[E>>3]>2]|0,U,w,c,e,v,h,f[G>>2]|0,f[a>>2]|0,f[H>>2]|0,0)|0)if(+p[E>>3]>0]&4))if(!(Ug(x,f[D>>2]|0,U,w,c,e,v,h,f[G>>2]|0,f[a>>2]|0,f[H>>2]|0,0)|0))r=o;else{l=o;q=o;_=47}else{if(((d[Z>>1]|0)+-3&65535)>=4)if(+p[s>>3]+ +p[t>>3]>2]|0,U,w,c,e,v,h,f[G>>2]|0,f[a>>2]|0,f[H>>2]|0,0)|0)if(+p[s>>3]+ +p[t>>3]>2]|0)+((f[D>>2]|0)*592|0)>>2]|0)+(y<<3)>>3]=l;Nf(a,y,l,1);if(!y)l=+p[E>>3];else l=+p[Y+(y+-1<<3)>>3]+ +p[U+40+(y<<3)>>3];p[Y+(y<<3)>>3]=l;y=y+1|0;if(y>>>0>=(f[i>>2]|0)>>>0){i=1;_=56;break}}if((_|0)==56){u=$;return i|0}return 0}function Pf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;f[a+24>>2]=b;f[a+28>>2]=c;e=Ic(1,848)|0;d=a+20|0;f[f[d>>2]>>2]=e;if(!e){c=0;return c|0}e=b+16|0;g=Ic(f[e>>2]|0,52)|0;b=f[f[d>>2]>>2]|0;f[b+20>>2]=g;if(!g){g=0;return g|0}f[b+16>>2]=f[e>>2];f[a>>2]=f[c+84>>2];g=1;return g|0}function Qf(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;if(!a)return;s=a+20|0;c=f[s>>2]|0;do if(c|0){r=(b[a+40>>0]&1)==0?3:4;d=f[c>>2]|0;if(d){o=d+20|0;c=f[o>>2]|0;n=d+16|0;if(f[n>>2]|0){m=0;while(1){l=c+24|0;d=f[l>>2]|0;if(d|0){j=f[c+28>>2]|0;k=(j>>>0)/136|0;if(j>>>0>135){j=0;while(1){i=d+48|0;e=f[i>>2]|0;if(e|0){g=f[d+52>>2]|0;h=(g>>>0)/40|0;if(g>>>0>39){g=0;while(1){t=e+32|0;eg(f[t>>2]|0);f[t>>2]=0;t=e+36|0;eg(f[t>>2]|0);f[t>>2]=0;Sa[r&7](e);g=g+1|0;if(g>>>0>=h>>>0)break;else e=e+40|0}e=f[i>>2]|0}Mc(e);f[i>>2]=0}i=d+84|0;e=f[i>>2]|0;if(e|0){t=f[d+88>>2]|0;h=(t>>>0)/40|0;if(t>>>0>39){g=0;while(1){t=e+32|0;eg(f[t>>2]|0);f[t>>2]=0;t=e+36|0;eg(f[t>>2]|0);f[t>>2]=0;Sa[r&7](e);g=g+1|0;if(g>>>0>=h>>>0)break;else e=e+40|0}e=f[i>>2]|0}Mc(e);f[i>>2]=0}i=d+120|0;e=f[i>>2]|0;if(e|0){t=f[d+124>>2]|0;h=(t>>>0)/40|0;if(t>>>0>39){g=0;while(1){t=e+32|0;eg(f[t>>2]|0);f[t>>2]=0;t=e+36|0;eg(f[t>>2]|0);f[t>>2]=0;Sa[r&7](e);g=g+1|0;if(g>>>0>=h>>>0)break;else e=e+40|0}e=f[i>>2]|0}Mc(e);f[i>>2]=0}j=j+1|0;if(j>>>0>=k>>>0)break;else d=d+136|0}d=f[l>>2]|0}Mc(d);f[l>>2]=0}if(f[c+36>>2]|0?(p=c+32|0,q=f[p>>2]|0,q|0):0){Kc(q);f[p>>2]=0;f[p+4>>2]=0;f[p+8>>2]=0;f[p+12>>2]=0}m=m+1|0;if(m>>>0>=(f[n>>2]|0)>>>0)break;else c=c+52|0}c=f[o>>2]|0}Mc(c);f[o>>2]=0;Mc(f[f[s>>2]>>2]|0);c=f[s>>2]|0;f[c>>2]=0;if(!c)break}Mc(c);f[s>>2]=0}while(0);Mc(a);return}function Rf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;g=a+24|0;b=f[g>>2]|0;if(!b)return;d=f[a+28>>2]|0;e=(d>>>0)/52|0;if(d>>>0>51){d=0;while(1){a=f[b>>2]|0;if(a|0){Mc(a+-1|0);f[b>>2]=0}a=b+4|0;c=f[a>>2]|0;if(c|0){Mc(c);f[a>>2]=0}a=b+8|0;c=f[a>>2]|0;if(c|0){Mc(c);f[a>>2]=0}d=d+1|0;if(d>>>0>=e>>>0)break;else b=b+52|0}b=f[g>>2]|0}Mc(b);f[g>>2]=0;return}function Sf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;g=a+24|0;b=f[g>>2]|0;if(!b)return;d=f[a+28>>2]|0;e=(d>>>0)/56|0;if(d>>>0>55){d=0;while(1){a=f[b>>2]|0;if(a|0){Mc(a);f[b>>2]=0}a=b+4|0;c=f[a>>2]|0;if(c|0){Mc(c);f[a>>2]=0}d=d+1|0;if(d>>>0>=e>>>0)break;else b=b+56|0}b=f[g>>2]|0}Mc(b);f[g>>2]=0;return}function Tf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;d=a+32|0;e=f[d>>2]|0;b=a+40|0;c=f[b>>2]|0;do if(e){g=a+44|0;if(c>>>0<=(f[g>>2]|0)>>>0){h=1;return h|0}if(f[a+36>>2]|0){Kc(e);e=Jc(f[b>>2]|0)|0;f[d>>2]=e;if(e|0){f[g>>2]=f[b>>2];break}f[g>>2]=0;f[b>>2]=0;f[a+36>>2]=0;h=0;return h|0}else h=4}else h=4;while(0);do if((h|0)==4){h=Jc(c)|0;f[d>>2]=h;if(!h){h=0;return h|0}else{f[a+44>>2]=f[b>>2];break}}while(0);f[a+36>>2]=1;h=1;return h|0}function Uf(a,b,c){a=a|0;b=b|0;c=c|0;return Vf(a,b,1,1.0,52,c)|0}function Vf(a,c,d,e,g,h){a=a|0;c=c|0;d=d|0;e=+e;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0.0;Xa=u;u=u+112|0;Ta=Xa+104|0;Sa=Xa+96|0;Ra=Xa+88|0;Qa=Xa+80|0;Pa=Xa+72|0;Oa=Xa+64|0;Na=Xa+56|0;Ma=Xa+48|0;Wa=Xa+40|0;Va=Xa+32|0;Ua=Xa+24|0;k=f[a+28>>2]|0;Ja=f[f[a+20>>2]>>2]|0;l=f[(f[k+76>>2]|0)+(c*5640|0)+5584>>2]|0;m=f[Ja+20>>2]|0;j=f[a+24>>2]|0;o=f[j+24>>2]|0;i=f[k+24>>2]|0;r=f[k+12>>2]|0;La=(X(r,(c>>>0)%(i>>>0)|0)|0)+(f[k+4>>2]|0)|0;p=f[j>>2]|0;p=La>>>0>p>>>0?La:p;f[Ja>>2]=p;La=Zi(r|0,0,La|0,0)|0;La=0-I|La;r=f[j+8>>2]|0;r=La>>>0>>0?La:r;La=Ja+8|0;f[La>>2]=r;if(!((p|0)>-1&(r|0)>(p|0))){Mb(h,1,19655,Xa)|0;Wa=0;u=Xa;return Wa|0}q=f[k+16>>2]|0;Fa=(X(q,(c>>>0)/(i>>>0)|0)|0)+(f[k+8>>2]|0)|0;i=f[j+4>>2]|0;i=Fa>>>0>i>>>0?Fa:i;Ia=Ja+4|0;f[Ia>>2]=i;Fa=Zi(q|0,0,Fa|0,0)|0;Fa=0-I|Fa;q=f[j+12>>2]|0;q=Fa>>>0>>0?Fa:q;Fa=Ja+12|0;f[Fa>>2]=q;if(!((i|0)>-1&(q|0)>(i|0))){Mb(h,1,19693,Xa+8|0)|0;Wa=0;u=Xa;return Wa|0}if(!(f[l+4>>2]|0)){Mb(h,1,19731,Xa+16|0)|0;Wa=0;u=Xa;return Wa|0}Ga=Ja+16|0;if(!(f[Ga>>2]|0)){Wa=1;u=Xa;return Wa|0}Ea=k+80|0;Da=a+40|0;Ca=(d|0)==0;c=0;Ba=m;j=p;k=r;a=q;a:while(1){f[o+36>>2]=0;za=f[o>>2]|0;xa=(j+-1+za|0)/(za|0)|0;f[Ba>>2]=xa;ya=f[o+4>>2]|0;j=(i+-1+ya|0)/(ya|0)|0;Aa=Ba+4|0;f[Aa>>2]=j;k=(k+-1+za|0)/(za|0)|0;za=Ba+8|0;f[za>>2]=k;i=(a+-1+ya|0)/(ya|0)|0;ya=Ba+12|0;f[ya>>2]=i;k=k-xa|0;if(k){i=i-j|0;if((4294967295/(k>>>0)|0)>>>0>>0){Ha=12;break}}else i=i-j|0;i=X(i,k)|0;if(i>>>0>1073741823){Ha=14;break}j=i<<2;i=f[l+4>>2]|0;xa=Ba+16|0;f[xa>>2]=i;k=f[Ea>>2]|0;f[Ba+20>>2]=i>>>0>>0?1:i-k|0;k=Ba+40|0;f[k>>2]=j;do if(b[Da>>0]&1){a=Ba+32|0;d=f[a>>2]|0;if(d){m=Ba+44|0;if(j>>>0<=(f[m>>2]|0)>>>0)break;i=Ba+36|0;if(f[i>>2]|0){Kc(d);wa=Jc(f[k>>2]|0)|0;f[a>>2]=wa;if(!wa){Ha=22;break a}f[m>>2]=f[k>>2]}else Ha=19}else Ha=19;if((Ha|0)==19){Ha=0;wa=Jc(j)|0;f[a>>2]=wa;if(!wa)break a;f[Ba+44>>2]=f[k>>2];i=Ba+36|0}f[i>>2]=1;i=f[xa>>2]|0}while(0);k=i*136|0;a=Ba+24|0;i=f[a>>2]|0;if(i){j=Ba+28|0;if(k>>>0>(f[j>>2]|0)>>>0){i=Lc(i,k)|0;if(!i){Ha=31;break}f[a>>2]=i;wa=f[j>>2]|0;ij(i+wa|0,0,k-wa|0)|0;f[j>>2]=k}}else{i=Hc(k)|0;f[a>>2]=i;if(!i){c=0;Ha=100;break}f[Ba+28>>2]=k;ij(i|0,0,k|0)|0}wa=(f[l+20>>2]|0)==0?7:8;i=f[xa>>2]|0;if(i|0){sa=l+8|0;ta=l+12|0;ua=o+24|0;va=l+804|0;ra=0;qa=f[a>>2]|0;q=l+28|0;while(1){ka=i;i=i+-1|0;pa=f[Ba>>2]|0;la=fj(1,0,i|0)|0;ma=I;na=Zi(la|0,ma|0,-1,-1)|0;oa=I;pa=Zi(na|0,oa|0,pa|0,((pa|0)<0)<<31>>31|0)|0;pa=dj(pa|0,I|0,i|0)|0;f[qa>>2]=pa;ha=f[Aa>>2]|0;ha=Zi(na|0,oa|0,ha|0,((ha|0)<0)<<31>>31|0)|0;ha=dj(ha|0,I|0,i|0)|0;f[qa+4>>2]=ha;j=f[za>>2]|0;j=Zi(na|0,oa|0,j|0,((j|0)<0)<<31>>31|0)|0;j=dj(j|0,I|0,i|0)|0;f[qa+8>>2]=j;ia=f[ya>>2]|0;ia=Zi(na|0,oa|0,ia|0,((ia|0)<0)<<31>>31|0)|0;ia=dj(ia|0,I|0,i|0)|0;f[qa+12>>2]=ia;d=f[l+812+(ra<<2)>>2]|0;a=f[l+944+(ra<<2)>>2]|0;p=pa>>d<>a<>31|0)|0;ja=dj(ja|0,I|0,d|0)|0;k=fj(1,0,a|0)|0;k=Zi(k|0,I|0,-1,-1)|0;k=Zi(k|0,I|0,ia|0,((ia|0)<0)<<31>>31|0)|0;k=dj(k|0,I|0,a|0)|0;ja=(ja<>d;j=(pa|0)==(j|0)?0:ja;pa=qa+16|0;f[pa>>2]=j;k=(ha|0)==(ia|0)?0:(k<>a;f[qa+20>>2]=k;if(j|0?(4294967295/(ja>>>0)|0)>>>0>>0:0){Ha=37;break a}ha=X(k,j)|0;if(ha>>>0>107374182){Ha=39;break a}ia=ha*40|0;ja=(ra|0)==0;if(ja)j=1;else{p=Zi(p|0,((p|0)<0)<<31>>31|0,1,0)|0;p=ej(p|0,I|0,1)|0;m=Zi(m|0,((m|0)<0)<<31>>31|0,1,0)|0;m=ej(m|0,I|0,1)|0;a=a+-1|0;d=d+-1|0;j=3}ga=qa+24|0;f[ga>>2]=j;R=f[sa>>2]|0;R=R>>>0>>0?R:d;S=f[ta>>2]|0;S=S>>>0>>0?S:a;T=(ha|0)!=0;U=(ha|0)==0;V=1<>2]|0;j=Zi(na|0,oa|0,j|0,((j|0)<0)<<31>>31|0)|0;j=dj(j|0,I|0,i|0)|0;k=f[Aa>>2]|0;k=Zi(na|0,oa|0,k|0,((k|0)<0)<<31>>31|0)|0;k=dj(k|0,I|0,i|0)|0;r=f[za>>2]|0;r=Zi(na|0,oa|0,r|0,((r|0)<0)<<31>>31|0)|0;r=dj(r|0,I|0,i|0)|0;t=f[ya>>2]|0;y=0;s=t;t=((t|0)<0)<<31>>31;v=la;w=ma;x=i}else{y=P+1|0;j=f[Ba>>2]|0;w=fj(y&1|0,0,i|0)|0;w=_i(ea|0,fa|0,w|0,I|0)|0;v=I;j=Zi(w|0,v|0,j|0,((j|0)<0)<<31>>31|0)|0;j=dj(j|0,I|0,ka|0)|0;k=f[Aa>>2]|0;t=fj(y>>>1|0,0,i|0)|0;s=I;r=_i(ea|0,fa|0,t|0,s|0)|0;k=Zi(r|0,I|0,k|0,((k|0)<0)<<31>>31|0)|0;k=dj(k|0,I|0,ka|0)|0;r=f[za>>2]|0;r=Zi(w|0,v|0,r|0,((r|0)<0)<<31>>31|0)|0;r=dj(r|0,I|0,ka|0)|0;v=f[ya>>2]|0;s=_i(v|0,((v|0)<0)<<31>>31|0,t|0,s|0)|0;t=I;v=ca;w=da;x=ka}f[Q+16>>2]=y;f[Q>>2]=j;O=Q+4|0;f[O>>2]=k;N=Q+8|0;f[N>>2]=r;r=Zi(s|0,t|0,-1,-1)|0;r=Zi(r|0,I|0,v|0,w|0)|0;r=dj(r|0,I|0,x|0)|0;M=Q+12|0;f[M>>2]=r;r=Ka[wa&15](y)|0;Ya=+(f[q+4>>2]|0)*.00048828125+1.0;Ya=+Ni(1.0,(f[ua>>2]|0)+r-(f[q>>2]|0)|0)*Ya*e;n[Q+32>>2]=Ya;f[Q+28>>2]=(f[q>>2]|0)+-1+(f[va>>2]|0);r=Q+20|0;k=f[r>>2]|0;if(!(T&(k|0)==0)){j=Q+24|0;if((f[j>>2]|0)>>>0>>0){k=Lc(k,ia)|0;if(!k){Ha=53;break a}f[r>>2]=k;Ha=f[j>>2]|0;ij(k+Ha|0,0,ia-Ha|0)|0;Ha=54}}else{j=Hc(ia)|0;f[r>>2]=j;if(!j){Ha=48;break a}ij(j|0,0,ia|0)|0;j=Q+24|0;Ha=54}if((Ha|0)==54){Ha=0;f[j>>2]=ia}if(!U){L=0;B=f[r>>2]|0;while(1){C=f[pa>>2]|0;G=(((L>>>0)%(C>>>0)|0)<>>0)/(C>>>0)|0)<>2]|0;F=(G|0)>(F|0)?G:F;f[B>>2]=F;G=f[O>>2]|0;G=(C|0)>(G|0)?C:G;C=B+4|0;f[C>>2]=G;r=f[N>>2]|0;r=(D|0)<(r|0)?D:r;D=B+8|0;f[D>>2]=r;k=f[M>>2]|0;k=(E|0)<(k|0)?E:k;E=B+12|0;f[E>>2]=k;F=F>>R<>S<>31|0)|0;r=dj(r|0,I|0,R|0)|0;k=Zi(_|0,$|0,k|0,((k|0)<0)<<31>>31|0)|0;k=dj(k|0,I|0,S|0)|0;r=(r<>R;H=B+16|0;f[H>>2]=r;k=(k<>S;v=B+20|0;f[v>>2]=k;J=X(r,k)|0;t=X(J,g)|0;K=B+24|0;s=f[K>>2]|0;do if((s|0)==0&(J|0)!=0){j=Hc(t)|0;f[K>>2]=j;if(!j){c=0;Ha=100;break a}ij(j|0,0,t|0)|0;j=B+28|0;Ha=64}else{j=B+28|0;if(t>>>0<=(f[j>>2]|0)>>>0)break;k=Lc(s,t)|0;if(!k){Ha=63;break a}f[K>>2]=k;Ha=f[j>>2]|0;ij(k+Ha|0,0,t-Ha|0)|0;Ha=64}while(0);if((Ha|0)==64){Ha=0;f[j>>2]=t;r=f[H>>2]|0;k=f[v>>2]|0}s=B+32|0;j=f[s>>2]|0;if(!j)j=bg(r,k,h)|0;else j=dg(j,r,k,h)|0;f[s>>2]=j;if(!j)Mb(h,2,19944,Sa)|0;s=B+36|0;k=f[s>>2]|0;r=f[H>>2]|0;j=f[v>>2]|0;if(!k)j=bg(r,j,h)|0;else j=dg(k,r,j,h)|0;f[s>>2]=j;if(!j)Mb(h,2,19966,Ta)|0;if(J|0){A=0;do{x=f[H>>2]|0;w=(((A>>>0)%(x>>>0)|0)<>>0)/(x>>>0)|0)<>2]|0;j=v+(A*56|0)|0;if(!(f[j>>2]|0)){t=Hc(8192)|0;f[j>>2]=t;if(!t){c=0;Ha=100;break a}f[v+(A*56|0)+32>>2]=8192;t=Ic(10,32)|0;f[v+(A*56|0)+4>>2]=t;if(!t){c=0;Ha=100;break a}f[v+(A*56|0)+52>>2]=10;j=v+(A*56|0)+8|0}else{k=v+(A*56|0)+32|0;r=f[k>>2]|0;j=v+(A*56|0)+8|0;s=j;t=s+44|0;do{f[s>>2]=0;s=s+4|0}while((s|0)<(t|0));f[k>>2]=r}t=f[B>>2]|0;f[j>>2]=(w|0)>(t|0)?w:t;w=f[C>>2]|0;f[v+(A*56|0)+12>>2]=(x|0)>(w|0)?x:w;x=f[D>>2]|0;f[v+(A*56|0)+16>>2]=(y|0)<(x|0)?y:x;y=f[E>>2]|0;f[v+(A*56|0)+20>>2]=(z|0)<(y|0)?z:y}else{k=f[K>>2]|0;j=k+(A*52|0)+4|0;if((f[j>>2]|0)==0?(v=Ic(100,24)|0,f[j>>2]=v,(v|0)==0):0){c=0;Ha=100;break a}j=k+(A*52|0)+8|0;if((f[j>>2]|0)==0?(v=Ic(100,24)|0,f[j>>2]=v,(v|0)==0):0){c=0;Ha=100;break a}r=f[B>>2]|0;r=(w|0)>(r|0)?w:r;f[k+(A*52|0)+12>>2]=r;s=f[C>>2]|0;x=(x|0)>(s|0)?x:s;f[k+(A*52|0)+16>>2]=x;s=f[D>>2]|0;s=(y|0)<(s|0)?y:s;f[k+(A*52|0)+20>>2]=s;y=f[E>>2]|0;z=(z|0)<(y|0)?z:y;f[k+(A*52|0)+24>>2]=z;r=X(z-x|0,s-r<<2)|0;s=k+(A*52|0)+36|0;if(r>>>0<=(f[s>>2]|0)>>>0)break;k=k+(A*52|0)|0;j=f[k>>2]|0;if(j|0)Mc(j+-1|0);j=Hc(r|1)|0;f[k>>2]=j;if(!j){Ha=87;break a}f[s>>2]=r;b[j>>0]=0;f[k>>2]=(f[k>>2]|0)+1}while(0);A=A+1|0}while(A>>>0>>0)}L=L+1|0;if(L>>>0>=ha>>>0)break;else B=B+40|0}}q=q+8|0;P=P+1|0;if(P>>>0>=(f[ga>>2]|0)>>>0)break;else Q=Q+36|0}ra=ra+1|0;if(ra>>>0>=(f[xa>>2]|0)>>>0)break;else qa=qa+136|0}}c=c+1|0;if(c>>>0>=(f[Ga>>2]|0)>>>0){c=1;Ha=100;break}l=l+1080|0;Ba=Ba+52|0;o=o+52|0;j=f[Ja>>2]|0;i=f[Ia>>2]|0;k=f[La>>2]|0;a=f[Fa>>2]|0}switch(Ha|0){case 12:{Mb(h,1,19770,Ua)|0;Wa=0;u=Xa;return Wa|0}case 14:{Mb(h,1,19770,Va)|0;Wa=0;u=Xa;return Wa|0}case 22:{f[m>>2]=0;f[k>>2]=0;f[i>>2]=0;break}case 31:{Mb(h,1,19803,Ma)|0;Mc(f[a>>2]|0);f[a>>2]=0;f[j>>2]=0;Wa=0;u=Xa;return Wa|0}case 37:{Mb(h,1,19770,Na)|0;Wa=0;u=Xa;return Wa|0}case 39:{Mb(h,1,19770,Oa)|0;Wa=0;u=Xa;return Wa|0}case 48:{Mb(h,1,19843,Pa)|0;Wa=0;u=Xa;return Wa|0}case 53:{Mb(h,1,19843,Qa)|0;Mc(f[r>>2]|0);f[r>>2]=0;f[j>>2]=0;Wa=0;u=Xa;return Wa|0}case 63:{Mc(f[K>>2]|0);f[K>>2]=0;f[j>>2]=0;Mb(h,1,19886,Ra)|0;Wa=0;u=Xa;return Wa|0}case 87:{f[s>>2]=0;Wa=0;u=Xa;return Wa|0}case 100:{u=Xa;return c|0}}Mb(h,1,19770,Wa)|0;Wa=0;u=Xa;return Wa|0}function Wf(a,b,c){a=a|0;b=b|0;c=c|0;return Vf(a,b,0,.5,56,c)|0}function Xf(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;b=f[a+24>>2]|0;e=f[b+16>>2]|0;if(!e){e=0;return e|0}d=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;b=f[b+24>>2]|0;a=0;c=0;while(1){h=f[b+24>>2]|0;h=(h>>>3)+((h&7|0)!=0&1)|0;g=(f[d+24>>2]|0)+((f[d+20>>2]|0)*136|0)+-136|0;a=(X(X((h|0)==3?4:h,(f[g+8>>2]|0)-(f[g>>2]|0)|0)|0,(f[g+12>>2]|0)-(f[g+4>>2]|0)|0)|0)+a|0;c=c+1|0;if(c>>>0>=e>>>0)break;else{d=d+52|0;b=b+52|0}}return a|0}function Yf(a,c,d,e,g,h){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0;y=u;u=u+16|0;w=y;if(!(f[a+8>>2]|0)){f[a+36>>2]=c;t=a+28|0;i=f[(f[t>>2]|0)+76>>2]|0;x=a+32|0;f[x>>2]=i+(c*5640|0);v=(h|0)==0;s=a+20|0;if(!v){j=f[(f[f[s>>2]>>2]|0)+20>>2]|0;n=f[i+(c*5640|0)+5584>>2]|0;o=j+16|0;if(!(f[o>>2]|0)){j=0;i=h+88|0}else{l=f[j+24>>2]|0;i=h+88|0;m=f[i>>2]|0;j=0;k=0;do{r=l+(k*136|0)+16|0;f[m+(c*592|0)+20+(k<<2)>>2]=f[r>>2];q=l+(k*136|0)+20|0;f[m+(c*592|0)+152+(k<<2)>>2]=f[q>>2];j=(X(f[q>>2]|0,f[r>>2]|0)|0)+j|0;f[m+(c*592|0)+284+(k<<2)>>2]=f[n+812+(k<<2)>>2];f[m+(c*592|0)+416+(k<<2)>>2]=f[n+944+(k<<2)>>2];k=k+1|0}while(k>>>0<(f[o>>2]|0)>>>0)}r=Ic(X(X(f[h+52>>2]|0,j)|0,f[h+56>>2]|0)|0,32)|0;f[(f[i>>2]|0)+(c*592|0)+548>>2]=r;if(!r){h=0;u=y;return h|0}}i=f[f[s>>2]>>2]|0;r=i+16|0;if(!(f[r>>2]|0)){j=f[i+20>>2]|0;m=f[x>>2]|0;i=0}else{m=f[x>>2]|0;j=f[i+20>>2]|0;c=0;p=j;q=f[m+5584>>2]|0;while(1){n=f[p+32>>2]|0;o=X((f[p+12>>2]|0)-(f[p+4>>2]|0)|0,(f[p+8>>2]|0)-(f[p>>2]|0)|0)|0;i=(o|0)!=0;if((f[q+20>>2]|0)==1){if(i){l=q+1076|0;k=0;i=n;while(1){f[i>>2]=(f[i>>2]|0)-(f[l>>2]|0);k=k+1|0;if((k|0)==(o|0))break;else i=i+4|0}}}else if(i){l=q+1076|0;i=n;k=0;while(1){f[i>>2]=(f[i>>2]|0)-(f[l>>2]|0)<<11;k=k+1|0;if((k|0)==(o|0))break;else i=i+4|0}}c=c+1|0;i=f[r>>2]|0;if(c>>>0>=i>>>0)break;else{p=p+52|0;q=q+1080|0}}}n=X((f[j+12>>2]|0)-(f[j+4>>2]|0)|0,(f[j+8>>2]|0)-(f[j>>2]|0)|0)|0;a:do switch(f[m+16>>2]|0){case 0:break;case 2:{if(f[m+5608>>2]|0){l=Hc(i<<2)|0;if(!l){h=0;u=y;return h|0}i=f[r>>2]|0;if(!i)i=0;else{k=0;while(1){f[l+(k<<2)>>2]=f[j+32>>2];k=k+1|0;if((k|0)==(i|0))break;else j=j+52|0}}r=(yf(f[(f[x>>2]|0)+5608>>2]|0,n,l,i,f[(f[(f[a+24>>2]|0)+24>>2]|0)+32>>2]|0)|0)==0;Mc(l);if(r){h=0;u=y;return h|0}}break}default:{k=f[j+32>>2]|0;l=f[j+84>>2]|0;i=f[j+136>>2]|0;if(!(f[(f[m+5584>>2]|0)+20>>2]|0)){wf(k,l,i,n);break a}else{uf(k,l,i,n);break a}}}while(0);i=f[f[s>>2]>>2]|0;l=i+16|0;b:do if(f[l>>2]|0){k=f[(f[x>>2]|0)+5584>>2]|0;i=f[i+20>>2]|0;j=0;c:while(1){switch(f[k+20>>2]|0){case 1:{if(!(xg(i)|0)){i=0;j=53;break c}break}case 0:{if(!(Eg(i)|0)){i=0;j=53;break c}break}default:{}}j=j+1|0;if(j>>>0>=(f[l>>2]|0)>>>0)break b;else{k=k+1080|0;i=i+52|0}}if((j|0)==53){u=y;return i|0}}while(0);k=f[x>>2]|0;l=Og(1)|0;if(!l){h=0;u=y;return h|0}do if((f[k+16>>2]|0)==1)if(!(f[(f[k+5584>>2]|0)+20>>2]|0)){i=3;j=tf()|0;break}else{i=3;j=sf()|0;break}else{i=f[(f[a+24>>2]|0)+16>>2]|0;j=f[k+5600>>2]|0}while(0);s=(Tg(l,f[f[s>>2]>>2]|0,k,j,i)|0)==0;Pg(l);if(s){h=0;u=y;return h|0}i=f[t>>2]|0;f[w>>2]=0;if(!v)f[h+12>>2]=0;if(!(b[i+93>>0]&5)){if(f[(f[x>>2]|0)+8>>2]|0){i=0;do{Mf(a,i,1);i=i+1|0}while(i>>>0<(f[(f[x>>2]|0)+8>>2]|0)>>>0)}}else if(!(Of(a,d,w,g,h)|0)){h=0;u=y;return h|0}}if(h|0)f[h+12>>2]=1;i=Yg(f[a+24>>2]|0,f[a+28>>2]|0)|0;if(!i){h=0;u=y;return h|0}h=(Ug(i,f[a+36>>2]|0,f[f[a+20>>2]>>2]|0,f[(f[a+32>>2]|0)+8>>2]|0,d,e,g,h,f[a+4>>2]|0,f[a>>2]|0,f[a+16>>2]|0,1)|0)!=0;Zg(i);h=h&1;u=y;return h|0}function Zf(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0;v=u;u=u+16|0;k=v+8|0;j=v;h=v+12|0;i=a+36|0;f[i>>2]=d;p=f[a+28>>2]|0;q=a+32|0;f[q>>2]=(f[p+76>>2]|0)+(d*5640|0);f[h>>2]=0;r=a+24|0;d=Yg(f[r>>2]|0,p)|0;if(!d){t=0;u=v;return t|0}l=a+20|0;p=(Wg(d,f[i>>2]|0,f[f[l>>2]>>2]|0,b,h,c,e,g)|0)==0;Zg(d);if(p){t=0;u=v;return t|0}d=f[f[l>>2]>>2]|0;c=f[(f[q>>2]|0)+5584>>2]|0;a=f[d+20>>2]|0;h=Og(0)|0;if(!h){t=0;u=v;return t|0}e=d+16|0;a:do if(f[e>>2]|0){b=0;d=c;while(1){if(!(Qg(h,a,d)|0))break;b=b+1|0;if(b>>>0>=(f[e>>2]|0)>>>0)break a;else{a=a+52|0;d=d+1080|0}}Pg(h);t=0;u=v;return t|0}while(0);Pg(h);d=f[f[l>>2]>>2]|0;h=d+16|0;do if(f[h>>2]|0){e=f[(f[q>>2]|0)+5584>>2]|0;d=f[d+20>>2]|0;a=0;b=f[(f[r>>2]|0)+24>>2]|0;while(1){c=(f[b+36>>2]|0)+1|0;if((f[e+20>>2]|0)==1){if(!(Ag(d,c)|0)){d=0;a=47;break}}else if(!(Jg(d,c)|0)){d=0;a=47;break}a=a+1|0;if(a>>>0>=(f[h>>2]|0)>>>0){a=14;break}else{e=e+1080|0;d=d+52|0;b=b+52|0}}if((a|0)==14){d=f[f[l>>2]>>2]|0;break}else if((a|0)==47){u=v;return d|0}}while(0);c=f[q>>2]|0;a=f[d+20>>2]|0;b=f[c+16>>2]|0;do if(b|0){i=X((f[a+12>>2]|0)-(f[a+4>>2]|0)|0,(f[a+8>>2]|0)-(f[a>>2]|0)|0)|0;h=d+16|0;d=f[h>>2]|0;if(d>>>0<=2){f[k>>2]=d;Mb(g,1,20049,k)|0;break}if((X((f[a+64>>2]|0)-(f[a+56>>2]|0)|0,(f[a+60>>2]|0)-(f[a+52>>2]|0)|0)|0)>=(i|0)?(X((f[a+116>>2]|0)-(f[a+108>>2]|0)|0,(f[a+112>>2]|0)-(f[a+104>>2]|0)|0)|0)>=(i|0):0){if((b|0)!=2){d=f[a+32>>2]|0;if((f[(f[c+5584>>2]|0)+20>>2]|0)==1){vf(d,f[a+84>>2]|0,f[a+136>>2]|0,i);break}else{xf(d,f[a+84>>2]|0,f[a+136>>2]|0,i);break}}e=c+5604|0;if(!(f[e>>2]|0))break;c=Hc(d<<2)|0;if(!c){t=0;u=v;return t|0}d=f[h>>2]|0;if(!d)d=0;else{b=0;while(1){f[c+(b<<2)>>2]=f[a+32>>2];b=b+1|0;if((b|0)==(d|0))break;else a=a+52|0}}p=(zf(f[e>>2]|0,i,c,d,f[(f[(f[r>>2]|0)+24>>2]|0)+32>>2]|0)|0)==0;Mc(c);if(p)d=0;else break;u=v;return d|0}Mb(g,1,19988,j)|0;t=0;u=v;return t|0}while(0);d=f[f[l>>2]>>2]|0;p=d+16|0;if(!(f[p>>2]|0)){t=1;u=v;return t|0}o=0;m=f[d+20>>2]|0;l=f[(f[q>>2]|0)+5584>>2]|0;i=f[(f[r>>2]|0)+24>>2]|0;while(1){k=f[m+24>>2]|0;j=f[i+36>>2]|0;g=(f[k+(j*136|0)+8>>2]|0)-(f[k+(j*136|0)>>2]|0)|0;j=(f[k+(j*136|0)+12>>2]|0)-(f[k+(j*136|0)+4>>2]|0)|0;k=(f[m+8>>2]|0)-(f[m>>2]|0)|0;d=f[i+24>>2]|0;if(!(f[i+32>>2]|0)){d=1<>2]|0;d=(j|0)!=0;if((f[l+20>>2]|0)==1){if(d?(t=l+1076|0,g|0):0){d=0;while(1){b=0;c=a;while(1){r=(f[t>>2]|0)+(f[c>>2]|0)|0;f[c>>2]=(r|0)<(h|0)?h:(r|0)>(e|0)?e:r;b=b+1|0;if((b|0)==(g|0))break;else c=c+4|0}d=d+1|0;if((d|0)==(j|0))break;else a=a+(k<<2)|0}}}else if(d?(s=l+1076|0,g|0):0){c=0;while(1){d=0;b=a;while(1){r=Oi(+n[b>>2])|0;r=(f[s>>2]|0)+r|0;f[b>>2]=(r|0)<(h|0)?h:(r|0)>(e|0)?e:r;d=d+1|0;if((d|0)==(g|0))break;else b=b+4|0}c=c+1|0;if((c|0)==(j|0))break;else a=a+(k<<2)|0}}o=o+1|0;if(o>>>0>=(f[p>>2]|0)>>>0){d=1;break}else{m=m+52|0;l=l+1080|0;i=i+52|0}}u=v;return d|0}function _f(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=a+24|0;g=f[r>>2]|0;j=f[g+16>>2]|0;l=(j|0)==0;if(l){r=1;return r|0}m=f[g+24>>2]|0;k=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;g=k;a=m;h=0;i=0;while(1){p=f[a+24>>2]|0;p=(p>>>3)+((p&7|0)!=0&1)|0;q=(f[g+24>>2]|0)+((f[g+20>>2]|0)*136|0)+-136|0;h=(X(X((p|0)==3?4:p,(f[q+8>>2]|0)-(f[q>>2]|0)|0)|0,(f[q+12>>2]|0)-(f[q+4>>2]|0)|0)|0)+h|0;i=i+1|0;if((i|0)==(j|0))break;else{g=g+52|0;a=a+52|0}}g=h>>>0>e>>>0;if(g|l){r=(g^1)&1;return r|0}else q=0;while(1){l=f[m+24>>2]|0;o=f[k+24>>2]|0;j=f[m+36>>2]|0;h=f[o+(j*136|0)+8>>2]|0;i=f[o+(j*136|0)>>2]|0;n=h-i|0;e=f[o+(j*136|0)+12>>2]|0;j=f[o+(j*136|0)+4>>2]|0;o=e-j|0;p=(f[k+8>>2]|0)-(f[k>>2]|0)|0;l=(l>>>3)+((l&7|0)!=0&1)|0;a:do switch(((l|0)==3?4:l)&1073741823|0){case 1:{a=f[k+32>>2]|0;g=(o|0)==0|(n|0)==0;if(!(f[m+32>>2]|0)){if(g)break a;l=h+(X(e+-1-j|0,n)|0)-i|0;j=0;h=c;while(1){g=0;i=a;e=h;while(1){b[e>>0]=f[i>>2];g=g+1|0;if((g|0)==(n|0))break;else{i=i+4|0;e=e+1|0}}j=j+1|0;if((j|0)==(o|0))break;else{a=a+(p<<2)|0;h=h+n|0}}c=c+l|0;break a}else{if(g)break a;l=h+(X(e+-1-j|0,n)|0)-i|0;g=a;a=c;h=0;while(1){i=0;e=g;j=a;while(1){b[j>>0]=f[e>>2];i=i+1|0;if((i|0)==(n|0))break;else{e=e+4|0;j=j+1|0}}h=h+1|0;if((h|0)==(o|0))break;else{g=g+(p<<2)|0;a=a+n|0}}c=c+l|0;break a}}case 2:{g=f[k+32>>2]|0;a=(o|0)==0|(n|0)==0;if(!(f[m+32>>2]|0)){if(a)break a;l=h<<1;h=i<<1;j=c+((X(e+-1-j|0,l-h|0)|0)+l-h)|0;h=0;while(1){a=g;i=0;e=c;while(1){d[e>>1]=f[a>>2];i=i+1|0;if((i|0)==(n|0))break;else{a=a+4|0;e=e+2|0}}h=h+1|0;if((h|0)==(o|0)){c=j;break}else{g=g+(p<<2)|0;c=c+(n<<1)|0}}}else{if(a)break a;l=h<<1;i=i<<1;j=c+((X(e+-1-j|0,l-i|0)|0)+l-i)|0;i=0;while(1){a=c;h=g;e=0;while(1){d[a>>1]=f[h>>2];e=e+1|0;if((e|0)==(n|0))break;else{a=a+2|0;h=h+4|0}}i=i+1|0;if((i|0)==(o|0)){c=j;break}else{c=c+(n<<1)|0;g=g+(p<<2)|0}}}break}case 4:{if(!((o|0)==0|(n|0)==0)){l=h<<2;g=i<<2;j=c+((X(e+-1-j|0,l-g|0)|0)+l-g)|0;g=f[k+32>>2]|0;i=0;while(1){a=c;h=g;e=0;while(1){f[a>>2]=f[h>>2];e=e+1|0;if((e|0)==(n|0))break;else{a=a+4|0;h=h+4|0}}i=i+1|0;if((i|0)==(o|0)){c=j;break}else{c=c+(n<<2)|0;g=g+(p<<2)|0}}}break}default:{}}while(0);q=q+1|0;if(q>>>0>=(f[(f[r>>2]|0)+16>>2]|0)>>>0){c=1;break}else{k=k+52|0;m=m+52|0}}return c|0}function $f(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;b=f[a+24>>2]|0;e=f[b+16>>2]|0;if(!e){e=0;return e|0}d=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;b=f[b+24>>2]|0;a=0;c=0;while(1){g=f[b+24>>2]|0;g=(g>>>3)+((g&7|0)!=0&1)|0;a=(X(X((f[d+12>>2]|0)-(f[d+4>>2]|0)|0,(f[d+8>>2]|0)-(f[d>>2]|0)|0)|0,(g|0)==3?4:g)|0)+a|0;c=c+1|0;if(c>>>0>=e>>>0)break;else{d=d+52|0;b=b+52|0}}return a|0}function ag(a,c,e){a=a|0;c=c|0;e=e|0;var g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=f[a+24>>2]|0;p=o+16|0;m=f[p>>2]|0;n=(m|0)==0;if(n)g=0;else{i=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;k=f[o+24>>2]|0;g=0;l=0;while(1){q=f[k+24>>2]|0;q=(q>>>3)+((q&7|0)!=0&1)|0;g=(X(X((f[i+12>>2]|0)-(f[i+4>>2]|0)|0,(f[i+8>>2]|0)-(f[i>>2]|0)|0)|0,(q|0)==3?4:q)|0)+g|0;l=l+1|0;if((l|0)==(m|0))break;else{i=i+52|0;k=k+52|0}}}g=(g|0)!=(e|0);if(g|n){q=(g^1)&1;return q|0}a=f[(f[f[a+20>>2]>>2]|0)+20>>2]|0;e=f[o+24>>2]|0;n=0;while(1){q=f[e+24>>2]|0;i=(f[a+8>>2]|0)-(f[a>>2]|0)|0;k=(f[a+12>>2]|0)-(f[a+4>>2]|0)|0;m=X(k,i)|0;q=(q>>>3)+((q&7|0)!=0&1)|0;a:do switch(((q|0)==3?4:q)&1073741823|0){case 1:{i=f[a+32>>2]|0;g=(m|0)!=0;if(!(f[e+32>>2]|0)){if(g){k=0;g=i;i=c}else break a;while(1){f[g>>2]=h[i>>0];k=k+1|0;if((k|0)==(m|0))break;else{g=g+4|0;i=i+1|0}}c=c+m|0;break a}else{if(g){g=i;i=c;k=0}else break a;while(1){f[g>>2]=b[i>>0];k=k+1|0;if((k|0)==(m|0))break;else{g=g+4|0;i=i+1|0}}c=c+m|0;break a}}case 2:{g=f[a+32>>2]|0;l=(m|0)!=0;if(!(f[e+32>>2]|0)){if(!l)break a;k=c+(X(k<<1,i)|0)|0;i=0;while(1){f[g>>2]=j[c>>1];i=i+1|0;if((i|0)==(m|0)){c=k;break}else{c=c+2|0;g=g+4|0}}}else{if(!l)break a;k=c+(X(k<<1,i)|0)|0;i=0;while(1){f[g>>2]=d[c>>1];i=i+1|0;if((i|0)==(m|0)){c=k;break}else{c=c+2|0;g=g+4|0}}}break}case 4:{if(m){k=c+(X(k<<2,i)|0)|0;i=f[a+32>>2]|0;g=0;while(1){f[i>>2]=f[c>>2];g=g+1|0;if((g|0)==(m|0)){c=k;break}else{i=i+4|0;c=c+4|0}}}break}default:{}}while(0);n=n+1|0;if(n>>>0>=(f[p>>2]|0)>>>0){c=1;break}else{a=a+52|0;e=e+52|0}}return c|0}function bg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=u;u=u+288|0;j=t+16|0;h=t+8|0;r=t+152|0;s=t+24|0;d=Ic(1,20)|0;if(!d){Mb(c,1,20123,t)|0;s=0;u=t;return s|0}f[d>>2]=a;k=d+4|0;f[k>>2]=b;f[r>>2]=a;f[s>>2]=b;i=d+8|0;f[i>>2]=0;q=0;g=0;while(1){p=X(b,a)|0;a=(a+1|0)/2|0;e=q+1|0;f[r+(e<<2)>>2]=a;b=(b+1|0)/2|0;f[s+(e<<2)>>2]=b;g=g+p|0;if(p>>>0<=1)break;else q=e}f[i>>2]=g;if(!g){Mc(d);Mb(c,2,20161,h)|0;s=0;u=t;return s|0}b=Ic(g,16)|0;f[d+12>>2]=b;if(!b){Mb(c,1,20211,j)|0;Mc(d);s=0;u=t;return s|0}p=f[i>>2]|0;f[d+16>>2]=p<<4;a=b+((X(f[k>>2]|0,f[d>>2]|0)|0)<<4)|0;if(!q)a=b;else{o=0;g=a;e=a;a=b;do{m=f[s+(o<<2)>>2]|0;a:do if((m|0)>0){n=f[r+(o<<2)>>2]|0;if((n|0)<=0){i=m+-1|0;c=0;while(1){l=(c&1|0)!=0|(c|0)==(i|0);h=l?e:g;g=l?e:g+(n<<4)|0;c=c+1|0;if((c|0)>=(m|0)){e=h;break a}else e=h}}k=~n;k=(n+2+((k|0)>-3?k:-3)|0)>>>1;l=m+-1|0;j=0;do{i=e+16|0;c=n;while(1){f[a>>2]=e;h=a+16|0;if((c|0)==1){a=h;break}f[h>>2]=e;a=a+32|0;if((c|0)>2){c=c+-2|0;e=e+16|0}else break}i=i+(k<<4)|0;c=(j&1|0)!=0|(j|0)==(l|0);e=c?i:g;g=c?i:g+(n<<4)|0;j=j+1|0}while((j|0)<(m|0))}while(0);o=o+1|0}while((o|0)!=(q|0))}f[a>>2]=0;if(!p){s=d;u=t;return s|0}else a=0;while(1){f[b+4>>2]=999;f[b+8>>2]=0;f[b+12>>2]=0;a=a+1|0;if((a|0)==(p|0))break;else b=b+16|0}u=t;return d|0}function cg(a){a=a|0;var b=0,c=0;if(!a)return;c=f[a+8>>2]|0;if(!c)return;b=0;a=f[a+12>>2]|0;while(1){f[a+4>>2]=999;f[a+8>>2]=0;f[a+12>>2]=0;b=b+1|0;if(b>>>0>=c>>>0)break;else a=a+16|0}return}function dg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=u;u=u+272|0;l=s;q=s+136|0;r=s+8|0;if(!a){r=0;u=s;return r|0}k=a+4|0;if((f[a>>2]|0)==(b|0)?(f[k>>2]|0)==(c|0):0)e=a+8|0;else{f[a>>2]=b;f[k>>2]=c;f[q>>2]=b;f[r>>2]=c;e=a+8|0;f[e>>2]=0;p=0;g=c;h=b;j=0;while(1){o=X(g,h)|0;h=(h+1|0)/2|0;i=p+1|0;f[q+(i<<2)>>2]=h;g=(g+1|0)/2|0;f[r+(i<<2)>>2]=g;j=j+o|0;if(o>>>0<=1)break;else p=i}f[e>>2]=j;if(!j){e=a+12|0;g=f[e>>2]|0;if(g|0){Mc(g);f[e>>2]=0}Mc(a);r=0;u=s;return r|0}h=j<<4;i=a+16|0;j=a+12|0;do if(h>>>0>(f[i>>2]|0)>>>0){g=Lc(f[j>>2]|0,h)|0;if(g|0){f[j>>2]=g;c=f[i>>2]|0;ij(g+c|0,0,h-c|0)|0;f[i>>2]=h;c=f[k>>2]|0;b=f[a>>2]|0;break}Mb(d,1,20255,l)|0;e=f[j>>2]|0;if(e|0){Mc(e);f[j>>2]=0}Mc(a);r=0;u=s;return r|0}while(0);g=f[j>>2]|0;b=g+((X(c,b)|0)<<4)|0;if(p){c=b;o=0;do{m=f[r+(o<<2)>>2]|0;a:do if((m|0)>0){n=f[q+(o<<2)>>2]|0;if((n|0)<=0){j=m+-1|0;i=0;while(1){l=(i&1|0)!=0|(i|0)==(j|0);h=l?b:c+(n<<4)|0;b=l?b:c;i=i+1|0;if((i|0)>=(m|0)){c=h;break a}else c=h}}k=~n;k=(n+2+((k|0)>-3?k:-3)|0)>>>1;l=m+-1|0;d=0;while(1){j=b+16|0;i=n;while(1){f[g>>2]=b;h=g+16|0;if((i|0)==1){g=h;break}f[h>>2]=b;g=g+32|0;if((i|0)>2){i=i+-2|0;b=b+16|0}else break}b=j+(k<<4)|0;j=(d&1|0)!=0|(d|0)==(l|0);h=j?b:c+(n<<4)|0;b=j?b:c;d=d+1|0;if((d|0)>=(m|0)){c=h;break}else c=h}}while(0);o=o+1|0}while((o|0)!=(p|0))}f[g>>2]=0}b=f[e>>2]|0;if(!b){r=a;u=s;return r|0}e=0;g=f[a+12>>2]|0;while(1){f[g+4>>2]=999;f[g+8>>2]=0;f[g+12>>2]=0;e=e+1|0;if((e|0)==(b|0))break;else g=g+16|0}u=s;return a|0}function eg(a){a=a|0;var b=0,c=0;if(!a)return;b=a+12|0;c=f[b>>2]|0;if(c|0){Mc(c);f[b>>2]=0}Mc(a);return}function fg(a,b,c){a=a|0;b=b|0;c=c|0;a=(f[a+12>>2]|0)+(b<<4)|0;if(!a)return;while(1){b=a+4|0;if((f[b>>2]|0)<=(c|0)){a=4;break}f[b>>2]=c;a=f[a>>2]|0;if(!a){a=4;break}}if((a|0)==4)return}function gg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;j=u;u=u+128|0;i=j;c=(f[b+12>>2]|0)+(c<<4)|0;b=f[c>>2]|0;if(!b){b=0;h=0}else{e=0;g=b;while(1){h=e+1|0;f[i+(e<<2)>>2]=c;b=f[g>>2]|0;if(!b){b=0;c=g;break}else{c=g;e=h;g=b}}}while(1){g=c+8|0;e=f[g>>2]|0;if((b|0)>(e|0))f[g>>2]=b;else b=e;a:do if((b|0)<(d|0)){e=c+4|0;while(1){if((b|0)>=(f[e>>2]|0))break;tg(a,0,1);b=b+1|0;if((b|0)>=(d|0))break a}c=c+12|0;if(!(f[c>>2]|0)){tg(a,1,1);f[c>>2]=1}}while(0);f[g>>2]=b;if(!h)break;g=h+-1|0;c=f[i+(g<<2)>>2]|0;h=g}u=j;return}function hg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;j=u;u=u+128|0;i=j;b=(f[b+12>>2]|0)+(c<<4)|0;c=f[b>>2]|0;if(!c){e=0;g=0}else{e=0;while(1){g=e+1|0;f[i+(e<<2)>>2]=b;b=f[c>>2]|0;if(!b){e=0;b=c;break}else{h=c;e=g;c=b;b=h}}}while(1){h=b+8|0;c=f[h>>2]|0;if((e|0)>(c|0)){f[h>>2]=e;c=e}e=b+4|0;a:do if((c|0)<(d|0)){b=c;while(1){if((b|0)>=(f[e>>2]|0))break a;if(ug(a,1)|0)break;b=b+1|0;if((b|0)>=(d|0))break a}f[e>>2]=b}else b=c;while(0);f[h>>2]=b;if(!g)break;h=g+-1|0;e=b;b=f[i+(h<<2)>>2]|0;g=h}u=j;return (f[e>>2]|0)<(d|0)|0}function ig(){var a=0,b=0;a=Ic(1,12)|0;if(!a){a=0;return a|0}f[a+4>>2]=10;b=Ic(10,4)|0;f[a+8>>2]=b;if(b|0){b=a;return b|0}Mc(a);b=0;return b|0}function jg(a){a=a|0;var b=0;if(!a)return;b=f[a+8>>2]|0;if(b|0)Mc(b);Mc(a);return}function kg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;i=u;u=u+16|0;h=i;g=a+4|0;e=f[g>>2]|0;d=f[a>>2]|0;do if((e|0)==(d|0)){e=e+10|0;f[g>>2]=e;d=a+8|0;e=Lc(f[d>>2]|0,e<<2)|0;if(e|0){f[d>>2]=e;d=f[a>>2]|0;break}Mc(f[d>>2]|0);f[g>>2]=0;f[a>>2]=0;Mb(c,1,20303,h)|0;b=0;u=i;return b|0}else e=f[a+8>>2]|0;while(0);f[e+(d<<2)>>2]=b;f[a>>2]=d+1;b=1;u=i;return b|0}function lg(a){a=a|0;return f[a>>2]|0}function mg(a){a=a|0;return f[a+8>>2]|0}function ng(a){a=a|0;f[a>>2]=0;return}function og(){return Hc(20)|0}function pg(a){a=a|0;if(!a)return;Mc(a);return}function qg(a){a=a|0;return (f[a+8>>2]|0)-(f[a>>2]|0)|0}function rg(a,b,c){a=a|0;b=b|0;c=c|0;f[a>>2]=b;f[a+4>>2]=b+c;f[a+8>>2]=b;f[a+12>>2]=0;f[a+16>>2]=8;return}function sg(a,b,c){a=a|0;b=b|0;c=c|0;f[a>>2]=b;f[a+4>>2]=b+c;f[a+8>>2]=b;f[a+12>>2]=0;f[a+16>>2]=0;return}function tg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!d)return;k=a+16|0;l=a+12|0;m=a+8|0;i=a+4|0;h=d+-1|0;a=f[k>>2]|0;do{j=c>>>h&1;if(!a){e=f[l>>2]|0;a=e<<8&65280;f[l>>2]=a;a=(a|0)==65280?7:8;f[k>>2]=a;g=f[m>>2]|0;if((f[i>>2]|0)>>>0>g>>>0){f[m>>2]=g+1;b[g>>0]=e;a=f[k>>2]|0}}a=a+-1|0;f[k>>2]=a;f[l>>2]=f[l>>2]|j<>>0>>0);return}function ug(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0;if(!b){l=0;return l|0}j=a+16|0;k=a+12|0;l=a+8|0;i=a+4|0;g=b+-1|0;a=0;c=f[k>>2]|0;d=f[j>>2]|0;do{if(!d){c=c<<8&65280;f[k>>2]=c;d=(c|0)==65280?7:8;f[j>>2]=d;e=f[l>>2]|0;if((f[i>>2]|0)>>>0>e>>>0){f[l>>2]=e+1;c=c|(h[e>>0]|0);f[k>>2]=c}}d=d+-1|0;f[j>>2]=d;a=(c>>>d&1)<>>0>>0);return a|0}function vg(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0;e=a+12|0;c=f[e>>2]|0;i=c<<8&65280;f[e>>2]=i;h=a+16|0;f[h>>2]=(i|0)==65280?7:8;i=a+8|0;d=f[i>>2]|0;g=a+4|0;if((f[g>>2]|0)>>>0<=d>>>0){i=0;return i|0}f[i>>2]=d+1;b[d>>0]=c;if((f[h>>2]|0)!=7){i=1;return i|0}c=f[e>>2]|0;a=c<<8&65280;f[e>>2]=a;f[h>>2]=(a|0)==65280?7:8;a=f[i>>2]|0;if((f[g>>2]|0)>>>0<=a>>>0){i=0;return i|0}f[i>>2]=a+1;b[a>>0]=c;i=1;return i|0}function wg(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;g=a+12|0;b=f[g>>2]|0;do if((b&255|0)==255){e=b<<8&65280;f[g>>2]=e;b=a+16|0;f[b>>2]=(e|0)==65280?7:8;c=a+8|0;d=f[c>>2]|0;if((f[a+4>>2]|0)>>>0>d>>>0){f[c>>2]=d+1;f[g>>2]=e|(h[d>>0]|0);break}else{g=0;return g|0}}else b=a+16|0;while(0);f[b>>2]=0;g=1;return g|0}function xg(a){a=a|0;return zg(a,1)|0}function yg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0;if(!d){d=(b|0)>0;if(!(d|(c|0)>1))return;if(d){e=c+-1|0;d=0;do{h=d;d=d+1|0;g=a+((h<<1|1)<<2)|0;f[g>>2]=(f[g>>2]|0)-((f[a+(((d|0)>=(c|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((h|0)>=(c|0)?e:h)<<1<<2)>>2]|0)>>1)}while((d|0)!=(b|0))}if((c|0)<=0)return;e=b+-1|0;d=0;do{h=a+(d<<1<<2)|0;f[h>>2]=((f[a+(((d|0)<1?1:(((d|0)>(b|0)?b:d)<<1)+-1|0)<<2)>>2]|0)+2+(f[a+((((d|0)>=(b|0)?e:d)<<1|1)<<2)>>2]|0)>>2)+(f[h>>2]|0);d=d+1|0}while((d|0)!=(c|0));return}if((b|0)==1&(c|0)==0){f[a>>2]=f[a>>2]<<1;return}if((b|0)>0){e=c+-1|0;d=0;do{h=a+(d<<1<<2)|0;f[h>>2]=(f[h>>2]|0)-((f[a+(((d|0)<1?1:(((d|0)>(c|0)?c:d)<<1)+-1|0)<<2)>>2]|0)+(f[a+((((d|0)>=(c|0)?e:d)<<1|1)<<2)>>2]|0)>>1);d=d+1|0}while((d|0)!=(b|0))}if((c|0)<=0)return;e=b+-1|0;d=0;do{g=d;d=d+1|0;h=a+((g<<1|1)<<2)|0;f[h>>2]=((f[a+(((g|0)>=(b|0)?e:g)<<1<<2)>>2]|0)+2+(f[a+(((d|0)>=(b|0)?e:d)<<1<<2)>>2]|0)>>2)+(f[h>>2]|0)}while((d|0)!=(c|0));return}function zg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=(f[a+8>>2]|0)-(f[a>>2]|0)|0;h=f[a+16>>2]|0;c=h+-1|0;y=f[a+32>>2]|0;a=f[a+24>>2]|0;g=a+(c*136|0)|0;e=(c|0)==0;if(e)a=0;else{d=0;do{w=a;a=a+136|0;x=(f[w+144>>2]|0)-(f[a>>2]|0)|0;x=d>>>0>>0?x:d;w=(f[w+148>>2]|0)-(f[w+140>>2]|0)|0;d=x>>>0>>0?w:x;c=c+-1|0}while((c|0)!=0);a=d<<2}x=Hc(a)|0;if(!((a|0)==0|(x|0)!=0)){z=0;return z|0}if(!e){w=x+4|0;s=h+-2|0;while(1){j=g;g=g+-136|0;v=f[j>>2]|0;r=(f[j+8>>2]|0)-v|0;l=f[j+4>>2]|0;t=(f[j+12>>2]|0)-l|0;u=(f[j+-128>>2]|0)-(f[g>>2]|0)|0;j=(f[j+-124>>2]|0)-(f[j+-132>>2]|0)|0;v=v&1;l=l&1;m=t-j|0;q=(r|0)>0;a:do if(q){i=(j|0)==0;n=(m|0)==0;o=w+(0-l<<2)|0;p=X(j,z)|0;k=x+(l<<2)|0;if((t|0)>0){h=0;while(1){e=y+(h<<2)|0;a=0;do{d=e+((X(a,z)|0)<<2)|0;f[x+(a<<2)>>2]=f[d>>2];a=a+1|0}while((a|0)!=(t|0));Va[b&3](x,m,j,l);if(!i){a=e;c=j;d=k;while(1){c=c+-1|0;f[a>>2]=f[d>>2];if(!c)break;else{a=a+(z<<2)|0;d=d+8|0}}}if(!n){a=e+(p<<2)|0;c=m;d=o;while(1){c=c+-1|0;f[a>>2]=f[d>>2];if(!c)break;else{a=a+(z<<2)|0;d=d+8|0}}}h=h+1|0;if((h|0)==(r|0))break a}}if(i){a=0;while(1){Va[b&3](x,m,0,l);if(!n){c=y+(a<<2)+(p<<2)|0;d=m;e=o;while(1){d=d+-1|0;f[c>>2]=f[e>>2];if(!d)break;else{c=c+(z<<2)|0;e=e+8|0}}}a=a+1|0;if((a|0)==(r|0))break a}}else h=0;do{e=y+(h<<2)|0;Va[b&3](x,m,j,l);a=e;c=j;d=k;while(1){c=c+-1|0;f[a>>2]=f[d>>2];if(!c)break;else{a=a+(z<<2)|0;d=d+8|0}}if(!n){a=e+(p<<2)|0;c=m;d=o;while(1){c=c+-1|0;f[a>>2]=f[d>>2];if(!c)break;else{a=a+(z<<2)|0;d=d+8|0}}}h=h+1|0}while((h|0)!=(r|0))}while(0);k=r-u|0;b:do if((t|0)>0){i=(u|0)>0;j=x+(v<<2)|0;l=(k|0)>0;m=w+(0-v<<2)|0;if(q){h=0;while(1){e=y+((X(h,z)|0)<<2)|0;a=0;do{f[x+(a<<2)>>2]=f[e+(a<<2)>>2];a=a+1|0}while((a|0)!=(r|0));Va[b&3](x,k,u,v);if(i){a=e;c=0;d=j;while(1){f[a>>2]=f[d>>2];c=c+1|0;if((c|0)==(u|0))break;else{a=a+4|0;d=d+8|0}}}if(l){a=e+(u<<2)|0;c=0;d=m;while(1){f[a>>2]=f[d>>2];c=c+1|0;if((c|0)==(k|0))break;else{a=a+4|0;d=d+8|0}}}h=h+1|0;if((h|0)==(t|0))break b}}if(i)h=0;else{a=0;while(1){Va[b&3](x,k,u,v);if(l){c=y+((X(a,z)|0)<<2)+(u<<2)|0;d=0;e=m;while(1){f[c>>2]=f[e>>2];d=d+1|0;if((d|0)==(k|0))break;else{c=c+4|0;e=e+8|0}}}a=a+1|0;if((a|0)==(t|0))break b}}do{e=y+((X(h,z)|0)<<2)|0;Va[b&3](x,k,u,v);a=e;c=0;d=j;while(1){f[a>>2]=f[d>>2];c=c+1|0;if((c|0)==(u|0))break;else{a=a+4|0;d=d+8|0}}if(l){a=e+(u<<2)|0;c=0;d=m;while(1){f[a>>2]=f[d>>2];c=c+1|0;if((c|0)==(k|0))break;else{a=a+4|0;d=d+8|0}}}h=h+1|0}while((h|0)!=(t|0))}while(0);if(!s)break;else s=s+-1|0}}Mc(x);z=1;return z|0}function Ag(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+32|0;E=G+16|0;F=G;h=f[a+24>>2]|0;g=(f[h+8>>2]|0)-(f[h>>2]|0)|0;i=(f[h+12>>2]|0)-(f[h+4>>2]|0)|0;D=(f[a+8>>2]|0)-(f[a>>2]|0)|0;if((b|0)==1){F=1;u=G;return F|0}j=b+-1|0;e=(j|0)==0;if(e)b=0;else{b=h;c=0;d=j;do{B=b;b=b+136|0;C=(f[B+144>>2]|0)-(f[b>>2]|0)|0;C=c>>>0>>0?C:c;B=(f[B+148>>2]|0)-(f[B+140>>2]|0)|0;c=C>>>0>>0?B:C;d=d+-1|0}while((d|0)!=0);b=c<<2}C=Jc(b)|0;f[E>>2]=C;if(!C){F=0;u=G;return F|0}f[F>>2]=C;if(!e){t=a+32|0;v=E+8|0;w=F+8|0;x=E+4|0;y=E+12|0;z=F+4|0;A=F+12|0;B=C+4|0;do{s=f[t>>2]|0;p=h;h=h+136|0;f[v>>2]=g;f[w>>2]=i;c=f[h>>2]|0;n=g;g=(f[p+144>>2]|0)-c|0;o=p+140|0;b=f[o>>2]|0;r=i;i=(f[p+148>>2]|0)-b|0;p=g-n|0;f[x>>2]=p;c=(c|0)%2|0;f[y>>2]=c;q=(i|0)==0;if(!q){k=g<<2;l=(n|0)==0;m=(p|0)==0;b=0;while(1){a=s+((X(b,D)|0)<<2)|0;if(l)d=0;else{c=C+(c<<2)|0;d=a;e=n;while(1){e=e+-1|0;f[c>>2]=f[d>>2];if(!e)break;else{c=c+8|0;d=d+4|0}}c=f[y>>2]|0;d=n}if(!m){e=B+(0-c<<2)|0;c=a+(d<<2)|0;d=p;while(1){d=d+-1|0;f[e>>2]=f[c>>2];if(!d)break;else{e=e+8|0;c=c+4|0}}}Bg(E);hj(a|0,C|0,k|0)|0;b=b+1|0;if((b|0)==(i|0))break;c=f[y>>2]|0}b=f[o>>2]|0}m=i-r|0;f[z>>2]=m;c=(b|0)%2|0;f[A>>2]=c;a:do if(g|0){k=(r|0)==0;l=(m|0)==0;if(q){b=0;while(1){a=s+(b<<2)|0;if(k)d=0;else{c=C+(c<<2)|0;d=a;e=r;while(1){e=e+-1|0;f[c>>2]=f[d>>2];if(!e)break;else{c=c+8|0;d=d+(D<<2)|0}}c=f[A>>2]|0;d=r}if(!l){e=B+(0-c<<2)|0;c=a+((X(d,D)|0)<<2)|0;d=m;while(1){d=d+-1|0;f[e>>2]=f[c>>2];if(!d)break;else{e=e+8|0;c=c+(D<<2)|0}}}Bg(F);b=b+1|0;if((b|0)==(g|0))break a;c=f[A>>2]|0}}else b=0;while(1){a=s+(b<<2)|0;if(k)d=0;else{c=C+(c<<2)|0;d=a;e=r;while(1){e=e+-1|0;f[c>>2]=f[d>>2];if(!e)break;else{c=c+8|0;d=d+(D<<2)|0}}c=f[A>>2]|0;d=r}if(!l){e=B+(0-c<<2)|0;c=a+((X(d,D)|0)<<2)|0;d=m;while(1){d=d+-1|0;f[e>>2]=f[c>>2];if(!d)break;else{e=e+8|0;c=c+(D<<2)|0}}}Bg(F);c=0;do{q=s+((X(c,D)|0)+b<<2)|0;f[q>>2]=f[C+(c<<2)>>2];c=c+1|0}while((c|0)!=(i|0));b=b+1|0;if((b|0)==(g|0))break a;c=f[A>>2]|0}}while(0);j=j+-1|0}while((j|0)!=0)}Kc(C);F=1;u=G;return F|0}function Bg(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;d=f[a>>2]|0;e=f[a+4>>2]|0;g=f[a+8>>2]|0;if(!(f[a+12>>2]|0)){c=(e|0)>0;if(!(c|(g|0)>1))return;if((g|0)>0){b=e+-1|0;a=0;do{h=d+(a<<1<<2)|0;f[h>>2]=(f[h>>2]|0)-((f[d+(((a|0)<1?1:(((a|0)>(e|0)?e:a)<<1)+-1|0)<<2)>>2]|0)+2+(f[d+((((a|0)>=(e|0)?b:a)<<1|1)<<2)>>2]|0)>>2);a=a+1|0}while((a|0)!=(g|0))}if(!c)return;b=g+-1|0;a=0;do{c=a;a=a+1|0;h=d+((c<<1|1)<<2)|0;f[h>>2]=((f[d+(((a|0)>=(g|0)?b:a)<<1<<2)>>2]|0)+(f[d+(((c|0)>=(g|0)?b:c)<<1<<2)>>2]|0)>>1)+(f[h>>2]|0)}while((a|0)!=(e|0));return}if((e|0)==1&(g|0)==0){f[d>>2]=(f[d>>2]|0)/2|0;return}if((g|0)>0){b=e+-1|0;a=0;do{c=a;a=a+1|0;h=d+((c<<1|1)<<2)|0;f[h>>2]=(f[h>>2]|0)-((f[d+(((c|0)>=(e|0)?b:c)<<1<<2)>>2]|0)+2+(f[d+(((a|0)>=(e|0)?b:a)<<1<<2)>>2]|0)>>2)}while((a|0)!=(g|0))}if((e|0)<=0)return;b=g+-1|0;a=0;do{h=d+(a<<1<<2)|0;f[h>>2]=((f[d+(((a|0)<1?1:(((a|0)>(g|0)?g:a)<<1)+-1|0)<<2)>>2]|0)+(f[d+((((a|0)>=(g|0)?b:a)<<1|1)<<2)>>2]|0)>>1)+(f[h>>2]|0);a=a+1|0}while((a|0)!=(e|0));return}function Cg(a){a=a|0;return ((a|0)==0?0:(a+-1|0)>>>0<2?1:2)|0}function Dg(a,b){a=a|0;b=b|0;return +(+p[56+(b*80|0)+(a<<3)>>3])}function Eg(a){a=a|0;return zg(a,2)|0}\nfunction Fg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;if(!d){h=(b|0)>0;if(!(h|(c|0)>1))return;if(h){e=c+-1|0;d=0;do{g=d;d=d+1|0;i=(f[a+(((d|0)>=(c|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((g|0)>=(c|0)?e:g)<<1<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,12993,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;g=a+((g<<1|1)<<2)|0;f[g>>2]=(f[g>>2]|0)-i}while((d|0)!=(b|0))}g=(c|0)>0;if(g){e=b+-1|0;d=0;do{j=(f[a+((((d|0)>=(b|0)?e:d)<<1|1)<<2)>>2]|0)+(f[a+(((d|0)<1?1:(((d|0)>(b|0)?b:d)<<1)+-1|0)<<2)>>2]|0)|0;j=Yi(j|0,((j|0)<0)<<31>>31|0,434,0)|0;j=Zi(j|0,I|0,4096,0)|0;j=ej(j|0,I|0,13)|0;i=a+(d<<1<<2)|0;f[i>>2]=(f[i>>2]|0)-j;d=d+1|0}while((d|0)!=(c|0))}if(h){e=c+-1|0;d=0;do{j=d;d=d+1|0;i=(f[a+(((d|0)>=(c|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((j|0)>=(c|0)?e:j)<<1<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,7233,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+((j<<1|1)<<2)|0;f[j>>2]=(f[j>>2]|0)+i}while((d|0)!=(b|0))}if(g){e=b+-1|0;d=0;do{i=(f[a+((((d|0)>=(b|0)?e:d)<<1|1)<<2)>>2]|0)+(f[a+(((d|0)<1?1:(((d|0)>(b|0)?b:d)<<1)+-1|0)<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,3633,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+(d<<1<<2)|0;f[j>>2]=(f[j>>2]|0)+i;d=d+1|0}while((d|0)!=(c|0))}if(h){d=0;do{j=a+((d<<1|1)<<2)|0;i=f[j>>2]|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,5038,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;f[j>>2]=i;d=d+1|0}while((d|0)!=(b|0))}if(g)d=0;else return;do{j=a+(d<<1<<2)|0;i=f[j>>2]|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,6659,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;f[j>>2]=i;d=d+1|0}while((d|0)!=(c|0));return}else{h=(c|0)>0;if(!((b|0)>1|h))return;g=(b|0)>0;if(g){e=c+-1|0;d=0;do{i=(f[a+(((d|0)<1?1:(((d|0)>(c|0)?c:d)<<1)+-1|0)<<2)>>2]|0)+(f[a+((((d|0)>=(c|0)?e:d)<<1|1)<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,12993,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+(d<<1<<2)|0;f[j>>2]=(f[j>>2]|0)-i;d=d+1|0}while((d|0)!=(b|0))}if(h){e=b+-1|0;d=0;do{j=d;d=d+1|0;i=(f[a+(((d|0)>=(b|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((j|0)>=(b|0)?e:j)<<1<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,434,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+((j<<1|1)<<2)|0;f[j>>2]=(f[j>>2]|0)-i}while((d|0)!=(c|0))}if(g){e=c+-1|0;d=0;do{i=(f[a+(((d|0)<1?1:(((d|0)>(c|0)?c:d)<<1)+-1|0)<<2)>>2]|0)+(f[a+((((d|0)>=(c|0)?e:d)<<1|1)<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,7233,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+(d<<1<<2)|0;f[j>>2]=(f[j>>2]|0)+i;d=d+1|0}while((d|0)!=(b|0))}if(h){e=b+-1|0;d=0;do{j=d;d=d+1|0;i=(f[a+(((d|0)>=(b|0)?e:d)<<1<<2)>>2]|0)+(f[a+(((j|0)>=(b|0)?e:j)<<1<<2)>>2]|0)|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,3633,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;j=a+((j<<1|1)<<2)|0;f[j>>2]=(f[j>>2]|0)+i}while((d|0)!=(c|0))}if(g){d=0;do{j=a+(d<<1<<2)|0;i=f[j>>2]|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,5038,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;f[j>>2]=i;d=d+1|0}while((d|0)!=(b|0))}if(h)d=0;else return;do{j=a+((d<<1|1)<<2)|0;i=f[j>>2]|0;i=Yi(i|0,((i|0)<0)<<31>>31|0,6659,0)|0;i=Zi(i|0,I|0,4096,0)|0;i=ej(i|0,I|0,13)|0;f[j>>2]=i;d=d+1|0}while((d|0)!=(c|0));return}}function Gg(a){a=a|0;return 0}function Hg(a,b){a=a|0;b=b|0;return +(+p[376+(b*80|0)+(a<<3)>>3])}function Ig(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=a+4|0;l=((f[k>>2]|0)*3|0)+-2|0;if(!l)return;m=a+20|0;n=a+24|0;j=0;do{if(!j){d=0;e=0}else{e=j+-1|0;d=((e>>>0)%3|0)+1|0;e=((e>>>0)/3|0)+1|0}g=(d|0)==0|(f[m>>2]|0)==0?0:(d+-1|0)>>>0<2?1:2;if(!(f[n>>2]|0))c=1.0;else c=+(1<>2]|0)+~e<<3)>>3];i=~~+J(+(c*8192.0));h=g+b|0;if((i|0)>1){d=i;g=0;while(1)if(d>>>0>3){d=d>>>1;g=g+1|0}else{d=i;e=0;break}while(1)if(d>>>0>3){d=d>>>1;e=e+1|0}else break;e=10-e|0;d=g+-12|0}else{e=11;d=-13}f[a+28+(j<<3)+4>>2]=((e|0)<0?i>>0-e:i<>2]=h-d;j=j+1|0}while((j|0)!=(l|0));return}function Jg(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;S=u;u=u+32|0;Q=S+16|0;R=S;j=f[a+24>>2]|0;g=f[j+8>>2]|0;h=f[j>>2]|0;n=f[j+12>>2]|0;o=f[j+4>>2]|0;O=a+8|0;l=f[O>>2]|0;m=f[a>>2]|0;P=l-m|0;i=b+-1|0;e=(i|0)==0;if(e)b=80;else{b=j;c=0;d=i;do{L=b;b=b+136|0;M=(f[L+144>>2]|0)-(f[b>>2]|0)|0;M=c>>>0>>0?M:c;L=(f[L+148>>2]|0)-(f[L+140>>2]|0)|0;c=M>>>0>>0?L:M;d=d+-1|0}while((d|0)!=0);b=(c<<4)+80|0}k=Jc(b)|0;f[Q>>2]=k;if(!k){R=0;u=S;return R|0}f[R>>2]=k;a:do if(e)b=k;else{z=a+32|0;A=a+12|0;B=a+4|0;C=Q+8|0;D=R+8|0;E=Q+4|0;F=Q+12|0;G=P<<2;H=P<<1;I=P*3|0;J=R+4|0;K=R+12|0;L=l-m<<2;M=m-l<<2;p=g-h|0;c=i;b=k;d=k;g=l;e=m;t=n-o|0;n=k;while(1){v=f[z>>2]|0;e=X((f[A>>2]|0)-(f[B>>2]|0)|0,g-e|0)|0;f[C>>2]=p;f[D>>2]=t;w=j+136|0;o=f[j+144>>2]|0;q=f[w>>2]|0;x=o-q|0;h=f[j+148>>2]|0;m=j+140|0;g=f[m>>2]|0;y=h-g|0;f[E>>2]=x-p;f[F>>2]=(q|0)%2|0;do if((y|0)>3){k=g+-1-h|0;k=(h+4+((k|0)>-8?k:-8)-g|0)>>>2;l=v+(G<<2)+((X(L,k)|0)<<2)|0;k=X(M,k)|0;if((x|0)>0){g=y;h=e;i=v}else{g=y;h=e;i=v;while(1){Kg(Q,i,P,h);Lg(Q);if((g|0)>7){g=g+-4|0;h=h-G|0;i=i+(G<<2)|0}else break}e=M+e+k|0;h=l;break}while(1){Kg(Q,i,P,h);Lg(Q);j=x;do{s=j;j=j+-1|0;f[i+(j<<2)>>2]=f[n+(j<<4)>>2];f[i+(j+P<<2)>>2]=f[n+(j<<4)+4>>2];f[i+(j+H<<2)>>2]=f[n+(j<<4)+8>>2];f[i+(j+I<<2)>>2]=f[n+(j<<4)+12>>2]}while((s|0)>1);if((g|0)>7){g=g+-4|0;h=h-G|0;i=i+(G<<2)|0}else break}e=M+e+k|0;h=l}else h=v;while(0);b:do if(!(y&3)){s=n;N=22}else{Kg(Q,h,P,e);Lg(Q);e=x+-1|0;if((x|0)<=0){l=y-t|0;f[J>>2]=l;k=(f[m>>2]|0)%2|0;f[K>>2]=k;m=v;break}g=f[Q>>2]|0;switch(y&3){case 3:{b=e;while(1){f[h+(b+H<<2)>>2]=f[g+(b<<4)+8>>2];f[h+(b+P<<2)>>2]=f[g+(b<<4)+4>>2];f[h+(b<<2)>>2]=f[g+(b<<4)>>2];if((b|0)>0)b=b+-1|0;else{b=g;s=g;N=22;break}}break}case 2:{b=e;while(1){f[h+(b+P<<2)>>2]=f[g+(b<<4)+4>>2];f[h+(b<<2)>>2]=f[g+(b<<4)>>2];if((b|0)>0)b=b+-1|0;else{b=g;s=g;N=22;break}}break}case 1:{b=e;while(1){f[h+(b<<2)>>2]=f[g+(b<<4)>>2];if((b|0)>0)b=b+-1|0;else{b=g;s=g;N=22;break}}break}default:{b=g;s=g;N=22;break b}}}while(0);do if((N|0)==22){N=0;r=y-t|0;f[J>>2]=r;p=(f[m>>2]|0)%2|0;f[K>>2]=p;if((x|0)>3){n=q+-1-o|0;o=o+4+((n|0)>-8?n:-8)-q&-4;if(!y){k=(t|0)>0;l=X(t,P)|0;m=0-p|0;n=(r|0)>0;i=v;j=x;while(1){d=f[R>>2]|0;g=d+(p<<4)|0;if(k){e=0;do{q=g+(e<<1<<4)|0;h=i+((X(e,P)|0)<<2)|0;f[q>>2]=f[h>>2];f[q+4>>2]=f[h+4>>2];f[q+8>>2]=f[h+8>>2];f[q+12>>2]=f[h+12>>2];e=e+1|0}while((e|0)!=(t|0))}g=i+(l<<2)|0;h=d+16+(m<<4)|0;if(n){e=0;do{q=h+(e<<1<<4)|0;T=g+((X(e,P)|0)<<2)|0;f[q>>2]=f[T>>2];f[q+4>>2]=f[T+4>>2];f[q+8>>2]=f[T+8>>2];f[q+12>>2]=f[T+12>>2];e=e+1|0}while((e|0)!=(r|0))}Lg(R);if((j|0)>7){i=i+16|0;j=j+-4|0}else break}m=v+16+(o<<2)|0;k=p;l=r;n=s;break}j=f[D>>2]|0;k=(j|0)>0;l=X(j,P)|0;m=0-p|0;n=(r|0)>0;h=v;i=x;while(1){g=d+(p<<4)|0;if(k){e=0;do{T=g+(e<<1<<4)|0;t=h+((X(e,P)|0)<<2)|0;f[T>>2]=f[t>>2];f[T+4>>2]=f[t+4>>2];f[T+8>>2]=f[t+8>>2];f[T+12>>2]=f[t+12>>2];e=e+1|0}while((e|0)!=(j|0))}g=h+(l<<2)|0;e=d+16+(m<<4)|0;if(n){d=0;do{T=e+(d<<1<<4)|0;t=g+((X(d,P)|0)<<2)|0;f[T>>2]=f[t>>2];f[T+4>>2]=f[t+4>>2];f[T+8>>2]=f[t+8>>2];f[T+12>>2]=f[t+12>>2];d=d+1|0}while((d|0)!=(r|0))}Lg(R);e=0;do{T=h+((X(e,P)|0)<<2)|0;d=f[R>>2]|0;t=d+(e<<4)|0;f[T>>2]=f[t>>2];f[T+4>>2]=f[t+4>>2];f[T+8>>2]=f[t+8>>2];f[T+12>>2]=f[t+12>>2];e=e+1|0}while((e|0)!=(y|0));if((i|0)>7){h=h+16|0;i=i+-4|0}else break}m=v+16+(o<<2)|0;k=p;l=r;n=s}else{m=v;k=p;l=r;n=s}}while(0);i=x&3;if(i){j=f[R>>2]|0;e=j+(k<<4)|0;g=f[D>>2]|0;if((g|0)>0){h=i<<2;d=0;do{hj(e+(d<<1<<4)|0,m+((X(d,P)|0)<<2)|0,h|0)|0;d=d+1|0}while((d|0)!=(g|0))}h=m+((X(g,P)|0)<<2)|0;e=j+16+(0-k<<4)|0;if((l|0)>0){g=i<<2;d=0;do{hj(e+(d<<1<<4)|0,h+((X(d,P)|0)<<2)|0,g|0)|0;d=d+1|0}while((d|0)!=(l|0))}Lg(R);if(!y)d=j;else{e=i<<2;d=0;do{hj(m+((X(d,P)|0)<<2)|0,j+(d<<4)|0,e|0)|0;d=d+1|0}while((d|0)!=(y|0));d=j}}c=c+-1|0;if(!c)break a;p=x;j=w;g=f[O>>2]|0;e=f[a>>2]|0;t=y}}while(0);Kc(b);T=1;u=S;return T|0}function Kg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;h=f[a>>2]|0;j=f[a+12>>2]|0;g=h+(j<<4)|0;l=f[a+8>>2]|0;m=c*3|0;q=h+16+(0-j<<4)|0;n=f[a+4>>2]|0;if(((l+m|0)<(d|0)?(b&15|0)==0:0)?((g|c)&15|0)==0:0){if((l|0)>0){a=0;do{g=a<<3;f[h+(j<<4)+(g<<2)>>2]=f[b+(a<<2)>>2];r=a+c|0;f[h+(j<<4)+((g|1)<<2)>>2]=f[b+(r<<2)>>2];r=r+c|0;f[h+(j<<4)+((g|2)<<2)>>2]=f[b+(r<<2)>>2];f[h+(j<<4)+((g|3)<<2)>>2]=f[b+(r+c<<2)>>2];a=a+1|0}while((a|0)!=(l|0))}}else e=2;if((e|0)==2?(l|0)>0:0){a=0;do{e=a<<3;f[h+(j<<4)+(e<<2)>>2]=f[b+(a<<2)>>2];g=a+c|0;if(((g|0)<(d|0)?(f[h+(j<<4)+((e|1)<<2)>>2]=f[b+(g<<2)>>2],i=g+c|0,(i|0)<(d|0)):0)?(f[h+(j<<4)+((e|2)<<2)>>2]=f[b+(i<<2)>>2],k=i+c|0,(k|0)<(d|0)):0)f[h+(j<<4)+((e|3)<<2)>>2]=f[b+(k<<2)>>2];a=a+1|0}while((a|0)!=(l|0))}h=b+(l<<2)|0;b=d-l|0;if(((n+m|0)<(b|0)?(h&15|0)==0:0)?((q|c)&15|0)==0:0){if((n|0)>0)a=0;else return;do{r=a<<3;f[q+(r<<2)>>2]=f[h+(a<<2)>>2];p=a+c|0;f[q+((r|1)<<2)>>2]=f[h+(p<<2)>>2];p=p+c|0;f[q+((r|2)<<2)>>2]=f[h+(p<<2)>>2];f[q+((r|3)<<2)>>2]=f[h+(p+c<<2)>>2];a=a+1|0}while((a|0)!=(n|0));return}if((n|0)>0)a=0;else return;do{e=a<<3;f[q+(e<<2)>>2]=f[h+(a<<2)>>2];g=a+c|0;if(((g|0)<(b|0)?(f[q+((e|1)<<2)>>2]=f[h+(g<<2)>>2],o=g+c|0,(o|0)<(b|0)):0)?(f[q+((e|2)<<2)>>2]=f[h+(o<<2)>>2],p=o+c|0,(p|0)<(b|0)):0)f[q+((e|3)<<2)>>2]=f[h+(p<<2)>>2];a=a+1|0}while((a|0)!=(n|0));return}function Lg(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0.0,o=0;do if(!(f[a+12>>2]|0)){d=f[a+8>>2]|0;if((f[a+4>>2]|0)>0){b=f[a>>2]|0;if((d|0)>0){e=0;c=1;g=b;i=9;break}else{e=0;h=1;g=b;break}}if((d|0)>1){c=1;b=0;i=7}else return}else{d=f[a+8>>2]|0;if((d|0)<=0)if((f[a+4>>2]|0)>1){e=1;h=0;g=f[a>>2]|0;break}else return;else{c=0;b=1;i=7}}while(0);if((i|0)==7){e=b;g=f[a>>2]|0;i=9}if((i|0)==9){b=0;do{i=b<<3;o=g+(e<<4)+(i<<2)|0;l=g+(e<<4)+((i|1)<<2)|0;m=+n[l>>2];h=g+(e<<4)+((i|2)<<2)|0;k=+n[h>>2];i=g+(e<<4)+((i|3)<<2)|0;j=+n[i>>2];n[o>>2]=+n[o>>2]*1.2301740646362305;n[l>>2]=m*1.2301740646362305;n[h>>2]=k*1.2301740646362305;n[i>>2]=j*1.2301740646362305;b=b+1|0}while((b|0)!=(d|0));h=c}c=f[a+4>>2]|0;if((c|0)>0){b=0;do{o=b<<3;i=g+(h<<4)+(o<<2)|0;a=g+(h<<4)+((o|1)<<2)|0;j=+n[a>>2];l=g+(h<<4)+((o|2)<<2)|0;k=+n[l>>2];o=g+(h<<4)+((o|3)<<2)|0;m=+n[o>>2];n[i>>2]=+n[i>>2]*1.625732421875;n[a>>2]=j*1.625732421875;n[l>>2]=k*1.625732421875;n[o>>2]=m*1.625732421875;b=b+1|0}while((b|0)!=(c|0))}b=g+(h<<4)|0;a=g+(e<<4)|0;g=a+16|0;i=c-e|0;i=(d|0)<(i|0)?d:i;Mg(b,g,d,i,-.4435068666934967);l=b+16|0;o=d-h|0;o=(c|0)<(o|0)?c:o;Mg(a,l,c,o,-.8829110860824585);Mg(b,g,d,i,.05298011749982834);Mg(a,l,c,o,1.5861343145370483);return}function Mg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0.0,g=0.0,h=0.0,i=0.0,j=0,k=0,l=0,m=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0,x=0.0;if((d|0)>0){m=d<<1;l=m+-2|0;j=b;k=0;g=+n[a>>2];h=+n[a+4>>2];i=+n[a+8>>2];f=+n[a+12>>2];while(1){w=j+-16|0;t=j+-12|0;v=+n[t>>2];q=j+-8|0;s=+n[q>>2];a=j+-4|0;p=+n[a>>2];x=g;g=+n[j>>2];u=h;h=+n[j+4>>2];r=i;i=+n[j+8>>2];o=f;f=+n[j+12>>2];n[w>>2]=+n[w>>2]+(x+g)*e;n[t>>2]=v+(u+h)*e;n[q>>2]=s+(r+i)*e;n[a>>2]=p+(o+f)*e;k=k+1|0;if((k|0)==(d|0))break;else j=j+32|0}a=b+(l<<4)|0;b=b+(m<<4)|0}if((d|0)>=(c|0))return;f=e+e;g=f*+n[a>>2];h=f*+n[a+4>>2];i=f*+n[a+8>>2];f=f*+n[a+12>>2];while(1){m=b+-16|0;q=b+-12|0;u=+n[q>>2];t=b+-8|0;v=+n[t>>2];w=b+-4|0;x=+n[w>>2];n[m>>2]=g+ +n[m>>2];n[q>>2]=h+u;n[t>>2]=i+v;n[w>>2]=f+x;d=d+1|0;if((d|0)==(c|0))break;else b=b+32|0}return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0.0,h=0,i=0,j=0,k=0,l=0.0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;x=c<<2;y=Hc(c<<4)|0;if(!y){z=0;return z|0}z=y+x|0;ij(y|0,0,x|0)|0;t=c+-1|0;u=(c|0)==0;if(!u){d=y;e=0;while(1){f[d>>2]=e;e=e+1|0;if((e|0)==(c|0))break;else d=d+4|0}}a:do if(t|0){m=1;o=a;p=0;d=0;q=y;s=c;while(1){r=o+(p<<2)|0;if(p>>>0>>0){e=r;g=0.0;h=p}else break;while(1){l=+n[e>>2];l=l>0.0?l:-l;w=l>g;d=w?h:d;g=w?l:g;h=h+1|0;if((h|0)==(c|0))break;else e=e+(c<<2)|0}if(g==0.0)break;if((d|0)!=(p|0)){w=q+(d<<2)+(0-p<<2)|0;v=f[q>>2]|0;f[q>>2]=f[w>>2];f[w>>2]=v;w=o+((X(d-p|0,c)|0)<<2)|0;hj(z|0,w|0,x|0)|0;hj(w|0,o|0,x|0)|0;hj(o|0,z|0,x|0)|0}g=+n[r>>2];if(m>>>0>>0){h=r+(c<<2)|0;j=m;while(1){l=+n[h>>2]/g;n[h>>2]=l;e=m;i=h;k=r;do{k=k+4|0;i=i+4|0;n[i>>2]=+n[i>>2]-l*+n[k>>2];e=e+1|0}while((e|0)!=(c|0));j=j+1|0;if((j|0)==(c|0))break;else h=h+(s<<2)+(p<<2)|0}}p=p+1|0;if(p>>>0>=t>>>0)break a;else{m=m+1|0;o=o+(c<<2)|0;q=q+4|0;s=s+-1|0}}Mc(y);z=0;return z|0}while(0);v=z+(c<<2)|0;w=z+(c<<1<<2)|0;if(!u){q=v+(c<<2)|0;r=w+(c<<2)|0;s=a+((X(c,c)|0)<<2)+-4|0;t=~c;p=0;while(1){ij(z|0,0,x|0)|0;n[z+(p<<2)>>2]=1.0;i=y;j=a;k=w;m=0;o=1;while(1){if(!m)g=0.0;else{d=j;e=w;g=0.0;h=1;while(1){g=g+ +n[d>>2]*+n[e>>2];h=h+1|0;if((h|0)==(o|0))break;else{d=d+4|0;e=e+4|0}}}n[k>>2]=+n[z+(f[i>>2]<<2)>>2]-g;m=m+1|0;if((m|0)==(c|0)){i=c;j=s;k=q;m=r;break}else{i=i+4|0;j=j+(c<<2)|0;k=k+4|0;o=o+1|0}}while(1){m=m+-4|0;l=+n[j>>2];if(i>>>0>>0){d=j;e=k;g=0.0;h=i;while(1){d=d+4|0;g=g+ +n[d>>2]*+n[e>>2];h=h+1|0;if((h|0)==(c|0))break;else e=e+4|0}}else g=0.0;k=k+-4|0;i=i+-1|0;n[k>>2]=(+n[m>>2]-g)/l;if(!i){d=b;e=0;break}else j=j+(t<<2)|0}while(1){f[d>>2]=f[v+(e<<2)>>2];e=e+1|0;if((e|0)==(c|0))break;else d=d+(c<<2)|0}p=p+1|0;if((p|0)==(c|0))break;else b=b+4|0}}Mc(y);z=1;return z|0}function Og(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;g=Ic(1,44)|0;if(!g){g=0;return g|0}h=_g()|0;f[g>>2]=h;if(!h){$g(0);f[g>>2]=0;h=g+4|0;ph(f[h>>2]|0);f[h>>2]=0;if((f[g+40>>2]|0)==0?(b=g+8|0,c=f[b>>2]|0,c|0):0){Kc(c);f[b>>2]=0}b=g+12|0;c=f[b>>2]|0;if(c|0){Kc(c);f[b>>2]=0}Mc(g);h=0;return h|0}h=oh()|0;b=g+4|0;f[b>>2]=h;if(h|0){f[g+40>>2]=a;h=g;return h|0}$g(f[g>>2]|0);f[g>>2]=0;ph(f[b>>2]|0);f[b>>2]=0;if((f[g+40>>2]|0)==0?(d=g+8|0,e=f[d>>2]|0,e|0):0){Kc(e);f[d>>2]=0}b=g+12|0;c=f[b>>2]|0;if(c|0){Kc(c);f[b>>2]=0}Mc(g);h=0;return h|0}function Pg(a){a=a|0;var b=0,c=0,d=0;if(!a)return;$g(f[a>>2]|0);f[a>>2]=0;d=a+4|0;ph(f[d>>2]|0);f[d>>2]=0;if((f[a+40>>2]|0)==0?(b=a+8|0,c=f[b>>2]|0,c|0):0){Kc(c);f[b>>2]=0}b=a+12|0;c=f[b>>2]|0;if(c|0){Kc(c);f[b>>2]=0}Mc(a);return}function Qg(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,i=0,k=0,l=0,m=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0;Aa=(f[b+8>>2]|0)-(f[b>>2]|0)|0;Ba=b+20|0;e=f[Ba>>2]|0;if(!e){Ba=1;return Ba|0}sa=b+24|0;ta=c+808|0;ua=c+16|0;va=a+4|0;xa=a+8|0;ya=a+16|0;za=a+20|0;ra=c+20|0;oa=b+32|0;pa=a+12|0;qa=a+32|0;na=0;c=e;a:while(1){la=f[sa>>2]|0;ma=la+(na*136|0)+24|0;b=f[ma>>2]|0;if(b){ia=la+(na*136|0)+16|0;ja=la+(na*136|0)+20|0;ka=na+-1|0;ha=0;e=f[ja>>2]|0;c=f[ia>>2]|0;do{if(X(e,c)|0){ca=la+(na*136|0)+28+(ha*36|0)+20|0;da=la+(na*136|0)+28+(ha*36|0)+16|0;ea=la+(na*136|0)+28+(ha*36|0)|0;fa=la+(na*136|0)+28+(ha*36|0)+4|0;ga=la+(na*136|0)+28+(ha*36|0)+32|0;ba=0;do{b=f[ca>>2]|0;$=b+(ba*40|0)+16|0;aa=b+(ba*40|0)+20|0;if(X(f[aa>>2]|0,f[$>>2]|0)|0){_=b+(ba*40|0)+24|0;Z=0;do{c=f[_>>2]|0;R=f[da>>2]|0;e=f[ta>>2]|0;b=f[ua>>2]|0;S=f[va>>2]|0;T=f[a>>2]|0;U=c+(Z*56|0)+8|0;Y=c+(Z*56|0)+12|0;if(!(Rg(a,(f[c+(Z*56|0)+16>>2]|0)-(f[U>>2]|0)|0,(f[c+(Z*56|0)+20>>2]|0)-(f[Y>>2]|0)|0)|0)){c=0;F=219;break a}V=c+(Z*56|0)+24|0;g=f[V>>2]|0;hh(T);ih(T,18,0,46);ih(T,17,0,3);ih(T,0,0,4);W=c+(Z*56|0)+48|0;if(f[W>>2]|0){M=c+(Z*56|0)+4|0;N=(b&1|0)!=0;O=(b&2|0)==0;P=(b&8|0)==0;Q=R<<8;L=(b&32|0)==0;K=0;b=2;c=g+e|0;do{i=f[M>>2]|0;J=N&(b>>>0<2?(c|0)<=((f[V>>2]|0)+-4|0):0);e=f[i+(K<<5)>>2]|0;b:do if(e){e=(f[e>>2]|0)+(f[i+(K<<5)+4>>2]|0)|0;g=f[i+(K<<5)+16>>2]|0;if(!J){if(!(mh(T,e,g)|0)){c=0;F=219;break a}}else qh(S,e,g);H=i+(K<<5)+12|0;if((c|0)>0&(f[H>>2]|0)!=0){I=O|J;G=0;while(1){c:do switch(b|0){case 0:{if(J){v=1<>1|v;e=f[za>>2]|0;if(!e)break c;u=0-v|0;t=0;g=f[ya>>2]|0;while(1){s=t;t=t+4|0;if(!g)g=0;else{q=(s|0)==-4;r=s|3;p=0;do{d:do if(!q)if(P){e=s;do{if(e>>>0>=(f[za>>2]|0)>>>0)break d;g=f[pa>>2]|0;l=e;e=e+1|0;i=(X(f[qa>>2]|0,e)|0)+p|0;k=g+(i+1<<1)|0;l=(f[xa>>2]|0)+((X(f[ya>>2]|0,l)|0)+p<<2)|0;m=f[va>>2]|0;F=d[k>>1]|0;if((F&255|0)!=0&(F&20480|0)==0){if(rh(m)|0){E=rh(m)|0;f[l>>2]=E|0?u:v;F=f[qa>>2]|0;D=k+(0-F<<1)|0;F=k+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=g+(i<<1)|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[k>>1]=d[k>>1]|4096;D=k+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[k>>1]=d[k>>1]|16384}}while(e>>>0>>0)}else{e=s;do{g=f[za>>2]|0;if(e>>>0>=g>>>0)break d;i=f[pa>>2]|0;E=e;e=e+1|0;k=(X(f[qa>>2]|0,e)|0)+p|0;l=i+(k+1<<1)|0;m=(f[xa>>2]|0)+((X(f[ya>>2]|0,E)|0)+p<<2)|0;o=f[va>>2]|0;F=d[l>>1]|0;F=(E|0)==(r|0)|(E|0)==(g+-1|0)?F&-1095:F;if((F&255|0)!=0&(F&20480|0)==0){if(rh(o)|0){E=rh(o)|0;f[m>>2]=E|0?u:v;F=f[qa>>2]|0;D=l+(0-F<<1)|0;F=l+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=i+(k<<1)|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[l>>1]=d[l>>1]|4096;D=l+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[l>>1]=d[l>>1]|16384}}while(e>>>0>>0)}while(0);p=p+1|0;g=f[ya>>2]|0}while(p>>>0>>0);e=f[za>>2]|0}if(t>>>0>=e>>>0){F=187;break c}}}if(!P){w=1<>1|w;e=f[za>>2]|0;if(!e){F=187;break c}x=0-w|0;g=f[ya>>2]|0;v=0;i=g;while(1){u=v;v=v+4|0;if(!g)g=0;else{s=(u|0)==-4;t=u|3;r=0;while(1){if(s)e=i;else{k=u;do{e=f[za>>2]|0;if(k>>>0>=e>>>0)break;l=f[pa>>2]|0;F=k;k=k+1|0;m=(X(f[qa>>2]|0,k)|0)+r|0;o=l+(m+1<<1)|0;p=(f[xa>>2]|0)+((X(f[ya>>2]|0,F)|0)+r<<2)|0;q=f[a>>2]|0;g=d[o>>1]|0;e=(F|0)==(t|0)|(F|0)==(e+-1|0)?g&-1095:g;g=e&255;if((g|0)!=0&(e&20480|0)==0){i=q+100|0;f[i>>2]=q+24+(h[20356+(g|Q)>>0]<<2);if(nh(q)|0){E=e>>>4&255;f[i>>2]=q+24+(h[21380+E>>0]<<2);F=nh(q)|0;E=F^h[21636+E>>0];f[p>>2]=E|0?x:w;F=f[qa>>2]|0;D=o+(0-F<<1)|0;F=o+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=l+(m<<1)|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[o>>1]=d[o>>1]|4096;D=o+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[o>>1]=d[o>>1]|16384}}while(k>>>0>>0);e=f[ya>>2]|0}r=r+1|0;if(r>>>0>=e>>>0)break;else i=e}i=e;g=e;e=f[za>>2]|0}if(v>>>0>=e>>>0){F=187;break c}}}g=f[xa>>2]|0;e=(f[pa>>2]|0)+2|0;v=1<>1|v;k=f[za>>2]|0;if(k>>>0>3){u=0-v|0;i=f[ya>>2]|0;m=0;l=i;do{if(!i)i=0;else{t=0;i=l;do{q=g+(t<<2)|0;k=f[qa>>2]|0;r=e+(t<<1)+(k<<1)|0;p=f[a>>2]|0;l=d[r>>1]|0;o=l&255;if((o|0)!=0&(l&20480|0)==0){i=p+100|0;f[i>>2]=p+24+(h[20356+(o|Q)>>0]<<2);if(!(nh(p)|0))k=f[qa>>2]|0;else{E=l>>>4&255;f[i>>2]=p+24+(h[21380+E>>0]<<2);k=nh(p)|0;E=k^h[21636+E>>0];f[q>>2]=E|0?u:v;k=f[qa>>2]|0;D=r+(0-k<<1)|0;F=r+(k<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=r+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[r>>1]=d[r>>1]|4096;D=r+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[r>>1]=d[r>>1]|16384;i=f[ya>>2]|0;p=f[a>>2]|0}q=q+(i<<2)|0;r=r+(k<<1)|0;l=d[r>>1]|0;o=l&255;if((o|0)!=0&(l&20480|0)==0){i=p+100|0;f[i>>2]=p+24+(h[20356+(o|Q)>>0]<<2);if(!(nh(p)|0))k=f[qa>>2]|0;else{E=l>>>4&255;f[i>>2]=p+24+(h[21380+E>>0]<<2);k=nh(p)|0;E=k^h[21636+E>>0];f[q>>2]=E|0?u:v;k=f[qa>>2]|0;D=r+(0-k<<1)|0;F=r+(k<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=r+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[r>>1]=d[r>>1]|4096;D=r+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[r>>1]=d[r>>1]|16384;i=f[ya>>2]|0;p=f[a>>2]|0}s=q+(i<<2)|0;r=r+(k<<1)|0;l=d[r>>1]|0;o=l&255;if((o|0)!=0&(l&20480|0)==0){i=p+100|0;f[i>>2]=p+24+(h[20356+(o|Q)>>0]<<2);if(!(nh(p)|0))k=f[qa>>2]|0;else{E=l>>>4&255;f[i>>2]=p+24+(h[21380+E>>0]<<2);k=nh(p)|0;E=k^h[21636+E>>0];f[s>>2]=E|0?u:v;k=f[qa>>2]|0;D=r+(0-k<<1)|0;F=r+(k<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=r+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[r>>1]=d[r>>1]|4096;D=r+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[r>>1]=d[r>>1]|16384;i=f[ya>>2]|0;q=f[a>>2]|0}else q=p;p=s+(i<<2)|0;k=r+(k<<1)|0;l=d[k>>1]|0;o=l&255;if((o|0)!=0&(l&20480|0)==0){i=q+100|0;f[i>>2]=q+24+(h[20356+(o|Q)>>0]<<2);if(nh(q)|0){E=l>>>4&255;f[i>>2]=q+24+(h[21380+E>>0]<<2);F=nh(q)|0;E=F^h[21636+E>>0];f[p>>2]=E|0?u:v;F=f[qa>>2]|0;D=k+(0-F<<1)|0;F=k+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=k+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[k>>1]=d[k>>1]|4096;D=k+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[k>>1]=d[k>>1]|16384;i=f[ya>>2]|0}t=t+1|0}while(t>>>0>>0);l=i;k=f[za>>2]|0}g=g+(i<<2<<2)|0;e=e+(f[qa>>2]<<2<<1)|0;m=m+4|0}while(m>>>0<(k&-4)>>>0);i=l}else{m=0;i=f[ya>>2]|0}if(!i){F=187;break c}u=0-v|0;t=0;do{if(m>>>0>>0){q=m;r=e+(t<<1)|0;s=g+(t<<2)|0;while(1){r=r+(f[qa>>2]<<1)|0;l=f[a>>2]|0;o=d[r>>1]|0;p=o&255;if((p|0)!=0&(o&20480|0)==0){i=l+100|0;f[i>>2]=l+24+(h[20356+(p|Q)>>0]<<2);if(nh(l)|0){E=o>>>4&255;f[i>>2]=l+24+(h[21380+E>>0]<<2);F=nh(l)|0;E=F^h[21636+E>>0];f[s>>2]=E|0?u:v;F=f[qa>>2]|0;D=r+(0-F<<1)|0;F=r+(F<<1)|0;C=D+-2|0;d[C>>1]=d[C>>1]|2;d[D>>1]=d[D>>1]|d[3160+(E<<1)>>1];D=D+2|0;d[D>>1]=d[D>>1]|4;D=r+-2|0;d[D>>1]=d[D>>1]|d[3160+(E+2<<1)>>1];d[r>>1]=d[r>>1]|4096;D=r+2|0;d[D>>1]=d[D>>1]|d[3160+(E+4<<1)>>1];D=F+-2|0;d[D>>1]=d[D>>1]|1;d[F>>1]=d[F>>1]|d[3160+(E+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8}d[r>>1]=d[r>>1]|16384;i=f[ya>>2]|0;k=f[za>>2]|0}q=q+1|0;if(q>>>0>=k>>>0)break;else s=s+(i<<2)|0}}t=t+1|0}while(t>>>0>>0);F=187;break}case 1:{if(J){p=1<>1;q=0-p|0;e=f[za>>2]|0;if(!e)break c;g=f[ya>>2]|0;o=0;i=g;while(1){m=o;o=o+4|0;do if(!g){k=i;g=0}else{if((m|0)==-4){k=i;g=i;break}else l=0;do{g=l;l=l+1|0;e=m;do{if(e>>>0>=(f[za>>2]|0)>>>0)break;k=e;e=e+1|0;i=(f[pa>>2]|0)+((X(f[qa>>2]|0,e)|0)+l<<1)|0;k=(f[xa>>2]|0)+((X(f[ya>>2]|0,k)|0)+g<<2)|0;if((d[i>>1]&20480)==4096){E=(rh(f[va>>2]|0)|0)!=0;E=E?p:q;F=f[k>>2]|0;f[k>>2]=((F|0)<0?0-E|0:E)+F;d[i>>1]=d[i>>1]|8192}}while(e>>>0>>0);e=f[ya>>2]|0}while(l>>>0>>0);k=e;g=e;e=f[za>>2]|0}while(0);if(o>>>0>=e>>>0){F=187;break c}else i=k}}if(!P){s=1<>1;t=0-s|0;e=f[za>>2]|0;if(!e){F=187;break c}g=f[ya>>2]|0;r=0;k=g;while(1){q=r;r=r+4|0;do if(!g){i=k;g=0}else{p=q|3;if((q|0)==-4){i=k;g=k;break}else o=0;do{i=o;o=o+1|0;g=q;do{e=f[za>>2]|0;if(g>>>0>=e>>>0)break;E=g;g=g+1|0;l=(f[pa>>2]|0)+((X(f[qa>>2]|0,g)|0)+o<<1)|0;m=(f[xa>>2]|0)+((X(f[ya>>2]|0,E)|0)+i<<2)|0;k=f[a>>2]|0;F=d[l>>1]|0;e=(E|0)==(p|0)|(E|0)==(e+-1|0)?F&-1095:F;if((e&20480|0)==4096){f[k+100>>2]=k+24+((e&8192|0?16:e&255|0?15:14)<<2);E=(nh(k)|0)!=0;E=E?s:t;F=f[m>>2]|0;f[m>>2]=((F|0)<0?0-E|0:E)+F;d[l>>1]=d[l>>1]|8192}}while(g>>>0>>0);e=f[ya>>2]|0}while(o>>>0>>0);i=e;g=e;e=f[za>>2]|0}while(0);if(r>>>0>=e>>>0){F=187;break c}else k=i}}g=f[xa>>2]|0;e=(f[pa>>2]|0)+2|0;t=1<>1;u=0-t|0;k=f[za>>2]|0;i=f[ya>>2]|0;if(k>>>0>3){m=0;l=i;do{if(!i)i=0;else{s=0;i=l;do{p=g+(s<<2)|0;o=f[qa>>2]|0;q=e+(s<<1)+(o<<1)|0;k=f[a>>2]|0;l=d[q>>1]|0;if((l&20480|0)==4096){f[k+100>>2]=k+24+((l&8192|0?16:l&255|0?15:14)<<2);i=(nh(k)|0)!=0;i=i?t:u;k=f[p>>2]|0;f[p>>2]=((k|0)<0?0-i|0:i)+k;d[q>>1]=d[q>>1]|8192;k=f[a>>2]|0;i=f[ya>>2]|0;o=f[qa>>2]|0}p=p+(i<<2)|0;q=q+(o<<1)|0;l=d[q>>1]|0;if((l&20480|0)==4096){f[k+100>>2]=k+24+((l&8192|0?16:l&255|0?15:14)<<2);i=(nh(k)|0)!=0;i=i?t:u;k=f[p>>2]|0;f[p>>2]=((k|0)<0?0-i|0:i)+k;d[q>>1]=d[q>>1]|8192;k=f[a>>2]|0;i=f[ya>>2]|0;o=f[qa>>2]|0}r=p+(i<<2)|0;q=q+(o<<1)|0;l=d[q>>1]|0;if((l&20480|0)==4096){f[k+100>>2]=k+24+((l&8192|0?16:l&255|0?15:14)<<2);i=(nh(k)|0)!=0;i=i?t:u;p=f[r>>2]|0;f[r>>2]=((p|0)<0?0-i|0:i)+p;d[q>>1]=d[q>>1]|8192;p=f[a>>2]|0;i=f[ya>>2]|0;k=f[qa>>2]|0}else{p=k;k=o}o=r+(i<<2)|0;k=q+(k<<1)|0;l=d[k>>1]|0;if((l&20480|0)==4096){f[p+100>>2]=p+24+((l&8192|0?16:l&255|0?15:14)<<2);F=(nh(p)|0)!=0;F=F?t:u;i=f[o>>2]|0;f[o>>2]=((i|0)<0?0-F|0:F)+i;d[k>>1]=d[k>>1]|8192;i=f[ya>>2]|0}s=s+1|0}while(s>>>0>>0);l=i;k=f[za>>2]|0}g=g+(i<<2<<2)|0;e=e+(f[qa>>2]<<2<<1)|0;m=m+4|0}while(m>>>0<(k&-4)>>>0);i=l}else m=0;if(!i){F=187;break c}else s=0;do{if(m>>>0>>0){p=m;q=e+(s<<1)|0;r=g+(s<<2)|0;while(1){q=q+(f[qa>>2]<<1)|0;l=f[a>>2]|0;o=d[q>>1]|0;if((o&20480|0)==4096){f[l+100>>2]=l+24+((o&8192|0?16:o&255|0?15:14)<<2);k=(nh(l)|0)!=0;k=k?t:u;i=f[r>>2]|0;f[r>>2]=((i|0)<0?0-k|0:k)+i;d[q>>1]=d[q>>1]|8192;i=f[ya>>2]|0;k=f[za>>2]|0}p=p+1|0;if(p>>>0>=k>>>0)break;else r=r+(i<<2)|0}}s=s+1|0}while(s>>>0>>0);F=187;break}case 2:{D=f[a>>2]|0;E=1<>1|E;do if(P){i=f[xa>>2]|0;g=(f[pa>>2]|0)+2|0;e=f[za>>2]|0;if(e>>>0>3){u=D+92|0;v=D+100|0;w=D+96|0;x=0-E|0;F=f[ya>>2]|0;k=g;m=0;l=F;g=F;while(1){if(!l)l=0;else{q=m|1;r=q+1|0;s=m|3;t=q+3|0;p=0;do{g=i+(p<<2)|0;l=k+(p<<1)|0;F=f[pa>>2]|0;e=f[qa>>2]|0;p=p+1|0;B=F+((X(e,q)|0)+p<<1)|0;A=F+((X(e,r)|0)+p<<1)|0;C=F+((X(e,s)|0)+p<<1)|0;F=F+((X(e,t)|0)+p<<1)|0;e:do if(!((d[A>>1]|d[B>>1]|d[C>>1]|d[F>>1])&20735)){f[v>>2]=u;if(!(nh(D)|0))break;f[v>>2]=w;o=(nh(D)|0)<<1;o=o|(nh(D)|0);if(o>>>0>=4)break;g=g+((X(f[ya>>2]|0,o)|0)<<2)|0;e=l+((X(f[qa>>2]|0,o)|0)<<1)|0;l=o;while(1){if(l>>>0>=(f[za>>2]|0)>>>0)break e;e=e+(f[qa>>2]<<1)|0;if((l|0)==(o|0)){F=f[a>>2]|0;C=(j[e>>1]|0)>>>4&255;f[F+100>>2]=F+24+(h[21380+C>>0]<<2);F=nh(F)|0;C=F^h[21636+C>>0];f[g>>2]=C|0?x:E;F=f[qa>>2]|0;B=e+(0-F<<1)|0;F=e+(F<<1)|0;A=B+-2|0;d[A>>1]=d[A>>1]|2;d[B>>1]=d[B>>1]|d[3160+(C<<1)>>1];B=B+2|0;d[B>>1]=d[B>>1]|4;B=e+-2|0;d[B>>1]=d[B>>1]|d[3160+(C+2<<1)>>1];d[e>>1]=d[e>>1]|4096;B=e+2|0;d[B>>1]=d[B>>1]|d[3160+(C+4<<1)>>1];B=F+-2|0;d[B>>1]=d[B>>1]|1;d[F>>1]=d[F>>1]|d[3160+(C+6<<1)>>1];F=F+2|0;d[F>>1]=d[F>>1]|8;d[e>>1]=d[e>>1]&-16385}else Sg(a,e,g,R,E);l=l+1|0;if(l>>>0>=4)break;else g=g+(f[ya>>2]<<2)|0}}else{C=l+(e<<1)|0;Sg(a,C,g,R,E);F=g+(f[ya>>2]<<2)|0;C=C+(f[qa>>2]<<1)|0;Sg(a,C,F,R,E);F=F+(f[ya>>2]<<2)|0;C=C+(f[qa>>2]<<1)|0;Sg(a,C,F,R,E);Sg(a,C+(f[qa>>2]<<1)|0,F+(f[ya>>2]<<2)|0,R,E)}while(0);g=f[ya>>2]|0}while(p>>>0>>0);l=g;e=f[za>>2]|0}i=i+(l<<2<<2)|0;k=k+(f[qa>>2]<<2<<1)|0;m=m+4|0;if(m>>>0>=(e&-4)>>>0){q=k;p=i;break}}}else{q=g;p=i;m=0;g=f[ya>>2]|0}if(!g)break;else o=0;do{if(m>>>0>>0){i=q+(o<<1)|0;k=p+(o<<2)|0;l=m;while(1){i=i+(f[qa>>2]<<1)|0;Sg(a,i,k,R,E);g=f[ya>>2]|0;l=l+1|0;e=f[za>>2]|0;if(l>>>0>=e>>>0)break;else k=k+(g<<2)|0}}o=o+1|0}while(o>>>0>>0)}else{e=f[za>>2]|0;if(!e)break;z=D+92|0;A=D+100|0;B=D+96|0;C=0-E|0;i=0;g=f[ya>>2]|0;do if(!g){i=i+4|0;g=0}else{u=i|3;v=i|1;w=v+1|0;x=v+3|0;y=i+4|0;t=0;while(1){do if(u>>>0>>0){e=f[pa>>2]|0;g=f[qa>>2]|0;k=t+1|0;s=e+((X(g,v)|0)+k<<1)|0;if(d[s>>1]&20735){e=0;s=0;F=152;break}s=e+((X(g,w)|0)+k<<1)|0;if(d[s>>1]&20735){e=0;s=0;F=152;break}s=e+((X(g,u)|0)+k<<1)|0;if(d[s>>1]&20735){e=0;s=0;F=152;break}s=e+((X(g,x)|0)+k<<1)|0;if(d[s>>1]&20665){e=0;s=0;F=152;break}f[A>>2]=z;if(!(nh(D)|0))break;f[A>>2]=B;e=(nh(D)|0)<<1;e=e|(nh(D)|0);s=1;F=152}else{e=0;s=0;F=152}while(0);f:do if((F|0)==152){F=0;l=e+i|0;if(l>>>0>>0)k=l;else break;do{e=f[za>>2]|0;if(k>>>0>=e>>>0)break f;m=f[pa>>2]|0;Ca=k;k=k+1|0;o=(X(f[qa>>2]|0,k)|0)+t|0;p=m+(o+1<<1)|0;q=(f[xa>>2]|0)+((X(f[ya>>2]|0,Ca)|0)+t<<2)|0;r=f[a>>2]|0;g=d[p>>1]|0;g=(Ca|0)==(u|0)|(Ca|0)==(e+-1|0)?g&-1095:g;do if(!(s&(Ca|0)==(l|0))){if(g&20480|0)break;e=r+100|0;f[e>>2]=r+24+(h[20356+(g&255|Q)>>0]<<2);if(nh(r)|0)F=158}else{e=r+100|0;F=158}while(0);if((F|0)==158){F=0;Ca=g>>>4&255;f[e>>2]=r+24+(h[21380+Ca>>0]<<2);r=nh(r)|0;r=r^h[21636+Ca>>0];f[q>>2]=r|0?C:E;Ca=f[qa>>2]|0;q=p+(0-Ca<<1)|0;Ca=p+(Ca<<1)|0;g=q+-2|0;d[g>>1]=d[g>>1]|2;d[q>>1]=d[q>>1]|d[3160+(r<<1)>>1];q=q+2|0;d[q>>1]=d[q>>1]|4;q=m+(o<<1)|0;d[q>>1]=d[q>>1]|d[3160+(r+2<<1)>>1];d[p>>1]=d[p>>1]|4096;q=p+2|0;d[q>>1]=d[q>>1]|d[3160+(r+4<<1)>>1];q=Ca+-2|0;d[q>>1]=d[q>>1]|1;d[Ca>>1]=d[Ca>>1]|d[3160+(r+6<<1)>>1];Ca=Ca+2|0;d[Ca>>1]=d[Ca>>1]|8}d[p>>1]=d[p>>1]&-16385}while(k>>>0>>0)}while(0);t=t+1|0;g=f[ya>>2]|0;e=f[za>>2]|0;if(t>>>0>=g>>>0){i=y;break}}}while(i>>>0>>0)}while(0);if(L){F=187;break c}f[D+100>>2]=D+96;nh(D)|0;nh(D)|0;nh(D)|0;nh(D)|0;F=187;break}default:F=187}while(0);do if((F|0)==187){F=0;if(I)break;hh(T);ih(T,18,0,46);ih(T,17,0,3);ih(T,0,0,4)}while(0);b=b+1|0;Ca=(b|0)==3;c=c+(Ca<<31>>31)|0;b=Ca?0:b;G=G+1|0;if(!((c|0)>0?G>>>0<(f[H>>2]|0)>>>0:0))break b}}}while(0);K=K+1|0}while(K>>>0<(f[W>>2]|0)>>>0)}c=(f[U>>2]|0)-(f[ea>>2]|0)|0;b=(f[Y>>2]|0)-(f[fa>>2]|0)|0;e=f[da>>2]|0;if(e&1){Ca=f[sa>>2]|0;c=(f[Ca+(ka*136|0)+8>>2]|0)+c-(f[Ca+(ka*136|0)>>2]|0)|0}if(e&2){Ca=f[sa>>2]|0;b=(f[Ca+(ka*136|0)+12>>2]|0)+b-(f[Ca+(ka*136|0)+4>>2]|0)|0}o=f[xa>>2]|0;p=f[ya>>2]|0;q=f[za>>2]|0;e=f[ta>>2]|0;if(e|0?(wa=1<>2]|0;m=(l|0)>-1?l:0-l|0;if((m|0)>=(wa|0)){Ca=m>>f[ta>>2];f[k>>2]=(l|0)<0?0-Ca|0:Ca}g=g+1|0}while((g|0)!=(p|0));e=e+1|0}while((e|0)!=(q|0))}k=(f[oa>>2]|0)+((X(b,Aa)|0)+c<<2)|0;c=(q|0)==0|(p|0)==0;if((f[ra>>2]|0)==1){if(!c){c=0;do{e=X(c,p)|0;g=X(c,Aa)|0;b=0;do{f[k+(b+g<<2)>>2]=(f[o+(b+e<<2)>>2]|0)/2|0;b=b+1|0}while((b|0)!=(p|0));c=c+1|0}while((c|0)!=(q|0))}}else if(!c){b=o;g=0;while(1){c=k;e=b;i=0;while(1){n[c>>2]=+n[ga>>2]*+(f[e>>2]|0);i=i+1|0;if((i|0)==(p|0))break;else{c=c+4|0;e=e+4|0}}g=g+1|0;if((g|0)==(q|0))break;else{k=k+(Aa<<2)|0;b=b+(p<<2)|0}}}Z=Z+1|0}while(Z>>>0<(X(f[aa>>2]|0,f[$>>2]|0)|0)>>>0);e=f[ja>>2]|0;c=f[ia>>2]|0}ba=ba+1|0}while(ba>>>0<(X(e,c)|0)>>>0);b=f[ma>>2]|0}ha=ha+1|0}while(ha>>>0>>0);c=f[Ba>>2]|0}na=na+1|0;if(na>>>0>=c>>>0){c=1;F=219;break}}if((F|0)==219)return c|0;return 0}function Rg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;h=X(c,b)|0;if(!(f[a+40>>2]|0)){e=a+24|0;d=a+8|0;do if(h>>>0>(f[e>>2]|0)>>>0){Kc(f[d>>2]|0);g=Jc(h<<2)|0;f[d>>2]=g;if(!g){c=0;return c|0}else{f[e>>2]=h;e=g;d=g;break}}else{d=f[d>>2]|0;e=d}while(0);if(e|0)ij(d|0,0,h<<2|0)|0}g=b+2|0;f[a+32>>2]=g;g=X(c+2|0,g)|0;h=a+28|0;i=a+12|0;d=f[i>>2]|0;do if(g>>>0>(f[h>>2]|0)>>>0){Kc(d);e=g<<1;d=Jc(e)|0;f[i>>2]=d;if(!d){c=0;return c|0}else{f[h>>2]=g;break}}else e=g<<1;while(0);ij(d|0,0,e|0)|0;f[a+16>>2]=b;f[a+20>>2]=c;c=1;return c|0}function Sg(a,b,c,e,g){a=a|0;b=b|0;c=c|0;e=e|0;g=g|0;var i=0,j=0,k=0;j=f[a>>2]|0;k=d[b>>1]|0;if(k&20480|0){k=d[b>>1]|0;k=k&-16385;d[b>>1]=k;return}i=j+100|0;f[i>>2]=j+24+(h[20356+(k&255|e<<8)>>0]<<2);if(!(nh(j)|0)){k=d[b>>1]|0;k=k&-16385;d[b>>1]=k;return}k=k>>>4&255;f[i>>2]=j+24+(h[21380+k>>0]<<2);j=nh(j)|0;j=j^h[21636+k>>0];f[c>>2]=j|0?0-g|0:g;k=f[a+32>>2]|0;g=b+(0-k<<1)|0;k=b+(k<<1)|0;e=g+-2|0;d[e>>1]=d[e>>1]|2;d[g>>1]=d[g>>1]|d[3160+(j<<1)>>1];g=g+2|0;d[g>>1]=d[g>>1]|4;g=b+-2|0;d[g>>1]=d[g>>1]|d[3160+(j+2<<1)>>1];d[b>>1]=d[b>>1]|4096;g=b+2|0;d[g>>1]=d[g>>1]|d[3160+(j+4<<1)>>1];g=k+-2|0;d[g>>1]=d[g>>1]|1;d[k>>1]=d[k>>1]|d[3160+(j+6<<1)>>1];k=k+2|0;d[k>>1]=d[k>>1]|8;k=d[b>>1]|0;k=k&-16385;d[b>>1]=k;return}function Tg(a,c,e,g,i){a=a|0;c=c|0;e=e|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,o=0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0;Za=c+32|0;p[Za>>3]=0.0;_a=c+16|0;j=f[_a>>2]|0;if(!j){_a=1;return _a|0}Ya=c+20|0;Qa=e+5584|0;Ra=a+16|0;Sa=a+20|0;Ta=a+8|0;Ua=a+36|0;Va=(g|0)!=0;Wa=a+12|0;Xa=a+32|0;Pa=0;c=j;a:while(1){e=f[Ya>>2]|0;j=f[Qa>>2]|0;Na=(f[e+(Pa*52|0)+8>>2]|0)-(f[e+(Pa*52|0)>>2]|0)|0;Oa=e+(Pa*52|0)+16|0;k=f[Oa>>2]|0;if(k){Ma=e+(Pa*52|0)+24|0;Ka=e+(Pa*52|0)+32|0;La=j+(Pa*1080|0)+20|0;Ha=j+(Pa*1080|0)+16|0;Ja=Va&Pa>>>0>>0;Ia=g+(Pa<<3)|0;Ga=0;c=k;do{Da=f[Ma>>2]|0;Ea=Da+(Ga*136|0)+24|0;e=f[Ea>>2]|0;if(e){za=Da+(Ga*136|0)+16|0;Aa=Da+(Ga*136|0)+20|0;Ba=~Ga;Ca=Ga+-1|0;ya=0;j=f[Aa>>2]|0;c=f[za>>2]|0;do{xa=Da+(Ga*136|0)+28+(ya*36|0)+32|0;if(X(j,c)|0){ra=67108864/(~~+J(+(+n[xa>>2]*8192.0))|0)|0;sa=Da+(Ga*136|0)+28+(ya*36|0)+20|0;ta=Da+(Ga*136|0)+28+(ya*36|0)|0;ua=Da+(Ga*136|0)+28+(ya*36|0)+4|0;va=Da+(Ga*136|0)+28+(ya*36|0)+16|0;wa=((ra|0)<0)<<31>>31;qa=0;do{e=f[sa>>2]|0;oa=e+(qa*40|0)+16|0;pa=e+(qa*40|0)+20|0;if(X(f[pa>>2]|0,f[oa>>2]|0)|0){na=e+(qa*40|0)+24|0;ma=0;do{la=f[na>>2]|0;k=f[la+(ma*52|0)+12>>2]|0;c=k-(f[ta>>2]|0)|0;l=f[la+(ma*52|0)+16>>2]|0;e=l-(f[ua>>2]|0)|0;j=f[va>>2]|0;if(j&1){ka=f[Ma>>2]|0;c=(f[ka+(Ca*136|0)+8>>2]|0)+c-(f[ka+(Ca*136|0)>>2]|0)|0}if(j&2){ka=f[Ma>>2]|0;e=(f[ka+(Ca*136|0)+12>>2]|0)+e-(f[ka+(Ca*136|0)+4>>2]|0)|0}if(!(Rg(a,(f[la+(ma*52|0)+20>>2]|0)-k|0,(f[la+(ma*52|0)+24>>2]|0)-l|0)|0)){c=0;Fa=163;break a}l=f[Ra>>2]|0;m=f[Sa>>2]|0;s=(f[Ka>>2]|0)+((X(e,Na)|0)+c<<2)|0;f[Ta>>2]=s;f[Ua>>2]=Na;c=f[La>>2]|0;e=(m|0)!=0;do if((c|0)==1)if(e){if(!l){Fa=27;break}else{c=0;e=0}while(1){j=0;k=c;while(1){Fa=s+(k<<2)|0;f[Fa>>2]=f[Fa>>2]<<6;j=j+1|0;if((j|0)==(l|0))break;else k=k+1|0}e=e+1|0;if((e|0)==(m|0)){Fa=27;break}else c=Na+c|0}}else c=1;else if(e){if(!l){Fa=27;break}else{c=0;j=0}while(1){e=0;k=j;while(1){Fa=s+(k<<2)|0;ka=f[Fa>>2]|0;ka=Yi(ka|0,((ka|0)<0)<<31>>31|0,ra|0,wa|0)|0;ka=Zi(ka|0,I|0,4096,0)|0;ka=ej(ka|0,I|0,18)|0;f[Fa>>2]=ka;e=e+1|0;if((e|0)==(l|0))break;else k=k+1|0}c=c+1|0;if((c|0)==(m|0)){Fa=27;break}else j=Na+j|0}}while(0);if((Fa|0)==27){Fa=0;c=f[La>>2]|0}ga=f[va>>2]|0;ha=(f[Oa>>2]|0)+Ba|0;ia=+n[xa>>2];ja=f[Ha>>2]|0;ka=f[a>>2]|0;m=f[Ra>>2]|0;do if(!m)e=0;else{o=f[Sa>>2]|0;if(!o){e=0;break}l=f[Ua>>2]|0;k=0;j=0;do{e=0;do{fa=s+((X(e,l)|0)+k<<2)|0;fa=f[fa>>2]|0;fa=(fa|0)>-1?fa:0-fa|0;j=(j|0)>(fa|0)?j:fa;e=e+1|0}while((e|0)!=(o|0));k=k+1|0}while((k|0)!=(m|0));if(!j){e=0;break}if((j|0)>1){e=0;while(1){e=e+1|0;if(j>>>0>3)j=j>>>1;else break}}else e=0;e=e+-5|0}while(0);ea=la+(ma*52|0)+28|0;f[ea>>2]=e;e=e+-1|0;hh(ka);ih(ka,18,0,46);ih(ka,17,0,3);ih(ka,0,0,4);fa=la+(ma*52|0)|0;bh(ka,f[fa>>2]|0);b:do if((e|0)>-1){ca=la+(ma*52|0)+8|0;U=ja&1;da=(U|0)!=0;V=(c|0)==1;W=(ja&4|0)==0;U=(U|0)==0;Y=(ja&2|0)==0;$=ja&8;Z=($|0)!=0;_=ga<<8;$=($|0)==0;aa=(ja&32|0)==0;ba=$^1;c=0;S=2;j=0;T=0.0;while(1){R=f[ca>>2]|0;G=da&(S>>>0<2?(e|0)<((f[ea>>2]|0)+-4|0):0);c:do switch(S|0){case 0:{E=1<>2]|0;if(!k){j=0;break c}F=(e|0)==0?3176:3432;m=f[Ra>>2]|0;D=0;j=0;l=m;do{C=D;D=D+4|0;if(!l)l=0;else{A=(C|0)==-4;B=C|3;z=0;while(1){if(A)l=m;else{y=C;do{k=f[Sa>>2]|0;if(y>>>0>=k>>>0)break;u=f[Wa>>2]|0;Q=y;y=y+1|0;v=(X(f[Xa>>2]|0,y)|0)+z|0;x=u+(v+1<<1)|0;o=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,Q)|0)+z<<2)|0;w=f[a>>2]|0;s=d[x>>1]|0;s=Z&((Q|0)==(B|0)|(Q|0)==(k+-1|0))?s&-1095:s;k=s&255;if((k|0)!=0&(s&20480|0)==0){l=f[o>>2]|0;l=(((l|0)<0?0-l|0:l)&E|0)!=0;m=l&1;t=w+100|0;f[t>>2]=w+24+(h[20356+(k|_)>>0]<<2);if(G)fh(w,m);else ch(w,m);if(l){k=f[o>>2]|0;l=k>>>31;j=j+(d[F+((((k|0)<0?0-k|0:k)>>>e&127)<<1)>>1]|0)|0;k=s>>>4&255;f[t>>2]=w+24+(h[21380+k>>0]<<2);if(G)fh(w,l);else ch(w,l^h[21636+k>>0]);Q=f[Xa>>2]|0;P=x+(0-Q<<1)|0;Q=x+(Q<<1)|0;O=P+-2|0;d[O>>1]=d[O>>1]|2;d[P>>1]=d[P>>1]|d[3160+(l<<1)>>1];P=P+2|0;d[P>>1]=d[P>>1]|4;P=u+(v<<1)|0;d[P>>1]=d[P>>1]|d[3160+((l|2)<<1)>>1];d[x>>1]=d[x>>1]|4096;P=x+2|0;d[P>>1]=d[P>>1]|d[3160+((l|4)<<1)>>1];P=Q+-2|0;d[P>>1]=d[P>>1]|1;d[Q>>1]=d[Q>>1]|d[3160+((l|6)<<1)>>1];Q=Q+2|0;d[Q>>1]=d[Q>>1]|8}d[x>>1]=d[x>>1]|16384}}while(y>>>0>>0);l=f[Ra>>2]|0}z=z+1|0;if(z>>>0>=l>>>0)break;else m=l}k=f[Sa>>2]|0;m=l}}while(D>>>0>>0);break}case 1:{z=1<>2]|0;if(!k){j=0;break c}A=(e|0)==0?3688:3944;y=0;j=0;l=f[Ra>>2]|0;do{x=y;y=y+4|0;if(!l)l=0;else{v=(x|0)==-4;w=x|3;u=0;do{t=u;u=u+1|0;d:do if(!v)if($)if(G){s=x;do{if(s>>>0>=(f[Sa>>2]|0)>>>0)break d;k=s;s=s+1|0;m=(f[Wa>>2]|0)+((X(f[Xa>>2]|0,s)|0)+u<<1)|0;l=f[a>>2]|0;o=d[m>>1]|0;if((o&20480|0)==4096){Q=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,k)|0)+t<<2)|0;Q=f[Q>>2]|0;Q=(Q|0)<0?0-Q|0:Q;j=j+(d[A+((Q>>>e&127)<<1)>>1]|0)|0;f[l+100>>2]=l+24+((o&8192|0?16:o&255|0?15:14)<<2);fh(l,(Q&z|0)!=0&1);d[m>>1]=d[m>>1]|8192}}while(s>>>0>>0)}else{s=x;do{if(s>>>0>=(f[Sa>>2]|0)>>>0)break d;k=s;s=s+1|0;m=(f[Wa>>2]|0)+((X(f[Xa>>2]|0,s)|0)+u<<1)|0;l=f[a>>2]|0;o=d[m>>1]|0;if((o&20480|0)==4096){Q=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,k)|0)+t<<2)|0;Q=f[Q>>2]|0;Q=(Q|0)<0?0-Q|0:Q;j=j+(d[A+((Q>>>e&127)<<1)>>1]|0)|0;f[l+100>>2]=l+24+((o&8192|0?16:o&255|0?15:14)<<2);ch(l,(Q&z|0)!=0&1);d[m>>1]=d[m>>1]|8192}}while(s>>>0>>0)}else if(G){s=x;do{k=f[Sa>>2]|0;if(s>>>0>=k>>>0)break d;l=s;s=s+1|0;o=(f[Wa>>2]|0)+((X(f[Xa>>2]|0,s)|0)+u<<1)|0;m=f[a>>2]|0;Q=d[o>>1]|0;k=(l|0)==(w|0)|(l|0)==(k+-1|0)?Q&-1095:Q;if((k&20480|0)==4096){Q=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,l)|0)+t<<2)|0;Q=f[Q>>2]|0;Q=(Q|0)<0?0-Q|0:Q;j=j+(d[A+((Q>>>e&127)<<1)>>1]|0)|0;f[m+100>>2]=m+24+((k&8192|0?16:k&255|0?15:14)<<2);fh(m,(Q&z|0)!=0&1);d[o>>1]=d[o>>1]|8192}}while(s>>>0>>0)}else{s=x;do{k=f[Sa>>2]|0;if(s>>>0>=k>>>0)break d;l=s;s=s+1|0;o=(f[Wa>>2]|0)+((X(f[Xa>>2]|0,s)|0)+u<<1)|0;m=f[a>>2]|0;Q=d[o>>1]|0;k=(l|0)==(w|0)|(l|0)==(k+-1|0)?Q&-1095:Q;if((k&20480|0)==4096){Q=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,l)|0)+t<<2)|0;Q=f[Q>>2]|0;Q=(Q|0)<0?0-Q|0:Q;j=j+(d[A+((Q>>>e&127)<<1)>>1]|0)|0;f[m+100>>2]=m+24+((k&8192|0?16:k&255|0?15:14)<<2);ch(m,(Q&z|0)!=0&1);d[o>>1]=d[o>>1]|8192}}while(s>>>0>>0)}while(0);l=f[Ra>>2]|0}while(u>>>0>>0);k=f[Sa>>2]|0}}while(y>>>0>>0);break}case 2:{L=f[a>>2]|0;M=1<>2]|0;if(!k)j=0;else{N=L+92|0;O=L+100|0;P=L+96|0;Q=(e|0)==0?3176:3432;m=0;j=0;l=f[Ra>>2]|0;do if(!l){m=m+4|0;l=0}else{B=m|3;C=m|1;D=C+1|0;E=C+3|0;K=m+4|0;F=m+1|0;G=m+2|0;H=m+3|0;A=0;while(1){do if(B>>>0>>0){k=f[Wa>>2]|0;l=f[Xa>>2]|0;o=A+1|0;s=k+((X(l,C)|0)+o<<1)|0;s=d[s>>1]|0;if($){x=k+((X(l,D)|0)+o<<1)|0;y=k+((X(l,B)|0)+o<<1)|0;z=k+((X(l,E)|0)+o<<1)|0;if((d[x>>1]|s|d[y>>1]|d[z>>1])&20735){z=0;k=0;Fa=105;break}}else{if(s&20735){z=0;k=0;Fa=105;break}z=k+((X(l,D)|0)+o<<1)|0;if(d[z>>1]&20735){z=0;k=0;Fa=105;break}z=k+((X(l,B)|0)+o<<1)|0;if(d[z>>1]&20735){z=0;k=0;Fa=105;break}z=k+((X(l,E)|0)+o<<1)|0;if(d[z>>1]&20665){z=0;k=0;Fa=105;break}}k=f[Ta>>2]|0;l=f[Ua>>2]|0;z=k+((X(l,m)|0)+A<<2)|0;z=f[z>>2]|0;do if(!(((z|0)<0?0-z|0:z)&M)){z=k+((X(l,F)|0)+A<<2)|0;z=f[z>>2]|0;if(((z|0)<0?0-z|0:z)&M|0){k=1;break}z=k+((X(l,G)|0)+A<<2)|0;z=f[z>>2]|0;if(((z|0)<0?0-z|0:z)&M|0){k=2;break}k=k+((X(l,H)|0)+A<<2)|0;k=f[k>>2]|0;k=(((k|0)<0?0-k|0:k)&M|0)==0?4:3}else k=0;while(0);f[O>>2]=N;ch(L,(k|0)!=4&1);if((k|0)==4)break;f[O>>2]=P;ch(L,k>>>1);ch(L,k&1);z=1;Fa=105}else{z=0;k=0;Fa=105}while(0);e:do if((Fa|0)==105){Fa=0;y=k+m|0;if(y>>>0>>0)x=y;else break;do{k=f[Sa>>2]|0;if(x>>>0>=k>>>0)break e;s=f[Wa>>2]|0;$a=x;x=x+1|0;t=(X(f[Xa>>2]|0,x)|0)+A|0;w=s+(t+1<<1)|0;u=(f[Ta>>2]|0)+((X(f[Ua>>2]|0,$a)|0)+A<<2)|0;v=f[a>>2]|0;l=d[w>>1]|0;o=(($a|0)==(B|0)|($a|0)==(k+-1|0))&ba?l&-1095:l;do if(!(z&($a|0)==(y|0))){if(l&20480|0)break;k=v+100|0;f[k>>2]=v+24+(h[20356+(o&255|_)>>0]<<2);$a=f[u>>2]|0;$a=((($a|0)<0?0-$a|0:$a)&M|0)!=0;ch(v,$a&1);if($a)Fa=111}else{k=v+100|0;Fa=111}while(0);if((Fa|0)==111){Fa=0;u=f[u>>2]|0;j=j+(d[Q+((((u|0)<0?0-u|0:u)>>>e&127)<<1)>>1]|0)|0;$a=o>>>4&255;f[k>>2]=v+24+(h[21380+$a>>0]<<2);u=u>>>31;ch(v,u^h[21636+$a>>0]);$a=f[Xa>>2]|0;v=w+(0-$a<<1)|0;$a=w+($a<<1)|0;o=v+-2|0;d[o>>1]=d[o>>1]|2;d[v>>1]=d[v>>1]|d[3160+(u<<1)>>1];v=v+2|0;d[v>>1]=d[v>>1]|4;v=s+(t<<1)|0;d[v>>1]=d[v>>1]|d[3160+((u|2)<<1)>>1];d[w>>1]=d[w>>1]|4096;v=w+2|0;d[v>>1]=d[v>>1]|d[3160+((u|4)<<1)>>1];v=$a+-2|0;d[v>>1]=d[v>>1]|1;d[$a>>1]=d[$a>>1]|d[3160+((u|6)<<1)>>1];$a=$a+2|0;d[$a>>1]=d[$a>>1]|8}d[w>>1]=d[w>>1]&-16385}while(x>>>0>>0)}while(0);A=A+1|0;l=f[Ra>>2]|0;k=f[Sa>>2]|0;if(A>>>0>=l>>>0){m=K;break}}}while(m>>>0>>0)}if(aa)break c;lh(ka);break}default:{}}while(0);if(Ja)q=+p[Ia>>3];else q=1.0;if(V)r=+Dg(ha,ga);else r=+Hg(ha,ga);r=q*r*ia*+(1<>3]=+p[Za>>3]+r;do if(W)Fa=127;else{if((e|0)<1&(S|0)==2){Fa=127;break}dh(ka);k=R+(c*24|0)+20|0;l=b[k>>0]|1;b[k>>0]=l;k=1}while(0);do if((Fa|0)==127){k=(f[ea>>2]|0)+-4|0;if((S|0)!=0&(e|0)<(k|0))if(U)Fa=131;else Fa=130;else if(U|((S|0)!=2|(e|0)!=(k|0)))Fa=131;else Fa=130;if((Fa|0)==130){Fa=0;dh(ka);k=R+(c*24|0)+20|0;l=b[k>>0]|1;b[k>>0]=l;k=1;break}else if((Fa|0)==131){Fa=0;k=R+(c*24|0)+20|0;l=b[k>>0]&-2;b[k>>0]=l;k=3;break}}while(0);Q=S+1|0;$a=(Q|0)==3;S=$a?0:Q;e=e+($a<<31>>31)|0;do if((e|0)>0&(l&1)!=0)if(da&(S>>>0<2?(e|0)<((f[ea>>2]|0)+-4|0):0)){eh(ka);break}else{jh(ka);break}while(0);p[R+(c*24|0)+8>>3]=T;$a=(ah(ka)|0)+k|0;f[R+(c*24|0)>>2]=$a;if(!Y)gh(ka);c=c+1|0;if((e|0)<=-1)break b}}else c=0;while(0);do if(!(ja&16)){if(ja&1|0)break;dh(ka)}else kh(ka);while(0);o=la+(ma*52|0)+48|0;f[o>>2]=c;if(c|0){l=la+(ma*52|0)+8|0;k=0;do{m=f[l>>2]|0;e=m+(k*24|0)|0;$a=f[e>>2]|0;if($a>>>0>(ah(ka)|0)>>>0){c=ah(ka)|0;f[e>>2]=c}else c=f[e>>2]|0;do if(c>>>0>1){j=c+-1|0;if((b[(f[fa>>2]|0)+j>>0]|0)!=-1)break;f[e>>2]=j;c=j}while(0);if(!k)e=0;else e=f[(f[l>>2]|0)+((k+-1|0)*24|0)>>2]|0;f[m+(k*24|0)+16>>2]=c-e;k=k+1|0}while(k>>>0<(f[o>>2]|0)>>>0)}ma=ma+1|0}while(ma>>>0<(X(f[pa>>2]|0,f[oa>>2]|0)|0)>>>0);j=f[Aa>>2]|0;c=f[za>>2]|0}qa=qa+1|0}while(qa>>>0<(X(j,c)|0)>>>0);e=f[Ea>>2]|0}ya=ya+1|0}while(ya>>>0>>0);c=f[Oa>>2]|0}Ga=Ga+1|0}while(Ga>>>0>>0);c=f[_a>>2]|0}Pa=Pa+1|0;if(Pa>>>0>=c>>>0){c=1;Fa=163;break}}if((Fa|0)==163)return c|0;return 0}function Ug(a,b,c,e,g,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;e=e|0;g=g|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+16|0;E=G;f[E>>2]=0;p=f[a>>2]|0;z=f[a+4>>2]|0;a=f[z+76>>2]|0;C=a+(b*5640|0)|0;q=(d[z>>1]|0)==4?2:1;r=z+80|0;if(!(f[r>>2]|0))s=1;else s=f[p+16>>2]|0;F=(f[a+(b*5640|0)+420>>2]|0)+1|0;D=Ff(p,z,b,o)|0;if(!D){i=0;u=G;return i|0}f[i>>2]=0;a:do if(!o){if(s|0){o=0;b:while(1){a=0;l=0;n=D;while(1){Hf(D,z,b,l,o,m,0);if((f[n+80>>2]|0)==-1){g=9;break b}p=n+36|0;c:while(1){do if(!(Kf(n)|0))break c;while((f[p>>2]|0)>>>0>=e>>>0);f[E>>2]=0;if(!(Vg(b,c,C,n,g,E,j,k)|0)){g=13;break b}B=f[E>>2]|0;f[i>>2]=(f[i>>2]|0)+B;a=B+a|0;j=j-B|0;g=g+B|0}B=f[r>>2]|0;if((B|0)!=0&a>>>0>B>>>0){g=17;break b}l=l+1|0;if(l>>>0>=q>>>0)break;else n=n+232|0}o=o+1|0;if(o>>>0>=s>>>0)break a}if((g|0)==9){Ef(D,F);i=0;u=G;return i|0}else if((g|0)==13){Ef(D,F);i=0;u=G;return i|0}else if((g|0)==17){Ef(D,F);i=0;u=G;return i|0}}}else{Hf(D,z,b,n,l,m,o);y=D+(n*232|0)|0;if((f[D+(n*232|0)+80>>2]|0)==-1){Ef(D,F);i=0;u=G;return i|0}w=D+(n*232|0)+36|0;x=c+840|0;m=k+12|0;t=k+8|0;v=k+88|0;s=z+93|0;r=a+(b*5640|0)+5636|0;d:do if(!k)while(1){do if(!(Kf(y)|0))break a;while((f[w>>2]|0)>>>0>=e>>>0);f[E>>2]=0;if(!(Vg(b,c,C,y,g,E,j,0)|0))break d;k=f[E>>2]|0;f[i>>2]=(f[i>>2]|0)+k;f[x>>2]=(f[x>>2]|0)+1;j=j-k|0;g=g+k|0}else while(1){do if(!(Kf(y)|0))break a;while((f[w>>2]|0)>>>0>=e>>>0);f[E>>2]=0;if(!(Vg(b,c,C,y,g,E,j,k)|0))break d;q=f[E>>2]|0;g=g+q|0;j=j-q|0;f[i>>2]=(f[i>>2]|0)+q;if(!(f[m>>2]|0))a=f[t>>2]|0;else{p=f[v>>2]|0;n=f[p+(b*592|0)+548>>2]|0;a=f[t>>2]|0;l=n+(a<<5)|0;do if(!a){o=(f[p+(b*592|0)+12>>2]|0)+1|0;p=o;o=((o|0)<0)<<31>>31}else{if(((h[r>>0]|0)>>>2|(h[s>>0]|0)>>>3)&1?(B=l,A=f[B>>2]|0,B=f[B+4>>2]|0,!((A|0)==0&(B|0)==0)):0){p=A;o=B;break}p=n+(a+-1<<5)+16|0;p=Zi(f[p>>2]|0,f[p+4>>2]|0,1,0)|0;o=I}while(0);f[l>>2]=p;f[l+4>>2]=o;o=Zi(p|0,o|0,-1,-1)|0;l=I;q=Zi(o|0,l|0,q|0,0)|0;z=n+(a<<5)+16|0;f[z>>2]=q;f[z+4>>2]=I;z=n+(a<<5)+8|0;q=z;q=Zi(o|0,l|0,f[q>>2]|0,f[q+4>>2]|0)|0;f[z>>2]=q;f[z+4>>2]=I}f[t>>2]=a+1;f[x>>2]=(f[x>>2]|0)+1}while(0);Ef(D,F);i=0;u=G;return i|0}while(0);Ef(D,F);i=1;u=G;return i|0}function Vg(a,c,d,e,g,h,i,j){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0.0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;t=f[e+28>>2]|0;J=f[e+32>>2]|0;K=f[e+36>>2]|0;s=f[(f[c+20>>2]|0)+((f[e+24>>2]|0)*52|0)+24>>2]|0;if(!(f[d>>2]&2))G=g;else{b[g>>0]=-1;b[g+1>>0]=-111;b[g+2>>0]=0;b[g+3>>0]=4;G=c+840|0;b[g+4>>0]=(f[G>>2]|0)>>>8;b[g+5>>0]=f[G>>2];i=i+-6|0;G=g+6|0}if((K|0)==0?(r=s+(t*136|0)+24|0,f[r>>2]|0):0){m=0;n=s+(t*136|0)+28|0;while(1){e=f[n+20>>2]|0;cg(f[e+(J*40|0)+32>>2]|0);o=e+(J*40|0)+36|0;cg(f[o>>2]|0);q=X(f[e+(J*40|0)+20>>2]|0,f[e+(J*40|0)+16>>2]|0)|0;if(q|0){c=e+(J*40|0)+24|0;l=n+28|0;e=0;do{I=f[c>>2]|0;f[I+(e*52|0)+40>>2]=0;fg(f[o>>2]|0,e,(f[l>>2]|0)-(f[I+(e*52|0)+28>>2]|0)|0);e=e+1|0}while((e|0)!=(q|0))}m=m+1|0;if(m>>>0>=(f[r>>2]|0)>>>0)break;else n=n+36|0}}F=og()|0;if(!F){h=0;return h|0}rg(F,G,i);tg(F,1,1);H=s+(t*136|0)+28|0;I=s+(t*136|0)+24|0;if(f[I>>2]|0){D=K+1|0;B=0;C=H;while(1){n=f[C+20>>2]|0;E=X(f[n+(J*40|0)+20>>2]|0,f[n+(J*40|0)+16>>2]|0)|0;o=n+(J*40|0)+24|0;l=(E|0)==0;if(!l){m=n+(J*40|0)+32|0;e=f[o>>2]|0;c=0;while(1){if((f[e+40>>2]|0)==0?f[(f[e+4>>2]|0)+(K*24|0)>>2]|0:0)fg(f[m>>2]|0,c,K);c=c+1|0;if((c|0)==(E|0))break;else e=e+52|0}if(!l){A=n+(J*40|0)+32|0;z=n+(J*40|0)+36|0;w=f[o>>2]|0;x=0;while(1){e=(f[w+4>>2]|0)+(K*24|0)|0;y=w+40|0;if(!(f[y>>2]|0))gg(F,f[A>>2]|0,x,D);else tg(F,(f[e>>2]|0)!=0&1,1);c=f[e>>2]|0;if(c|0){if(!(f[y>>2]|0)){f[w+32>>2]=3;gg(F,f[z>>2]|0,x,999);c=f[e>>2]|0}a:do switch(c|0){case 1:{tg(F,0,1);break}case 2:{tg(F,2,2);break}default:{if(c>>>0<6){tg(F,c+-3|12,4);break a}if(c>>>0<37){tg(F,c+-6|480,9);break a}if(c>>>0<165)tg(F,c+-37|65408,16)}}while(0);m=f[y>>2]|0;c=f[e>>2]|0;v=c+m|0;u=w+8|0;if(m>>>0>>0){t=w+32|0;s=m+-1+c|0;r=m;l=0;c=0;n=0;q=(f[u>>2]|0)+(m*24|0)|0;while(1){m=c+1|0;l=(f[q+16>>2]|0)+l|0;if((b[q+20>>0]&1)!=0|(r|0)==(s|0)){if((l|0)>1){c=0;while(1){c=c+1|0;if(l>>>0>3)l=l>>>1;else{l=c;break}}}else l=0;o=f[t>>2]|0;if((m|0)>1){c=0;while(1){c=c+1|0;if(m>>>0>3)m=m>>>1;else break}}else c=0;o=l+1-o-c|0;l=0;m=0;n=(n|0)>(o|0)?n:o}r=r+1|0;if((r|0)==(v|0))break;else{c=m;q=q+24|0}}if((n|0)>0){c=n;while(1){tg(F,1,1);if((c|0)>1)c=c+-1|0;else{c=n;break}}}else c=n}else{l=0;m=0;c=0}tg(F,0,1);r=w+32|0;f[r>>2]=(f[r>>2]|0)+c;c=f[y>>2]|0;if(c>>>0>>0){q=c;o=(f[u>>2]|0)+(c*24|0)|0;c=m;while(1){c=c+1|0;l=(f[o+16>>2]|0)+l|0;if(!((b[o+20>>0]&1)==0?(q|0)!=((f[y>>2]|0)+-1+(f[e>>2]|0)|0):0)){n=f[r>>2]|0;if((c|0)>1){m=0;while(1){m=m+1|0;if(c>>>0>3)c=c>>>1;else{c=m;break}}}else c=0;tg(F,l,c+n|0);l=0;c=0}q=q+1|0;if((q|0)==(v|0))break;else o=o+24|0}}}x=x+1|0;if((x|0)==(E|0))break;else w=w+52|0}}}B=B+1|0;if(B>>>0>=(f[I>>2]|0)>>>0)break;else C=C+36|0}}if(!(vg(F)|0)){pg(F);h=0;return h|0}c=qg(F)|0;e=G+c|0;c=i-c|0;pg(F);if(f[d>>2]&4){b[e>>0]=-1;b[e+1>>0]=-110;c=c+-2|0;e=e+2|0}u=(j|0)!=0;if(u?f[j+12>>2]|0:0){G=e-g|0;d=(f[(f[j+88>>2]|0)+(a*592|0)+548>>2]|0)+(f[j+8>>2]<<5)+8|0;f[d>>2]=G;f[d+4>>2]=((G|0)<0)<<31>>31}b:do if(f[I>>2]|0){v=j+12|0;w=j+88|0;x=j+8|0;t=0;s=H;c:while(1){l=f[s+20>>2]|0;r=X(f[l+(J*40|0)+20>>2]|0,f[l+(J*40|0)+16>>2]|0)|0;l=f[l+(J*40|0)+24>>2]|0;d:do if(r){e:do if(u){q=0;while(1){o=f[l+4>>2]|0;i=o+(K*24|0)|0;if(f[i>>2]|0){m=o+(K*24|0)+4|0;n=f[m>>2]|0;if(n>>>0>c>>>0)i=1;else{hj(e|0,f[o+(K*24|0)+16>>2]|0,n|0)|0;d=l+40|0;f[d>>2]=(f[d>>2]|0)+(f[i>>2]|0);d=f[m>>2]|0;e=e+d|0;c=c-d|0;do if(f[v>>2]|0){d=(f[(f[w>>2]|0)+(a*592|0)+548>>2]|0)+(f[x>>2]<<5)+24|0;k=+p[o+(K*24|0)+8>>3]+ +p[d>>3];p[d>>3]=k;if(!(+p[j>>3]>3]=k}while(0);i=0;l=l+52|0}}else{i=28;l=l+52|0}switch(i&31){case 28:case 0:break;default:break e}q=q+1|0;if(q>>>0>=r>>>0){L=83;break d}}}else{q=0;while(1){i=f[l+4>>2]|0;m=i+(K*24|0)|0;if(f[m>>2]|0){n=i+(K*24|0)+4|0;o=f[n>>2]|0;if(o>>>0>c>>>0)i=1;else{hj(e|0,f[i+(K*24|0)+16>>2]|0,o|0)|0;d=l+40|0;f[d>>2]=(f[d>>2]|0)+(f[m>>2]|0);d=f[n>>2]|0;i=0;c=c-d|0;e=e+d|0;l=l+52|0}}else{i=28;l=l+52|0}switch(i&31){case 28:case 0:break;default:break e}q=q+1|0;if(q>>>0>=r>>>0){L=83;break d}}}while(0);if(!i)i=s;else{e=0;break c}}else L=83;while(0);if((L|0)==83){L=0;i=s+36|0}t=t+1|0;if(t>>>0>=(f[I>>2]|0)>>>0)break b;else s=i}return e|0}while(0);f[h>>2]=e-g+(f[h>>2]|0);h=1;return h|0}function Wg(a,b,c,d,e,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0;_=u;u=u+112|0;Z=_+64|0;U=_+32|0;T=_;R=_+96|0;S=_+92|0;j=f[a>>2]|0;L=a+4|0;Q=f[L>>2]|0;h=f[Q+76>>2]|0;M=h+(b*5640|0)|0;N=h+(b*5640|0)+420|0;P=(f[N>>2]|0)+1|0;Q=Bf(j,Q,b)|0;if(!Q){$=0;u=_;return $|0}O=j+16|0;K=h+(b*5640|0)+12|0;J=c+20|0;H=j+24|0;G=Q;a=g;h=d;F=0;a:while(1){if((f[G+80>>2]|0)==-1){$=4;break}I=Hc(f[O>>2]<<2)|0;if(!I){$=6;break}ij(I|0,1,f[O>>2]<<2|0)|0;if(Kf(G)|0){B=G+24|0;C=G+28|0;D=G+36|0;E=G+32|0;A=h;while(1){if((f[K>>2]|0)>>>0>(f[D>>2]|0)>>>0){h=f[J>>2]|0;b=f[B>>2]|0;if((f[C>>2]|0)>>>0<(f[h+(b*52|0)+20>>2]|0)>>>0){f[I+(b<<2)>>2]=0;z=f[L>>2]|0;f[S>>2]=0;if(!(Xg(z,h,M,G,R,A,S,a,i)|0)){$=45;break a}h=f[S>>2]|0;if(f[R>>2]|0){y=a-h|0;z=A+h|0;f[S>>2]=0;b=f[(f[J>>2]|0)+((f[B>>2]|0)*52|0)+24>>2]|0;c=f[C>>2]|0;w=b+(c*136|0)+24|0;g=f[w>>2]|0;b:do if(!g){b=z;$=43}else{x=A+a|0;j=0;v=b+(c*136|0)+28|0;b=z;c=g;c:while(1){g=f[v+20>>2]|0;k=f[E>>2]|0;if(((f[v+8>>2]|0)!=(f[v>>2]|0)?(f[v+12>>2]|0)!=(f[v+4>>2]|0):0)?(Y=X(f[g+(k*40|0)+20>>2]|0,f[g+(k*40|0)+16>>2]|0)|0,(Y|0)!=0):0){c=0;t=f[g+(k*40|0)+24>>2]|0;while(1){r=t+40|0;if(f[r>>2]|0){s=t+44|0;g=f[s>>2]|0;k=f[t+4>>2]|0;do if(!g){f[s>>2]=1;f[t+36>>2]=0}else{l=g+-1|0;if((f[k+(l<<5)+8>>2]|0)!=(f[k+(l<<5)+20>>2]|0)){k=k+(l<<5)|0;break}f[s>>2]=g+1;k=k+(g<<5)|0}while(0);p=t+36|0;q=t+32|0;o=b;n=k+28|0;g=f[n>>2]|0;if((g+o|0)>>>0>>0|(b+g|0)>>>0>x>>>0){b=g;break c}l=g;m=f[p>>2]|0;o=n;while(1){n=l+m|0;if(n>>>0>>0){$=29;break a}g=f[t>>2]|0;if(n>>>0>(f[q>>2]|0)>>>0){g=Lc(g,n)|0;if(!g){$=33;break a}m=f[p>>2]|0;l=f[o>>2]|0;f[q>>2]=l+m;f[t>>2]=g}hj(g+m|0,b|0,l|0)|0;g=k+8|0;l=f[g>>2]|0;if(!l){f[k>>2]=t;m=f[p>>2]|0;f[k+4>>2]=m}else m=f[p>>2]|0;aa=f[o>>2]|0;b=b+aa|0;o=f[k+24>>2]|0;n=o+l|0;f[g>>2]=n;o=(f[r>>2]|0)-o|0;f[r>>2]=o;f[k+12>>2]=n;m=aa+m|0;f[p>>2]=m;n=k+16|0;f[n>>2]=(f[n>>2]|0)+aa;if(!o)break;f[s>>2]=(f[s>>2]|0)+1;aa=b;o=k+60|0;g=f[o>>2]|0;if((g+aa|0)>>>0>>0|(b+g|0)>>>0>x>>>0){b=g;break c}else{k=k+32|0;l=g}}f[t+48>>2]=f[s>>2]}c=c+1|0;if(c>>>0>>0)t=t+56|0;else break}c=f[w>>2]|0}j=j+1|0;if(j>>>0>>0)v=v+36|0;else{$=43;break b}}x=f[E>>2]|0;z=f[C>>2]|0;aa=f[B>>2]|0;f[T>>2]=b;f[T+4>>2]=y;f[T+8>>2]=c;f[T+12>>2]=x;f[T+16>>2]=j;f[T+20>>2]=z;f[T+24>>2]=aa;Mb(i,2,21892,T)|0;b=0}while(0);if(($|0)==43){$=0;b=b-z|0;f[S>>2]=b}h=b+h|0}aa=f[B>>2]|0;y=f[C>>2]|0;b=(f[H>>2]|0)+(aa*52|0)+36|0;z=f[b>>2]|0;f[b>>2]=y>>>0>z>>>0?y:z;b=h;h=aa}else $=47}else{h=f[J>>2]|0;$=47}if(($|0)==47){$=0;aa=f[L>>2]|0;f[S>>2]=0;if(!(Xg(aa,h,M,G,R,A,S,a,i)|0))break a;b=f[S>>2]|0;if(!(f[R>>2]|0))h=f[B>>2]|0;else{v=a-b|0;x=f[B>>2]|0;h=f[(f[J>>2]|0)+(x*52|0)+24>>2]|0;w=f[C>>2]|0;f[S>>2]=0;s=f[h+(w*136|0)+24>>2]|0;if(!s)h=0;else{t=f[E>>2]|0;j=0;r=h+(w*136|0)+28|0;h=0;while(1){c=f[r+20>>2]|0;if(((f[r+8>>2]|0)!=(f[r>>2]|0)?(f[r+12>>2]|0)!=(f[r+4>>2]|0):0)?(V=X(f[c+(t*40|0)+20>>2]|0,f[c+(t*40|0)+16>>2]|0)|0,(V|0)!=0):0){q=f[c+(t*40|0)+24>>2]|0;c=0;n=h;while(1){o=q+40|0;m=f[o>>2]|0;if(!m)h=n;else{p=q+44|0;k=f[p>>2]|0;h=f[q+4>>2]|0;do if(!k){f[p>>2]=1;f[q+36>>2]=0;g=h;l=1}else{g=k+-1|0;l=k+1|0;if((f[h+(g<<5)+8>>2]|0)!=(f[h+(g<<5)+20>>2]|0)){g=h+(g<<5)|0;l=k;break}f[p>>2]=l;g=h+(k<<5)|0}while(0);h=f[g+28>>2]|0;k=h+n|0;if(k>>>0>>0|k>>>0>v>>>0){$=67;break a}else n=g;while(1){aa=f[n+24>>2]|0;z=n+8|0;f[z>>2]=(f[z>>2]|0)+aa;m=m-aa|0;if(!m)break;l=l+1|0;f[p>>2]=l;h=f[n+60>>2]|0;g=h+k|0;if(g>>>0>>0|g>>>0>v>>>0){$=68;break a}else{n=n+32|0;k=g}}f[o>>2]=0;h=k}c=c+1|0;if(c>>>0>>0){q=q+56|0;n=h}else break}}j=j+1|0;if(j>>>0>>0)r=r+36|0;else break}f[S>>2]=h}b=h+b|0;h=x}}if(f[I+(h<<2)>>2]|0?(W=(f[H>>2]|0)+(h*52|0)+36|0,(f[W>>2]|0)==0):0)f[W>>2]=(f[(f[J>>2]|0)+(h*52|0)+20>>2]|0)+-1;h=A+b|0;a=a-b|0;if(!(Kf(G)|0))break;else A=h}}Mc(I);F=F+1|0;if(F>>>0>(f[N>>2]|0)>>>0){$=79;break}else G=G+232|0}if(($|0)==4){Ef(Q,P);aa=0;u=_;return aa|0}else if(($|0)==6){Ef(Q,P);aa=0;u=_;return aa|0}else if(($|0)==29){Y=f[E>>2]|0;Z=f[C>>2]|0;aa=f[B>>2]|0;f[U>>2]=l;f[U+4>>2]=m;f[U+8>>2]=~l;f[U+12>>2]=c;f[U+16>>2]=Y;f[U+20>>2]=j;f[U+24>>2]=Z;f[U+28>>2]=aa;Mb(i,1,21977,U)|0;$=45}else if(($|0)==33){Mc(f[t>>2]|0);f[t>>2]=0;f[q>>2]=0;$=45}else if(($|0)==67){f[S>>2]=n;$=69}else if(($|0)==68){f[S>>2]=k;f[o>>2]=m;$=69}else if(($|0)==79){Ef(Q,P);f[e>>2]=h-d;aa=1;u=_;return aa|0}if(($|0)==45){Ef(Q,P);Mc(I);aa=0;u=_;return aa|0}else if(($|0)==69){f[Z>>2]=h;f[Z+4>>2]=v;f[Z+8>>2]=c;f[Z+12>>2]=t;f[Z+16>>2]=j;f[Z+20>>2]=w;f[Z+24>>2]=x;Mb(i,1,22076,Z)|0}Ef(Q,P);Mc(I);aa=0;u=_;return aa|0}function Xg(a,c,d,e,g,h,i,j,k){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;O=u;u=u+64|0;K=O+48|0;L=O+40|0;y=O+32|0;x=O+24|0;v=O+16|0;t=O+8|0;s=O;w=O+56|0;M=O+52|0;N=h;f[M>>2]=N;J=e+24|0;z=f[c+((f[J>>2]|0)*52|0)+24>>2]|0;A=f[e+28>>2]|0;I=e+36|0;a:do if((f[I>>2]|0)==0?(r=z+(A*136|0)+24|0,f[r>>2]|0):0){p=e+32|0;m=0;o=z+(A*136|0)+28|0;while(1){if((f[o+8>>2]|0)!=(f[o>>2]|0)?(f[o+12>>2]|0)!=(f[o+4>>2]|0):0){c=f[o+20>>2]|0;l=f[p>>2]|0;if(l>>>0>=(((f[o+24>>2]|0)>>>0)/40|0)>>>0)break;cg(f[c+(l*40|0)+32>>2]|0);cg(f[c+(l*40|0)+36>>2]|0);q=X(f[c+(l*40|0)+20>>2]|0,f[c+(l*40|0)+16>>2]|0)|0;if(q|0){n=0;c=f[c+(l*40|0)+24>>2]|0;while(1){f[c+44>>2]=0;f[c+48>>2]=0;n=n+1|0;if((n|0)==(q|0))break;else c=c+56|0}}}m=m+1|0;if(m>>>0>=(f[r>>2]|0)>>>0)break a;else o=o+36|0}Mb(k,1,22161,s)|0;N=0;u=O;return N|0}while(0);do if(!(f[d>>2]&2))c=N;else{if(j>>>0<6){Mb(k,2,22179,t)|0;c=N;break}if((b[h>>0]|0)==-1?(b[h+1>>0]|0)==-111:0){c=h+6|0;f[M>>2]=c;break}Mb(k,2,22221,v)|0;c=N}while(0);G=og()|0;if(!G){N=0;u=O;return N|0}do if(!(b[a+96>>0]&1))if(!(b[d+5636>>0]&2)){f[w>>2]=h+j-c;H=M;F=c;break}else{F=d+5168|0;H=F;F=f[F>>2]|0;w=d+5180|0;break}else{F=a+40|0;H=F;F=f[F>>2]|0;w=a+44|0}while(0);sg(G,F,f[w>>2]|0);if(!(ug(G,1)|0)){wg(G)|0;c=F+(qg(G)|0)|0;pg(G);do if(!(f[d>>2]&4))l=H;else{if(((f[w>>2]|0)-c+(f[H>>2]|0)|0)>>>0<2){Mb(k,2,22242,x)|0;l=H;break}if((b[c>>0]|0)==-1?(b[c+1>>0]|0)==-110:0){c=c+2|0;l=H;break}Mb(k,2,22284,y)|0;l=H}while(0);d=f[l>>2]|0;k=c-d|0;f[w>>2]=(f[w>>2]|0)-k;f[H>>2]=d+k;f[g>>2]=0;f[i>>2]=(f[M>>2]|0)-N;N=1;u=O;return N|0}E=z+(A*136|0)+24|0;b:do if(f[E>>2]|0){C=e+32|0;D=d+5584|0;y=0;c=z+(A*136|0)+28|0;c:while(1){l=f[c+20>>2]|0;m=f[C>>2]|0;d:do if((f[c+8>>2]|0)!=(f[c>>2]|0)?(f[c+12>>2]|0)!=(f[c+4>>2]|0):0){j=X(f[l+(m*40|0)+20>>2]|0,f[l+(m*40|0)+16>>2]|0)|0;e:do if(j|0){a=l+(m*40|0)+32|0;e=l+(m*40|0)+36|0;x=c+28|0;h=0;l=f[l+(m*40|0)+24>>2]|0;f:while(1){n=l+44|0;if(!(f[n>>2]|0))m=hg(G,f[a>>2]|0,h,(f[I>>2]|0)+1|0)|0;else m=ug(G,1)|0;g:do if(m){if(!(f[n>>2]|0)){m=0;while(1)if(!(hg(G,f[e>>2]|0,h,m)|0))m=m+1|0;else break;f[l+24>>2]=1-m+(f[x>>2]|0);f[l+28>>2]=3}do if(ug(G,1)|0){if(!(ug(G,1)|0)){m=2;break}m=ug(G,2)|0;if((m|0)!=3){m=m+3|0;break}m=ug(G,5)|0;if((m|0)==31){m=(ug(G,7)|0)+37|0;break}else{m=m+6|0;break}}else m=1;while(0);s=l+40|0;f[s>>2]=m;m=0;while(1)if(!(ug(G,1)|0))break;else m=m+1|0;v=l+28|0;f[v>>2]=(f[v>>2]|0)+m;q=f[n>>2]|0;do if(!q){p=f[(f[D>>2]|0)+((f[J>>2]|0)*1080|0)+16>>2]|0;m=l+52|0;do if(!(f[m>>2]|0)){f[m>>2]=10;n=l+4|0;o=Lc(f[n>>2]|0,320)|0;if(!o){Mc(f[n>>2]|0);f[n>>2]=0;f[m>>2]=0;pg(G);m=1;break g}else{f[n>>2]=o;m=o;n=o;break}}else{n=f[l+4>>2]|0;m=n}while(0);f[m>>2]=0;f[m+4>>2]=0;f[m+8>>2]=0;f[m+12>>2]=0;f[m+16>>2]=0;f[m+20>>2]=0;f[m+24>>2]=0;f[m+28>>2]=0;if(!(p&4))m=(p&1|0)==0?109:10;else m=1;o=0;p=l+4|0;n=n+20|0;B=77}else{m=q+-1|0;r=l+4|0;n=f[r>>2]|0;if((f[n+(m<<5)+8>>2]|0)!=(f[n+(m<<5)+20>>2]|0))break;p=f[(f[D>>2]|0)+((f[J>>2]|0)*1080|0)+16>>2]|0;o=l+52|0;m=f[o>>2]|0;do if((q+1|0)>>>0>m>>>0){m=m+10|0;f[o>>2]=m;m=Lc(n,m<<5)|0;if(!m){Mc(f[r>>2]|0);f[r>>2]=0;f[o>>2]=0;pg(G);m=1;break g}else{f[r>>2]=m;n=m;break}}while(0);m=n+(q<<5)|0;f[m>>2]=0;f[m+4>>2]=0;f[m+8>>2]=0;f[m+12>>2]=0;f[m+16>>2]=0;f[m+20>>2]=0;f[m+24>>2]=0;f[m+28>>2]=0;do if(!(p&4)){if(!(p&1)){m=109;break}m=f[m+-32+20>>2]|0;m=(m|0)==1|(m|0)==10?2:1}else m=1;while(0);o=q;p=r;n=n+(q<<5)+20|0;B=77}while(0);if((B|0)==77){f[n>>2]=m;m=o;r=p}t=l+52|0;p=f[s>>2]|0;s=m;while(1){o=f[r>>2]|0;m=(f[o+(s<<5)+20>>2]|0)-(f[o+(s<<5)+8>>2]|0)|0;m=(m|0)<(p|0)?m:p;f[o+(s<<5)+24>>2]=m;o=f[v>>2]|0;if(m>>>0>1){n=m;m=0;while(1){m=m+1|0;if(n>>>0>3)n=n>>>1;else break}}else m=0;B=ug(G,m+o|0)|0;n=f[r>>2]|0;f[n+(s<<5)+28>>2]=B;p=p-(f[n+(s<<5)+24>>2]|0)|0;if((p|0)<=0){B=90;break}q=s+1|0;o=f[(f[D>>2]|0)+((f[J>>2]|0)*1080|0)+16>>2]|0;m=f[t>>2]|0;if((s+2|0)>>>0>m>>>0){m=m+10|0;f[t>>2]=m;m=Lc(n,m<<5)|0;if(!m){B=89;break}f[r>>2]=m;n=m}B=n+(q<<5)|0;f[B>>2]=0;f[B+4>>2]=0;f[B+8>>2]=0;f[B+12>>2]=0;f[B+16>>2]=0;f[B+20>>2]=0;f[B+24>>2]=0;f[B+28>>2]=0;do if(!(o&4)){if(!(o&1)){m=109;break}m=f[n+(s<<5)+20>>2]|0;m=(m|0)==1|(m|0)==10?2:1}else m=1;while(0);f[n+(q<<5)+20>>2]=m;s=q}if((B|0)==89){B=0;Mc(f[r>>2]|0);f[r>>2]=0;f[t>>2]=0;pg(G);m=1;break}else if((B|0)==90){B=0;m=0;l=l+56|0;break}}else{f[l+40>>2]=0;m=13;l=l+56|0}while(0);switch(m&15){case 13:case 0:break;default:break f}h=h+1|0;if(h>>>0>=j>>>0)break e}if(!m)break d;else{c=0;break c}}while(0);c=c+36|0}else B=39;while(0);if((B|0)==39){B=0;c=c+36|0}y=y+1|0;if(y>>>0>=(f[E>>2]|0)>>>0)break b}u=O;return c|0}while(0);if(!(wg(G)|0)){pg(G);N=0;u=O;return N|0}c=F+(qg(G)|0)|0;pg(G);do if(!(f[d>>2]&4))l=H;else{if(((f[w>>2]|0)-c+(f[H>>2]|0)|0)>>>0<2){Mb(k,2,22242,L)|0;l=H;break}if((b[c>>0]|0)==-1?(b[c+1>>0]|0)==-110:0){c=c+2|0;l=H;break}Mb(k,2,22284,K)|0;l=H}while(0);d=f[l>>2]|0;k=c-d|0;f[w>>2]=(f[w>>2]|0)-k;f[H>>2]=d+k;f[g>>2]=1;f[i>>2]=(f[M>>2]|0)-N;N=1;u=O;return N|0}function Yg(a,b){a=a|0;b=b|0;var c=0;c=Ic(1,8)|0;if(!c){c=0;return c|0}f[c>>2]=a;f[c+4>>2]=b;return c|0}function Zg(a){a=a|0;if(!a)return;Mc(a);return}function _g(){return Hc(104)|0}function $g(a){a=a|0;if(!a)return;Mc(a);return}function ah(a){a=a|0;return (f[a+12>>2]|0)-(f[a+16>>2]|0)|0}function bh(a,b){a=a|0;b=b|0;f[a+100>>2]=a+24;f[a+4>>2]=32768;f[a>>2]=0;f[a+12>>2]=b+-1;f[a+8>>2]=12;f[a+16>>2]=b;return}function ch(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;e=f[a+100>>2]|0;g=f[e>>2]|0;k=(f[g+4>>2]|0)==(c|0);d=f[g>>2]|0;l=a+4|0;c=(f[l>>2]|0)-d|0;f[l>>2]=c;if(!k){if(c>>>0>>0){d=(f[a>>2]|0)+d|0;f[a>>2]=d;k=a}else{f[l>>2]=d;c=d;k=a;d=f[a>>2]|0}f[e>>2]=f[g+12>>2];i=a+8|0;j=a+12|0;h=a+16|0;a=d;e=f[i>>2]|0;while(1){c=c<<1;f[l>>2]=c;d=a<<1;f[k>>2]=d;e=e+-1|0;f[i>>2]=e;if(!e){c=f[j>>2]|0;do if((c|0)!=((f[h>>2]|0)+-1|0)){e=b[c>>0]|0;if(e<<24>>24==-1){e=c+1|0;f[j>>2]=e;g=7;d=1048575;c=a>>>19&4095;break}if(!(d&134217728)){e=c+1|0;f[j>>2]=e;g=8;d=524287;c=a>>>18&8191;break}b[c>>0]=e+1<<24>>24;c=f[j>>2]|0;if((b[c>>0]|0)==-1){a=f[k>>2]&134217727;f[k>>2]=a;e=c+1|0;f[j>>2]=e;g=7;d=1048575;c=a>>>20;break}else{e=c+1|0;f[j>>2]=e;g=8;d=524287;c=(f[k>>2]|0)>>>19;break}}else{e=c+1|0;f[j>>2]=e;g=8;d=524287;c=a>>>18&8191}while(0);b[e>>0]=c;d=f[k>>2]&d;f[k>>2]=d;f[i>>2]=g;c=f[l>>2]|0;e=g}if(!(c&32768))a=d;else break}return}if(c&32768|0){f[a>>2]=(f[a>>2]|0)+d;return}if(c>>>0>>0){f[l>>2]=d;c=d;k=a;d=f[a>>2]|0}else{d=(f[a>>2]|0)+d|0;f[a>>2]=d;k=a}f[e>>2]=f[g+8>>2];i=a+8|0;j=a+12|0;h=a+16|0;a=d;d=f[i>>2]|0;while(1){c=c<<1;f[l>>2]=c;e=a<<1;f[k>>2]=e;d=d+-1|0;f[i>>2]=d;if(!d){c=f[j>>2]|0;do if((c|0)!=((f[h>>2]|0)+-1|0)){d=b[c>>0]|0;if(d<<24>>24==-1){g=c+1|0;f[j>>2]=g;d=7;e=1048575;c=a>>>19&4095;break}if(!(e&134217728)){g=c+1|0;f[j>>2]=g;d=8;e=524287;c=a>>>18&8191;break}b[c>>0]=d+1<<24>>24;c=f[j>>2]|0;if((b[c>>0]|0)==-1){a=f[k>>2]&134217727;f[k>>2]=a;g=c+1|0;f[j>>2]=g;d=7;e=1048575;c=a>>>20;break}else{g=c+1|0;f[j>>2]=g;d=8;e=524287;c=(f[k>>2]|0)>>>19;break}}else{g=c+1|0;f[j>>2]=g;d=8;e=524287;c=a>>>18&8191}while(0);b[g>>0]=c;e=f[k>>2]&e;f[k>>2]=e;f[i>>2]=d;c=f[l>>2]|0}if(!(c&32768))a=e;else break}return}function dh(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=f[a>>2]|0;h=k|65535;j=a+8|0;h=(h>>>0<((f[a+4>>2]|0)+k|0)>>>0?h:h+-32768|0)<>2];f[a>>2]=h;k=a+12|0;c=f[k>>2]|0;i=a+16|0;do if((c|0)!=((f[i>>2]|0)+-1|0)){d=b[c>>0]|0;if(d<<24>>24==-1){g=c+1|0;f[k>>2]=g;d=7;e=1048575;c=h>>>20;break}if(!(h&134217728)){g=c+1|0;f[k>>2]=g;d=8;e=524287;c=h>>>19;break}b[c>>0]=d+1<<24>>24;c=f[k>>2]|0;if((b[c>>0]|0)==-1){h=f[a>>2]&134217727;f[a>>2]=h;g=c+1|0;f[k>>2]=g;d=7;e=1048575;c=h>>>20;break}else{g=c+1|0;f[k>>2]=g;d=8;e=524287;c=(f[a>>2]|0)>>>19;break}}else{g=c+1|0;f[k>>2]=g;d=8;e=524287;c=h>>>19}while(0);b[g>>0]=c;h=f[a>>2]&e;f[j>>2]=d;h=h<>2]=h;d=f[k>>2]|0;do if((d|0)!=((f[i>>2]|0)+-1|0)){c=b[d>>0]|0;if(c<<24>>24==-1){g=d+1|0;f[k>>2]=g;d=7;e=1048575;c=h>>>20;break}if(!(h&134217728)){g=d+1|0;f[k>>2]=g;d=8;e=524287;c=h>>>19;break}b[d>>0]=c+1<<24>>24;c=f[k>>2]|0;if((b[c>>0]|0)==-1){i=f[a>>2]&134217727;f[a>>2]=i;g=c+1|0;f[k>>2]=g;d=7;e=1048575;c=i>>>20;break}else{g=c+1|0;f[k>>2]=g;d=8;e=524287;c=(f[a>>2]|0)>>>19;break}}else{g=d+1|0;f[k>>2]=g;d=8;e=524287;c=h>>>19}while(0);b[g>>0]=c;f[a>>2]=f[a>>2]&e;f[j>>2]=d;c=f[k>>2]|0;if((b[c>>0]|0)==-1)return;f[k>>2]=c+1;return}function eh(a){a=a|0;f[a>>2]=0;f[a+8>>2]=8;return}function fh(a,c){a=a|0;c=c|0;var d=0,e=0,g=0;d=a+8|0;e=(f[d>>2]|0)+-1|0;f[d>>2]=e;c=(f[a>>2]|0)+(c<>2]=c;if(e|0)return;e=a+12|0;g=(f[e>>2]|0)+1|0;f[e>>2]=g;b[g>>0]=c;f[d>>2]=8;f[d>>2]=(b[f[e>>2]>>0]|0)==-1?7:8;f[a>>2]=0;return}function gh(a){a=a|0;f[a+28>>2]=1156;f[a+32>>2]=1156;f[a+36>>2]=1156;f[a+40>>2]=1156;f[a+44>>2]=1156;f[a+48>>2]=1156;f[a+52>>2]=1156;f[a+56>>2]=1156;f[a+60>>2]=1156;f[a+64>>2]=1156;f[a+68>>2]=1156;f[a+72>>2]=1156;f[a+76>>2]=1156;f[a+80>>2]=1156;f[a+84>>2]=1156;f[a+88>>2]=1156;f[a+96>>2]=2628;f[a+92>>2]=1252;f[a+24>>2]=1284;return}function hh(a){a=a|0;f[a+24>>2]=1156;f[a+28>>2]=1156;f[a+32>>2]=1156;f[a+36>>2]=1156;f[a+40>>2]=1156;f[a+44>>2]=1156;f[a+48>>2]=1156;f[a+52>>2]=1156;f[a+56>>2]=1156;f[a+60>>2]=1156;f[a+64>>2]=1156;f[a+68>>2]=1156;f[a+72>>2]=1156;f[a+76>>2]=1156;f[a+80>>2]=1156;f[a+84>>2]=1156;f[a+88>>2]=1156;f[a+92>>2]=1156;f[a+96>>2]=1156;return}function ih(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;f[a+24+(b<<2)>>2]=1156+((d<<1)+c<<4);return}function jh(a){a=a|0;var c=0,d=0;f[a+100>>2]=a+24;f[a+4>>2]=32768;f[a>>2]=0;c=a+8|0;f[c>>2]=12;d=a+12|0;a=(f[d>>2]|0)+-1|0;f[d>>2]=a;if((b[a>>0]|0)!=-1)return;f[c>>2]=13;return}function kh(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0;l=a+8|0;d=f[l>>2]|0;c=12-d|0;if((c|0)>0){e=a+12|0;k=a+16|0;j=c;g=f[a>>2]|0;c=d;do{i=g<>2]=i;f[l>>2]=0;c=f[e>>2]|0;do if((c|0)!=((f[k>>2]|0)+-1|0)){d=b[c>>0]|0;if(d<<24>>24==-1){h=c+1|0;f[e>>2]=h;c=7;g=1048575;d=i>>>20;break}if(!(i&134217728)){h=c+1|0;f[e>>2]=h;c=8;g=524287;d=i>>>19;break}b[c>>0]=d+1<<24>>24;c=f[e>>2]|0;if((b[c>>0]|0)==-1){d=f[a>>2]&134217727;f[a>>2]=d;h=c+1|0;f[e>>2]=h;c=7;g=1048575;d=d>>>20;break}else{h=c+1|0;f[e>>2]=h;c=8;g=524287;d=(f[a>>2]|0)>>>19;break}}else{h=c+1|0;f[e>>2]=h;c=8;g=524287;d=i>>>19}while(0);b[h>>0]=d;g=f[a>>2]&g;f[a>>2]=g;f[l>>2]=c;j=j-c|0}while((j|0)>0)}else e=a+12|0;c=f[e>>2]|0;d=b[c>>0]|0;if(d<<24>>24==-1)return;do if((c|0)!=((f[a+16>>2]|0)+-1|0)){i=f[a>>2]|0;if(!(i&134217728)){h=c+1|0;f[e>>2]=h;d=a;e=8;g=524287;c=i>>>19;break}b[c>>0]=d+1<<24>>24;c=f[e>>2]|0;if((b[c>>0]|0)==-1){k=f[a>>2]&134217727;f[a>>2]=k;h=c+1|0;f[e>>2]=h;d=a;e=7;g=1048575;c=k>>>20;break}else{h=c+1|0;f[e>>2]=h;d=a;e=8;g=524287;c=(f[a>>2]|0)>>>19;break}}else{h=c+1|0;f[e>>2]=h;d=a;e=8;g=524287;c=(f[a>>2]|0)>>>19}while(0);b[h>>0]=c;f[d>>2]=f[d>>2]&g;f[l>>2]=e;return}function lh(a){a=a|0;f[a+100>>2]=a+96;ch(a,1);ch(a,0);ch(a,1);ch(a,0);return}function mh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,i=0,j=0;f[a+100>>2]=a+24;f[a+16>>2]=c;f[a+20>>2]=c+d;j=a+12|0;f[j>>2]=c;do if(!d){f[a>>2]=16711680;g=8;c=65280;e=16711680;d=a}else{e=h[c>>0]<<16;f[a>>2]=e;g=c+1|0;if((d|0)==1)i=255;else i=h[g>>0]|0;if((b[c>>0]|0)==-1)if(i>>>0>143){g=8;c=65280;d=a;break}else{c=9;d=7}else{c=8;d=8}f[j>>2]=g;g=d;c=i<>2]=e+c<<7;f[a+8>>2]=g+-7;f[a+4>>2]=32768;return 1}function nh(a){a=a|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;c=f[a+100>>2]|0;d=f[c>>2]|0;g=f[d>>2]|0;p=a+4|0;i=(f[p>>2]|0)-g|0;f[p>>2]=i;e=f[a>>2]|0;if(e>>>16>>>0>>0){n=i>>>0>>0;f[p>>2]=g;o=f[d+4>>2]|0;f[c>>2]=f[(n?d+8|0:d+12|0)>>2];k=a+8|0;l=a+12|0;m=a+20|0;c=f[k>>2]|0;d=e;j=g;do{if(!c){e=f[l>>2]|0;c=f[m>>2]|0;do if((e|0)==(c|0)){g=8;c=65280}else{g=e+1|0;if((g|0)==(c|0))i=255;else i=h[g>>0]|0;if((b[e>>0]|0)==-1)if(i>>>0>143){g=8;c=65280;break}else{e=9;c=7}else{e=8;c=8}f[l>>2]=g;g=c;c=i<>2]=d;f[k>>2]=g;c=g}j=j<<1;f[p>>2]=j;d=d<<1;f[a>>2]=d;c=c+-1|0;f[k>>2]=c}while(j>>>0<32768);p=n?o:1-o|0;return p|0}e=e-(g<<16)|0;f[a>>2]=e;if(i&32768|0){p=f[d+4>>2]|0;return p|0}n=i>>>0>>0;o=f[d+4>>2]|0;f[c>>2]=f[(n?d+12|0:d+8|0)>>2];k=a+8|0;l=a+12|0;m=a+20|0;c=f[k>>2]|0;d=e;j=i;do{if(!c){e=f[l>>2]|0;c=f[m>>2]|0;do if((e|0)==(c|0)){g=8;c=65280}else{g=e+1|0;if((g|0)==(c|0))i=255;else i=h[g>>0]|0;if((b[e>>0]|0)==-1)if(i>>>0>143){g=8;c=65280;break}else{e=9;c=7}else{e=8;c=8}f[l>>2]=g;g=c;c=i<>2]=d;f[k>>2]=g;c=g}j=j<<1;f[p>>2]=j;d=d<<1;f[a>>2]=d;c=c+-1|0;f[k>>2]=c}while(j>>>0<32768);p=n?1-o|0:o;return p|0}function oh(){return Hc(28)|0}function ph(a){a=a|0;if(!a)return;Mc(a);return}function qh(a,c,d){a=a|0;c=c|0;d=d|0;f[a+20>>2]=c;f[a+8>>2]=d;f[a+12>>2]=0;b[a>>0]=0;f[a+4>>2]=0;return}function rh(a){a=a|0;var c=0,d=0,e=0,g=0,h=0;g=a+4|0;c=f[g>>2]|0;do if(!c){f[g>>2]=8;c=a+12|0;e=f[c>>2]|0;if((e|0)==(f[a+8>>2]|0)){b[a>>0]=-1;d=8;c=-1;break}if((b[a>>0]|0)==-1){f[g>>2]=7;d=7}else d=8;h=b[(f[a+20>>2]|0)+e>>0]|0;b[a>>0]=h;f[c>>2]=e+1;c=h}else{d=c;c=b[a>>0]|0}while(0);h=d+-1|0;f[g>>2]=h;return (c&255)>>>h&1|0}function sh(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;x=u;u=u+16|0;o=x;do if(a>>>0<245){l=a>>>0<11?16:a+11&-8;a=l>>>3;n=f[6184]|0;c=n>>>a;if(c&3|0){b=(c&1^1)+a|0;a=24776+(b<<1<<2)|0;c=a+8|0;d=f[c>>2]|0;e=d+8|0;g=f[e>>2]|0;if((g|0)==(a|0))f[6184]=n&~(1<>2]=a;f[c>>2]=g}w=b<<3;f[d+4>>2]=w|3;w=d+w+4|0;f[w>>2]=f[w>>2]|1;w=e;u=x;return w|0}m=f[6186]|0;if(l>>>0>m>>>0){if(c|0){b=2<>>12&16;b=b>>>i;c=b>>>5&8;b=b>>>c;g=b>>>2&4;b=b>>>g;a=b>>>1&2;b=b>>>a;d=b>>>1&1;d=(c|i|g|a|d)+(b>>>d)|0;b=24776+(d<<1<<2)|0;a=b+8|0;g=f[a>>2]|0;i=g+8|0;c=f[i>>2]|0;if((c|0)==(b|0)){a=n&~(1<>2]=b;f[a>>2]=c;a=n}w=d<<3;h=w-l|0;f[g+4>>2]=l|3;e=g+l|0;f[e+4>>2]=h|1;f[g+w>>2]=h;if(m|0){d=f[6189]|0;b=m>>>3;c=24776+(b<<1<<2)|0;b=1<>2]|0}f[a>>2]=d;f[b+12>>2]=d;f[d+8>>2]=b;f[d+12>>2]=c}f[6186]=h;f[6189]=e;w=i;u=x;return w|0}j=f[6185]|0;if(j){c=(j&0-j)+-1|0;i=c>>>12&16;c=c>>>i;h=c>>>5&8;c=c>>>h;k=c>>>2&4;c=c>>>k;d=c>>>1&2;c=c>>>d;a=c>>>1&1;a=f[25040+((h|i|k|d|a)+(c>>>a)<<2)>>2]|0;c=(f[a+4>>2]&-8)-l|0;d=f[a+16+(((f[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){k=a;h=c}else{do{i=(f[d+4>>2]&-8)-l|0;k=i>>>0>>0;c=k?i:c;a=k?d:a;d=f[d+16+(((f[d+16>>2]|0)==0&1)<<2)>>2]|0}while((d|0)!=0);k=a;h=c}i=k+l|0;if(i>>>0>k>>>0){e=f[k+24>>2]|0;b=f[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=f[a>>2]|0;if(!b){a=k+16|0;b=f[a>>2]|0;if(!b){c=0;break}}while(1){c=b+20|0;d=f[c>>2]|0;if(d|0){b=d;a=c;continue}c=b+16|0;d=f[c>>2]|0;if(!d)break;else{b=d;a=c}}f[a>>2]=0;c=b}else{c=f[k+8>>2]|0;f[c+12>>2]=b;f[b+8>>2]=c;c=b}while(0);do if(e|0){b=f[k+28>>2]|0;a=25040+(b<<2)|0;if((k|0)==(f[a>>2]|0)){f[a>>2]=c;if(!c){f[6185]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=c;if(!c)break}f[c+24>>2]=e;b=f[k+16>>2]|0;if(b|0){f[c+16>>2]=b;f[b+24>>2]=c}b=f[k+20>>2]|0;if(b|0){f[c+20>>2]=b;f[b+24>>2]=c}}while(0);if(h>>>0<16){w=h+l|0;f[k+4>>2]=w|3;w=k+w+4|0;f[w>>2]=f[w>>2]|1}else{f[k+4>>2]=l|3;f[i+4>>2]=h|1;f[i+h>>2]=h;if(m|0){d=f[6189]|0;b=m>>>3;c=24776+(b<<1<<2)|0;b=1<>2]|0}f[a>>2]=d;f[b+12>>2]=d;f[d+8>>2]=b;f[d+12>>2]=c}f[6186]=h;f[6189]=i}w=k+8|0;u=x;return w|0}else m=l}else m=l}else m=l}else if(a>>>0<=4294967231){a=a+11|0;l=a&-8;k=f[6185]|0;if(k){d=0-l|0;a=a>>>8;if(a)if(l>>>0>16777215)j=31;else{n=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(m|n|j)+(v<>>15)|0;j=l>>>(j+7|0)&1|j<<1}else j=0;c=f[25040+(j<<2)>>2]|0;a:do if(!c){c=0;a=0;v=57}else{a=0;i=c;h=l<<((j|0)==31?0:25-(j>>>1)|0);c=0;while(1){e=(f[i+4>>2]&-8)-l|0;if(e>>>0>>0)if(!e){d=0;c=i;a=i;v=61;break a}else{a=i;d=e}e=f[i+20>>2]|0;i=f[i+16+(h>>>31<<2)>>2]|0;c=(e|0)==0|(e|0)==(i|0)?c:e;e=(i|0)==0;if(e){v=57;break}else h=h<<((e^1)&1)}}while(0);if((v|0)==57){if((c|0)==0&(a|0)==0){a=2<>>12&16;n=n>>>i;h=n>>>5&8;n=n>>>h;j=n>>>2&4;n=n>>>j;m=n>>>1&2;n=n>>>m;c=n>>>1&1;a=0;c=f[25040+((h|i|j|m|c)+(n>>>c)<<2)>>2]|0}if(!c){i=a;h=d}else v=61}if((v|0)==61)while(1){v=0;m=(f[c+4>>2]&-8)-l|0;n=m>>>0>>0;d=n?m:d;a=n?c:a;c=f[c+16+(((f[c+16>>2]|0)==0&1)<<2)>>2]|0;if(!c){i=a;h=d;break}else v=61}if((i|0)!=0?h>>>0<((f[6186]|0)-l|0)>>>0:0){g=i+l|0;if(g>>>0<=i>>>0){w=0;u=x;return w|0}e=f[i+24>>2]|0;b=f[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=f[a>>2]|0;if(!b){a=i+16|0;b=f[a>>2]|0;if(!b){b=0;break}}while(1){c=b+20|0;d=f[c>>2]|0;if(d|0){b=d;a=c;continue}c=b+16|0;d=f[c>>2]|0;if(!d)break;else{b=d;a=c}}f[a>>2]=0}else{w=f[i+8>>2]|0;f[w+12>>2]=b;f[b+8>>2]=w}while(0);do if(e){a=f[i+28>>2]|0;c=25040+(a<<2)|0;if((i|0)==(f[c>>2]|0)){f[c>>2]=b;if(!b){d=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){d=k;break}}f[b+24>>2]=e;a=f[i+16>>2]|0;if(a|0){f[b+16>>2]=a;f[a+24>>2]=b}a=f[i+20>>2]|0;if(a){f[b+20>>2]=a;f[a+24>>2]=b;d=k}else d=k}else d=k;while(0);do if(h>>>0>=16){f[i+4>>2]=l|3;f[g+4>>2]=h|1;f[g+h>>2]=h;b=h>>>3;if(h>>>0<256){c=24776+(b<<1<<2)|0;a=f[6184]|0;b=1<>2]|0}f[a>>2]=g;f[b+12>>2]=g;f[g+8>>2]=b;f[g+12>>2]=c;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(t|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;c=25040+(b<<2)|0;f[g+28>>2]=b;a=g+16|0;f[a+4>>2]=0;f[a>>2]=0;a=1<>2]=g;f[g+24>>2]=c;f[g+12>>2]=g;f[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);c=f[c>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(h|0)){v=97;break}d=c+16+(a>>>31<<2)|0;b=f[d>>2]|0;if(!b){v=96;break}else{a=a<<1;c=b}}if((v|0)==96){f[d>>2]=g;f[g+24>>2]=c;f[g+12>>2]=g;f[g+8>>2]=g;break}else if((v|0)==97){v=c+8|0;w=f[v>>2]|0;f[w+12>>2]=g;f[v>>2]=g;f[g+8>>2]=w;f[g+12>>2]=c;f[g+24>>2]=0;break}}else{w=h+l|0;f[i+4>>2]=w|3;w=i+w+4|0;f[w>>2]=f[w>>2]|1}while(0);w=i+8|0;u=x;return w|0}else m=l}else m=l}else m=-1;while(0);c=f[6186]|0;if(c>>>0>=m>>>0){b=c-m|0;a=f[6189]|0;if(b>>>0>15){w=a+m|0;f[6189]=w;f[6186]=b;f[w+4>>2]=b|1;f[a+c>>2]=b;f[a+4>>2]=m|3}else{f[6186]=0;f[6189]=0;f[a+4>>2]=c|3;w=a+c+4|0;f[w>>2]=f[w>>2]|1}w=a+8|0;u=x;return w|0}i=f[6187]|0;if(i>>>0>m>>>0){t=i-m|0;f[6187]=t;w=f[6190]|0;v=w+m|0;f[6190]=v;f[v+4>>2]=t|1;f[w+4>>2]=m|3;w=w+8|0;u=x;return w|0}if(!(f[6302]|0)){f[6304]=4096;f[6303]=4096;f[6305]=-1;f[6306]=-1;f[6307]=0;f[6295]=0;f[6302]=o&-16^1431655768;a=4096}else a=f[6304]|0;j=m+48|0;k=m+47|0;h=a+k|0;e=0-a|0;l=h&e;if(l>>>0<=m>>>0){w=0;u=x;return w|0}a=f[6294]|0;if(a|0?(n=f[6292]|0,o=n+l|0,o>>>0<=n>>>0|o>>>0>a>>>0):0){w=0;u=x;return w|0}b:do if(!(f[6295]&4)){c=f[6190]|0;c:do if(c){d=25184;while(1){a=f[d>>2]|0;if(a>>>0<=c>>>0?(r=d+4|0,(a+(f[r>>2]|0)|0)>>>0>c>>>0):0)break;a=f[d+8>>2]|0;if(!a){v=118;break c}else d=a}b=h-i&e;if(b>>>0<2147483647){a=lj(b|0)|0;if((a|0)==((f[d>>2]|0)+(f[r>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{d=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){c=lj(0)|0;if((c|0)!=(-1|0)?(b=c,p=f[6303]|0,q=p+-1|0,b=((q&b|0)==0?0:(q+b&0-p)-b|0)+l|0,p=f[6292]|0,q=b+p|0,b>>>0>m>>>0&b>>>0<2147483647):0){r=f[6294]|0;if(r|0?q>>>0<=p>>>0|q>>>0>r>>>0:0){b=0;break}a=lj(b|0)|0;if((a|0)==(c|0)){h=b;g=c;v=135;break b}else{d=a;v=126}}else b=0}while(0);do if((v|0)==126){c=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(d|0)!=(-1|0))))if((d|0)==(-1|0)){b=0;break}else{h=b;g=d;v=135;break b}a=f[6304]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=d;v=135;break b}if((lj(a|0)|0)==(-1|0)){lj(c|0)|0;b=0;break}else{h=a+b|0;g=d;v=135;break b}}while(0);f[6295]=f[6295]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?l>>>0<2147483647:0)?(g=lj(l|0)|0,r=lj(0)|0,s=r-g|0,t=s>>>0>(m+40|0)>>>0,!((g|0)==(-1|0)|t^1|g>>>0>>0&((g|0)!=(-1|0)&(r|0)!=(-1|0))^1)):0){h=t?s:b;v=135}if((v|0)==135){b=(f[6292]|0)+h|0;f[6292]=b;if(b>>>0>(f[6293]|0)>>>0)f[6293]=b;j=f[6190]|0;do if(j){b=25184;while(1){a=f[b>>2]|0;c=b+4|0;d=f[c>>2]|0;if((g|0)==(a+d|0)){v=143;break}e=f[b+8>>2]|0;if(!e)break;else b=e}if(((v|0)==143?(f[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){f[c>>2]=d+h;w=(f[6187]|0)+h|0;t=j+8|0;t=(t&7|0)==0?0:0-t&7;v=j+t|0;t=w-t|0;f[6190]=v;f[6187]=t;f[v+4>>2]=t|1;f[j+w+4>>2]=40;f[6191]=f[6306];break}if(g>>>0<(f[6188]|0)>>>0)f[6188]=g;a=g+h|0;b=25184;while(1){if((f[b>>2]|0)==(a|0)){v=151;break}b=f[b+8>>2]|0;if(!b){a=25184;break}}if((v|0)==151)if(!(f[b+12>>2]&8)){f[b>>2]=g;l=b+4|0;f[l>>2]=(f[l>>2]|0)+h;l=g+8|0;l=g+((l&7|0)==0?0:0-l&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=l+m|0;i=b-l-m|0;f[l+4>>2]=m|3;do if((j|0)!=(b|0)){if((f[6189]|0)==(b|0)){w=(f[6186]|0)+i|0;f[6186]=w;f[6189]=k;f[k+4>>2]=w|1;f[k+w>>2]=w;break}a=f[b+4>>2]|0;if((a&3|0)==1){h=a&-8;d=a>>>3;d:do if(a>>>0<256){a=f[b+8>>2]|0;c=f[b+12>>2]|0;if((c|0)==(a|0)){f[6184]=f[6184]&~(1<>2]=c;f[c+8>>2]=a;break}}else{g=f[b+24>>2]|0;a=f[b+12>>2]|0;do if((a|0)==(b|0)){d=b+16|0;c=d+4|0;a=f[c>>2]|0;if(!a){a=f[d>>2]|0;if(!a){a=0;break}else c=d}while(1){d=a+20|0;e=f[d>>2]|0;if(e|0){a=e;c=d;continue}d=a+16|0;e=f[d>>2]|0;if(!e)break;else{a=e;c=d}}f[c>>2]=0}else{w=f[b+8>>2]|0;f[w+12>>2]=a;f[a+8>>2]=w}while(0);if(!g)break;c=f[b+28>>2]|0;d=25040+(c<<2)|0;do if((f[d>>2]|0)!=(b|0)){f[g+16+(((f[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{f[d>>2]=a;if(a|0)break;f[6185]=f[6185]&~(1<>2]=g;c=b+16|0;d=f[c>>2]|0;if(d|0){f[a+16>>2]=d;f[d+24>>2]=a}c=f[c+4>>2]|0;if(!c)break;f[a+20>>2]=c;f[c+24>>2]=a}while(0);b=b+h|0;e=h+i|0}else e=i;b=b+4|0;f[b>>2]=f[b>>2]&-2;f[k+4>>2]=e|1;f[k+e>>2]=e;b=e>>>3;if(e>>>0<256){c=24776+(b<<1<<2)|0;a=f[6184]|0;b=1<>2]|0}f[a>>2]=k;f[b+12>>2]=k;f[k+8>>2]=b;f[k+12>>2]=c;break}b=e>>>8;do if(!b)b=0;else{if(e>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(t|v|b)+(w<>>15)|0;b=e>>>(b+7|0)&1|b<<1}while(0);d=25040+(b<<2)|0;f[k+28>>2]=b;a=k+16|0;f[a+4>>2]=0;f[a>>2]=0;a=f[6185]|0;c=1<>2]=k;f[k+24>>2]=d;f[k+12>>2]=k;f[k+8>>2]=k;break}a=e<<((b|0)==31?0:25-(b>>>1)|0);c=f[d>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(e|0)){v=192;break}d=c+16+(a>>>31<<2)|0;b=f[d>>2]|0;if(!b){v=191;break}else{a=a<<1;c=b}}if((v|0)==191){f[d>>2]=k;f[k+24>>2]=c;f[k+12>>2]=k;f[k+8>>2]=k;break}else if((v|0)==192){v=c+8|0;w=f[v>>2]|0;f[w+12>>2]=k;f[v>>2]=k;f[k+8>>2]=w;f[k+12>>2]=c;f[k+24>>2]=0;break}}else{w=(f[6187]|0)+i|0;f[6187]=w;f[6190]=k;f[k+4>>2]=w|1}while(0);w=l+8|0;u=x;return w|0}else a=25184;while(1){b=f[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(f[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=f[a+8>>2]|0}e=w+-47|0;a=e+8|0;a=e+((a&7|0)==0?0:0-a&7)|0;e=j+16|0;a=a>>>0>>0?j:a;b=a+8|0;c=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;v=g+t|0;t=c-t|0;f[6190]=v;f[6187]=t;f[v+4>>2]=t|1;f[g+c+4>>2]=40;f[6191]=f[6306];c=a+4|0;f[c>>2]=27;f[b>>2]=f[6296];f[b+4>>2]=f[6297];f[b+8>>2]=f[6298];f[b+12>>2]=f[6299];f[6296]=g;f[6297]=h;f[6299]=0;f[6298]=b;b=a+24|0;do{v=b;b=b+4|0;f[b>>2]=7}while((v+8|0)>>>0>>0);if((a|0)!=(j|0)){g=a-j|0;f[c>>2]=f[c>>2]&-2;f[j+4>>2]=g|1;f[a>>2]=g;b=g>>>3;if(g>>>0<256){c=24776+(b<<1<<2)|0;a=f[6184]|0;b=1<>2]|0}f[a>>2]=j;f[b+12>>2]=j;f[j+8>>2]=b;f[j+12>>2]=c;break}b=g>>>8;if(b)if(g>>>0>16777215)c=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;c=14-(t|v|c)+(w<>>15)|0;c=g>>>(c+7|0)&1|c<<1}else c=0;d=25040+(c<<2)|0;f[j+28>>2]=c;f[j+20>>2]=0;f[e>>2]=0;b=f[6185]|0;a=1<>2]=j;f[j+24>>2]=d;f[j+12>>2]=j;f[j+8>>2]=j;break}a=g<<((c|0)==31?0:25-(c>>>1)|0);c=f[d>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(g|0)){v=213;break}d=c+16+(a>>>31<<2)|0;b=f[d>>2]|0;if(!b){v=212;break}else{a=a<<1;c=b}}if((v|0)==212){f[d>>2]=j;f[j+24>>2]=c;f[j+12>>2]=j;f[j+8>>2]=j;break}else if((v|0)==213){v=c+8|0;w=f[v>>2]|0;f[w+12>>2]=j;f[v>>2]=j;f[j+8>>2]=w;f[j+12>>2]=c;f[j+24>>2]=0;break}}}else{w=f[6188]|0;if((w|0)==0|g>>>0>>0)f[6188]=g;f[6296]=g;f[6297]=h;f[6299]=0;f[6193]=f[6302];f[6192]=-1;f[6197]=24776;f[6196]=24776;f[6199]=24784;f[6198]=24784;f[6201]=24792;f[6200]=24792;f[6203]=24800;f[6202]=24800;f[6205]=24808;f[6204]=24808;f[6207]=24816;f[6206]=24816;f[6209]=24824;f[6208]=24824;f[6211]=24832;f[6210]=24832;f[6213]=24840;f[6212]=24840;f[6215]=24848;f[6214]=24848;f[6217]=24856;f[6216]=24856;f[6219]=24864;f[6218]=24864;f[6221]=24872;f[6220]=24872;f[6223]=24880;f[6222]=24880;f[6225]=24888;f[6224]=24888;f[6227]=24896;f[6226]=24896;f[6229]=24904;f[6228]=24904;f[6231]=24912;f[6230]=24912;f[6233]=24920;f[6232]=24920;f[6235]=24928;f[6234]=24928;f[6237]=24936;f[6236]=24936;f[6239]=24944;f[6238]=24944;f[6241]=24952;f[6240]=24952;f[6243]=24960;f[6242]=24960;f[6245]=24968;f[6244]=24968;f[6247]=24976;f[6246]=24976;f[6249]=24984;f[6248]=24984;f[6251]=24992;f[6250]=24992;f[6253]=25e3;f[6252]=25e3;f[6255]=25008;f[6254]=25008;f[6257]=25016;f[6256]=25016;f[6259]=25024;f[6258]=25024;w=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;v=g+t|0;t=w-t|0;f[6190]=v;f[6187]=t;f[v+4>>2]=t|1;f[g+w+4>>2]=40;f[6191]=f[6306]}while(0);b=f[6187]|0;if(b>>>0>m>>>0){t=b-m|0;f[6187]=t;w=f[6190]|0;v=w+m|0;f[6190]=v;f[v+4>>2]=t|1;f[w+4>>2]=m|3;w=w+8|0;u=x;return w|0}}w=Eh()|0;f[w>>2]=12;w=0;u=x;return w|0}function th(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0;if(!a)return;c=a+-8|0;e=f[6188]|0;a=f[a+-4>>2]|0;b=a&-8;j=c+b|0;do if(!(a&1)){d=f[c>>2]|0;if(!(a&3))return;h=c+(0-d)|0;g=d+b|0;if(h>>>0>>0)return;if((f[6189]|0)==(h|0)){a=j+4|0;b=f[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}f[6186]=g;f[a>>2]=b&-2;f[h+4>>2]=g|1;f[h+g>>2]=g;return}c=d>>>3;if(d>>>0<256){a=f[h+8>>2]|0;b=f[h+12>>2]|0;if((b|0)==(a|0)){f[6184]=f[6184]&~(1<>2]=b;f[b+8>>2]=a;i=h;b=g;break}}e=f[h+24>>2]|0;a=f[h+12>>2]|0;do if((a|0)==(h|0)){c=h+16|0;b=c+4|0;a=f[b>>2]|0;if(!a){a=f[c>>2]|0;if(!a){a=0;break}else b=c}while(1){c=a+20|0;d=f[c>>2]|0;if(d|0){a=d;b=c;continue}c=a+16|0;d=f[c>>2]|0;if(!d)break;else{a=d;b=c}}f[b>>2]=0}else{i=f[h+8>>2]|0;f[i+12>>2]=a;f[a+8>>2]=i}while(0);if(e){b=f[h+28>>2]|0;c=25040+(b<<2)|0;if((f[c>>2]|0)==(h|0)){f[c>>2]=a;if(!a){f[6185]=f[6185]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a){i=h;b=g;break}}f[a+24>>2]=e;b=h+16|0;c=f[b>>2]|0;if(c|0){f[a+16>>2]=c;f[c+24>>2]=a}b=f[b+4>>2]|0;if(b){f[a+20>>2]=b;f[b+24>>2]=a;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=c;h=c}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;d=f[a>>2]|0;if(!(d&1))return;if(!(d&2)){if((f[6190]|0)==(j|0)){j=(f[6187]|0)+b|0;f[6187]=j;f[6190]=i;f[i+4>>2]=j|1;if((i|0)!=(f[6189]|0))return;f[6189]=0;f[6186]=0;return}if((f[6189]|0)==(j|0)){j=(f[6186]|0)+b|0;f[6186]=j;f[6189]=h;f[i+4>>2]=j|1;f[h+j>>2]=j;return}e=(d&-8)+b|0;c=d>>>3;do if(d>>>0<256){b=f[j+8>>2]|0;a=f[j+12>>2]|0;if((a|0)==(b|0)){f[6184]=f[6184]&~(1<>2]=a;f[a+8>>2]=b;break}}else{g=f[j+24>>2]|0;a=f[j+12>>2]|0;do if((a|0)==(j|0)){c=j+16|0;b=c+4|0;a=f[b>>2]|0;if(!a){a=f[c>>2]|0;if(!a){c=0;break}else b=c}while(1){c=a+20|0;d=f[c>>2]|0;if(d|0){a=d;b=c;continue}c=a+16|0;d=f[c>>2]|0;if(!d)break;else{a=d;b=c}}f[b>>2]=0;c=a}else{c=f[j+8>>2]|0;f[c+12>>2]=a;f[a+8>>2]=c;c=a}while(0);if(g|0){a=f[j+28>>2]|0;b=25040+(a<<2)|0;if((f[b>>2]|0)==(j|0)){f[b>>2]=c;if(!c){f[6185]=f[6185]&~(1<>2]|0)!=(j|0)&1)<<2)>>2]=c;if(!c)break}f[c+24>>2]=g;a=j+16|0;b=f[a>>2]|0;if(b|0){f[c+16>>2]=b;f[b+24>>2]=c}a=f[a+4>>2]|0;if(a|0){f[c+20>>2]=a;f[a+24>>2]=c}}}while(0);f[i+4>>2]=e|1;f[h+e>>2]=e;if((i|0)==(f[6189]|0)){f[6186]=e;return}}else{f[a>>2]=d&-2;f[i+4>>2]=b|1;f[h+b>>2]=b;e=b}a=e>>>3;if(e>>>0<256){c=24776+(a<<1<<2)|0;b=f[6184]|0;a=1<>2]|0}f[b>>2]=i;f[a+12>>2]=i;f[i+8>>2]=a;f[i+12>>2]=c;return}a=e>>>8;if(a)if(e>>>0>16777215)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=e>>>(a+7|0)&1|a<<1}else a=0;d=25040+(a<<2)|0;f[i+28>>2]=a;f[i+20>>2]=0;f[i+16>>2]=0;b=f[6185]|0;c=1<>>1)|0);c=f[d>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(e|0)){a=73;break}d=c+16+(b>>>31<<2)|0;a=f[d>>2]|0;if(!a){a=72;break}else{b=b<<1;c=a}}if((a|0)==72){f[d>>2]=i;f[i+24>>2]=c;f[i+12>>2]=i;f[i+8>>2]=i;break}else if((a|0)==73){h=c+8|0;j=f[h>>2]|0;f[j+12>>2]=i;f[h>>2]=i;f[i+8>>2]=j;f[i+12>>2]=c;f[i+24>>2]=0;break}}else{f[6185]=b|c;f[d>>2]=i;f[i+24>>2]=d;f[i+12>>2]=i;f[i+8>>2]=i}while(0);j=(f[6192]|0)+-1|0;f[6192]=j;if(!j)a=25192;else return;while(1){a=f[a>>2]|0;if(!a)break;else a=a+8|0}f[6192]=-1;return}function uh(a,b){a=a|0;b=b|0;var c=0;if(a){c=X(b,a)|0;if((b|a)>>>0>65535)c=((c>>>0)/(a>>>0)|0|0)==(b|0)?c:-1}else c=0;a=sh(c)|0;if(!a)return a|0;if(!(f[a+-4>>2]&3))return a|0;ij(a|0,0,c|0)|0;return a|0}function vh(a,b){a=a|0;b=b|0;var c=0,d=0;if(!a){b=sh(b)|0;return b|0}if(b>>>0>4294967231){b=Eh()|0;f[b>>2]=12;b=0;return b|0}c=wh(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(c|0){b=c+8|0;return b|0}c=sh(b)|0;if(!c){b=0;return b|0}d=f[a+-4>>2]|0;d=(d&-8)-((d&3|0)==0?8:4)|0;hj(c|0,a|0,(d>>>0>>0?d:b)|0)|0;th(a);b=c;return b|0}function wh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=a+4|0;m=f[l>>2]|0;c=m&-8;i=a+c|0;if(!(m&3)){if(b>>>0<256){a=0;return a|0}if(c>>>0>=(b+4|0)>>>0?(c-b|0)>>>0<=f[6304]<<1>>>0:0)return a|0;a=0;return a|0}if(c>>>0>=b>>>0){c=c-b|0;if(c>>>0<=15)return a|0;k=a+b|0;f[l>>2]=m&1|b|2;f[k+4>>2]=c|3;m=i+4|0;f[m>>2]=f[m>>2]|1;xh(k,c);return a|0}if((f[6190]|0)==(i|0)){k=(f[6187]|0)+c|0;c=k-b|0;d=a+b|0;if(k>>>0<=b>>>0){a=0;return a|0}f[l>>2]=m&1|b|2;f[d+4>>2]=c|1;f[6190]=d;f[6187]=c;return a|0}if((f[6189]|0)==(i|0)){d=(f[6186]|0)+c|0;if(d>>>0>>0){a=0;return a|0}c=d-b|0;if(c>>>0>15){k=a+b|0;d=a+d|0;f[l>>2]=m&1|b|2;f[k+4>>2]=c|1;f[d>>2]=c;d=d+4|0;f[d>>2]=f[d>>2]&-2;d=k}else{f[l>>2]=m&1|d|2;d=a+d+4|0;f[d>>2]=f[d>>2]|1;d=0;c=0}f[6186]=c;f[6189]=d;return a|0}d=f[i+4>>2]|0;if(d&2|0){a=0;return a|0}j=(d&-8)+c|0;if(j>>>0>>0){a=0;return a|0}k=j-b|0;e=d>>>3;do if(d>>>0<256){d=f[i+8>>2]|0;c=f[i+12>>2]|0;if((c|0)==(d|0)){f[6184]=f[6184]&~(1<>2]=c;f[c+8>>2]=d;break}}else{h=f[i+24>>2]|0;c=f[i+12>>2]|0;do if((c|0)==(i|0)){e=i+16|0;d=e+4|0;c=f[d>>2]|0;if(!c){c=f[e>>2]|0;if(!c){e=0;break}else g=e}else g=d;while(1){e=c+20|0;d=f[e>>2]|0;if(d|0){c=d;g=e;continue}d=c+16|0;e=f[d>>2]|0;if(!e)break;else{c=e;g=d}}f[g>>2]=0;e=c}else{e=f[i+8>>2]|0;f[e+12>>2]=c;f[c+8>>2]=e;e=c}while(0);if(h|0){c=f[i+28>>2]|0;d=25040+(c<<2)|0;if((f[d>>2]|0)==(i|0)){f[d>>2]=e;if(!e){f[6185]=f[6185]&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=e;if(!e)break}f[e+24>>2]=h;c=i+16|0;d=f[c>>2]|0;if(d|0){f[e+16>>2]=d;f[d+24>>2]=e}c=f[c+4>>2]|0;if(c|0){f[e+20>>2]=c;f[c+24>>2]=e}}}while(0);if(k>>>0<16){f[l>>2]=j|m&1|2;m=a+j+4|0;f[m>>2]=f[m>>2]|1;return a|0}else{i=a+b|0;f[l>>2]=m&1|b|2;f[i+4>>2]=k|3;m=a+j+4|0;f[m>>2]=f[m>>2]|1;xh(i,k);return a|0}return 0}function xh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0;i=a+b|0;c=f[a+4>>2]|0;do if(!(c&1)){e=f[a>>2]|0;if(!(c&3))return;h=a+(0-e)|0;b=e+b|0;if((f[6189]|0)==(h|0)){a=i+4|0;c=f[a>>2]|0;if((c&3|0)!=3)break;f[6186]=b;f[a>>2]=c&-2;f[h+4>>2]=b|1;f[i>>2]=b;return}d=e>>>3;if(e>>>0<256){a=f[h+8>>2]|0;c=f[h+12>>2]|0;if((c|0)==(a|0)){f[6184]=f[6184]&~(1<>2]=c;f[c+8>>2]=a;break}}g=f[h+24>>2]|0;a=f[h+12>>2]|0;do if((a|0)==(h|0)){d=h+16|0;c=d+4|0;a=f[c>>2]|0;if(!a){a=f[d>>2]|0;if(!a){a=0;break}else c=d}while(1){d=a+20|0;e=f[d>>2]|0;if(e|0){a=e;c=d;continue}d=a+16|0;e=f[d>>2]|0;if(!e)break;else{a=e;c=d}}f[c>>2]=0}else{e=f[h+8>>2]|0;f[e+12>>2]=a;f[a+8>>2]=e}while(0);if(g){c=f[h+28>>2]|0;d=25040+(c<<2)|0;if((f[d>>2]|0)==(h|0)){f[d>>2]=a;if(!a){f[6185]=f[6185]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a)break}f[a+24>>2]=g;c=h+16|0;d=f[c>>2]|0;if(d|0){f[a+16>>2]=d;f[d+24>>2]=a}c=f[c+4>>2]|0;if(c){f[a+20>>2]=c;f[c+24>>2]=a}}}else h=a;while(0);a=i+4|0;d=f[a>>2]|0;if(!(d&2)){if((f[6190]|0)==(i|0)){i=(f[6187]|0)+b|0;f[6187]=i;f[6190]=h;f[h+4>>2]=i|1;if((h|0)!=(f[6189]|0))return;f[6189]=0;f[6186]=0;return}if((f[6189]|0)==(i|0)){i=(f[6186]|0)+b|0;f[6186]=i;f[6189]=h;f[h+4>>2]=i|1;f[h+i>>2]=i;return}e=(d&-8)+b|0;c=d>>>3;do if(d>>>0<256){a=f[i+8>>2]|0;b=f[i+12>>2]|0;if((b|0)==(a|0)){f[6184]=f[6184]&~(1<>2]=b;f[b+8>>2]=a;break}}else{g=f[i+24>>2]|0;b=f[i+12>>2]|0;do if((b|0)==(i|0)){c=i+16|0;a=c+4|0;b=f[a>>2]|0;if(!b){b=f[c>>2]|0;if(!b){c=0;break}else a=c}while(1){c=b+20|0;d=f[c>>2]|0;if(d|0){b=d;a=c;continue}c=b+16|0;d=f[c>>2]|0;if(!d)break;else{b=d;a=c}}f[a>>2]=0;c=b}else{c=f[i+8>>2]|0;f[c+12>>2]=b;f[b+8>>2]=c;c=b}while(0);if(g|0){b=f[i+28>>2]|0;a=25040+(b<<2)|0;if((f[a>>2]|0)==(i|0)){f[a>>2]=c;if(!c){f[6185]=f[6185]&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=c;if(!c)break}f[c+24>>2]=g;b=i+16|0;a=f[b>>2]|0;if(a|0){f[c+16>>2]=a;f[a+24>>2]=c}b=f[b+4>>2]|0;if(b|0){f[c+20>>2]=b;f[b+24>>2]=c}}}while(0);f[h+4>>2]=e|1;f[h+e>>2]=e;if((h|0)==(f[6189]|0)){f[6186]=e;return}}else{f[a>>2]=d&-2;f[h+4>>2]=b|1;f[h+b>>2]=b;e=b}b=e>>>3;if(e>>>0<256){c=24776+(b<<1<<2)|0;a=f[6184]|0;b=1<>2]|0}f[a>>2]=h;f[b+12>>2]=h;f[h+8>>2]=b;f[h+12>>2]=c;return}b=e>>>8;if(b)if(e>>>0>16777215)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(d|g|b)+(i<>>15)|0;b=e>>>(b+7|0)&1|b<<1}else b=0;d=25040+(b<<2)|0;f[h+28>>2]=b;f[h+20>>2]=0;f[h+16>>2]=0;a=f[6185]|0;c=1<>2]=h;f[h+24>>2]=d;f[h+12>>2]=h;f[h+8>>2]=h;return}a=e<<((b|0)==31?0:25-(b>>>1)|0);c=f[d>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(e|0)){b=69;break}d=c+16+(a>>>31<<2)|0;b=f[d>>2]|0;if(!b){b=68;break}else{a=a<<1;c=b}}if((b|0)==68){f[d>>2]=h;f[h+24>>2]=c;f[h+12>>2]=h;f[h+8>>2]=h;return}else if((b|0)==69){g=c+8|0;i=f[g>>2]|0;f[i+12>>2]=h;f[g>>2]=h;f[h+8>>2]=i;f[h+12>>2]=c;f[h+24>>2]=0;return}}function yh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0;a=a>>>0>16?a:16;if(a+-1&a){c=16;while(1)if(c>>>0>>0)c=c<<1;else{a=c;break}}if((-64-a|0)>>>0<=b>>>0){h=Eh()|0;f[h>>2]=12;h=0;return h|0}g=b>>>0<11?16:b+11&-8;c=sh(g+12+a|0)|0;if(!c){h=0;return h|0}e=c+-8|0;do if(a+-1&c){d=(c+a+-1&0-a)+-8|0;b=e;d=(d-b|0)>>>0>15?d:d+a|0;b=d-b|0;a=c+-4|0;i=f[a>>2]|0;c=(i&-8)-b|0;if(!(i&3)){f[d>>2]=(f[e>>2]|0)+b;f[d+4>>2]=c;a=d;b=d;break}else{i=d+4|0;f[i>>2]=c|f[i>>2]&1|2;c=d+c+4|0;f[c>>2]=f[c>>2]|1;f[a>>2]=b|f[a>>2]&1|2;f[i>>2]=f[i>>2]|1;xh(e,b);a=d;b=d;break}}else{a=e;b=e}while(0);a=a+4|0;c=f[a>>2]|0;if(c&3|0?(h=c&-8,h>>>0>(g+16|0)>>>0):0){i=h-g|0;e=b+g|0;f[a>>2]=g|c&1|2;f[e+4>>2]=i|3;h=b+h+4|0;f[h>>2]=f[h>>2]|1;xh(e,i)}i=b+8|0;return i|0}function zh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;do if((b|0)!=8){d=b>>>2;if((b&3|0)!=0|(d|0)==0){a=22;return a|0}if(d+1073741823&d|0){a=22;return a|0}if((-64-b|0)>>>0>>0){a=12;return a|0}else{b=yh(b>>>0>16?b:16,c)|0;break}}else b=sh(c)|0;while(0);if(!b){a=12;return a|0}f[a>>2]=b;a=0;return a|0}function Ah(a){a=a|0;var b=0,c=0;b=u;u=u+16|0;c=b;a=Fh(f[a+60>>2]|0)|0;f[c>>2]=a;a=Dh(za(6,c|0)|0)|0;u=b;return a|0}function Bh(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=u;u=u+48|0;k=m+16|0;g=m;e=m+32|0;i=a+28|0;d=f[i>>2]|0;f[e>>2]=d;j=a+20|0;d=(f[j>>2]|0)-d|0;f[e+4>>2]=d;f[e+8>>2]=b;f[e+12>>2]=c;d=d+c|0;h=a+60|0;f[g>>2]=f[h>>2];f[g+4>>2]=e;f[g+8>>2]=2;g=Dh(va(146,g|0)|0)|0;a:do if((d|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;d=d-g|0;o=f[e+4>>2]|0;n=g>>>0>o>>>0;e=n?e+8|0:e;b=b+(n<<31>>31)|0;o=g-(n?o:0)|0;f[e>>2]=(f[e>>2]|0)+o;n=e+4|0;f[n>>2]=(f[n>>2]|0)-o;f[k>>2]=f[h>>2];f[k+4>>2]=e;f[k+8>>2]=b;g=Dh(va(146,k|0)|0)|0;if((d|0)==(g|0)){l=3;break a}}f[a+16>>2]=0;f[i>>2]=0;f[j>>2]=0;f[a>>2]=f[a>>2]|32;if((b|0)==2)c=0;else c=c-(f[e+4>>2]|0)|0}else l=3;while(0);if((l|0)==3){o=f[a+44>>2]|0;f[a+16>>2]=o+(f[a+48>>2]|0);f[i>>2]=o;f[j>>2]=o}u=m;return c|0}function Ch(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;e=u;u=u+32|0;g=e;d=e+20|0;f[g>>2]=f[a+60>>2];f[g+4>>2]=0;f[g+8>>2]=b;f[g+12>>2]=d;f[g+16>>2]=c;if((Dh(ta(140,g|0)|0)|0)<0){f[d>>2]=-1;a=-1}else a=f[d>>2]|0;u=e;return a|0}function Dh(a){a=a|0;var b=0;if(a>>>0>4294963200){b=Eh()|0;f[b>>2]=0-a;a=-1}return a|0}function Eh(){return 25296}function Fh(a){a=a|0;return a|0}function Gh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0;k=u;u=u+32|0;e=k;i=k+16|0;f[i>>2]=c;g=i+4|0;j=a+48|0;l=f[j>>2]|0;f[g>>2]=d-((l|0)!=0&1);h=a+44|0;f[i+8>>2]=f[h>>2];f[i+12>>2]=l;f[e>>2]=f[a+60>>2];f[e+4>>2]=i;f[e+8>>2]=2;e=Dh(ua(145,e|0)|0)|0;if((e|0)>=1){i=f[g>>2]|0;if(e>>>0>i>>>0){g=f[h>>2]|0;h=a+4|0;f[h>>2]=g;f[a+8>>2]=g+(e-i);if(!(f[j>>2]|0))e=d;else{f[h>>2]=g+1;b[c+(d+-1)>>0]=b[g>>0]|0;e=d}}}else f[a>>2]=f[a>>2]|e&48^16;u=k;return e|0}function Hh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0;g=u;u=u+32|0;e=g;f[a+36>>2]=61;if((f[a>>2]&64|0)==0?(f[e>>2]=f[a+60>>2],f[e+4>>2]=21523,f[e+8>>2]=g+16,ya(54,e|0)|0):0)b[a+75>>0]=-1;e=Bh(a,c,d)|0;u=g;return e|0}function Ih(){return 2792}function Jh(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a>>0]|0;e=b[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24)a=e;else{do{a=a+1|0;c=c+1|0;d=b[a>>0]|0;e=b[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));a=e}return (d&255)-(a&255)|0}function Kh(a){a=a|0;var c=0,d=0,e=0;e=a;a:do if(!(e&3))d=4;else{c=e;while(1){if(!(b[a>>0]|0)){a=c;break a}a=a+1|0;c=a;if(!(c&3)){d=4;break}}}while(0);if((d|0)==4){while(1){c=f[a>>2]|0;if(!((c&-2139062144^-2139062144)&c+-16843009))a=a+4|0;else break}if((c&255)<<24>>24)do a=a+1|0;while((b[a>>0]|0)!=0)}return a-e|0}function Lh(a,b){a=a|0;b=b|0;var c=0;c=Kh(a)|0;return ((Mh(a,1,c,b)|0)!=(c|0))<<31>>31|0}function Mh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;e=X(c,b)|0;c=(b|0)==0?0:c;if((f[d+76>>2]|0)>-1){g=(Qh(d)|0)==0;a=Th(a,e,d)|0;if(!g)Oh(d)}else a=Th(a,e,d)|0;if((a|0)!=(e|0))c=(a>>>0)/(b>>>0)|0;return c|0}function Nh(a){a=a|0;var b=0;if(f[a+68>>2]|0){b=f[a+116>>2]|0;a=a+112|0;if(b|0)f[b+112>>2]=f[a>>2];a=f[a>>2]|0;if(!a)a=(Ph()|0)+232|0;else a=a+116|0;f[a>>2]=b}return}function Oh(a){a=a|0;return}function Ph(){return Ih()|0}function Qh(a){a=a|0;return 0}function Rh(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0;l=u;u=u+16|0;j=l;k=c&255;b[j>>0]=k;e=a+16|0;g=f[e>>2]|0;if(!g)if(!(Sh(a)|0)){g=f[e>>2]|0;i=4}else d=-1;else i=4;do if((i|0)==4){i=a+20|0;e=f[i>>2]|0;if(e>>>0>>0?(d=c&255,(d|0)!=(b[a+75>>0]|0)):0){f[i>>2]=e+1;b[e>>0]=k;break}if((Ma[f[a+36>>2]&63](a,j,1)|0)==1)d=h[j>>0]|0;else d=-1}while(0);u=l;return d|0}function Sh(a){a=a|0;var c=0,d=0;c=a+74|0;d=b[c>>0]|0;b[c>>0]=d+255|d;c=f[a>>2]|0;if(!(c&8)){f[a+8>>2]=0;f[a+4>>2]=0;d=f[a+44>>2]|0;f[a+28>>2]=d;f[a+20>>2]=d;f[a+16>>2]=d+(f[a+48>>2]|0);a=0}else{f[a>>2]=c|32;a=-1}return a|0}function Th(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;e=d+16|0;g=f[e>>2]|0;if(!g)if(!(Sh(d)|0)){g=f[e>>2]|0;h=5}else e=0;else h=5;a:do if((h|0)==5){j=d+20|0;i=f[j>>2]|0;e=i;if((g-i|0)>>>0>>0){e=Ma[f[d+36>>2]&63](d,a,c)|0;break}b:do if((b[d+75>>0]|0)>-1){i=c;while(1){if(!i){h=0;g=a;break b}g=i+-1|0;if((b[a+g>>0]|0)==10)break;else i=g}e=Ma[f[d+36>>2]&63](d,a,i)|0;if(e>>>0>>0)break a;h=i;g=a+i|0;c=c-i|0;e=f[j>>2]|0}else{h=0;g=a}while(0);hj(e|0,g|0,c|0)|0;f[j>>2]=(f[j>>2]|0)+c;e=h+c|0}while(0);return e|0}function Uh(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Vh(f[b>>2]|0,f[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Vh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(f[a>>2]|0)+1794895138|0;h=Wh(f[a+8>>2]|0,o)|0;e=Wh(f[a+12>>2]|0,o)|0;g=Wh(f[a+16>>2]|0,o)|0;a:do if((h>>>0>>2>>>0?(n=c-(h<<2)|0,e>>>0>>0&g>>>0>>0):0)?((g|e)&3|0)==0:0){n=e>>>2;m=g>>>2;l=0;while(1){j=h>>>1;k=l+j|0;i=k<<1;g=i+n|0;e=Wh(f[a+(g<<2)>>2]|0,o)|0;g=Wh(f[a+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0>>0&e>>>0<(c-g|0)>>>0)){e=0;break a}if(b[a+(g+e)>>0]|0){e=0;break a}e=Jh(d,a+g|0)|0;if(!e)break;e=(e|0)<0;if((h|0)==1){e=0;break a}else{l=e?l:k;h=e?j:h-j|0}}e=i+m|0;g=Wh(f[a+(e<<2)>>2]|0,o)|0;e=Wh(f[a+(e+1<<2)>>2]|0,o)|0;if(e>>>0>>0&g>>>0<(c-e|0)>>>0)e=(b[a+(e+g)>>0]|0)==0?a+e|0:0;else e=0}else e=0;while(0);return e|0}function Wh(a,b){a=a|0;b=b|0;var c=0;c=gj(a|0)|0;return ((b|0)==0?a:c)|0}function Xh(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;i=u;u=u+48|0;h=i+32|0;g=i+16|0;d=i;if(Yh(22305,b[c>>0]|0,4)|0){e=Zh(c)|0;f[d>>2]=a;f[d+4>>2]=e|32768;f[d+8>>2]=438;d=Dh(xa(5,d|0)|0)|0;if((d|0)>=0){if(e&524288|0){f[g>>2]=d;f[g+4>>2]=2;f[g+8>>2]=1;wa(221,g|0)|0}a=_h(d,c)|0;if(!a){f[h>>2]=d;za(6,h|0)|0;a=0}}else a=0}else{a=Eh()|0;f[a>>2]=22;a=0}u=i;return a|0}function Yh(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;h=c&255;e=(d|0)!=0;a:do if(e&(a&3|0)!=0){g=c&255;while(1){if((b[a>>0]|0)==g<<24>>24){i=6;break a}a=a+1|0;d=d+-1|0;e=(d|0)!=0;if(!(e&(a&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(e)i=6;else d=0;b:do if((i|0)==6){g=c&255;if((b[a>>0]|0)!=g<<24>>24){e=X(h,16843009)|0;c:do if(d>>>0>3)while(1){h=f[a>>2]^e;if((h&-2139062144^-2139062144)&h+-16843009|0)break;a=a+4|0;d=d+-4|0;if(d>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!d){d=0;break}while(1){if((b[a>>0]|0)==g<<24>>24)break b;a=a+1|0;d=d+-1|0;if(!d){d=0;break}}}}while(0);return (d|0?a:0)|0}function Zh(a){a=a|0;var c=0,d=0,e=0;d=($h(a,43)|0)==0;c=b[a>>0]|0;d=d?c<<24>>24!=114&1:2;e=($h(a,120)|0)==0;d=e?d:d|128;a=($h(a,101)|0)==0;a=a?d:d|524288;a=c<<24>>24==114?a:a|64;a=c<<24>>24==119?a|512:a;return (c<<24>>24==97?a|1024:a)|0}function _h(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=u;u=u+64|0;m=n+40|0;k=n+24|0;j=n+16|0;g=n;l=n+56|0;e=b[c>>0]|0;if(Yh(22305,e<<24>>24,4)|0){d=sh(1156)|0;if(!d)d=0;else{h=d;i=h+124|0;do{f[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!($h(c,43)|0))f[d>>2]=e<<24>>24==114?8:4;if($h(c,101)|0){f[g>>2]=a;f[g+4>>2]=2;f[g+8>>2]=1;wa(221,g|0)|0;e=b[c>>0]|0}if(e<<24>>24==97){f[j>>2]=a;f[j+4>>2]=3;e=wa(221,j|0)|0;if(!(e&1024)){f[k>>2]=a;f[k+4>>2]=4;f[k+8>>2]=e|1024;wa(221,k|0)|0}c=f[d>>2]|128;f[d>>2]=c}else c=f[d>>2]|0;f[d+60>>2]=a;f[d+44>>2]=d+132;f[d+48>>2]=1024;e=d+75|0;b[e>>0]=-1;if((c&8|0)==0?(f[m>>2]=a,f[m+4>>2]=21523,f[m+8>>2]=l,(ya(54,m|0)|0)==0):0)b[e>>0]=10;f[d+32>>2]=62;f[d+36>>2]=61;f[d+40>>2]=2;f[d+12>>2]=1;if(!(f[6309]|0))f[d+76>>2]=-1;ai(d)|0}}else{d=Eh()|0;f[d>>2]=22;d=0}u=n;return d|0}function $h(a,c){a=a|0;c=c|0;a=di(a,c)|0;return ((b[a>>0]|0)==(c&255)<<24>>24?a:0)|0}function ai(a){a=a|0;var b=0,c=0;b=bi()|0;f[a+56>>2]=f[b>>2];c=f[b>>2]|0;if(c|0)f[c+52>>2]=a;f[b>>2]=a;ci();return a|0}function bi(){ra(25300);return 25308}function ci(){Aa(25300);return}function di(a,c){a=a|0;c=c|0;var d=0,e=0,g=0;e=c&255;a:do if(!e)a=a+(Kh(a)|0)|0;else{if(a&3){d=c&255;do{g=b[a>>0]|0;if(g<<24>>24==0?1:g<<24>>24==d<<24>>24)break a;a=a+1|0}while((a&3|0)!=0)}e=X(e,16843009)|0;d=f[a>>2]|0;b:do if(!((d&-2139062144^-2139062144)&d+-16843009))do{g=d^e;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;a=a+4|0;d=f[a>>2]|0}while(!((d&-2139062144^-2139062144)&d+-16843009|0));while(0);d=c&255;while(1){g=b[a>>0]|0;if(g<<24>>24==0?1:g<<24>>24==d<<24>>24)break;else a=a+1|0}}while(0);return a|0}function ei(a){a=a|0;var b=0,c=0,d=0,e=0,g=0;if((f[a+76>>2]|0)>-1)e=Qh(a)|0;else e=0;Nh(a);g=(f[a>>2]&1|0)!=0;if(!g){d=bi()|0;c=f[a+52>>2]|0;b=a+56|0;if(c|0)f[c+56>>2]=f[b>>2];b=f[b>>2]|0;if(b|0)f[b+52>>2]=c;if((f[d>>2]|0)==(a|0))f[d>>2]=b;ci()}b=fi(a)|0;b=Ka[f[a+12>>2]&15](a)|0|b;c=f[a+92>>2]|0;if(c|0)th(c);if(g){if(e|0)Oh(a)}else th(a);return b|0}\nfunction fi(a){a=a|0;var b=0,c=0;do if(a){if((f[a+76>>2]|0)<=-1){b=gi(a)|0;break}c=(Qh(a)|0)==0;b=gi(a)|0;if(!c)Oh(a)}else{if(!(f[697]|0))b=0;else b=fi(f[697]|0)|0;a=bi()|0;a=f[a>>2]|0;if(a)do{if((f[a+76>>2]|0)>-1)c=Qh(a)|0;else c=0;if((f[a+20>>2]|0)>>>0>(f[a+28>>2]|0)>>>0)b=gi(a)|0|b;if(c|0)Oh(a);a=f[a+56>>2]|0}while((a|0)!=0);ci()}while(0);return b|0}function gi(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;b=a+20|0;h=a+28|0;if((f[b>>2]|0)>>>0>(f[h>>2]|0)>>>0?(Ma[f[a+36>>2]&63](a,0,0)|0,(f[b>>2]|0)==0):0)a=-1;else{c=a+4|0;d=f[c>>2]|0;e=a+8|0;g=f[e>>2]|0;if(d>>>0>>0)Ma[f[a+40>>2]&63](a,d-g|0,1)|0;f[a+16>>2]=0;f[h>>2]=0;f[b>>2]=0;f[e>>2]=0;f[c>>2]=0;a=0}return a|0}function hi(a,b){a=+a;b=b|0;var c=0,d=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;d=(b|0)<-2044;c=b+2044|0;a=d?a*2.2250738585072014e-308:a;b=d?((c|0)>-1022?c:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;c=(b|0)>2046;d=b+-2046|0;a=c?a*8988465674311579538646525.0e283:a;b=c?((d|0)<1023?d:1023):b+-1023|0}c=fj(b+1023|0,0,52)|0;d=I;f[s>>2]=c;f[s+4>>2]=d;return +(a*+p[s>>3])}function ii(a){a=a|0;var c=0,d=0;c=a+74|0;d=b[c>>0]|0;b[c>>0]=d+255|d;c=a+20|0;d=a+28|0;if((f[c>>2]|0)>>>0>(f[d>>2]|0)>>>0)Ma[f[a+36>>2]&63](a,0,0)|0;f[a+16>>2]=0;f[d>>2]=0;f[c>>2]=0;c=f[a>>2]|0;if(!(c&4)){d=(f[a+44>>2]|0)+(f[a+48>>2]|0)|0;f[a+8>>2]=d;f[a+4>>2]=d;c=c<<27>>31}else{f[a>>2]=c|32;c=-1}return c|0}function ji(a,b,c){a=a|0;b=b|0;c=c|0;return Fi(a,b,c)|0}function ki(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=u;u=u+16|0;e=d;f[e>>2]=c;c=li(a,b,e)|0;u=d;return c|0}function li(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=u;u=u+224|0;m=r+120|0;n=r+80|0;p=r;q=r+136|0;e=n;g=e+40|0;do{f[e>>2]=0;e=e+4|0}while((e|0)<(g|0));f[m>>2]=f[d>>2];if((mi(0,c,m,p,n)|0)<0)d=-1;else{if((f[a+76>>2]|0)>-1)o=Qh(a)|0;else o=0;d=f[a>>2]|0;l=d&32;if((b[a+74>>0]|0)<1)f[a>>2]=d&-33;e=a+48|0;if(!(f[e>>2]|0)){g=a+44|0;h=f[g>>2]|0;f[g>>2]=q;i=a+28|0;f[i>>2]=q;j=a+20|0;f[j>>2]=q;f[e>>2]=80;k=a+16|0;f[k>>2]=q+80;d=mi(a,c,m,p,n)|0;if(h){Ma[f[a+36>>2]&63](a,0,0)|0;d=(f[j>>2]|0)==0?-1:d;f[g>>2]=h;f[e>>2]=0;f[k>>2]=0;f[i>>2]=0;f[j>>2]=0}}else d=mi(a,c,m,p,n)|0;e=f[a>>2]|0;f[a>>2]=e|l;if(o|0)Oh(a);d=(e&32|0)==0?d:-1}u=r;return d|0}function mi(a,c,e,g,h){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+64|0;C=G+16|0;D=G;A=G+24|0;E=G+8|0;F=G+20|0;f[C>>2]=c;x=(a|0)!=0;y=A+40|0;z=y;A=A+39|0;B=E+4|0;j=0;i=0;n=0;a:while(1){do if((i|0)>-1)if((j|0)>(2147483647-i|0)){i=Eh()|0;f[i>>2]=75;i=-1;break}else{i=j+i|0;break}while(0);j=b[c>>0]|0;if(!(j<<24>>24)){w=86;break}else k=c;b:while(1){switch(j<<24>>24){case 37:{j=k;w=9;break b}case 0:{j=k;break b}default:{}}v=k+1|0;f[C>>2]=v;j=b[v>>0]|0;k=v}c:do if((w|0)==9)while(1){w=0;if((b[k+1>>0]|0)!=37)break c;j=j+1|0;k=k+2|0;f[C>>2]=k;if((b[k>>0]|0)==37)w=9;else break}while(0);j=j-c|0;if(x)ni(a,c,j);if(j|0){c=k;continue}l=k+1|0;j=(b[l>>0]|0)+-48|0;if(j>>>0<10){v=(b[k+2>>0]|0)==36;s=v?j:-1;n=v?1:n;l=v?k+3|0:l}else s=-1;f[C>>2]=l;j=b[l>>0]|0;v=(j<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|k;l=l+1|0;f[C>>2]=l;j=b[l>>0]|0;v=(j<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){m=l+1|0;j=(b[m>>0]|0)+-48|0;if(j>>>0<10?(b[l+2>>0]|0)==36:0){f[h+(j<<2)>>2]=10;j=f[g+((b[m>>0]|0)+-48<<3)>>2]|0;n=1;l=l+3|0}else{if(n|0){i=-1;break}if(x){n=(f[e>>2]|0)+(4-1)&~(4-1);j=f[n>>2]|0;f[e>>2]=n+4;n=0;l=m}else{j=0;n=0;l=m}}f[C>>2]=l;t=(j|0)<0;j=t?0-j|0:j;t=t?k|8192:k}else{j=oi(C)|0;if((j|0)<0){i=-1;break}t=k;l=f[C>>2]|0}do if((b[l>>0]|0)==46){if((b[l+1>>0]|0)!=42){f[C>>2]=l+1;k=oi(C)|0;l=f[C>>2]|0;break}m=l+2|0;k=(b[m>>0]|0)+-48|0;if(k>>>0<10?(b[l+3>>0]|0)==36:0){f[h+(k<<2)>>2]=10;k=f[g+((b[m>>0]|0)+-48<<3)>>2]|0;l=l+4|0;f[C>>2]=l;break}if(n|0){i=-1;break a}if(x){v=(f[e>>2]|0)+(4-1)&~(4-1);k=f[v>>2]|0;f[e>>2]=v+4}else k=0;f[C>>2]=m;l=m}else k=-1;while(0);r=0;while(1){if(((b[l>>0]|0)+-65|0)>>>0>57){i=-1;break a}v=l+1|0;f[C>>2]=v;m=b[(b[l>>0]|0)+-65+(22309+(r*58|0))>>0]|0;o=m&255;if((o+-1|0)>>>0<8){r=o;l=v}else break}if(!(m<<24>>24)){i=-1;break}q=(s|0)>-1;do if(m<<24>>24==19)if(q){i=-1;break a}else w=48;else{if(q){f[h+(s<<2)>>2]=o;q=g+(s<<3)|0;s=f[q+4>>2]|0;w=D;f[w>>2]=f[q>>2];f[w+4>>2]=s;w=48;break}if(!x){i=0;break a}pi(D,o,e)}while(0);if((w|0)==48?(w=0,!x):0){j=0;c=v;continue}l=b[l>>0]|0;l=(r|0)!=0&(l&15|0)==3?l&-33:l;s=t&-65537;t=(t&8192|0)==0?t:s;d:do switch(l|0){case 110:switch((r&255)<<24>>24){case 0:{f[f[D>>2]>>2]=i;j=0;c=v;continue a}case 1:{f[f[D>>2]>>2]=i;j=0;c=v;continue a}case 2:{j=f[D>>2]|0;f[j>>2]=i;f[j+4>>2]=((i|0)<0)<<31>>31;j=0;c=v;continue a}case 3:{d[f[D>>2]>>1]=i;j=0;c=v;continue a}case 4:{b[f[D>>2]>>0]=i;j=0;c=v;continue a}case 6:{f[f[D>>2]>>2]=i;j=0;c=v;continue a}case 7:{j=f[D>>2]|0;f[j>>2]=i;f[j+4>>2]=((i|0)<0)<<31>>31;j=0;c=v;continue a}default:{j=0;c=v;continue a}}case 112:{l=120;k=k>>>0>8?k:8;c=t|8;w=60;break}case 88:case 120:{c=t;w=60;break}case 111:{l=D;c=f[l>>2]|0;l=f[l+4>>2]|0;q=ri(c,l,y)|0;r=z-q|0;m=0;o=22773;k=(t&8|0)==0|(k|0)>(r|0)?k:r+1|0;r=t;w=66;break}case 105:case 100:{l=D;c=f[l>>2]|0;l=f[l+4>>2]|0;if((l|0)<0){c=_i(0,0,c|0,l|0)|0;l=I;m=D;f[m>>2]=c;f[m+4>>2]=l;m=1;o=22773;w=65;break d}else{m=(t&2049|0)!=0&1;o=(t&2048|0)==0?((t&1|0)==0?22773:22775):22774;w=65;break d}}case 117:{l=D;m=0;o=22773;c=f[l>>2]|0;l=f[l+4>>2]|0;w=65;break}case 99:{b[A>>0]=f[D>>2];c=A;m=0;o=22773;q=y;l=1;k=s;break}case 109:{l=Eh()|0;l=ti(f[l>>2]|0)|0;w=70;break}case 115:{l=f[D>>2]|0;l=l|0?l:22783;w=70;break}case 67:{f[E>>2]=f[D>>2];f[B>>2]=0;f[D>>2]=E;q=-1;l=E;w=74;break}case 83:{c=f[D>>2]|0;if(!k){ui(a,32,j,0,t);c=0;w=83}else{q=k;l=c;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{j=wi(a,+p[D>>3],j,k,t,l)|0;c=v;continue a}default:{m=0;o=22773;q=y;l=k;k=t}}while(0);e:do if((w|0)==60){t=D;s=f[t>>2]|0;t=f[t+4>>2]|0;q=qi(s,t,y,l&32)|0;o=(c&8|0)==0|(s|0)==0&(t|0)==0;m=o?0:2;o=o?22773:22773+(l>>4)|0;r=c;c=s;l=t;w=66}else if((w|0)==65){q=si(c,l,y)|0;r=t;w=66}else if((w|0)==70){w=0;t=Yh(l,0,k)|0;r=(t|0)==0;c=l;m=0;o=22773;q=r?l+k|0:t;l=r?k:t-l|0;k=s}else if((w|0)==74){w=0;o=l;c=0;k=0;while(1){m=f[o>>2]|0;if(!m)break;k=vi(F,m)|0;if((k|0)<0|k>>>0>(q-c|0)>>>0)break;c=k+c|0;if(q>>>0>c>>>0)o=o+4|0;else break}if((k|0)<0){i=-1;break a}ui(a,32,j,c,t);if(!c){c=0;w=83}else{m=0;while(1){k=f[l>>2]|0;if(!k){w=83;break e}k=vi(F,k)|0;m=k+m|0;if((m|0)>(c|0)){w=83;break e}ni(a,F,k);if(m>>>0>=c>>>0){w=83;break}else l=l+4|0}}}while(0);if((w|0)==66){w=0;l=(c|0)!=0|(l|0)!=0;t=(k|0)!=0|l;l=z-q+((l^1)&1)|0;c=t?q:y;q=y;l=t?((k|0)>(l|0)?k:l):k;k=(k|0)>-1?r&-65537:r}else if((w|0)==83){w=0;ui(a,32,j,c,t^8192);j=(j|0)>(c|0)?j:c;c=v;continue}s=q-c|0;r=(l|0)<(s|0)?s:l;t=r+m|0;j=(j|0)<(t|0)?t:j;ui(a,32,j,t,k);ni(a,o,m);ui(a,48,j,t,k^65536);ui(a,48,r,s,0);ni(a,c,s);ui(a,32,j,t,k^8192);c=v}f:do if((w|0)==86)if(!a)if(n){i=1;while(1){c=f[h+(i<<2)>>2]|0;if(!c)break;pi(g+(i<<3)|0,c,e);c=i+1|0;if((i|0)<9)i=c;else{i=c;break}}if((i|0)<10)while(1){if(f[h+(i<<2)>>2]|0){i=-1;break f}if((i|0)<9)i=i+1|0;else{i=1;break}}else i=1}else i=0;while(0);u=G;return i|0}function ni(a,b,c){a=a|0;b=b|0;c=c|0;if(!(f[a>>2]&32))Th(b,c,a)|0;return}function oi(a){a=a|0;var c=0,d=0,e=0;d=f[a>>2]|0;e=(b[d>>0]|0)+-48|0;if(e>>>0<10){c=0;do{c=e+(c*10|0)|0;d=d+1|0;f[a>>2]=d;e=(b[d>>0]|0)+-48|0}while(e>>>0<10)}else c=0;return c|0}function pi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{d=(f[c>>2]|0)+(4-1)&~(4-1);b=f[d>>2]|0;f[c>>2]=d+4;f[a>>2]=b;break a}case 10:{d=(f[c>>2]|0)+(4-1)&~(4-1);b=f[d>>2]|0;f[c>>2]=d+4;d=a;f[d>>2]=b;f[d+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{d=(f[c>>2]|0)+(4-1)&~(4-1);b=f[d>>2]|0;f[c>>2]=d+4;d=a;f[d>>2]=b;f[d+4>>2]=0;break a}case 12:{d=(f[c>>2]|0)+(8-1)&~(8-1);b=d;e=f[b>>2]|0;b=f[b+4>>2]|0;f[c>>2]=d+8;d=a;f[d>>2]=e;f[d+4>>2]=b;break a}case 13:{e=(f[c>>2]|0)+(4-1)&~(4-1);d=f[e>>2]|0;f[c>>2]=e+4;d=(d&65535)<<16>>16;e=a;f[e>>2]=d;f[e+4>>2]=((d|0)<0)<<31>>31;break a}case 14:{e=(f[c>>2]|0)+(4-1)&~(4-1);d=f[e>>2]|0;f[c>>2]=e+4;e=a;f[e>>2]=d&65535;f[e+4>>2]=0;break a}case 15:{e=(f[c>>2]|0)+(4-1)&~(4-1);d=f[e>>2]|0;f[c>>2]=e+4;d=(d&255)<<24>>24;e=a;f[e>>2]=d;f[e+4>>2]=((d|0)<0)<<31>>31;break a}case 16:{e=(f[c>>2]|0)+(4-1)&~(4-1);d=f[e>>2]|0;f[c>>2]=e+4;e=a;f[e>>2]=d&255;f[e+4>>2]=0;break a}case 17:{e=(f[c>>2]|0)+(8-1)&~(8-1);g=+p[e>>3];f[c>>2]=e+8;p[a>>3]=g;break a}case 18:{e=(f[c>>2]|0)+(8-1)&~(8-1);g=+p[e>>3];f[c>>2]=e+8;p[a>>3]=g;break a}default:break a}while(0);while(0);return}function qi(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;if(!((a|0)==0&(c|0)==0))do{d=d+-1|0;b[d>>0]=h[22825+(a&15)>>0]|0|e;a=ej(a|0,c|0,4)|0;c=I}while(!((a|0)==0&(c|0)==0));return d|0}function ri(a,c,d){a=a|0;c=c|0;d=d|0;if(!((a|0)==0&(c|0)==0))do{d=d+-1|0;b[d>>0]=a&7|48;a=ej(a|0,c|0,3)|0;c=I}while(!((a|0)==0&(c|0)==0));return d|0}function si(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&a>>>0>4294967295){while(1){e=cj(a|0,c|0,10,0)|0;d=d+-1|0;b[d>>0]=e&255|48;e=a;a=bj(a|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=I}c=a}else c=a;if(c)while(1){d=d+-1|0;b[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function ti(a){a=a|0;var b=0;b=(Ci()|0)+188|0;return Di(a,f[b>>2]|0)|0}function ui(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=u;u=u+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;ij(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{ni(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}ni(a,f,e)}u=g;return}function vi(a,b){a=a|0;b=b|0;if(!a)a=0;else a=Ai(a,b,0)|0;return a|0}function wi(a,c,d,e,g,i){a=a|0;c=+c;d=d|0;e=e|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+560|0;l=G+8|0;t=G;F=G+524|0;E=F;m=G+512|0;f[t>>2]=0;D=m+12|0;xi(c)|0;if((I|0)<0){c=-c;B=1;A=22790}else{B=(g&2049|0)!=0&1;A=(g&2048|0)==0?((g&1|0)==0?22791:22796):22793}xi(c)|0;do if(0==0&(I&2146435072|0)==2146435072){F=(i&32|0)!=0;j=B+3|0;ui(a,32,d,j,g&-65537);ni(a,A,B);ni(a,c!=c|0.0!=0.0?(F?22817:22821):F?22809:22813,3);ui(a,32,d,j,g^8192)}else{q=+yi(c,t)*2.0;j=q!=0.0;if(j)f[t>>2]=(f[t>>2]|0)+-1;w=i|32;if((w|0)==97){o=i&32;r=(o|0)==0?A:A+9|0;p=B|2;j=12-e|0;do if(!(e>>>0>11|(j|0)==0)){c=8.0;do{j=j+-1|0;c=c*16.0}while((j|0)!=0);if((b[r>>0]|0)==45){c=-(c+(-q-c));break}else{c=q+c-c;break}}else c=q;while(0);k=f[t>>2]|0;j=(k|0)<0?0-k|0:k;j=si(j,((j|0)<0)<<31>>31,D)|0;if((j|0)==(D|0)){j=m+11|0;b[j>>0]=48}b[j+-1>>0]=(k>>31&2)+43;n=j+-2|0;b[n>>0]=i+15;l=(e|0)<1;m=(g&8|0)==0;j=F;do{C=~~c;k=j+1|0;b[j>>0]=o|h[22825+C>>0];c=(c-+(C|0))*16.0;if((k-E|0)==1?!(m&(l&c==0.0)):0){b[k>>0]=46;j=j+2|0}else j=k}while(c!=0.0);if((e|0)!=0?(-2-E+j|0)<(e|0):0){k=j-E|0;j=e+2|0}else{j=j-E|0;k=j}D=D-n|0;E=D+p+j|0;ui(a,32,d,E,g);ni(a,r,p);ui(a,48,d,E,g^65536);ni(a,F,k);ui(a,48,j-k|0,0,0);ni(a,n,D);ui(a,32,d,E,g^8192);j=E;break}k=(e|0)<0?6:e;if(j){j=(f[t>>2]|0)+-28|0;f[t>>2]=j;c=q*268435456.0}else{c=q;j=f[t>>2]|0}C=(j|0)<0?l:l+288|0;l=C;do{y=~~c>>>0;f[l>>2]=y;l=l+4|0;c=(c-+(y>>>0))*1.0e9}while(c!=0.0);if((j|0)>0){m=C;o=l;while(1){n=(j|0)<29?j:29;j=o+-4|0;if(j>>>0>=m>>>0){l=0;do{x=fj(f[j>>2]|0,0,n|0)|0;x=Zi(x|0,I|0,l|0,0)|0;y=I;v=cj(x|0,y|0,1e9,0)|0;f[j>>2]=v;l=bj(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=m>>>0);if(l){m=m+-4|0;f[m>>2]=l}}l=o;while(1){if(l>>>0<=m>>>0)break;j=l+-4|0;if(!(f[j>>2]|0))l=j;else break}j=(f[t>>2]|0)-n|0;f[t>>2]=j;if((j|0)>0)o=l;else break}}else m=C;if((j|0)<0){e=((k+25|0)/9|0)+1|0;s=(w|0)==102;do{r=0-j|0;r=(r|0)<9?r:9;if(m>>>0>>0){n=(1<>>r;p=0;j=m;do{y=f[j>>2]|0;f[j>>2]=(y>>>r)+p;p=X(y&n,o)|0;j=j+4|0}while(j>>>0>>0);j=(f[m>>2]|0)==0?m+4|0:m;if(!p){m=j;j=l}else{f[l>>2]=p;m=j;j=l+4|0}}else{m=(f[m>>2]|0)==0?m+4|0:m;j=l}l=s?C:m;l=(j-l>>2|0)>(e|0)?l+(e<<2)|0:j;j=(f[t>>2]|0)+r|0;f[t>>2]=j}while((j|0)<0);j=m;e=l}else{j=m;e=l}y=C;if(j>>>0>>0){l=(y-j>>2)*9|0;n=f[j>>2]|0;if(n>>>0>=10){m=10;do{m=m*10|0;l=l+1|0}while(n>>>0>=m>>>0)}}else l=0;s=(w|0)==103;v=(k|0)!=0;m=k-((w|0)!=102?l:0)+((v&s)<<31>>31)|0;if((m|0)<(((e-y>>2)*9|0)+-9|0)){m=m+9216|0;r=C+4+(((m|0)/9|0)+-1024<<2)|0;m=(m|0)%9|0;if((m|0)<8){n=10;while(1){n=n*10|0;if((m|0)<7)m=m+1|0;else break}}else n=10;o=f[r>>2]|0;p=(o>>>0)%(n>>>0)|0;m=(r+4|0)==(e|0);if(!(m&(p|0)==0)){q=(((o>>>0)/(n>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(n|0)/2|0;c=p>>>0>>0?.5:m&(p|0)==(x|0)?1.0:1.5;if(B){x=(b[A>>0]|0)==45;c=x?-c:c;q=x?-q:q}m=o-p|0;f[r>>2]=m;if(q+c!=q){x=m+n|0;f[r>>2]=x;if(x>>>0>999999999){l=r;while(1){m=l+-4|0;f[l>>2]=0;if(m>>>0>>0){j=j+-4|0;f[j>>2]=0}x=(f[m>>2]|0)+1|0;f[m>>2]=x;if(x>>>0>999999999)l=m;else break}}else m=r;l=(y-j>>2)*9|0;o=f[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;l=l+1|0}while(o>>>0>=n>>>0)}}else m=r}else m=r;m=m+4|0;m=e>>>0>m>>>0?m:e;x=j}else{m=e;x=j}w=m;while(1){if(w>>>0<=x>>>0){t=0;break}j=w+-4|0;if(!(f[j>>2]|0))w=j;else{t=1;break}}e=0-l|0;do if(s){j=k+((v^1)&1)|0;if((j|0)>(l|0)&(l|0)>-5){n=i+-1|0;k=j+-1-l|0}else{n=i+-2|0;k=j+-1|0}j=g&8;if(!j){if(t?(z=f[w+-4>>2]|0,(z|0)!=0):0)if(!((z>>>0)%10|0)){m=0;j=10;do{j=j*10|0;m=m+1|0}while(!((z>>>0)%(j>>>0)|0|0))}else m=0;else m=9;j=((w-y>>2)*9|0)+-9|0;if((n|32|0)==102){r=j-m|0;r=(r|0)>0?r:0;k=(k|0)<(r|0)?k:r;r=0;break}else{r=j+l-m|0;r=(r|0)>0?r:0;k=(k|0)<(r|0)?k:r;r=0;break}}else r=j}else{n=i;r=g&8}while(0);s=k|r;o=(s|0)!=0&1;p=(n|32|0)==102;if(p){v=0;j=(l|0)>0?l:0}else{j=(l|0)<0?e:l;j=si(j,((j|0)<0)<<31>>31,D)|0;m=D;if((m-j|0)<2)do{j=j+-1|0;b[j>>0]=48}while((m-j|0)<2);b[j+-1>>0]=(l>>31&2)+43;j=j+-2|0;b[j>>0]=n;v=j;j=m-j|0}j=B+1+k+o+j|0;ui(a,32,d,j,g);ni(a,A,B);ui(a,48,d,j,g^65536);if(p){n=x>>>0>C>>>0?C:x;r=F+9|0;o=r;p=F+8|0;m=n;do{l=si(f[m>>2]|0,0,r)|0;if((m|0)==(n|0)){if((l|0)==(r|0)){b[p>>0]=48;l=p}}else if(l>>>0>F>>>0){ij(F|0,48,l-E|0)|0;do l=l+-1|0;while(l>>>0>F>>>0)}ni(a,l,o-l|0);m=m+4|0}while(m>>>0<=C>>>0);if(s|0)ni(a,22841,1);if(m>>>0>>0&(k|0)>0)while(1){l=si(f[m>>2]|0,0,r)|0;if(l>>>0>F>>>0){ij(F|0,48,l-E|0)|0;do l=l+-1|0;while(l>>>0>F>>>0)}ni(a,l,(k|0)<9?k:9);m=m+4|0;l=k+-9|0;if(!(m>>>0>>0&(k|0)>9)){k=l;break}else k=l}ui(a,48,k+9|0,9,0)}else{s=t?w:x+4|0;if((k|0)>-1){t=F+9|0;r=(r|0)==0;e=t;o=0-E|0;p=F+8|0;n=x;do{l=si(f[n>>2]|0,0,t)|0;if((l|0)==(t|0)){b[p>>0]=48;l=p}do if((n|0)==(x|0)){m=l+1|0;ni(a,l,1);if(r&(k|0)<1){l=m;break}ni(a,22841,1);l=m}else{if(l>>>0<=F>>>0)break;ij(F|0,48,l+o|0)|0;do l=l+-1|0;while(l>>>0>F>>>0)}while(0);E=e-l|0;ni(a,l,(k|0)>(E|0)?E:k);k=k-E|0;n=n+4|0}while(n>>>0>>0&(k|0)>-1)}ui(a,48,k+18|0,18,0);ni(a,v,D-v|0)}ui(a,32,d,j,g^8192)}while(0);u=G;return ((j|0)<(d|0)?d:j)|0}function xi(a){a=+a;var b=0;p[s>>3]=a;b=f[s>>2]|0;I=f[s+4>>2]|0;return b|0}function yi(a,b){a=+a;b=b|0;return +(+zi(a,b))}function zi(a,b){a=+a;b=b|0;var c=0,d=0,e=0;p[s>>3]=a;c=f[s>>2]|0;d=f[s+4>>2]|0;e=ej(c|0,d|0,52)|0;switch(e&2047){case 0:{if(a!=0.0){a=+zi(a*18446744073709551616.0,b);c=(f[b>>2]|0)+-64|0}else c=0;f[b>>2]=c;break}case 2047:break;default:{f[b>>2]=(e&2047)+-1022;f[s>>2]=c;f[s+4>>2]=d&-2146435073|1071644672;a=+p[s>>3]}}return +a}function Ai(a,c,d){a=a|0;c=c|0;d=d|0;do if(a){if(c>>>0<128){b[a>>0]=c;a=1;break}d=(Bi()|0)+188|0;if(!(f[f[d>>2]>>2]|0))if((c&-128|0)==57216){b[a>>0]=c;a=1;break}else{a=Eh()|0;f[a>>2]=84;a=-1;break}if(c>>>0<2048){b[a>>0]=c>>>6|192;b[a+1>>0]=c&63|128;a=2;break}if(c>>>0<55296|(c&-8192|0)==57344){b[a>>0]=c>>>12|224;b[a+1>>0]=c>>>6&63|128;b[a+2>>0]=c&63|128;a=3;break}if((c+-65536|0)>>>0<1048576){b[a>>0]=c>>>18|240;b[a+1>>0]=c>>>12&63|128;b[a+2>>0]=c>>>6&63|128;b[a+3>>0]=c&63|128;a=4;break}else{a=Eh()|0;f[a>>2]=84;a=-1;break}}else a=1;while(0);return a|0}function Bi(){return Ih()|0}function Ci(){return Ih()|0}function Di(a,c){a=a|0;c=c|0;var d=0,e=0;e=0;while(1){if((h[22843+e>>0]|0)==(a|0)){a=2;break}d=e+1|0;if((d|0)==87){d=22931;e=87;a=5;break}else e=d}if((a|0)==2)if(!e)d=22931;else{d=22931;a=5}if((a|0)==5)while(1){do{a=d;d=d+1|0}while((b[a>>0]|0)!=0);e=e+-1|0;if(!e)break;else a=5}return Ei(d,f[c+20>>2]|0)|0}function Ei(a,b){a=a|0;b=b|0;return Uh(a,b)|0}function Fi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((f[a+76>>2]|0)>-1){d=(Qh(a)|0)==0;b=Gi(a,b,c)|0;if(!d)Oh(a)}else b=Gi(a,b,c)|0;return b|0}function Gi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if((c|0)==1)b=b-(f[a+8>>2]|0)+(f[a+4>>2]|0)|0;d=a+20|0;e=a+28|0;if((f[d>>2]|0)>>>0>(f[e>>2]|0)>>>0?(Ma[f[a+36>>2]&63](a,0,0)|0,(f[d>>2]|0)==0):0)b=-1;else{f[a+16>>2]=0;f[e>>2]=0;f[d>>2]=0;if((Ma[f[a+40>>2]&63](a,b,c)|0)<0)b=-1;else{f[a+8>>2]=0;f[a+4>>2]=0;f[a>>2]=f[a>>2]&-17;b=0}}return b|0}function Hi(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=u;u=u+128|0;g=m+124|0;l=m;h=l;i=3036;j=h+124|0;do{f[h>>2]=f[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((c+-1|0)>>>0>2147483646)if(!c){a=g;c=1;k=4}else{c=Eh()|0;f[c>>2]=75;c=-1}else k=4;if((k|0)==4){k=-2-a|0;k=c>>>0>k>>>0?k:c;f[l+48>>2]=k;g=l+20|0;f[g>>2]=a;f[l+44>>2]=a;c=a+k|0;a=l+16|0;f[a>>2]=c;f[l+28>>2]=c;c=li(l,d,e)|0;if(k){l=f[g>>2]|0;b[l+(((l|0)==(f[a>>2]|0))<<31>>31)>>0]=0}}u=m;return c|0}function Ii(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=a+20|0;e=f[d>>2]|0;a=(f[a+16>>2]|0)-e|0;a=a>>>0>c>>>0?c:a;hj(e|0,b|0,a|0)|0;f[d>>2]=(f[d>>2]|0)+a;return c|0}function Ji(a,b){a=a|0;b=b|0;Ki(a,b)|0;return a|0}function Ki(a,c){a=a|0;c=c|0;var d=0,e=0;d=c;a:do if(!((d^a)&3)){if(d&3)do{d=b[c>>0]|0;b[a>>0]=d;if(!(d<<24>>24))break a;c=c+1|0;a=a+1|0}while((c&3|0)!=0);d=f[c>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009)){e=a;while(1){c=c+4|0;a=e+4|0;f[e>>2]=d;d=f[c>>2]|0;if((d&-2139062144^-2139062144)&d+-16843009|0)break;else e=a}}e=8}else e=8;while(0);if((e|0)==8){e=b[c>>0]|0;b[a>>0]=e;if(e<<24>>24)do{c=c+1|0;a=a+1|0;e=b[c>>0]|0;b[a>>0]=e}while(e<<24>>24!=0)}return a|0}function Li(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=u;u=u+16|0;e=d;f[e>>2]=c;c=Mi(a,b,e)|0;u=d;return c|0}function Mi(a,b,c){a=a|0;b=b|0;c=c|0;return Hi(a,2147483647,b,c)|0}function Ni(a,b){a=+a;b=b|0;return +(+hi(a,b))}function Oi(a){a=+a;return ~~+kj(+a)|0}function Pi(a,b){a=a|0;b=b|0;var c=0,d=0;c=u;u=u+16|0;d=c;f[d>>2]=b;b=li(f[665]|0,a,d)|0;u=c;return b|0}function Qi(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=X(d,c)|0;d=(c|0)==0?0:d;if((f[e+76>>2]|0)>-1)j=Qh(e)|0;else j=0;g=e+74|0;h=b[g>>0]|0;b[g>>0]=h+255|h;g=e+4|0;h=f[g>>2]|0;m=(f[e+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){hj(a|0,h|0,i|0)|0;f[g>>2]=h+i;g=k-i|0;a=a+i|0}else g=k;a:do if(!g)l=13;else{i=e+32|0;while(1){if(ii(e)|0)break;h=Ma[f[i>>2]&63](e,a,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else a=a+h|0}if(j|0)Oh(e);d=((k-g|0)>>>0)/(c>>>0)|0}while(0);if((l|0)==13)if(j)Oh(e);return d|0}function Ri(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;if((f[c+76>>2]|0)>=0?(Qh(c)|0)!=0:0){e=a&255;d=a&255;if((d|0)!=(b[c+75>>0]|0)?(i=c+20|0,j=f[i>>2]|0,j>>>0<(f[c+16>>2]|0)>>>0):0){f[i>>2]=j+1;b[j>>0]=e}else d=Rh(c,a)|0;Oh(c)}else k=3;do if((k|0)==3){e=a&255;d=a&255;if((d|0)!=(b[c+75>>0]|0)?(g=c+20|0,h=f[g>>2]|0,h>>>0<(f[c+16>>2]|0)>>>0):0){f[g>>2]=h+1;b[h>>0]=e;break}d=Rh(c,a)|0}while(0);return d|0}function Si(a){a=a|0;var c=0,d=0,e=0,g=0;e=f[665]|0;if((f[e+76>>2]|0)>-1)g=Qh(e)|0;else g=0;do if((Lh(a,e)|0)<0)a=-1;else{if((b[e+75>>0]|0)!=10?(c=e+20|0,d=f[c>>2]|0,d>>>0<(f[e+16>>2]|0)>>>0):0){f[c>>2]=d+1;b[d>>0]=10;a=0;break}a=(Rh(e,10)|0)>>31}while(0);if(g|0)Oh(e);return a|0}function Ti(a){a=a|0;var b=0;if(!(f[a>>2]&128))b=1;else b=(f[a+20>>2]|0)>>>0>(f[a+28>>2]|0)>>>0?2:1;b=Ma[f[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(f[a+8>>2]|0)+(f[a+4>>2]|0)+(f[a+20>>2]|0)-(f[a+28>>2]|0)|0;return b|0}function Ui(a){a=a|0;var b=0,c=0;if((f[a+76>>2]|0)>-1){c=(Qh(a)|0)==0;b=Ti(a)|0;if(!c)Oh(a)}else b=Ti(a)|0;return b|0}function Vi(a){a=a|0;return Ui(a)|0}function Wi(){}function Xi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=X(e,f)|0;d=a>>>16;a=(c>>>16)+(X(e,d)|0)|0;e=b>>>16;b=X(e,f)|0;return (I=(a>>>16)+(X(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Yi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=Xi(e,f)|0;a=I;return (I=(X(b,f)|0)+(X(d,e)|0)+a|a&0,c|0|0)|0}function Zi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (I=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function _i(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (I=d,a-c>>>0|0)|0}function $i(a){a=a|0;var c=0;c=b[w+(a&255)>>0]|0;if((c|0)<8)return c|0;c=b[w+(a>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=b[w+(a>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (b[w+(a>>>24)>>0]|0)+24|0}function aj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=c;n=d;i=n;if(!k){g=(e|0)!=0;if(!i){if(g){f[e>>2]=(l>>>0)%(h>>>0);f[e+4>>2]=0}n=0;e=(l>>>0)/(h>>>0)>>>0;return (I=n,e)|0}else{if(!g){n=0;e=0;return (I=n,e)|0}f[e>>2]=a|0;f[e+4>>2]=b&0;n=0;e=0;return (I=n,e)|0}}g=(i|0)==0;do if(h){if(!g){g=(_(i|0)|0)-(_(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;f[e+4>>2]=j|b&0;n=0;e=0;return (I=n,e)|0}g=h-1|0;if(g&h|0){i=(_(h|0)|0)+33-(_(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(e|0){f[e>>2]=g&l;f[e+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (I=o,p)|0}else{p=$i(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (I=o,p)|0}}else{if(g){if(e|0){f[e>>2]=(k>>>0)%(h>>>0);f[e+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (I=o,p)|0}if(!l){if(e|0){f[e>>2]=0;f[e+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (I=o,p)|0}g=i-1|0;if(!(g&i)){if(e|0){f[e>>2]=a|0;f[e+4>>2]=g&k|b&0}o=0;p=k>>>(($i(i|0)|0)>>>0);return (I=o,p)|0}g=(_(i|0)|0)-(_(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;f[e+4>>2]=j|b&0;o=0;p=0;return (I=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=c|0|0;l=n|d&0;k=Zi(m|0,l|0,-1,-1)|0;c=I;j=i;i=0;do{d=j;j=g>>>31|j<<1;g=i|g<<1;d=a<<1|d>>>31|0;n=a>>>31|b<<1|0;_i(k|0,c|0,d|0,n|0)|0;p=I;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=_i(d|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=I;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(e|0){f[e>>2]=a;f[e+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (I=o,p)|0}function bj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return aj(a,b,c,d,0)|0}function cj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;g=u;u=u+16|0;e=g|0;aj(a,b,c,d,e)|0;u=g;return (I=f[e+4>>2]|0,f[e>>2]|0)|0}function dj(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){I=b>>c;return a>>>c|(b&(1<>c-32|0}function ej(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){I=b>>>c;return a>>>c|(b&(1<>>c-32|0}function fj(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){I=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function hj(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0;if((d|0)>=8192)return Ba(a|0,c|0,d|0)|0;h=a|0;g=a+d|0;if((a&3)==(c&3)){while(a&3){if(!d)return h|0;b[a>>0]=b[c>>0]|0;a=a+1|0;c=c+1|0;d=d-1|0}d=g&-4|0;e=d-64|0;while((a|0)<=(e|0)){f[a>>2]=f[c>>2];f[a+4>>2]=f[c+4>>2];f[a+8>>2]=f[c+8>>2];f[a+12>>2]=f[c+12>>2];f[a+16>>2]=f[c+16>>2];f[a+20>>2]=f[c+20>>2];f[a+24>>2]=f[c+24>>2];f[a+28>>2]=f[c+28>>2];f[a+32>>2]=f[c+32>>2];f[a+36>>2]=f[c+36>>2];f[a+40>>2]=f[c+40>>2];f[a+44>>2]=f[c+44>>2];f[a+48>>2]=f[c+48>>2];f[a+52>>2]=f[c+52>>2];f[a+56>>2]=f[c+56>>2];f[a+60>>2]=f[c+60>>2];a=a+64|0;c=c+64|0}while((a|0)<(d|0)){f[a>>2]=f[c>>2];a=a+4|0;c=c+4|0}}else{d=g-4|0;while((a|0)<(d|0)){b[a>>0]=b[c>>0]|0;b[a+1>>0]=b[c+1>>0]|0;b[a+2>>0]=b[c+2>>0]|0;b[a+3>>0]=b[c+3>>0]|0;a=a+4|0;c=c+4|0}}while((a|0)<(g|0)){b[a>>0]=b[c>>0]|0;a=a+1|0;c=c+1|0}return h|0}function ij(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;h=a+d|0;c=c&255;if((d|0)>=67){while(a&3){b[a>>0]=c;a=a+1|0}e=h&-4|0;g=e-64|0;i=c|c<<8|c<<16|c<<24;while((a|0)<=(g|0)){f[a>>2]=i;f[a+4>>2]=i;f[a+8>>2]=i;f[a+12>>2]=i;f[a+16>>2]=i;f[a+20>>2]=i;f[a+24>>2]=i;f[a+28>>2]=i;f[a+32>>2]=i;f[a+36>>2]=i;f[a+40>>2]=i;f[a+44>>2]=i;f[a+48>>2]=i;f[a+52>>2]=i;f[a+56>>2]=i;f[a+60>>2]=i;a=a+64|0}while((a|0)<(e|0)){f[a>>2]=i;a=a+4|0}}while((a|0)<(h|0)){b[a>>0]=c;a=a+1|0}return h-d|0}function jj(a){a=+a;return a>=0.0?+J(a+.5):+W(a-.5)}function kj(a){a=+a;return a-+J(a)!=.5?+jj(a):+jj(a/2.0)*2.0}function lj(a){a=a|0;var b=0,c=0;c=a+15&-16|0;b=f[r>>2]|0;a=b+c|0;if((c|0)>0&(a|0)<(b|0)|(a|0)<0){da()|0;sa(12);return -1}f[r>>2]=a;if((a|0)>(ca()|0)?(ba()|0)==0:0){f[r>>2]=b;sa(12);return -1}return b|0}function mj(a,b){a=a|0;b=b|0;return +Ja[a&3](b|0)}function nj(a,b){a=a|0;b=b|0;return Ka[a&15](b|0)|0}function oj(a,b,c){a=a|0;b=b|0;c=c|0;return La[a&7](b|0,c|0)|0}function pj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ma[a&63](b|0,c|0,d|0)|0}function qj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Na[a&63](b|0,c|0,d|0,e|0)|0}function rj(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Oa[a&3](b|0,c|0,d|0,e|0,f|0)|0}function sj(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Pa[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function tj(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return Qa[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function uj(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return Ra[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)|0}function vj(a,b){a=a|0;b=b|0;Sa[a&7](b|0)}function wj(a,b,c){a=a|0;b=b|0;c=c|0;Ta[a&7](b|0,c|0)}function xj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ua[a&15](b|0,c|0,d|0)}function yj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Va[a&3](b|0,c|0,d|0,e|0)}function zj(a){a=a|0;$(0);return 0.0}function Aj(a){a=a|0;$(1);return 0}function Bj(a,b){a=a|0;b=b|0;$(2);return 0}function Cj(a,b,c){a=a|0;b=b|0;c=c|0;$(3);return 0}function Dj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;$(4);return 0}function Ej(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;$(5);return 0}function Fj(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;$(6);return 0}function Gj(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;$(7);return 0}function Hj(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;$(8);return 0}function Ij(a){a=a|0;$(9)}function Jj(a,b){a=a|0;b=b|0;$(10)}function Kj(a,b,c){a=a|0;b=b|0;c=c|0;$(11)}function Lj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;$(12)}\n\n// EMSCRIPTEN_END_FUNCS\nvar Ja=[zj,xe,ye,zj];var Ka=[Aj,Ah,Od,Pd,qf,pf,ei,Gg,Cg,Aj,Aj,Aj,Aj,Aj,Aj,Aj];var La=[Bj,bf,df,ef,cf,Bj,Bj,Bj];var Ma=[Cj,Hh,Ch,Ii,ub,vb,wb,xb,Wd,_d,Ie,Ue,Zc,Vd,Je,rf,Dc,Ec,Fc,Gc,zc,Ac,Bc,Cc,$c,ad,bd,cd,Rd,Ud,$d,ae,be,ce,de,fe,ge,he,ie,je,ke,le,me,ne,oe,pe,qe,re,se,te,ue,ve,we,Ke,Ve,Xe,Ye,Ze,_e,$e,af,Bh,Gh,Cj];var Na=[Dj,dd,ed,fd,gd,hd,id,jd,kd,ld,md,nd,od,pd,qd,rd,sd,td,ud,vd,Re,Se,Te,Le,Me,Ne,Oe,Pe,Qe,qb,rb,sb,tb,ee,Tc,We,He,Qd,_c,Ce,ff,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj,Dj];var Oa=[Ej,Td,mf,Ej];var Pa=[Fj,Be,hf,Hd,jf,Fj,Fj,Fj];var Qa=[Gj,Id,lf,Gj];var Ra=[Hj,Gd,gf,Hj];var Sa=[Ij,Qc,kf,Rf,Sf,Ij,Ij,Ij];var Ta=[Jj,eb,fb,gb,Ob,Oc,Ge,Jj];var Ua=[Kj,Vc,Wc,Xc,Yc,Ad,Bd,Cd,Dd,wd,xd,yd,zd,Kd,of,Kj];var Va=[Lj,yg,Fg,Lj];return{___muldi3:Yi,___udivdi3:bj,___uremdi3:cj,_bitshift64Ashr:dj,_bitshift64Lshr:ej,_bitshift64Shl:fj,_emscripten_replace_memory:Ia,_free:th,_i64Add:Zi,_i64Subtract:_i,_jp2_decode:bb,_jp2_encode:cb,_jp2_version:db,_llvm_bswap_i32:gj,_malloc:sh,_memcpy:hj,_memset:ij,_opj_create_compress:Vb,_opj_create_decompress:Wb,_opj_decode:Xb,_opj_decode_tile_data:Yb,_opj_destroy_codec:Zb,_opj_destroy_cstr_index:_b,_opj_destroy_cstr_info:$b,_opj_dump_codec:ac,_opj_encode:bc,_opj_end_compress:cc,_opj_end_decompress:dc,_opj_get_cstr_index:ec,_opj_get_cstr_info:fc,_opj_get_decoded_tile:gc,_opj_image_create:Pb,_opj_image_destroy:Qb,_opj_image_tile_create:Rb,_opj_read_header:hc,_opj_read_tile_header:ic,_opj_set_MCT:jc,_opj_set_decode_area:kc,_opj_set_decoded_resolution_factor:lc,_opj_set_default_decoder_parameters:mc,_opj_set_default_encoder_parameters:nc,_opj_set_error_handler:oc,_opj_set_info_handler:pc,_opj_set_warning_handler:qc,_opj_setup_decoder:rc,_opj_setup_encoder:sc,_opj_start_compress:tc,_opj_stream_create:hb,_opj_stream_create_buffer_stream:uc,_opj_stream_create_default_file_stream:vc,_opj_stream_create_file_stream:wc,_opj_stream_default_create:ib,_opj_stream_destroy:jb,_opj_stream_set_read_function:kb,_opj_stream_set_seek_function:lb,_opj_stream_set_skip_function:mb,_opj_stream_set_user_data:nb,_opj_stream_set_user_data_length:ob,_opj_stream_set_write_function:pb,_opj_version:xc,_opj_write_tile:yc,_rintf:kj,_sbrk:lj,dynCall_di:mj,dynCall_ii:nj,dynCall_iii:oj,dynCall_iiii:pj,dynCall_iiiii:qj,dynCall_iiiiii:rj,dynCall_iiiiiii:sj,dynCall_iiiiiiii:tj,dynCall_iiiiiiiiiiii:uj,dynCall_vi:vj,dynCall_vii:wj,dynCall_viii:xj,dynCall_viiii:yj,establishStackSpace:Za,getTempRet0:ab,runPostSets:Wi,setTempRet0:$a,setThrew:_a,stackAlloc:Wa,stackRestore:Ya,stackSave:Xa}})\n\n\n// EMSCRIPTEN_END_ASM\n(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var ___muldi3=Module[\"___muldi3\"]=asm[\"___muldi3\"];var ___udivdi3=Module[\"___udivdi3\"]=asm[\"___udivdi3\"];var ___uremdi3=Module[\"___uremdi3\"]=asm[\"___uremdi3\"];var _bitshift64Ashr=Module[\"_bitshift64Ashr\"]=asm[\"_bitshift64Ashr\"];var _bitshift64Lshr=Module[\"_bitshift64Lshr\"]=asm[\"_bitshift64Lshr\"];var _bitshift64Shl=Module[\"_bitshift64Shl\"]=asm[\"_bitshift64Shl\"];var _emscripten_replace_memory=Module[\"_emscripten_replace_memory\"]=asm[\"_emscripten_replace_memory\"];var _free=Module[\"_free\"]=asm[\"_free\"];var _i64Add=Module[\"_i64Add\"]=asm[\"_i64Add\"];var _i64Subtract=Module[\"_i64Subtract\"]=asm[\"_i64Subtract\"];var _jp2_decode=Module[\"_jp2_decode\"]=asm[\"_jp2_decode\"];var _jp2_encode=Module[\"_jp2_encode\"]=asm[\"_jp2_encode\"];var _jp2_version=Module[\"_jp2_version\"]=asm[\"_jp2_version\"];var _llvm_bswap_i32=Module[\"_llvm_bswap_i32\"]=asm[\"_llvm_bswap_i32\"];var _malloc=Module[\"_malloc\"]=asm[\"_malloc\"];var _memcpy=Module[\"_memcpy\"]=asm[\"_memcpy\"];var _memset=Module[\"_memset\"]=asm[\"_memset\"];var _opj_create_compress=Module[\"_opj_create_compress\"]=asm[\"_opj_create_compress\"];var _opj_create_decompress=Module[\"_opj_create_decompress\"]=asm[\"_opj_create_decompress\"];var _opj_decode=Module[\"_opj_decode\"]=asm[\"_opj_decode\"];var _opj_decode_tile_data=Module[\"_opj_decode_tile_data\"]=asm[\"_opj_decode_tile_data\"];var _opj_destroy_codec=Module[\"_opj_destroy_codec\"]=asm[\"_opj_destroy_codec\"];var _opj_destroy_cstr_index=Module[\"_opj_destroy_cstr_index\"]=asm[\"_opj_destroy_cstr_index\"];var _opj_destroy_cstr_info=Module[\"_opj_destroy_cstr_info\"]=asm[\"_opj_destroy_cstr_info\"];var _opj_dump_codec=Module[\"_opj_dump_codec\"]=asm[\"_opj_dump_codec\"];var _opj_encode=Module[\"_opj_encode\"]=asm[\"_opj_encode\"];var _opj_end_compress=Module[\"_opj_end_compress\"]=asm[\"_opj_end_compress\"];var _opj_end_decompress=Module[\"_opj_end_decompress\"]=asm[\"_opj_end_decompress\"];var _opj_get_cstr_index=Module[\"_opj_get_cstr_index\"]=asm[\"_opj_get_cstr_index\"];var _opj_get_cstr_info=Module[\"_opj_get_cstr_info\"]=asm[\"_opj_get_cstr_info\"];var _opj_get_decoded_tile=Module[\"_opj_get_decoded_tile\"]=asm[\"_opj_get_decoded_tile\"];var _opj_image_create=Module[\"_opj_image_create\"]=asm[\"_opj_image_create\"];var _opj_image_destroy=Module[\"_opj_image_destroy\"]=asm[\"_opj_image_destroy\"];var _opj_image_tile_create=Module[\"_opj_image_tile_create\"]=asm[\"_opj_image_tile_create\"];var _opj_read_header=Module[\"_opj_read_header\"]=asm[\"_opj_read_header\"];var _opj_read_tile_header=Module[\"_opj_read_tile_header\"]=asm[\"_opj_read_tile_header\"];var _opj_set_MCT=Module[\"_opj_set_MCT\"]=asm[\"_opj_set_MCT\"];var _opj_set_decode_area=Module[\"_opj_set_decode_area\"]=asm[\"_opj_set_decode_area\"];var _opj_set_decoded_resolution_factor=Module[\"_opj_set_decoded_resolution_factor\"]=asm[\"_opj_set_decoded_resolution_factor\"];var _opj_set_default_decoder_parameters=Module[\"_opj_set_default_decoder_parameters\"]=asm[\"_opj_set_default_decoder_parameters\"];var _opj_set_default_encoder_parameters=Module[\"_opj_set_default_encoder_parameters\"]=asm[\"_opj_set_default_encoder_parameters\"];var _opj_set_error_handler=Module[\"_opj_set_error_handler\"]=asm[\"_opj_set_error_handler\"];var _opj_set_info_handler=Module[\"_opj_set_info_handler\"]=asm[\"_opj_set_info_handler\"];var _opj_set_warning_handler=Module[\"_opj_set_warning_handler\"]=asm[\"_opj_set_warning_handler\"];var _opj_setup_decoder=Module[\"_opj_setup_decoder\"]=asm[\"_opj_setup_decoder\"];var _opj_setup_encoder=Module[\"_opj_setup_encoder\"]=asm[\"_opj_setup_encoder\"];var _opj_start_compress=Module[\"_opj_start_compress\"]=asm[\"_opj_start_compress\"];var _opj_stream_create=Module[\"_opj_stream_create\"]=asm[\"_opj_stream_create\"];var _opj_stream_create_buffer_stream=Module[\"_opj_stream_create_buffer_stream\"]=asm[\"_opj_stream_create_buffer_stream\"];var _opj_stream_create_default_file_stream=Module[\"_opj_stream_create_default_file_stream\"]=asm[\"_opj_stream_create_default_file_stream\"];var _opj_stream_create_file_stream=Module[\"_opj_stream_create_file_stream\"]=asm[\"_opj_stream_create_file_stream\"];var _opj_stream_default_create=Module[\"_opj_stream_default_create\"]=asm[\"_opj_stream_default_create\"];var _opj_stream_destroy=Module[\"_opj_stream_destroy\"]=asm[\"_opj_stream_destroy\"];var _opj_stream_set_read_function=Module[\"_opj_stream_set_read_function\"]=asm[\"_opj_stream_set_read_function\"];var _opj_stream_set_seek_function=Module[\"_opj_stream_set_seek_function\"]=asm[\"_opj_stream_set_seek_function\"];var _opj_stream_set_skip_function=Module[\"_opj_stream_set_skip_function\"]=asm[\"_opj_stream_set_skip_function\"];var _opj_stream_set_user_data=Module[\"_opj_stream_set_user_data\"]=asm[\"_opj_stream_set_user_data\"];var _opj_stream_set_user_data_length=Module[\"_opj_stream_set_user_data_length\"]=asm[\"_opj_stream_set_user_data_length\"];var _opj_stream_set_write_function=Module[\"_opj_stream_set_write_function\"]=asm[\"_opj_stream_set_write_function\"];var _opj_version=Module[\"_opj_version\"]=asm[\"_opj_version\"];var _opj_write_tile=Module[\"_opj_write_tile\"]=asm[\"_opj_write_tile\"];var _rintf=Module[\"_rintf\"]=asm[\"_rintf\"];var _sbrk=Module[\"_sbrk\"]=asm[\"_sbrk\"];var establishStackSpace=Module[\"establishStackSpace\"]=asm[\"establishStackSpace\"];var getTempRet0=Module[\"getTempRet0\"]=asm[\"getTempRet0\"];var runPostSets=Module[\"runPostSets\"]=asm[\"runPostSets\"];var setTempRet0=Module[\"setTempRet0\"]=asm[\"setTempRet0\"];var setThrew=Module[\"setThrew\"]=asm[\"setThrew\"];var stackAlloc=Module[\"stackAlloc\"]=asm[\"stackAlloc\"];var stackRestore=Module[\"stackRestore\"]=asm[\"stackRestore\"];var stackSave=Module[\"stackSave\"]=asm[\"stackSave\"];var dynCall_di=Module[\"dynCall_di\"]=asm[\"dynCall_di\"];var dynCall_ii=Module[\"dynCall_ii\"]=asm[\"dynCall_ii\"];var dynCall_iii=Module[\"dynCall_iii\"]=asm[\"dynCall_iii\"];var dynCall_iiii=Module[\"dynCall_iiii\"]=asm[\"dynCall_iiii\"];var dynCall_iiiii=Module[\"dynCall_iiiii\"]=asm[\"dynCall_iiiii\"];var dynCall_iiiiii=Module[\"dynCall_iiiiii\"]=asm[\"dynCall_iiiiii\"];var dynCall_iiiiiii=Module[\"dynCall_iiiiiii\"]=asm[\"dynCall_iiiiiii\"];var dynCall_iiiiiiii=Module[\"dynCall_iiiiiiii\"]=asm[\"dynCall_iiiiiiii\"];var dynCall_iiiiiiiiiiii=Module[\"dynCall_iiiiiiiiiiii\"]=asm[\"dynCall_iiiiiiiiiiii\"];var dynCall_vi=Module[\"dynCall_vi\"]=asm[\"dynCall_vi\"];var dynCall_vii=Module[\"dynCall_vii\"]=asm[\"dynCall_vii\"];var dynCall_viii=Module[\"dynCall_viii\"]=asm[\"dynCall_viii\"];var dynCall_viiii=Module[\"dynCall_viiii\"]=asm[\"dynCall_viiii\"];Module[\"asm\"]=asm;Module[\"ccall\"]=ccall;Module[\"getValue\"]=getValue;Module[\"writeArrayToMemory\"]=writeArrayToMemory;if(memoryInitializer){if(!isDataURI(memoryInitializer)){if(typeof Module[\"locateFile\"]===\"function\"){memoryInitializer=Module[\"locateFile\"](memoryInitializer)}else if(Module[\"memoryInitializerPrefixURL\"]){memoryInitializer=Module[\"memoryInitializerPrefixURL\"]+memoryInitializer}}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module[\"readBinary\"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency(\"memory initializer\");var applyMemoryInitializer=(function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module[\"memoryInitializerRequest\"])delete Module[\"memoryInitializerRequest\"].response;removeRunDependency(\"memory initializer\")});function doBrowserLoad(){Module[\"readAsync\"](memoryInitializer,applyMemoryInitializer,(function(){throw\"could not load memory initializer \"+memoryInitializer}))}var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module[\"memoryInitializerRequest\"]){function useRequest(){var request=Module[\"memoryInitializerRequest\"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module[\"memoryInitializerRequestURL\"]);if(data){response=data.buffer}else{console.warn(\"a problem seems to have happened with Module.memoryInitializerRequest, status: \"+request.status+\", retrying \"+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module[\"memoryInitializerRequest\"].response){setTimeout(useRequest,0)}else{Module[\"memoryInitializerRequest\"].addEventListener(\"load\",useRequest)}}else{doBrowserLoad()}}}Module[\"then\"]=(function(func){if(Module[\"calledRun\"]){func(Module)}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=(function(){if(old)old();func(Module)})}return Module});function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module[\"calledRun\"])run();if(!Module[\"calledRun\"])dependenciesFulfilled=runCaller};function run(args){args=args||Module[\"arguments\"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module[\"calledRun\"])return;function doRun(){if(Module[\"calledRun\"])return;Module[\"calledRun\"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout((function(){setTimeout((function(){Module[\"setStatus\"](\"\")}),1);doRun()}),1)}else{doRun()}}Module[\"run\"]=run;function exit(status,implicit){if(implicit&&Module[\"noExitRuntime\"]&&status===0){return}if(Module[\"noExitRuntime\"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module[\"onExit\"])Module[\"onExit\"](status)}if(ENVIRONMENT_IS_NODE){process[\"exit\"](status)}Module[\"quit\"](status,new ExitStatus(status))}Module[\"exit\"]=exit;function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=\"\"}ABORT=true;EXITSTATUS=1;throw\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\"}Module[\"abort\"]=abort;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}Module[\"noExitRuntime\"]=true;run()\n\n\n\n\n\n\n return OpenJPEG;\n};\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = OpenJPEG;\nelse if (typeof define === 'function' && define['amd'])\n define([], function() { return OpenJPEG; });\nelse if (typeof exports === 'object')\n exports[\"OpenJPEG\"] = OpenJPEG;\n","'use strict';\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n for (var i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict';\n\n// VARIABLES //\n\nvar FLOAT32_VIEW = new Float32Array( 1 );\nvar UINT32_VIEW = new Uint32Array( FLOAT32_VIEW.buffer );\n\n// 1 11111111 00000000000000000000000 => 4286578688 => 0xff800000 (see IEEE 754-2008)\nvar NINF = 0xff800000;\n\n// Set the ArrayBuffer bit sequence:\nUINT32_VIEW[ 0 ] = NINF;\n\n\n// EXPORTS //\n\nmodule.exports = FLOAT32_VIEW[ 0 ];\n","'use strict';\n\n// VARIABLES //\n\nvar FLOAT32_VIEW = new Float32Array( 1 );\nvar UINT32_VIEW = new Uint32Array( FLOAT32_VIEW.buffer );\n\n// 0 11111111 00000000000000000000000 => 2139095040 => 0x7f800000 (see IEEE 754-2008)\nvar PINF = 0x7f800000;\n\n// Set the ArrayBuffer bit sequence:\nUINT32_VIEW[ 0 ] = PINF;\n\n\n// EXPORTS //\n\nmodule.exports = FLOAT32_VIEW[ 0 ];\n","/*! dicom-parser - 1.8.2 - 2018-12-05 | (c) 2017 Chris Hafey | https://github.com/cornerstonejs/dicomParser */\n!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"dicom-parser\",[],t):\"object\"==typeof exports?exports[\"dicom-parser\"]=t():e.dicomParser=t()}(this,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,\"__esModule\",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=79)}([function(e,t){var r;r=function(){return this}();try{r=r||Function(\"return this\")()||(0,eval)(\"this\")}catch(e){\"object\"==typeof window&&(r=window)}e.exports=r},function(e,t,r){\"use strict\";(function(e){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nvar n=r(73),i=r(72),a=r(38);function o(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(o()=o())throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+o().toString(16)+\" bytes\");return 0|e}function p(e,t){if(l.isBuffer(e))return e.length;if(\"undefined\"!=typeof ArrayBuffer&&\"function\"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;\"string\"!=typeof e&&(e=\"\"+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":case void 0:return Z(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r>>>1;case\"base64\":return j(e).length;default:if(n)return Z(e).length;t=(\"\"+t).toLowerCase(),n=!0}}function g(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function m(e,t,r,n,i){if(0===e.length)return-1;if(\"string\"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if(\"string\"==typeof t&&(t=l.from(t,n)),l.isBuffer(t))return 0===t.length?-1:_(e,t,r,n,i);if(\"number\"==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&\"function\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):_(e,[t],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function _(e,t,r,n,i){var a,o=1,s=e.length,l=t.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(e.length<2||t.length<2)return-1;o=2,s/=2,l/=2,r/=2}function f(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(i){var u=-1;for(a=r;as&&(r=s-l),a=r;a>=0;a--){for(var h=!0,d=0;di&&(n=i):n=i;var a=t.length;if(a%2!=0)throw new TypeError(\"Invalid hex string\");n>a/2&&(n=a/2);for(var o=0;o>8,i=r%256,a.push(i),a.push(n);return a}(t,e.length-r),e,r,n)}function S(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function k(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:f>223?3:f>191?2:1;if(i+h<=r)switch(h){case 1:f<128&&(u=f);break;case 2:128==(192&(a=e[i+1]))&&(l=(31&f)<<6|63&a)>127&&(u=l);break;case 3:a=e[i+1],o=e[i+2],128==(192&a)&&128==(192&o)&&(l=(15&f)<<12|(63&a)<<6|63&o)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:a=e[i+1],o=e[i+2],s=e[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&(l=(15&f)<<18|(63&a)<<12|(63&o)<<6|63&s)>65535&&l<1114112&&(u=l)}null===u?(u=65533,h=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),i+=h}return function(e){var t=e.length;if(t<=A)return String.fromCharCode.apply(String,e);var r=\"\",n=0;for(;nthis.length)return\"\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\"\";if((r>>>=0)<=(t>>>=0))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return D(this,t,r);case\"utf8\":case\"utf-8\":return k(this,t,r);case\"ascii\":return P(this,t,r);case\"latin1\":case\"binary\":return T(this,t,r);case\"base64\":return S(this,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return O(this,t,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}.apply(this,arguments)},l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){var e=\"\",r=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString(\"hex\",0,r).match(/.{2}/g).join(\" \"),this.length>r&&(e+=\" ... \")),\"\"},l.prototype.compare=function(e,t,r,n,i){if(!l.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError(\"out of range index\");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,i>>>=0,this===e)return 0;for(var a=i-n,o=r-t,s=Math.min(a,o),f=this.slice(n,i),u=e.slice(t,r),h=0;hi)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");for(var a=!1;;)switch(n){case\"hex\":return y(this,e,t,r);case\"utf8\":case\"utf-8\":return b(this,e,t,r);case\"ascii\":return v(this,e,t,r);case\"latin1\":case\"binary\":return w(this,e,t,r);case\"base64\":return E(this,e,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return x(this,e,t,r);default:if(a)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),a=!0}},l.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};var A=4096;function P(e,t,r){var n=\"\";r=Math.min(e.length,r);for(var i=t;in)&&(r=n);for(var i=\"\",a=t;ar)throw new RangeError(\"Trying to access beyond buffer length\")}function R(e,t,r,n,i,a){if(!l.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError(\"Index out of range\")}function L(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,a=Math.min(e.length-r,2);i>>8*(n?i:1-i)}function F(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,a=Math.min(e.length-r,4);i>>8*(n?i:3-i)&255}function B(e,t,r,n,i,a){if(r+n>e.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function U(e,t,r,n,a){return a||B(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function M(e,t,r,n,a){return a||B(e,0,r,8),i.write(e,t,r,n,52,8),r+8}l.prototype.slice=function(e,t){var r,n=this.length;if(e=~~e,t=void 0===t?n:~~t,e<0?(e+=n)<0&&(e=0):e>n&&(e=n),t<0?(t+=n)<0&&(t=0):t>n&&(t=n),t0&&(i*=256);)n+=this[e+--t]*i;return n},l.prototype.readUInt8=function(e,t){return t||I(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,t){return t||I(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,t){return t||I(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,t){return t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,t){return t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||I(e,t,this.length);for(var n=this[e],i=1,a=0;++a=(i*=128)&&(n-=Math.pow(2,8*t)),n},l.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||I(e,t,this.length);for(var n=t,i=1,a=this[e+--n];n>0&&(i*=256);)a+=this[e+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*t)),a},l.prototype.readInt8=function(e,t){return t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||I(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt16BE=function(e,t){t||I(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt32LE=function(e,t){return t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||I(e,4,this.length),i.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||I(e,4,this.length),i.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||I(e,8,this.length),i.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||I(e,8,this.length),i.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t|=0,r|=0,n)||R(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[t]=255&e;++a=0&&(a*=256);)this[t+i]=e/a&255;return t+r},l.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},l.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):F(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);R(this,e,t,r,i-1,-i)}var a=0,o=1,s=0;for(this[t]=255&e;++a>0)-s&255;return t+r},l.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);R(this,e,t,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[t+a]=255&e;--a>=0&&(o*=256);)e<0&&0===s&&0!==this[t+a+1]&&(s=1),this[t+a]=(e/o>>0)-s&255;return t+r},l.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):F(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,r){return U(this,e,t,!0,r)},l.prototype.writeFloatBE=function(e,t,r){return U(this,e,t,!1,r)},l.prototype.writeDoubleLE=function(e,t,r){return M(this,e,t,!0,r)},l.prototype.writeDoubleBE=function(e,t,r){return M(this,e,t,!1,r)},l.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError(\"sourceStart out of bounds\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),e.length-t=0;--i)e[i+t]=this[i+r];else if(a<1e3||!l.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),\"number\"==typeof e)for(a=t;a55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;a.push(r)}else if(r<2048){if((t-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\"Invalid code point\");if((t-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function j(e){return n.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\\s+|\\s+$/g,\"\")}(e).replace(N,\"\")).length<2)return\"\";for(;e.length%4!=0;)e+=\"=\";return e}(e))}function C(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}}).call(this,r(0))},function(e,t,r){\"use strict\";var n=r(10),i=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};e.exports=h;var a=r(6);a.inherits=r(5);var o=r(35),s=r(18);a.inherits(h,o);for(var l=i(s.prototype),f=0;f1)for(var r=1;r0){var r=(0,i.readFixedString)(this.byteArray,t.dataOffset,t.length).match(/\\\\/g);return null===r?1:r.length+1}}},{key:\"string\",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){var n=(0,i.readFixedString)(this.byteArray,r.dataOffset,r.length);return t>=0?n.split(\"\\\\\")[t].trim():n.trim()}}},{key:\"text\",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){var n=(0,i.readFixedString)(this.byteArray,r.dataOffset,r.length);return t>=0?n.split(\"\\\\\")[t].replace(/ +$/,\"\"):n.replace(/ +$/,\"\")}}},{key:\"floatString\",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){t=void 0!==t?t:0;var n=this.string(e,t);if(void 0!==n)return parseFloat(n)}}},{key:\"intString\",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){t=void 0!==t?t:0;var n=this.string(e,t);if(void 0!==n)return parseInt(n)}}},{key:\"attributeTag\",value:function(e){var t=this.elements[e];if(t&&4===t.length){var r=a(t,this.byteArrayParser).readUint16,n=this.byteArray,i=t.dataOffset;return\"x\"+(\"00000000\"+(256*r(n,i)*256+r(n,i+2)).toString(16)).substr(-8)}}}]),e}();t.default=o},function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)i(r,n)&&(e[n]=r[n])}}return e},t.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var a={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var a=0;a=n.length)throw\"dicomParser.ByteStream: parameter 'position' cannot be greater than or equal to 'byteArray' length\";this.byteArrayParser=r,this.byteArray=n,this.position=i||0,this.warnings=[]}return i(t,[{key:\"seek\",value:function(e){if(this.position+e<0)throw\"dicomParser.ByteStream.prototype.seek: cannot seek to position < 0\";this.position+=e}},{key:\"readByteStream\",value:function(e){if(this.position+e>this.byteArray.length)throw\"dicomParser.ByteStream.prototype.readByteStream: readByteStream - buffer overread\";var r=(0,o.default)(this.byteArray,this.position,e);return this.position+=e,new t(this.byteArrayParser,r)}},{key:\"readUint16\",value:function(){var e=this.byteArrayParser.readUint16(this.byteArray,this.position);return this.position+=2,e}},{key:\"readUint32\",value:function(){var e=this.byteArrayParser.readUint32(this.byteArray,this.position);return this.position+=4,e}},{key:\"readFixedString\",value:function(e){var t=(0,s.readFixedString)(this.byteArray,this.position,e);return this.position+=e,t}}]),t}();t.default=l}).call(this,r(1).Buffer)},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){if(void 0===e)throw\"dicomParser.readSequenceItem: missing required parameter 'byteStream'\";var t={tag:(0,a.default)(e),length:e.readUint32(),dataOffset:e.position};if(\"xfffee000\"!==t.tag)throw\"dicomParser.readSequenceItem: item tag (FFFE,E000) not found at offset \"+e.position;return t};var n,i=r(4),a=(n=i)&&n.__esModule?n:{default:n}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.readFixedString=function(e,t,r){if(r<0)throw\"dicomParser.readFixedString - length cannot be less than 0\";if(t+r>e.length)throw\"dicomParser.readFixedString: attempt to read past end of buffer\";for(var n,i=\"\",a=0;a3&&void 0!==arguments[3]?arguments[3]:{};if(r=void 0===r?t.byteArray.length:r,void 0===t)throw\"dicomParser.parseDicomDataSetExplicit: missing required parameter 'byteStream'\";if(rt.byteArray.length)throw\"dicomParser.parseDicomDataSetExplicit: invalid value for parameter 'maxP osition'\";var a=e.elements;for(;t.positionr)throw\"dicomParser:parseDicomDataSetExplicit: buffer overrun\"},t.parseDicomDataSetImplicit=function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(r=void 0===r?e.byteArray.length:r,void 0===t)throw\"dicomParser.parseDicomDataSetImplicit: missing required parameter 'byteStream'\";if(rt.byteArray.length)throw\"dicomParser.parseDicomDataSetImplicit: invalid value for parameter 'maxPosition'\";var a=e.elements;for(;t.position= 0\";if(r>=t.fragments.length)throw\"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragmentIndex' must be < number of fragments\";if(s<1)throw\"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'numFragments' must be > 0\";if(r+s>t.fragments.length)throw\"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragment' + 'numFragments' < number of fragments\";var u=new i.default(e.byteArrayParser,e.byteArray,t.dataOffset),h=(0,a.default)(u);if(\"xfffee000\"!==h.tag)throw\"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000\";u.seek(h.length);var d=u.position;if(1===s)return(0,o.default)(u.byteArray,d+f[r].offset+8,f[r].length);for(var c=l(f,r,s),p=(0,n.default)(u.byteArray,c),g=0,m=r;m-1?n:a.nextTick;y.WritableState=_;var f=r(6);f.inherits=r(5);var u={deprecate:r(61)},h=r(34),d=r(9).Buffer,c=i.Uint8Array||function(){};var p,g=r(33);function m(){}function _(e,t){s=s||r(2),e=e||{};var n=t instanceof s;this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var i=e.highWaterMark,f=e.writableHighWaterMark,u=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(f||0===f)?f:u,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var h=!1===e.decodeStrings;this.decodeStrings=!h,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var r=e._writableState,n=r.sync,i=r.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function(e,t,r,n,i){--t.pendingcb,r?(a.nextTick(i,n),a.nextTick(S,e,t),e._writableState.errorEmitted=!0,e.emit(\"error\",n)):(i(n),e._writableState.errorEmitted=!0,e.emit(\"error\",n),S(e,t))}(e,r,n,t,i);else{var o=E(r);o||r.corked||r.bufferProcessing||!r.bufferedRequest||w(e,r),n?l(v,e,r,o,i):v(e,r,o,i)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function y(e){if(s=s||r(2),!(p.call(y,this)||this instanceof s))return new y(e);this._writableState=new _(e,this),this.writable=!0,e&&(\"function\"==typeof e.write&&(this._write=e.write),\"function\"==typeof e.writev&&(this._writev=e.writev),\"function\"==typeof e.destroy&&(this._destroy=e.destroy),\"function\"==typeof e.final&&(this._final=e.final)),h.call(this)}function b(e,t,r,n,i,a,o){t.writelen=n,t.writecb=o,t.writing=!0,t.sync=!0,r?e._writev(i,t.onwrite):e._write(i,a,t.onwrite),t.sync=!1}function v(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit(\"drain\"))}(e,t),t.pendingcb--,n(),S(e,t)}function w(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,i=new Array(n),a=t.corkedRequestsFree;a.entry=r;for(var s=0,l=!0;r;)i[s]=r,r.isBuf||(l=!1),r=r.next,s+=1;i.allBuffers=l,b(e,t,!0,t.length,i,\"\",a.finish),t.pendingcb++,t.lastBufferedRequest=null,a.next?(t.corkedRequestsFree=a.next,a.next=null):t.corkedRequestsFree=new o(t),t.bufferedRequestCount=0}else{for(;r;){var f=r.chunk,u=r.encoding,h=r.callback;if(b(e,t,!1,t.objectMode?1:f.length,f,u,h),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function E(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function x(e,t){e._final(function(r){t.pendingcb--,r&&e.emit(\"error\",r),t.prefinished=!0,e.emit(\"prefinish\"),S(e,t)})}function S(e,t){var r=E(t);return r&&(!function(e,t){t.prefinished||t.finalCalled||(\"function\"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,a.nextTick(x,e,t)):(t.prefinished=!0,e.emit(\"prefinish\")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit(\"finish\"))),r}f.inherits(y,h),_.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(_.prototype,\"buffer\",{get:u.deprecate(function(){return this.getBuffer()},\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(e){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(y,Symbol.hasInstance,{value:function(e){return!!p.call(this,e)||this===y&&(e&&e._writableState instanceof _)}})):p=function(e){return e instanceof this},y.prototype.pipe=function(){this.emit(\"error\",new Error(\"Cannot pipe, not readable\"))},y.prototype.write=function(e,t,r){var n,i=this._writableState,o=!1,s=!i.objectMode&&(n=e,d.isBuffer(n)||n instanceof c);return s&&!d.isBuffer(e)&&(e=function(e){return d.from(e)}(e)),\"function\"==typeof t&&(r=t,t=null),s?t=\"buffer\":t||(t=i.defaultEncoding),\"function\"!=typeof r&&(r=m),i.ended?function(e,t){var r=new Error(\"write after end\");e.emit(\"error\",r),a.nextTick(t,r)}(this,r):(s||function(e,t,r,n){var i=!0,o=!1;return null===r?o=new TypeError(\"May not write null values to stream\"):\"string\"==typeof r||void 0===r||t.objectMode||(o=new TypeError(\"Invalid non-string/buffer chunk\")),o&&(e.emit(\"error\",o),a.nextTick(n,o),i=!1),i}(this,i,e,r))&&(i.pendingcb++,o=function(e,t,r,n,i,a){if(!r){var o=function(e,t,r){e.objectMode||!1===e.decodeStrings||\"string\"!=typeof t||(t=d.from(t,r));return t}(t,n,i);n!==o&&(r=!0,i=\"buffer\",n=o)}var s=t.objectMode?1:n.length;t.length+=s;var l=t.length-1))throw new TypeError(\"Unknown encoding: \"+e);return this._writableState.defaultEncoding=e,this},y.prototype._write=function(e,t,r){r(new Error(\"_write() is not implemented\"))},y.prototype._writev=null,y.prototype.end=function(e,t,r){var n=this._writableState;\"function\"==typeof e?(r=e,e=null,t=null):\"function\"==typeof t&&(r=t,t=null),null!==e&&void 0!==e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||function(e,t,r){t.ending=!0,S(e,t),r&&(t.finished?a.nextTick(r):e.once(\"finish\",r));t.ended=!0,e.writable=!1}(this,n,r)},Object.defineProperty(y.prototype,\"destroyed\",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),y.prototype.destroy=g.destroy,y.prototype._undestroy=g.undestroy,y.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,r(3),r(63).setImmediate,r(0))},function(e,t,r){(t=e.exports=r(35)).Stream=t,t.Readable=t,t.Writable=r(18),t.Duplex=r(2),t.Transform=r(31),t.PassThrough=r(60)},function(e,t){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function n(e){return\"function\"==typeof e}function i(e){return\"object\"==typeof e&&null!==e}function a(e){return void 0===e}e.exports=r,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if(\"number\"!=typeof e||e<0||isNaN(e))throw TypeError(\"n must be a positive number\");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,r,o,s,l,f;if(this._events||(this._events={}),\"error\"===e&&(!this._events.error||i(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var u=new Error('Uncaught, unspecified \"error\" event. ('+t+\")\");throw u.context=t,u}if(a(r=this._events[e]))return!1;if(n(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),r.apply(this,s)}else if(i(r))for(s=Array.prototype.slice.call(arguments,1),o=(f=r.slice()).length,l=0;l0&&this._events[e].length>o&&(this._events[e].warned=!0,console.error(\"(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.\",this._events[e].length),\"function\"==typeof console.trace&&console.trace()),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){if(!n(t))throw TypeError(\"listener must be a function\");var r=!1;function i(){this.removeListener(e,i),r||(r=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},r.prototype.removeListener=function(e,t){var r,a,o,s;if(!n(t))throw TypeError(\"listener must be a function\");if(!this._events||!this._events[e])return this;if(o=(r=this._events[e]).length,a=-1,r===t||n(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit(\"removeListener\",e,t);else if(i(r)){for(s=o;s-- >0;)if(r[s]===t||r[s].listener&&r[s].listener===t){a=s;break}if(a<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(a,1),this._events.removeListener&&this.emit(\"removeListener\",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)\"removeListener\"!==t&&this.removeAllListeners(t);return this.removeAllListeners(\"removeListener\"),this._events={},this}if(n(r=this._events[e]))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){return this._events&&this._events[e]?n(this._events[e])?[this._events[e]]:this._events[e].slice():[]},r.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(n(t))return 1;if(t)return t.length}return 0},r.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={readUint16:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readUint16: position cannot be less than 0\";if(t+2>e.length)throw\"littleEndianByteArrayParser.readUint16: attempt to read past end of buffer\";return e[t]+256*e[t+1]},readInt16:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readInt16: position cannot be less than 0\";if(t+2>e.length)throw\"littleEndianByteArrayParser.readInt16: attempt to read past end of buffer\";var r=e[t]+(e[t+1]<<8);return 32768&r&&(r=r-65535-1),r},readUint32:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readUint32: position cannot be less than 0\";if(t+4>e.length)throw\"littleEndianByteArrayParser.readUint32: attempt to read past end of buffer\";return e[t]+256*e[t+1]+256*e[t+2]*256+256*e[t+3]*256*256},readInt32:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readInt32: position cannot be less than 0\";if(t+4>e.length)throw\"littleEndianByteArrayParser.readInt32: attempt to read past end of buffer\";return e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24)},readFloat:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readFloat: position cannot be less than 0\";if(t+4>e.length)throw\"littleEndianByteArrayParser.readFloat: attempt to read past end of buffer\";var r=new Uint8Array(4);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw\"littleEndianByteArrayParser.readDouble: position cannot be less than 0\";if(t+8>e.length)throw\"littleEndianByteArrayParser.readDouble: attempt to read past end of buffer\";var r=new Uint8Array(8);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],r[4]=e[t+4],r[5]=e[t+5],r[6]=e[t+6],r[7]=e[t+7],new Float64Array(r.buffer)[0]}}},function(e,t,r){\"use strict\";(function(e){Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(t,r){if(void 0!==e&&t instanceof e)return e.alloc(r);if(t instanceof Uint8Array)return new Uint8Array(r);throw\"dicomParser.alloc: unknown type for byteArray\"}}).call(this,r(1).Buffer)},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,r){if(void 0===e)throw\"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'\";var o={tag:(0,a.default)(e),length:e.readUint32(),dataOffset:e.position};4294967295===o.length&&(o.hadUndefinedLength=!0);if(o.tag===t)return o;if(s(o,e,r))return(0,i.default)(e,o),o;if(o.hadUndefinedLength)return(0,n.default)(e,o),o;return e.seek(o.length),o};var n=o(r(24)),i=o(r(39)),a=o(r(4));function o(e){return e&&e.__esModule?e:{default:e}}var s=function(e,t,r){if(void 0!==r)return\"SQ\"===r(e.tag);if(t.position+4<=t.byteArray.length){var n=(0,a.default)(t);return t.seek(-4),\"xfffee000\"===n||\"xfffee0dd\"===n}return t.warnings.push(\"eof encountered before finding sequence item tag or sequence delimiter tag in peeking to determine VR\"),!1}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){if(void 0===e)throw\"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'\";var r=e.byteArray.length-8;for(;e.position<=r;){var n=e.readUint16();if(65534===n){var i=e.readUint16();if(57357===i){var a=e.readUint32();return 0!==a&&e.warnings(\"encountered non zero length following item delimiter at position \"+(e.position-4)+\" while reading element of undefined length with tag \"+t.tag),void(t.length=e.position-t.dataOffset)}}}t.length=e.byteArray.length-t.dataOffset,e.seek(e.byteArray.length-e.position)}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n={AE:!0,AS:!0,AT:!1,CS:!0,DA:!0,DS:!0,DT:!0,FL:!1,FD:!1,IS:!0,LO:!0,LT:!0,OB:!1,OD:!1,OF:!1,OW:!1,PN:!0,SH:!0,SL:!1,SQ:!1,SS:!1,ST:!0,TM:!0,UI:!0,UL:!1,UN:void 0,UR:!0,US:!1,UT:!0};t.isStringVr=function(e){return n[e]},t.isPrivateTag=function(e){return parseInt(e[4],10)%2==1},t.parsePN=function(e){if(void 0!==e){var t=e.split(\"^\");return{familyName:t[0],givenName:t[1],middleName:t[2],prefix:t[3],suffix:t[4]}}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,r,n,i){if(n=n||t.basicOffsetTable,i=i||t.fragments,void 0===e)throw\"dicomParser.readEncapsulatedImageFrame: missing required parameter 'dataSet'\";if(void 0===t)throw\"dicomParser.readEncapsulatedImageFrame: missing required parameter 'pixelDataElement'\";if(void 0===r)throw\"dicomParser.readEncapsulatedImageFrame: missing required parameter 'frameIndex'\";if(void 0===n)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' does not have basicOffsetTable\";if(\"x7fe00010\"!==t.tag)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to non pixel data tag (expected tag = x7fe00010)\";if(!0!==t.encapsulatedPixelData)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have encapsulated pixel data\";if(!0!==t.hadUndefinedLength)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have undefined length\";if(void 0===t.fragments)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'pixelDataElement' refers to pixel data element that does not have fragments\";if(0===n.length)throw\"dicomParser.readEncapsulatedImageFrame: basicOffsetTable has zero entries\";if(r<0)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be >= 0\";if(r>=n.length)throw\"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be < basicOffsetTable.length\";var l=n[r],f=o(i,l);if(void 0===f)throw\"dicomParser.readEncapsulatedImageFrame: unable to find fragment that matches basic offset table entry\";var u=s(r,n,i,f);return(0,a.default)(e,t,f,u,i)};var n,i=r(17),a=(n=i)&&n.__esModule?n:{default:n};var o=function(e,t){for(var r=0;r>>1:e>>>1;t[r]=e}return t}();e.exports=function(e,t,r,i){var a=n,o=i+r;e^=-1;for(var s=i;s>>8^a[255&(e^t[s])];return-1^e}},function(e,t,r){\"use strict\";e.exports=function(e,t,r,n){for(var i=65535&e|0,a=e>>>16&65535|0,o=0;0!==r;){r-=o=r>2e3?2e3:r;do{a=a+(i=i+t[n++]|0)|0}while(--o);i%=65521,a%=65521}return i|a<<16|0}},function(e,t,r){(function(e,n){var i=/%[sdj%]/g;t.format=function(e){if(!_(e)){for(var t=[],r=0;r=a)return e;switch(e){case\"%s\":return String(n[r++]);case\"%d\":return Number(n[r++]);case\"%j\":try{return JSON.stringify(n[r++])}catch(e){return\"[Circular]\"}default:return e}}),l=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),p(r)?n.showHidden=r:r&&t._extend(n,r),y(n.showHidden)&&(n.showHidden=!1),y(n.depth)&&(n.depth=2),y(n.colors)&&(n.colors=!1),y(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),u(n,e,n.depth)}function l(e,t){var r=s.styles[t];return r?\"\u001b[\"+s.colors[r][0]+\"m\"+e+\"\u001b[\"+s.colors[r][1]+\"m\":e}function f(e,t){return e}function u(e,r,n){if(e.customInspect&&r&&x(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,e);return _(i)||(i=u(e,i,n)),i}var a=function(e,t){if(y(t))return e.stylize(\"undefined\",\"undefined\");if(_(t)){var r=\"'\"+JSON.stringify(t).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return e.stylize(r,\"string\")}if(m(t))return e.stylize(\"\"+t,\"number\");if(p(t))return e.stylize(\"\"+t,\"boolean\");if(g(t))return e.stylize(\"null\",\"null\")}(e,r);if(a)return a;var o=Object.keys(r),s=function(e){var t={};return e.forEach(function(e,r){t[e]=!0}),t}(o);if(e.showHidden&&(o=Object.getOwnPropertyNames(r)),E(r)&&(o.indexOf(\"message\")>=0||o.indexOf(\"description\")>=0))return h(r);if(0===o.length){if(x(r)){var l=r.name?\": \"+r.name:\"\";return e.stylize(\"[Function\"+l+\"]\",\"special\")}if(b(r))return e.stylize(RegExp.prototype.toString.call(r),\"regexp\");if(w(r))return e.stylize(Date.prototype.toString.call(r),\"date\");if(E(r))return h(r)}var f,v=\"\",S=!1,k=[\"{\",\"}\"];(c(r)&&(S=!0,k=[\"[\",\"]\"]),x(r))&&(v=\" [Function\"+(r.name?\": \"+r.name:\"\")+\"]\");return b(r)&&(v=\" \"+RegExp.prototype.toString.call(r)),w(r)&&(v=\" \"+Date.prototype.toUTCString.call(r)),E(r)&&(v=\" \"+h(r)),0!==o.length||S&&0!=r.length?n<0?b(r)?e.stylize(RegExp.prototype.toString.call(r),\"regexp\"):e.stylize(\"[Object]\",\"special\"):(e.seen.push(r),f=S?function(e,t,r,n,i){for(var a=[],o=0,s=t.length;o=0&&0,e+t.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1},0)>60)return r[0]+(\"\"===t?\"\":t+\"\\n \")+\" \"+e.join(\",\\n \")+\" \"+r[1];return r[0]+t+\" \"+e.join(\", \")+\" \"+r[1]}(f,v,k)):k[0]+v+k[1]}function h(e){return\"[\"+Error.prototype.toString.call(e)+\"]\"}function d(e,t,r,n,i,a){var o,s,l;if((l=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?s=l.set?e.stylize(\"[Getter/Setter]\",\"special\"):e.stylize(\"[Getter]\",\"special\"):l.set&&(s=e.stylize(\"[Setter]\",\"special\")),P(n,i)||(o=\"[\"+i+\"]\"),s||(e.seen.indexOf(l.value)<0?(s=g(r)?u(e,l.value,null):u(e,l.value,r-1)).indexOf(\"\\n\")>-1&&(s=a?s.split(\"\\n\").map(function(e){return\" \"+e}).join(\"\\n\").substr(2):\"\\n\"+s.split(\"\\n\").map(function(e){return\" \"+e}).join(\"\\n\")):s=e.stylize(\"[Circular]\",\"special\")),y(o)){if(a&&i.match(/^\\d+$/))return s;(o=JSON.stringify(\"\"+i)).match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(o=o.substr(1,o.length-2),o=e.stylize(o,\"name\")):(o=o.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),o=e.stylize(o,\"string\"))}return o+\": \"+s}function c(e){return Array.isArray(e)}function p(e){return\"boolean\"==typeof e}function g(e){return null===e}function m(e){return\"number\"==typeof e}function _(e){return\"string\"==typeof e}function y(e){return void 0===e}function b(e){return v(e)&&\"[object RegExp]\"===S(e)}function v(e){return\"object\"==typeof e&&null!==e}function w(e){return v(e)&&\"[object Date]\"===S(e)}function E(e){return v(e)&&(\"[object Error]\"===S(e)||e instanceof Error)}function x(e){return\"function\"==typeof e}function S(e){return Object.prototype.toString.call(e)}function k(e){return e<10?\"0\"+e.toString(10):e.toString(10)}t.debuglog=function(e){if(y(a)&&(a=n.env.NODE_DEBUG||\"\"),e=e.toUpperCase(),!o[e])if(new RegExp(\"\\\\b\"+e+\"\\\\b\",\"i\").test(a)){var r=n.pid;o[e]=function(){var n=t.format.apply(t,arguments);console.error(\"%s %d: %s\",e,r,n)}}else o[e]=function(){};return o[e]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:\"cyan\",number:\"yellow\",boolean:\"yellow\",undefined:\"grey\",null:\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},t.isArray=c,t.isBoolean=p,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=m,t.isString=_,t.isSymbol=function(e){return\"symbol\"==typeof e},t.isUndefined=y,t.isRegExp=b,t.isObject=v,t.isDate=w,t.isError=E,t.isFunction=x,t.isPrimitive=function(e){return null===e||\"boolean\"==typeof e||\"number\"==typeof e||\"string\"==typeof e||\"symbol\"==typeof e||void 0===e},t.isBuffer=r(54);var A=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){var e,r;console.log(\"%s - %s\",(e=new Date,r=[k(e.getHours()),k(e.getMinutes()),k(e.getSeconds())].join(\":\"),[e.getDate(),A[e.getMonth()],r].join(\" \")),t.format.apply(t,arguments))},t.inherits=r(53),t._extend=function(e,t){if(!t||!v(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e}}).call(this,r(0),r(3))},function(e,t,r){\"use strict\";(function(t){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction n(e,t){if(e===t)return 0;for(var r=e.length,n=t.length,i=0,a=Math.min(r,n);i=0;f--)if(u[f]!==h[f])return!1;for(f=u.length-1;f>=0;f--)if(l=u[f],!y(e[l],t[l],r,n))return!1;return!0}(e,t,r,o))}return r?e===t:e==t}function b(e){return\"[object Arguments]\"==Object.prototype.toString.call(e)}function v(e,t){if(!e||!t)return!1;if(\"[object RegExp]\"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function w(e,t,r,n){var i;if(\"function\"!=typeof t)throw new TypeError('\"block\" argument must be a function');\"string\"==typeof r&&(n=r,r=null),i=function(e){var t;try{e()}catch(e){t=e}return t}(t),n=(r&&r.name?\" (\"+r.name+\").\":\".\")+(n?\" \"+n:\".\"),e&&!i&&m(i,r,\"Missing expected exception\"+n);var o=\"string\"==typeof n,s=!e&&a.isError(i),l=!e&&i&&!r;if((s&&o&&v(i,r)||l)&&m(i,r,\"Got unwanted exception\"+n),e&&i&&r&&!v(i,r)||!e&&i)throw i}h.AssertionError=function(e){var t;this.name=\"AssertionError\",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=p(g((t=this).actual),128)+\" \"+t.operator+\" \"+p(g(t.expected),128),this.generatedMessage=!0);var r=e.stackStartFunction||m;if(Error.captureStackTrace)Error.captureStackTrace(this,r);else{var n=new Error;if(n.stack){var i=n.stack,a=c(r),o=i.indexOf(\"\\n\"+a);if(o>=0){var s=i.indexOf(\"\\n\",o+1);i=i.substring(s+1)}this.stack=i}}},a.inherits(h.AssertionError,Error),h.fail=m,h.ok=_,h.equal=function(e,t,r){e!=t&&m(e,t,r,\"==\",h.equal)},h.notEqual=function(e,t,r){e==t&&m(e,t,r,\"!=\",h.notEqual)},h.deepEqual=function(e,t,r){y(e,t,!1)||m(e,t,r,\"deepEqual\",h.deepEqual)},h.deepStrictEqual=function(e,t,r){y(e,t,!0)||m(e,t,r,\"deepStrictEqual\",h.deepStrictEqual)},h.notDeepEqual=function(e,t,r){y(e,t,!1)&&m(e,t,r,\"notDeepEqual\",h.notDeepEqual)},h.notDeepStrictEqual=function e(t,r,n){y(t,r,!0)&&m(t,r,n,\"notDeepStrictEqual\",e)},h.strictEqual=function(e,t,r){e!==t&&m(e,t,r,\"===\",h.strictEqual)},h.notStrictEqual=function(e,t,r){e===t&&m(e,t,r,\"!==\",h.notStrictEqual)},h.throws=function(e,t,r){w(!0,e,t,r)},h.doesNotThrow=function(e,t,r){w(!1,e,t,r)},h.ifError=function(e){if(e)throw e};var E=Object.keys||function(e){var t=[];for(var r in e)o.call(e,r)&&t.push(r);return t}}).call(this,r(0))},function(e,t,r){\"use strict\";e.exports=a;var n=r(2),i=r(6);function a(e){if(!(this instanceof a))return new a(e);n.call(this,e),this._transformState={afterTransform:function(e,t){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(!n)return this.emit(\"error\",new Error(\"write callback called multiple times\"));r.writechunk=null,r.writecb=null,null!=t&&this.push(t),n(e);var i=this._readableState;i.reading=!1,(i.needReadable||i.length>5==6?2:e>>4==14?3:e>>3==30?4:-1}function s(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,\"�\".repeat(r);if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,\"�\".repeat(r+1);if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,\"�\".repeat(r+2)}}(this,e,t);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function l(e,t){if((e.length-t)%2==0){var r=e.toString(\"utf16le\",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString(\"utf16le\",t,e.length-1)}function f(e){var t=e&&e.length?this.write(e):\"\";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString(\"utf16le\",0,r)}return t}function u(e,t){var r=(e.length-t)%3;return 0===r?e.toString(\"base64\",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString(\"base64\",t,e.length-r))}function h(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+this.lastChar.toString(\"base64\",0,3-this.lastNeed):t}function d(e){return e.toString(this.encoding)}function c(e){return e&&e.length?this.write(e):\"\"}t.StringDecoder=a,a.prototype.write=function(e){if(0===e.length)return\"\";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return\"\";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return i>0&&(e.lastNeed=i-1),i;if(--n=0)return i>0&&(e.lastNeed=i-2),i;if(--n=0)return i>0&&(2===i?i=0:e.lastNeed=i-3),i;return 0}(this,e,t);if(!this.lastNeed)return e.toString(\"utf8\",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString(\"utf8\",t,n)},a.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,r){\"use strict\";var n=r(10);function i(e,t){e.emit(\"error\",t)}e.exports={destroy:function(e,t){var r=this,a=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return a||o?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||n.nextTick(i,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(e){!t&&e?(n.nextTick(i,r,e),r._writableState&&(r._writableState.errorEmitted=!0)):t&&t(e)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,r){e.exports=r(20).EventEmitter},function(e,t,r){\"use strict\";(function(t,n){var i=r(10);e.exports=b;var a,o=r(38);b.ReadableState=y;r(20).EventEmitter;var s=function(e,t){return e.listeners(t).length},l=r(34),f=r(9).Buffer,u=t.Uint8Array||function(){};var h=r(6);h.inherits=r(5);var d=r(66),c=void 0;c=d&&d.debuglog?d.debuglog(\"stream\"):function(){};var p,g=r(65),m=r(33);h.inherits(b,l);var _=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function y(e,t){a=a||r(2),e=e||{};var n=t instanceof a;this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var i=e.highWaterMark,o=e.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(o||0===o)?o:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new g,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=r(32).StringDecoder),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function b(e){if(a=a||r(2),!(this instanceof b))return new b(e);this._readableState=new y(e,this),this.readable=!0,e&&(\"function\"==typeof e.read&&(this._read=e.read),\"function\"==typeof e.destroy&&(this._destroy=e.destroy)),l.call(this)}function v(e,t,r,n,i){var a,o=e._readableState;null===t?(o.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,S(e)}(e,o)):(i||(a=function(e,t){var r;n=t,f.isBuffer(n)||n instanceof u||\"string\"==typeof t||void 0===t||e.objectMode||(r=new TypeError(\"Invalid non-string/buffer chunk\"));var n;return r}(o,t)),a?e.emit(\"error\",a):o.objectMode||t&&t.length>0?(\"string\"==typeof t||o.objectMode||Object.getPrototypeOf(t)===f.prototype||(t=function(e){return f.from(e)}(t)),n?o.endEmitted?e.emit(\"error\",new Error(\"stream.unshift() after end event\")):w(e,o,t,!0):o.ended?e.emit(\"error\",new Error(\"stream.push() after EOF\")):(o.reading=!1,o.decoder&&!r?(t=o.decoder.write(t),o.objectMode||0!==t.length?w(e,o,t,!1):A(e,o)):w(e,o,t,!1))):n||(o.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=E?e=E:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function S(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(c(\"emitReadable\",t.flowing),t.emittedReadable=!0,t.sync?i.nextTick(k,e):k(e))}function k(e){c(\"emit readable\"),e.emit(\"readable\"),O(e)}function A(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(P,e,t))}function P(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(\"\"):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;ea.length?a.length:e;if(o===a.length?i+=a:i+=a.slice(0,e),0===(e-=o)){o===a.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=a.slice(o));break}++n}return t.length-=n,i}(e,t):function(e,t){var r=f.allocUnsafe(e),n=t.head,i=1;n.data.copy(r),e-=n.data.length;for(;n=n.next;){var a=n.data,o=e>a.length?a.length:e;if(a.copy(r,r.length-e,0,o),0===(e-=o)){o===a.length?(++i,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=a.slice(o));break}++i}return t.length-=i,r}(e,t);return n}(e,t.buffer,t.decoder),r);var r}function R(e){var t=e._readableState;if(t.length>0)throw new Error('\"endReadable()\" called on non-empty stream');t.endEmitted||(t.ended=!0,i.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit(\"end\"))}function F(e,t){for(var r=0,n=e.length;r=t.highWaterMark||t.ended))return c(\"read: emitReadable\",t.length,t.ended),0===t.length&&t.ended?R(this):S(this),null;if(0===(e=x(e,t))&&t.ended)return 0===t.length&&R(this),null;var n,i=t.needReadable;return c(\"need readable\",i),(0===t.length||t.length-e0?I(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&R(this)),null!==n&&this.emit(\"data\",n),n},b.prototype._read=function(e){this.emit(\"error\",new Error(\"_read() is not implemented\"))},b.prototype.pipe=function(e,t){var r=this,a=this._readableState;switch(a.pipesCount){case 0:a.pipes=e;break;case 1:a.pipes=[a.pipes,e];break;default:a.pipes.push(e)}a.pipesCount+=1,c(\"pipe count=%d opts=%j\",a.pipesCount,t);var l=(!t||!1!==t.end)&&e!==n.stdout&&e!==n.stderr?u:b;function f(t,n){c(\"onunpipe\"),t===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,c(\"cleanup\"),e.removeListener(\"close\",_),e.removeListener(\"finish\",y),e.removeListener(\"drain\",h),e.removeListener(\"error\",m),e.removeListener(\"unpipe\",f),r.removeListener(\"end\",u),r.removeListener(\"end\",b),r.removeListener(\"data\",g),d=!0,!a.awaitDrain||e._writableState&&!e._writableState.needDrain||h())}function u(){c(\"onend\"),e.end()}a.endEmitted?i.nextTick(l):r.once(\"end\",l),e.on(\"unpipe\",f);var h=function(e){return function(){var t=e._readableState;c(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,\"data\")&&(t.flowing=!0,O(e))}}(r);e.on(\"drain\",h);var d=!1;var p=!1;function g(t){c(\"ondata\"),p=!1,!1!==e.write(t)||p||((1===a.pipesCount&&a.pipes===e||a.pipesCount>1&&-1!==F(a.pipes,e))&&!d&&(c(\"false write response, pause\",r._readableState.awaitDrain),r._readableState.awaitDrain++,p=!0),r.pause())}function m(t){c(\"onerror\",t),b(),e.removeListener(\"error\",m),0===s(e,\"error\")&&e.emit(\"error\",t)}function _(){e.removeListener(\"finish\",y),b()}function y(){c(\"onfinish\"),e.removeListener(\"close\",_),b()}function b(){c(\"unpipe\"),r.unpipe(e)}return r.on(\"data\",g),function(e,t,r){if(\"function\"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?o(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,\"error\",m),e.once(\"close\",_),e.once(\"finish\",y),e.emit(\"pipe\",r),a.flowing||(c(\"pipe resume\"),r.resume()),e},b.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(\"unpipe\",this,r),this);if(!e){var n=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var a=0;a\"x0002ffff\"){r.position=n;break}s.parser=a.default,t[s.tag]=s}var l=new i.default(r.byteArrayParser,r.byteArray,t);return l.warnings=r.warnings,l.position=r.position,l}()};var n=s(r(12)),i=s(r(7)),a=s(r(21)),o=s(r(15));function s(e){return e&&e.__esModule?e:{default:e}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={readUint16:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readUint16: position cannot be less than 0\";if(t+2>e.length)throw\"bigEndianByteArrayParser.readUint16: attempt to read past end of buffer\";return(e[t]<<8)+e[t+1]},readInt16:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readInt16: position cannot be less than 0\";if(t+2>e.length)throw\"bigEndianByteArrayParser.readInt16: attempt to read past end of buffer\";var r=(e[t]<<8)+e[t+1];return 32768&r&&(r=r-65535-1),r},readUint32:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readUint32: position cannot be less than 0\";if(t+4>e.length)throw\"bigEndianByteArrayParser.readUint32: attempt to read past end of buffer\";return 256*(256*(256*e[t]+e[t+1])+e[t+2])+e[t+3]},readInt32:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readInt32: position cannot be less than 0\";if(t+4>e.length)throw\"bigEndianByteArrayParser.readInt32: attempt to read past end of buffer\";return(e[t]<<24)+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3]},readFloat:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readFloat: position cannot be less than 0\";if(t+4>e.length)throw\"bigEndianByteArrayParser.readFloat: attempt to read past end of buffer\";var r=new Uint8Array(4);return r[3]=e[t],r[2]=e[t+1],r[1]=e[t+2],r[0]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw\"bigEndianByteArrayParser.readDouble: position cannot be less than 0\";if(t+8>e.length)throw\"bigEndianByteArrayParser.readDouble: attempt to read past end of buffer\";var r=new Uint8Array(8);return r[7]=e[t],r[6]=e[t+1],r[5]=e[t+2],r[4]=e[t+3],r[3]=e[t+4],r[2]=e[t+5],r[1]=e[t+6],r[0]=e[t+7],new Float64Array(r.buffer)[0]}}},function(e,t){var r={}.toString;e.exports=Array.isArray||function(e){return\"[object Array]\"==r.call(e)}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,r){if(void 0===e)throw\"dicomParser.readSequenceItemsImplicit: missing required parameter 'byteStream'\";if(void 0===t)throw\"dicomParser.readSequenceItemsImplicit: missing required parameter 'element'\";t.items=[],4294967295===t.length?function(e,t,r){for(;e.position+4<=e.byteArray.length;){var n=(0,o.default)(e);if(e.seek(-4),\"xfffee0dd\"===n)return t.length=e.position-t.dataOffset,e.seek(8),t;var i=f(e,r);t.items.push(i)}e.warnings.push(\"eof encountered before finding sequence delimiter in sequence of undefined length\"),t.length=e.byteArray.length-t.dataOffset}(e,t,r):function(e,t,r){var n=t.dataOffset+t.length;for(;e.positione.byteArray.length-e.position&&(f=e.byteArray.length-e.position),t.fragments.push({offset:e.position-s-8,position:e.position,length:f}),e.seek(f),void(t.length=e.position-t.dataOffset);t.fragments.push({offset:e.position-s-8,position:e.position,length:f}),e.seek(f)}r&&r.push(\"pixel data element \"+t.tag+\" missing sequence delimiter tag xfffee0dd\")};var n,i=r(4),a=(n=i)&&n.__esModule?n:{default:n}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){if(void 0===e||void 0===t)throw\"dicomParser.explicitElementToString: missing required parameters\";if(void 0===t.vr)throw\"dicomParser.explicitElementToString: cannot convert implicit element to string\";var r,i=t.vr,a=t.tag;function o(t,r){for(var n=\"\",i=0;i= 0\";if(0!==t.basicOffsetTable.length)return(0,n.default)(e,t,r);return(0,i.default)(e,t,0,t.fragments.length)};var n=a(r(26)),i=a(r(17));function a(e){return e&&e.__esModule?e:{default:e}}var o=!1},function(e,t,r){\"use strict\";e.exports={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,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,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,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},function(e,t,r){\"use strict\";var n=r(8),i=[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],a=[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],o=[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],s=[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];e.exports=function(e,t,r,l,f,u,h,d){var c,p,g,m,_,y,b,v,w,E=d.bits,x=0,S=0,k=0,A=0,P=0,T=0,D=0,O=0,I=0,R=0,L=null,F=0,B=new n.Buf16(16),U=new n.Buf16(16),M=null,N=0;for(x=0;x<=15;x++)B[x]=0;for(S=0;S=1&&0===B[A];A--);if(P>A&&(P=A),0===A)return f[u++]=20971520,f[u++]=20971520,d.bits=1,0;for(k=1;k0&&(0===e||1!==A))return-1;for(U[1]=0,x=1;x<15;x++)U[x+1]=U[x]+B[x];for(S=0;S852||2===e&&I>592)return 1;for(;;){b=x-D,h[S]y?(v=M[N+h[S]],w=L[F+h[S]]):(v=96,w=0),c=1<>D)+(p-=c)]=b<<24|v<<16|w|0}while(0!==p);for(c=1<>=1;if(0!==c?(R&=c-1,R+=c):R=0,S++,0==--B[x]){if(x===A)break;x=t[r+h[S]]}if(x>P&&(R&m)!==g){for(0===D&&(D=P),_+=k,O=1<<(T=x-D);T+D852||2===e&&I>592)return 1;f[g=R&m]=P<<24|T<<16|_-u|0}}return 0!==R&&(f[_+R]=x-D<<24|64<<16|0),d.bits=P,0}},function(e,t,r){\"use strict\";e.exports=function(e,t){var r,n,i,a,o,s,l,f,u,h,d,c,p,g,m,_,y,b,v,w,E,x,S,k,A;r=e.state,n=e.next_in,k=e.input,i=n+(e.avail_in-5),a=e.next_out,A=e.output,o=a-(t-e.avail_out),s=a+(e.avail_out-257),l=r.dmax,f=r.wsize,u=r.whave,h=r.wnext,d=r.window,c=r.hold,p=r.bits,g=r.lencode,m=r.distcode,_=(1<>>=v=b>>>24,p-=v,0===(v=b>>>16&255))A[a++]=65535&b;else{if(!(16&v)){if(0==(64&v)){b=g[(65535&b)+(c&(1<>>=v,p-=v),p<15&&(c+=k[n++]<>>=v=b>>>24,p-=v,!(16&(v=b>>>16&255))){if(0==(64&v)){b=m[(65535&b)+(c&(1<l){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(c>>>=v,p-=v,E>(v=a-o)){if((v=E-v)>u&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(x=0,S=d,0===h){if(x+=f-v,v2;)A[a++]=S[x++],A[a++]=S[x++],A[a++]=S[x++],w-=3;w&&(A[a++]=S[x++],w>1&&(A[a++]=S[x++]))}else{x=a-E;do{A[a++]=A[x++],A[a++]=A[x++],A[a++]=A[x++],w-=3}while(w>2);w&&(A[a++]=A[x++],w>1&&(A[a++]=A[x++]))}break}}break}}while(n>3,c&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=a,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function ie(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=E,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(ee),t.distcode=t.distdyn=new n.Buf32(te),t.sane=1,t.back=-1,p):_}function ae(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,ie(e)):_}function oe(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?_:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,ae(e))):_}function se(e,t){var r,i;return e?(i=new function(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0},e.state=i,i.window=null,(r=oe(e,t))!==p&&(e.state=null),r):_}var le,fe,ue=!0;function he(e){if(ue){var t;for(le=new n.Buf32(512),fe=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(s(f,e.lens,0,288,le,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;s(u,e.lens,0,32,fe,0,e.work,{bits:5}),ue=!1}e.lencode=le,e.lenbits=9,e.distcode=fe,e.distbits=5}function de(e,t,r,i){var a,o=e.state;return null===o.window&&(o.wsize=1<=o.wsize?(n.arraySet(o.window,t,r-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((a=o.wsize-o.wnext)>i&&(a=i),n.arraySet(o.window,t,r-i,a,o.wnext),(i-=a)?(n.arraySet(o.window,t,r-i,i,0),o.wnext=i,o.whave=o.wsize):(o.wnext+=a,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,r.check=a(r.check,Pe,2,0),se=0,le=0,r.mode=x;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&se)<<8)+(se>>8))%31){e.msg=\"incorrect header check\",r.mode=X;break}if((15&se)!==w){e.msg=\"unknown compression method\",r.mode=X;break}if(le-=4,Ee=8+(15&(se>>>=4)),0===r.wbits)r.wbits=Ee;else if(Ee>r.wbits){e.msg=\"invalid window size\",r.mode=X;break}r.dmax=1<>8&1),512&r.flags&&(Pe[0]=255&se,Pe[1]=se>>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0,r.mode=S;case S:for(;le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>8&255,Pe[2]=se>>>16&255,Pe[3]=se>>>24&255,r.check=a(r.check,Pe,4,0)),se=0,le=0,r.mode=k;case k:for(;le<16;){if(0===ae)break e;ae--,se+=ee[re++]<>8),512&r.flags&&(Pe[0]=255&se,Pe[1]=se>>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0,r.mode=A;case A:if(1024&r.flags){for(;le<16;){if(0===ae)break e;ae--,se+=ee[re++]<>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0}else r.head&&(r.head.extra=null);r.mode=P;case P:if(1024&r.flags&&((ce=r.length)>ae&&(ce=ae),ce&&(r.head&&(Ee=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,ee,re,ce,Ee)),512&r.flags&&(r.check=a(r.check,ee,ce,re)),ae-=ce,re+=ce,r.length-=ce),r.length))break e;r.length=0,r.mode=T;case T:if(2048&r.flags){if(0===ae)break e;ce=0;do{Ee=ee[re+ce++],r.head&&Ee&&r.length<65536&&(r.head.name+=String.fromCharCode(Ee))}while(Ee&&ce>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=L;break;case I:for(;le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>=7&le,le-=7&le,r.mode=V;break}for(;le<3;){if(0===ae)break e;ae--,se+=ee[re++]<>>=1)){case 0:r.mode=B;break;case 1:if(he(r),r.mode=j,t===c){se>>>=2,le-=2;break e}break;case 2:r.mode=N;break;case 3:e.msg=\"invalid block type\",r.mode=X}se>>>=2,le-=2;break;case B:for(se>>>=7&le,le-=7≤le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=X;break}if(r.length=65535&se,se=0,le=0,r.mode=U,t===c)break e;case U:r.mode=M;case M:if(ce=r.length){if(ce>ae&&(ce=ae),ce>oe&&(ce=oe),0===ce)break e;n.arraySet(te,ee,re,ce,ie),ae-=ce,re+=ce,oe-=ce,ie+=ce,r.length-=ce;break}r.mode=L;break;case N:for(;le<14;){if(0===ae)break e;ae--,se+=ee[re++]<>>=5,le-=5,r.ndist=1+(31&se),se>>>=5,le-=5,r.ncode=4+(15&se),se>>>=4,le-=4,r.nlen>286||r.ndist>30){e.msg=\"too many length or distance symbols\",r.mode=X;break}r.have=0,r.mode=z;case z:for(;r.have>>=3,le-=3}for(;r.have<19;)r.lens[Te[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,Se={bits:r.lenbits},xe=s(l,r.lens,0,19,r.lencode,0,r.work,Se),r.lenbits=Se.bits,xe){e.msg=\"invalid code lengths set\",r.mode=X;break}r.have=0,r.mode=Z;case Z:for(;r.have>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=me,le-=me,r.lens[r.have++]=ye;else{if(16===ye){for(ke=me+2;le>>=me,le-=me,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=X;break}Ee=r.lens[r.have-1],ce=3+(3&se),se>>>=2,le-=2}else if(17===ye){for(ke=me+3;le>>=me)),se>>>=3,le-=3}else{for(ke=me+7;le>>=me)),se>>>=7,le-=7}if(r.have+ce>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=X;break}for(;ce--;)r.lens[r.have++]=Ee}}if(r.mode===X)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=X;break}if(r.lenbits=9,Se={bits:r.lenbits},xe=s(f,r.lens,0,r.nlen,r.lencode,0,r.work,Se),r.lenbits=Se.bits,xe){e.msg=\"invalid literal/lengths set\",r.mode=X;break}if(r.distbits=6,r.distcode=r.distdyn,Se={bits:r.distbits},xe=s(u,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,Se),r.distbits=Se.bits,xe){e.msg=\"invalid distances set\",r.mode=X;break}if(r.mode=j,t===c)break e;case j:r.mode=C;case C:if(ae>=6&&oe>=258){e.next_out=ie,e.avail_out=oe,e.next_in=re,e.avail_in=ae,r.hold=se,r.bits=le,o(e,ue),ie=e.next_out,te=e.output,oe=e.avail_out,re=e.next_in,ee=e.input,ae=e.avail_in,se=r.hold,le=r.bits,r.mode===L&&(r.back=-1);break}for(r.back=0;_e=(Ae=r.lencode[se&(1<>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>be)])>>>16&255,ye=65535&Ae,!(be+(me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=be,le-=be,r.back+=be}if(se>>>=me,le-=me,r.back+=me,r.length=ye,0===_e){r.mode=G;break}if(32&_e){r.back=-1,r.mode=L;break}if(64&_e){e.msg=\"invalid literal/length code\",r.mode=X;break}r.extra=15&_e,r.mode=q;case q:if(r.extra){for(ke=r.extra;le>>=r.extra,le-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=Y;case Y:for(;_e=(Ae=r.distcode[se&(1<>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>be)])>>>16&255,ye=65535&Ae,!(be+(me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=be,le-=be,r.back+=be}if(se>>>=me,le-=me,r.back+=me,64&_e){e.msg=\"invalid distance code\",r.mode=X;break}r.offset=ye,r.extra=15&_e,r.mode=W;case W:if(r.extra){for(ke=r.extra;le>>=r.extra,le-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=X;break}r.mode=H;case H:if(0===oe)break e;if(ce=ue-oe,r.offset>ce){if((ce=r.offset-ce)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=X;break}ce>r.wnext?(ce-=r.wnext,pe=r.wsize-ce):pe=r.wnext-ce,ce>r.length&&(ce=r.length),ge=r.window}else ge=te,pe=ie-r.offset,ce=r.length;ce>oe&&(ce=oe),oe-=ce,r.length-=ce;do{te[ie++]=ge[pe++]}while(--ce);0===r.length&&(r.mode=C);break;case G:if(0===oe)break e;te[ie++]=r.length,oe--,r.mode=C;break;case V:if(r.wrap){for(;le<32;){if(0===ae)break e;ae--,se|=ee[re++]<=0;)e[t]=0}var f=0,u=1,h=2,d=29,c=256,p=c+1+d,g=30,m=19,_=2*p+1,y=15,b=16,v=7,w=256,E=16,x=17,S=18,k=[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],A=[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],P=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],T=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],D=new Array(2*(p+2));l(D);var O=new Array(2*g);l(O);var I=new Array(512);l(I);var R=new Array(256);l(R);var L=new Array(d);l(L);var F,B,U,M=new Array(g);function N(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function z(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function Z(e){return e<256?I[e]:I[256+(e>>>7)]}function j(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function C(e,t,r){e.bi_valid>b-r?(e.bi_buf|=t<>b-e.bi_valid,e.bi_valid+=r-b):(e.bi_buf|=t<>>=1,r<<=1}while(--t>0);return r>>>1}function W(e,t,r){var n,i,a=new Array(y+1),o=0;for(n=1;n<=y;n++)a[n]=o=o+r[n-1]<<1;for(i=0;i<=t;i++){var s=e[2*i+1];0!==s&&(e[2*i]=Y(a[s]++,s))}}function H(e){var t;for(t=0;t8?j(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function V(e,t,r,n){var i=2*t,a=2*r;return e[i]>1;r>=1;r--)J(e,a,r);i=l;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],J(e,a,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,a[2*i]=a[2*r]+a[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,a[2*r+1]=a[2*n+1]=i,e.heap[1]=i++,J(e,a,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,a,o,s,l=t.dyn_tree,f=t.max_code,u=t.stat_desc.static_tree,h=t.stat_desc.has_stree,d=t.stat_desc.extra_bits,c=t.stat_desc.extra_base,p=t.stat_desc.max_length,g=0;for(a=0;a<=y;a++)e.bl_count[a]=0;for(l[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)(a=l[2*l[2*(n=e.heap[r])+1]+1]+1)>p&&(a=p,g++),l[2*n+1]=a,n>f||(e.bl_count[a]++,o=0,n>=c&&(o=d[n-c]),s=l[2*n],e.opt_len+=s*(a+o),h&&(e.static_len+=s*(u[2*n+1]+o)));if(0!==g){do{for(a=p-1;0===e.bl_count[a];)a--;e.bl_count[a]--,e.bl_count[a+1]+=2,e.bl_count[p]--,g-=2}while(g>0);for(a=p;0!==a;a--)for(n=e.bl_count[a];0!==n;)(i=e.heap[--r])>f||(l[2*i+1]!==a&&(e.opt_len+=(a-l[2*i+1])*l[2*i],l[2*i+1]=a),n--)}}(e,t),W(a,f,e.bl_count)}function $(e,t,r){var n,i,a=-1,o=t[1],s=0,l=7,f=4;for(0===o&&(l=138,f=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=o,o=t[2*(n+1)+1],++s>=7;n0?(e.strm.data_type===s&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return a;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return o;for(t=32;t=3&&0===e.bl_tree[2*T[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),l=e.opt_len+3+7>>>3,(f=e.static_len+3+7>>>3)<=l&&(l=f)):l=f=r+5,r+4<=l&&-1!==t?te(e,t,r,n):e.strategy===i||f===l?(C(e,(u<<1)+(n?1:0),3),K(e,D,O)):(C(e,(h<<1)+(n?1:0),3),function(e,t,r,n){var i;for(C(e,t-257,5),C(e,r-1,5),C(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(R[r]+c+1)]++,e.dyn_dtree[2*Z(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){C(e,u<<1,3),q(e,w,D),function(e){16===e.bi_valid?(j(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},function(e,t,r){\"use strict\";var n,i=r(8),a=r(50),o=r(28),s=r(27),l=r(49),f=0,u=1,h=3,d=4,c=5,p=0,g=1,m=-2,_=-3,y=-5,b=-1,v=1,w=2,E=3,x=4,S=0,k=2,A=8,P=9,T=15,D=8,O=286,I=30,R=19,L=2*O+1,F=15,B=3,U=258,M=U+B+1,N=32,z=42,Z=69,j=73,C=91,q=103,Y=113,W=666,H=1,G=2,V=3,J=4,K=3;function X(e,t){return e.msg=l[t],t}function $(e){return(e<<1)-(e>4?9:0)}function Q(e){for(var t=e.length;--t>=0;)e[t]=0}function ee(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(i.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function te(e,t){a._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,ee(e.strm)}function re(e,t){e.pending_buf[e.pending++]=t}function ne(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function ie(e,t){var r,n,i=e.max_chain_length,a=e.strstart,o=e.prev_length,s=e.nice_match,l=e.strstart>e.w_size-M?e.strstart-(e.w_size-M):0,f=e.window,u=e.w_mask,h=e.prev,d=e.strstart+U,c=f[a+o-1],p=f[a+o];e.prev_length>=e.good_match&&(i>>=2),s>e.lookahead&&(s=e.lookahead);do{if(f[(r=t)+o]===p&&f[r+o-1]===c&&f[r]===f[a]&&f[++r]===f[a+1]){a+=2,r++;do{}while(f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&ao){if(e.match_start=t,o=n,n>=s)break;c=f[a+o-1],p=f[a+o]}}}while((t=h[t&u])>l&&0!=--i);return o<=e.lookahead?o:e.lookahead}function ae(e){var t,r,n,a,l,f,u,h,d,c,p=e.w_size;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-M)){i.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,t=r=e.hash_size;do{n=e.head[--t],e.head[t]=n>=p?n-p:0}while(--r);t=r=p;do{n=e.prev[--t],e.prev[t]=n>=p?n-p:0}while(--r);a+=p}if(0===e.strm.avail_in)break;if(f=e.strm,u=e.window,h=e.strstart+e.lookahead,d=a,c=void 0,(c=f.avail_in)>d&&(c=d),r=0===c?0:(f.avail_in-=c,i.arraySet(u,f.input,f.next_in,c,h),1===f.state.wrap?f.adler=o(f.adler,u,c,h):2===f.state.wrap&&(f.adler=s(f.adler,u,c,h)),f.next_in+=c,f.total_in+=c,c),e.lookahead+=r,e.lookahead+e.insert>=B)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=B&&(e.ins_h=(e.ins_h<=B)if(n=a._tr_tally(e,e.strstart-e.match_start,e.match_length-B),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=B){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=B&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=B-1)),e.prev_length>=B&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-B,n=a._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-B),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<15&&(s=2,n-=16),a<1||a>P||r!==A||n<8||n>15||t<0||t>9||o<0||o>x)return X(e,m);8===n&&(n=9);var l=new function(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=A,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*L),this.dyn_dtree=new i.Buf16(2*(2*I+1)),this.bl_tree=new i.Buf16(2*(2*R+1)),Q(this.dyn_ltree),Q(this.dyn_dtree),Q(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(F+1),this.heap=new i.Buf16(2*O+1),Q(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*O+1),Q(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0};return e.state=l,l.strm=e,l.wrap=s,l.gzhead=null,l.w_bits=n,l.w_size=1<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(ae(e),0===e.lookahead&&t===f)return H;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,te(e,!1),0===e.strm.avail_out))return H;if(e.strstart-e.block_start>=e.w_size-M&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):(e.strstart>e.block_start&&(te(e,!1),e.strm.avail_out),H)}),new le(4,4,8,4,oe),new le(4,5,16,8,oe),new le(4,6,32,32,oe),new le(4,4,16,16,se),new le(8,16,32,32,se),new le(8,16,128,128,se),new le(8,32,128,256,se),new le(32,128,258,1024,se),new le(32,258,258,4096,se)],t.deflateInit=function(e,t){return he(e,t,A,T,D,S)},t.deflateInit2=he,t.deflateReset=ue,t.deflateResetKeep=fe,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?m:(e.state.gzhead=t,p):m},t.deflate=function(e,t){var r,i,o,l;if(!e||!e.state||t>c||t<0)return e?X(e,m):m;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||i.status===W&&t!==d)return X(e,0===e.avail_out?y:m);if(i.strm=e,r=i.last_flush,i.last_flush=t,i.status===z)if(2===i.wrap)e.adler=0,re(i,31),re(i,139),re(i,8),i.gzhead?(re(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),re(i,255&i.gzhead.time),re(i,i.gzhead.time>>8&255),re(i,i.gzhead.time>>16&255),re(i,i.gzhead.time>>24&255),re(i,9===i.level?2:i.strategy>=w||i.level<2?4:0),re(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(re(i,255&i.gzhead.extra.length),re(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=s(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=Z):(re(i,0),re(i,0),re(i,0),re(i,0),re(i,0),re(i,9===i.level?2:i.strategy>=w||i.level<2?4:0),re(i,K),i.status=Y);else{var _=A+(i.w_bits-8<<4)<<8;_|=(i.strategy>=w||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(_|=N),_+=31-_%31,i.status=Y,ne(i,_),0!==i.strstart&&(ne(i,e.adler>>>16),ne(i,65535&e.adler)),e.adler=1}if(i.status===Z)if(i.gzhead.extra){for(o=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending!==i.pending_buf_size));)re(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=j)}else i.status=j;if(i.status===j)if(i.gzhead.name){o=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexo&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),0===l&&(i.gzindex=0,i.status=C)}else i.status=C;if(i.status===C)if(i.gzhead.comment){o=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexo&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),0===l&&(i.status=q)}else i.status=q;if(i.status===q&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&ee(e),i.pending+2<=i.pending_buf_size&&(re(i,255&e.adler),re(i,e.adler>>8&255),e.adler=0,i.status=Y)):i.status=Y),0!==i.pending){if(ee(e),0===e.avail_out)return i.last_flush=-1,p}else if(0===e.avail_in&&$(t)<=$(r)&&t!==d)return X(e,y);if(i.status===W&&0!==e.avail_in)return X(e,y);if(0!==e.avail_in||0!==i.lookahead||t!==f&&i.status!==W){var b=i.strategy===w?function(e,t){for(var r;;){if(0===e.lookahead&&(ae(e),0===e.lookahead)){if(t===f)return H;break}if(e.match_length=0,r=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?H:G}(i,t):i.strategy===E?function(e,t){for(var r,n,i,o,s=e.window;;){if(e.lookahead<=U){if(ae(e),e.lookahead<=U&&t===f)return H;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=B&&e.strstart>0&&(n=s[i=e.strstart-1])===s[++i]&&n===s[++i]&&n===s[++i]){o=e.strstart+U;do{}while(n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=B?(r=a._tr_tally(e,1,e.match_length-B),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?H:G}(i,t):n[i.level].func(i,t);if(b!==V&&b!==J||(i.status=W),b===H||b===V)return 0===e.avail_out&&(i.last_flush=-1),p;if(b===G&&(t===u?a._tr_align(i):t!==c&&(a._tr_stored_block(i,0,0,!1),t===h&&(Q(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ee(e),0===e.avail_out))return i.last_flush=-1,p}return t!==d?p:i.wrap<=0?g:(2===i.wrap?(re(i,255&e.adler),re(i,e.adler>>8&255),re(i,e.adler>>16&255),re(i,e.adler>>24&255),re(i,255&e.total_in),re(i,e.total_in>>8&255),re(i,e.total_in>>16&255),re(i,e.total_in>>24&255)):(ne(i,e.adler>>>16),ne(i,65535&e.adler)),ee(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?p:g)},t.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==z&&t!==Z&&t!==j&&t!==C&&t!==q&&t!==Y&&t!==W?X(e,m):(e.state=null,t===Y?X(e,_):p):m},t.deflateSetDictionary=function(e,t){var r,n,a,s,l,f,u,h,d=t.length;if(!e||!e.state)return m;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==z||r.lookahead)return m;for(1===s&&(e.adler=o(e.adler,t,d,0)),r.wrap=0,d>=r.w_size&&(0===s&&(Q(r.head),r.strstart=0,r.block_start=0,r.insert=0),h=new i.Buf8(r.w_size),i.arraySet(h,t,d-r.w_size,r.w_size,0),t=h,d=r.w_size),l=e.avail_in,f=e.next_in,u=e.input,e.avail_in=d,e.next_in=0,e.input=t,ae(r);r.lookahead>=B;){n=r.strstart,a=r.lookahead-(B-1);do{r.ins_h=(r.ins_h<t.UNZIP)throw new TypeError(\"Bad argument\");this.dictionary=null,this.err=0,this.flush=0,this.init_done=!1,this.level=0,this.memLevel=0,this.mode=e,this.strategy=0,this.windowBits=0,this.write_in_progress=!1,this.pending_close=!1,this.gzip_id_bytes_read=0}u.prototype.close=function(){this.write_in_progress?this.pending_close=!0:(this.pending_close=!1,i(this.init_done,\"close before init\"),i(this.mode<=t.UNZIP),this.mode===t.DEFLATE||this.mode===t.GZIP||this.mode===t.DEFLATERAW?o.deflateEnd(this.strm):this.mode!==t.INFLATE&&this.mode!==t.GUNZIP&&this.mode!==t.INFLATERAW&&this.mode!==t.UNZIP||s.inflateEnd(this.strm),this.mode=t.NONE,this.dictionary=null)},u.prototype.write=function(e,t,r,n,i,a,o){return this._write(!0,e,t,r,n,i,a,o)},u.prototype.writeSync=function(e,t,r,n,i,a,o){return this._write(!1,e,t,r,n,i,a,o)},u.prototype._write=function(r,a,o,s,l,f,u,h){if(i.equal(arguments.length,8),i(this.init_done,\"write before init\"),i(this.mode!==t.NONE,\"already finalized\"),i.equal(!1,this.write_in_progress,\"write already in progress\"),i.equal(!1,this.pending_close,\"close is pending\"),this.write_in_progress=!0,i.equal(!1,void 0===a,\"must provide flush value\"),this.write_in_progress=!0,a!==t.Z_NO_FLUSH&&a!==t.Z_PARTIAL_FLUSH&&a!==t.Z_SYNC_FLUSH&&a!==t.Z_FULL_FLUSH&&a!==t.Z_FINISH&&a!==t.Z_BLOCK)throw new Error(\"Invalid flush value\");if(null==o&&(o=e.alloc(0),l=0,s=0),this.strm.avail_in=l,this.strm.input=o,this.strm.next_in=s,this.strm.avail_out=h,this.strm.output=f,this.strm.next_out=u,this.flush=a,!r)return this._process(),this._checkError()?this._afterSync():void 0;var d=this;return n.nextTick(function(){d._process(),d._after()}),this},u.prototype._afterSync=function(){var e=this.strm.avail_out,t=this.strm.avail_in;return this.write_in_progress=!1,[t,e]},u.prototype._process=function(){var e=null;switch(this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=o.deflate(this.strm,this.flush);break;case t.UNZIP:switch(this.strm.avail_in>0&&(e=this.strm.next_in),this.gzip_id_bytes_read){case 0:if(null===e)break;if(31!==this.strm.input[e]){this.mode=t.INFLATE;break}if(this.gzip_id_bytes_read=1,e++,1===this.strm.avail_in)break;case 1:if(null===e)break;139===this.strm.input[e]?(this.gzip_id_bytes_read=2,this.mode=t.GUNZIP):this.mode=t.INFLATE;break;default:throw new Error(\"invalid number of gzip magic number bytes read\")}case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:for(this.err=s.inflate(this.strm,this.flush),this.err===t.Z_NEED_DICT&&this.dictionary&&(this.err=s.inflateSetDictionary(this.strm,this.dictionary),this.err===t.Z_OK?this.err=s.inflate(this.strm,this.flush):this.err===t.Z_DATA_ERROR&&(this.err=t.Z_NEED_DICT));this.strm.avail_in>0&&this.mode===t.GUNZIP&&this.err===t.Z_STREAM_END&&0!==this.strm.next_in[0];)this.reset(),this.err=s.inflate(this.strm,this.flush);break;default:throw new Error(\"Unknown mode \"+this.mode)}},u.prototype._checkError=function(){switch(this.err){case t.Z_OK:case t.Z_BUF_ERROR:if(0!==this.strm.avail_out&&this.flush===t.Z_FINISH)return this._error(\"unexpected end of file\"),!1;break;case t.Z_STREAM_END:break;case t.Z_NEED_DICT:return null==this.dictionary?this._error(\"Missing dictionary\"):this._error(\"Bad dictionary\"),!1;default:return this._error(\"Zlib error\"),!1}return!0},u.prototype._after=function(){if(this._checkError()){var e=this.strm.avail_out,t=this.strm.avail_in;this.write_in_progress=!1,this.callback(t,e),this.pending_close&&this.close()}},u.prototype._error=function(e){this.strm.msg&&(e=this.strm.msg),this.onerror(e,this.err),this.write_in_progress=!1,this.pending_close&&this.close()},u.prototype.init=function(e,r,n,a,o){i(4===arguments.length||5===arguments.length,\"init(windowBits, level, memLevel, strategy, [dictionary])\"),i(e>=8&&e<=15,\"invalid windowBits\"),i(r>=-1&&r<=9,\"invalid compression level\"),i(n>=1&&n<=9,\"invalid memlevel\"),i(a===t.Z_FILTERED||a===t.Z_HUFFMAN_ONLY||a===t.Z_RLE||a===t.Z_FIXED||a===t.Z_DEFAULT_STRATEGY,\"invalid strategy\"),this._init(r,e,n,a,o),this._setDictionary()},u.prototype.params=function(){throw new Error(\"deflateParams Not supported\")},u.prototype.reset=function(){this._reset(),this._setDictionary()},u.prototype._init=function(e,r,n,i,l){switch(this.level=e,this.windowBits=r,this.memLevel=n,this.strategy=i,this.flush=t.Z_NO_FLUSH,this.err=t.Z_OK,this.mode!==t.GZIP&&this.mode!==t.GUNZIP||(this.windowBits+=16),this.mode===t.UNZIP&&(this.windowBits+=32),this.mode!==t.DEFLATERAW&&this.mode!==t.INFLATERAW||(this.windowBits=-1*this.windowBits),this.strm=new a,this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=o.deflateInit2(this.strm,this.level,t.Z_DEFLATED,this.windowBits,this.memLevel,this.strategy);break;case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:case t.UNZIP:this.err=s.inflateInit2(this.strm,this.windowBits);break;default:throw new Error(\"Unknown mode \"+this.mode)}this.err!==t.Z_OK&&this._error(\"Init error\"),this.dictionary=l,this.write_in_progress=!1,this.init_done=!0},u.prototype._setDictionary=function(){if(null!=this.dictionary){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:this.err=o.deflateSetDictionary(this.strm,this.dictionary)}this.err!==t.Z_OK&&this._error(\"Failed to set dictionary\")}},u.prototype._reset=function(){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:case t.GZIP:this.err=o.deflateReset(this.strm);break;case t.INFLATE:case t.INFLATERAW:case t.GUNZIP:this.err=s.inflateReset(this.strm)}this.err!==t.Z_OK&&this._error(\"Failed to reset stream\")},t.Zlib=u}).call(this,r(1).Buffer,r(3))},function(e,t,r){e.exports=r(19).PassThrough},function(e,t,r){e.exports=r(19).Transform},function(e,t,r){e.exports=r(2)},function(e,t,r){e.exports=r(18)},function(e,t,r){\"use strict\";e.exports=a;var n=r(31),i=r(6);function a(e){if(!(this instanceof a))return new a(e);n.call(this,e)}i.inherits=r(5),i.inherits(a,n),a.prototype._transform=function(e,t,r){r(null,e)}},function(e,t,r){(function(t){function r(e){try{if(!t.localStorage)return!1}catch(e){return!1}var r=t.localStorage[e];return null!=r&&\"true\"===String(r).toLowerCase()}e.exports=function(e,t){if(r(\"noDeprecation\"))return e;var n=!1;return function(){if(!n){if(r(\"throwDeprecation\"))throw new Error(t);r(\"traceDeprecation\")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}}}).call(this,r(0))},function(e,t,r){(function(e,t){!function(e,r){\"use strict\";if(!e.setImmediate){var n,i,a,o,s,l=1,f={},u=!1,h=e.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(e);d=d&&d.setTimeout?d:e,\"[object process]\"==={}.toString.call(e.process)?n=function(e){t.nextTick(function(){p(e)})}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,r=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage(\"\",\"*\"),e.onmessage=r,t}}()?e.MessageChannel?((a=new MessageChannel).port1.onmessage=function(e){p(e.data)},n=function(e){a.port2.postMessage(e)}):h&&\"onreadystatechange\"in h.createElement(\"script\")?(i=h.documentElement,n=function(e){var t=h.createElement(\"script\");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):n=function(e){setTimeout(p,0,e)}:(o=\"setImmediate$\"+Math.random()+\"$\",s=function(t){t.source===e&&\"string\"==typeof t.data&&0===t.data.indexOf(o)&&p(+t.data.slice(o.length))},e.addEventListener?e.addEventListener(\"message\",s,!1):e.attachEvent(\"onmessage\",s),n=function(t){e.postMessage(o+t,\"*\")}),d.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},r(62),t.setImmediate=\"undefined\"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate=\"undefined\"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,r(0))},function(e,t){},function(e,t,r){\"use strict\";var n=r(9).Buffer,i=r(64);e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return\"\";for(var t=this.head,r=\"\"+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return n.alloc(0);if(1===this.length)return this.head.data;for(var t,r,i,a=n.allocUnsafe(e>>>0),o=this.head,s=0;o;)t=o.data,r=a,i=s,t.copy(r,i),s+=o.data.length,o=o.next;return a},e}(),i&&i.inspect&&i.inspect.custom&&(e.exports.prototype[i.inspect.custom]=function(){var e=i.inspect({length:this.length});return this.constructor.name+\" \"+e})},function(e,t){},function(e,t,r){e.exports=i;var n=r(20).EventEmitter;function i(){n.call(this)}r(5)(i,n),i.Readable=r(19),i.Writable=r(59),i.Duplex=r(58),i.Transform=r(57),i.PassThrough=r(56),i.Stream=i,i.prototype.pipe=function(e,t){var r=this;function i(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function a(){r.readable&&r.resume&&r.resume()}r.on(\"data\",i),e.on(\"drain\",a),e._isStdio||t&&!1===t.end||(r.on(\"end\",s),r.on(\"close\",l));var o=!1;function s(){o||(o=!0,e.end())}function l(){o||(o=!0,\"function\"==typeof e.destroy&&e.destroy())}function f(e){if(u(),0===n.listenerCount(this,\"error\"))throw e}function u(){r.removeListener(\"data\",i),e.removeListener(\"drain\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",l),r.removeListener(\"error\",f),e.removeListener(\"error\",f),r.removeListener(\"end\",u),r.removeListener(\"close\",u),e.removeListener(\"close\",u)}return r.on(\"error\",f),e.on(\"error\",f),r.on(\"end\",u),r.on(\"close\",u),e.on(\"close\",u),e.emit(\"pipe\",r),e}},function(e,t,r){\"use strict\";(function(e){var n=r(1).Buffer,i=r(67).Transform,a=r(55),o=r(29),s=r(30).ok,l=r(1).kMaxLength,f=\"Cannot create final Buffer. It would be larger than 0x\"+l.toString(16)+\" bytes\";a.Z_MIN_WINDOWBITS=8,a.Z_MAX_WINDOWBITS=15,a.Z_DEFAULT_WINDOWBITS=15,a.Z_MIN_CHUNK=64,a.Z_MAX_CHUNK=1/0,a.Z_DEFAULT_CHUNK=16384,a.Z_MIN_MEMLEVEL=1,a.Z_MAX_MEMLEVEL=9,a.Z_DEFAULT_MEMLEVEL=8,a.Z_MIN_LEVEL=-1,a.Z_MAX_LEVEL=9,a.Z_DEFAULT_LEVEL=a.Z_DEFAULT_COMPRESSION;for(var u=Object.keys(a),h=0;h=l?o=new RangeError(f):t=n.concat(i,a),i=[],e.close(),r(o,t)}e.on(\"error\",function(t){e.removeListener(\"end\",s),e.removeListener(\"readable\",o),r(t)}),e.on(\"end\",s),e.end(t),o()}function y(e,t){if(\"string\"==typeof t&&(t=n.from(t)),!n.isBuffer(t))throw new TypeError(\"Not a string or buffer\");var r=e._finishFlushFlag;return e._processChunk(t,r)}function b(e){if(!(this instanceof b))return new b(e);P.call(this,e,a.DEFLATE)}function v(e){if(!(this instanceof v))return new v(e);P.call(this,e,a.INFLATE)}function w(e){if(!(this instanceof w))return new w(e);P.call(this,e,a.GZIP)}function E(e){if(!(this instanceof E))return new E(e);P.call(this,e,a.GUNZIP)}function x(e){if(!(this instanceof x))return new x(e);P.call(this,e,a.DEFLATERAW)}function S(e){if(!(this instanceof S))return new S(e);P.call(this,e,a.INFLATERAW)}function k(e){if(!(this instanceof k))return new k(e);P.call(this,e,a.UNZIP)}function A(e){return e===a.Z_NO_FLUSH||e===a.Z_PARTIAL_FLUSH||e===a.Z_SYNC_FLUSH||e===a.Z_FULL_FLUSH||e===a.Z_FINISH||e===a.Z_BLOCK}function P(e,r){var o=this;if(this._opts=e=e||{},this._chunkSize=e.chunkSize||t.Z_DEFAULT_CHUNK,i.call(this,e),e.flush&&!A(e.flush))throw new Error(\"Invalid flush flag: \"+e.flush);if(e.finishFlush&&!A(e.finishFlush))throw new Error(\"Invalid flush flag: \"+e.finishFlush);if(this._flushFlag=e.flush||a.Z_NO_FLUSH,this._finishFlushFlag=void 0!==e.finishFlush?e.finishFlush:a.Z_FINISH,e.chunkSize&&(e.chunkSizet.Z_MAX_CHUNK))throw new Error(\"Invalid chunk size: \"+e.chunkSize);if(e.windowBits&&(e.windowBitst.Z_MAX_WINDOWBITS))throw new Error(\"Invalid windowBits: \"+e.windowBits);if(e.level&&(e.levelt.Z_MAX_LEVEL))throw new Error(\"Invalid compression level: \"+e.level);if(e.memLevel&&(e.memLevelt.Z_MAX_MEMLEVEL))throw new Error(\"Invalid memLevel: \"+e.memLevel);if(e.strategy&&e.strategy!=t.Z_FILTERED&&e.strategy!=t.Z_HUFFMAN_ONLY&&e.strategy!=t.Z_RLE&&e.strategy!=t.Z_FIXED&&e.strategy!=t.Z_DEFAULT_STRATEGY)throw new Error(\"Invalid strategy: \"+e.strategy);if(e.dictionary&&!n.isBuffer(e.dictionary))throw new Error(\"Invalid dictionary: it should be a Buffer instance\");this._handle=new a.Zlib(r);var s=this;this._hadError=!1,this._handle.onerror=function(e,r){T(s),s._hadError=!0;var n=new Error(e);n.errno=r,n.code=t.codes[r],s.emit(\"error\",n)};var l=t.Z_DEFAULT_COMPRESSION;\"number\"==typeof e.level&&(l=e.level);var f=t.Z_DEFAULT_STRATEGY;\"number\"==typeof e.strategy&&(f=e.strategy),this._handle.init(e.windowBits||t.Z_DEFAULT_WINDOWBITS,l,e.memLevel||t.Z_DEFAULT_MEMLEVEL,f,e.dictionary),this._buffer=n.allocUnsafe(this._chunkSize),this._offset=0,this._level=l,this._strategy=f,this.once(\"end\",this.close),Object.defineProperty(this,\"_closed\",{get:function(){return!o._handle},configurable:!0,enumerable:!0})}function T(t,r){r&&e.nextTick(r),t._handle&&(t._handle.close(),t._handle=null)}function D(e){e.emit(\"close\")}Object.defineProperty(t,\"codes\",{enumerable:!0,value:Object.freeze(c),writable:!1}),t.Deflate=b,t.Inflate=v,t.Gzip=w,t.Gunzip=E,t.DeflateRaw=x,t.InflateRaw=S,t.Unzip=k,t.createDeflate=function(e){return new b(e)},t.createInflate=function(e){return new v(e)},t.createDeflateRaw=function(e){return new x(e)},t.createInflateRaw=function(e){return new S(e)},t.createGzip=function(e){return new w(e)},t.createGunzip=function(e){return new E(e)},t.createUnzip=function(e){return new k(e)},t.deflate=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new b(t),e,r)},t.deflateSync=function(e,t){return y(new b(t),e)},t.gzip=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new w(t),e,r)},t.gzipSync=function(e,t){return y(new w(t),e)},t.deflateRaw=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new x(t),e,r)},t.deflateRawSync=function(e,t){return y(new x(t),e)},t.unzip=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new k(t),e,r)},t.unzipSync=function(e,t){return y(new k(t),e)},t.inflate=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new v(t),e,r)},t.inflateSync=function(e,t){return y(new v(t),e)},t.gunzip=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new E(t),e,r)},t.gunzipSync=function(e,t){return y(new E(t),e)},t.inflateRaw=function(e,t,r){return\"function\"==typeof t&&(r=t,t={}),_(new S(t),e,r)},t.inflateRawSync=function(e,t){return y(new S(t),e)},o.inherits(P,i),P.prototype.params=function(r,n,i){if(rt.Z_MAX_LEVEL)throw new RangeError(\"Invalid compression level: \"+r);if(n!=t.Z_FILTERED&&n!=t.Z_HUFFMAN_ONLY&&n!=t.Z_RLE&&n!=t.Z_FIXED&&n!=t.Z_DEFAULT_STRATEGY)throw new TypeError(\"Invalid strategy: \"+n);if(this._level!==r||this._strategy!==n){var o=this;this.flush(a.Z_SYNC_FLUSH,function(){s(o._handle,\"zlib binding closed\"),o._handle.params(r,n),o._hadError||(o._level=r,o._strategy=n,i&&i())})}else e.nextTick(i)},P.prototype.reset=function(){return s(this._handle,\"zlib binding closed\"),this._handle.reset()},P.prototype._flush=function(e){this._transform(n.alloc(0),\"\",e)},P.prototype.flush=function(t,r){var i=this,o=this._writableState;(\"function\"==typeof t||void 0===t&&!r)&&(r=t,t=a.Z_FULL_FLUSH),o.ended?r&&e.nextTick(r):o.ending?r&&this.once(\"end\",r):o.needDrain?r&&this.once(\"drain\",function(){return i.flush(t,r)}):(this._flushFlag=t,this.write(n.alloc(0),\"\",r))},P.prototype.close=function(t){T(this,t),e.nextTick(D,this)},P.prototype._transform=function(e,t,r){var i,o=this._writableState,s=(o.ending||o.ended)&&(!e||o.length===e.length);return null===e||n.isBuffer(e)?this._handle?(s?i=this._finishFlushFlag:(i=this._flushFlag,e.length>=o.length&&(this._flushFlag=this._opts.flush||a.Z_NO_FLUSH)),void this._processChunk(e,i,r)):r(new Error(\"zlib binding closed\")):r(new Error(\"invalid input\"))},P.prototype._processChunk=function(e,t,r){var i=e&&e.length,a=this._chunkSize-this._offset,o=0,u=this,h=\"function\"==typeof r;if(!h){var d,c=[],p=0;this.on(\"error\",function(e){d=e}),s(this._handle,\"zlib binding closed\");do{var g=this._handle.writeSync(t,e,o,i,this._buffer,this._offset,a)}while(!this._hadError&&y(g[0],g[1]));if(this._hadError)throw d;if(p>=l)throw T(this),new RangeError(f);var m=n.concat(c,p);return T(this),m}s(this._handle,\"zlib binding closed\");var _=this._handle.write(t,e,o,i,this._buffer,this._offset,a);function y(l,f){if(this&&(this.buffer=null,this.callback=null),!u._hadError){var d=a-f;if(s(d>=0,\"have should not go down\"),d>0){var g=u._buffer.slice(u._offset,u._offset+d);u._offset+=d,h?u.push(g):(c.push(g),p+=g.length)}if((0===f||u._offset>=u._chunkSize)&&(a=u._chunkSize,u._offset=0,u._buffer=n.allocUnsafe(u._chunkSize)),0===f){if(o+=i-l,i=l,!h)return!0;var m=u._handle.write(t,e,o,i,u._buffer,u._offset,u._chunkSize);return m.callback=y,void(m.buffer=e)}if(!h)return!1;r()}}_.buffer=e,_.callback=y},o.inherits(b,P),o.inherits(v,P),o.inherits(w,P),o.inherits(E,P),o.inherits(x,P),o.inherits(S,P),o.inherits(k,P)}).call(this,r(3))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,\"loaded\",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,\"id\",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,r){\"use strict\";(function(e){Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(t,d){if(void 0===t)throw\"dicomParser.parseDicom: missing required parameter 'byteArray'\";function c(l){var c=function(e){if(void 0===e.elements.x00020010)throw\"dicomParser.parseDicom: missing required meta header attribute 0002,0010\";var r=e.elements.x00020010;return u.readFixedString(t,r.dataOffset,r.length)}(l),p=function(e){if(\"1.2.840.10008.1.2\"===e)return!1;return!0}(c),g=function(o,l){if(\"1.2.840.10008.1.2.1.99\"===o){if(d&&d.inflater){var u=d.inflater(t,l);return new a.default(s.default,u,0)}if(void 0!==e&&this.module!==e){var h=r(68),c=(0,f.default)(t,l,t.length-l),p=h.inflateRawSync(c),g=(0,n.default)(t,p.length+l);return t.copy(g,0,0,l),p.copy(g,l),new a.default(s.default,g,0)}if(\"undefined\"!=typeof pako){var m=t.slice(l),_=pako.inflateRaw(m),y=(0,n.default)(t,_.length+l);return y.set(t.slice(0,l),0),y.set(_,l),new a.default(s.default,y,0)}throw\"dicomParser.parseDicom: no inflater available to handle deflate transfer syntax\"}if(\"1.2.840.10008.1.2.2\"===o)return new a.default(i.default,t,l);return new a.default(s.default,t,l)}(c,l.position),m=new o.default(g.byteArrayParser,g.byteArray,{});m.warnings=g.warnings;try{p?h.parseDicomDataSetExplicit(m,g,g.byteArray.length,d):h.parseDicomDataSetImplicit(m,g,g.byteArray.length,d)}catch(e){var _={exception:e,dataSet:m};throw _}return m}return p=(0,l.default)(t,d),g=c(p),function(e,t){for(var r in e.elements)e.elements.hasOwnProperty(r)&&(t.elements[r]=e.elements[r]);return void 0!==e.warnings&&(t.warnings=e.warnings.concat(t.warnings)),t}(p,g);var p,g};var n=c(r(22)),i=c(r(37)),a=c(r(12)),o=c(r(7)),s=c(r(21)),l=c(r(36)),f=c(r(11)),u=d(r(14)),h=d(r(16));function d(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function c(e){return e&&e.__esModule?e:{default:e}}}).call(this,r(69)(e))},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=\"1.8.2\"},function(e,t){t.read=function(e,t,r,n,i){var a,o,s=8*i-n-1,l=(1<>1,u=-7,h=r?i-1:0,d=r?-1:1,c=e[t+h];for(h+=d,a=c&(1<<-u)-1,c>>=-u,u+=s;u>0;a=256*a+e[t+h],h+=d,u-=8);for(o=a&(1<<-u)-1,a>>=-u,u+=n;u>0;o=256*o+e[t+h],h+=d,u-=8);if(0===a)a=1-f;else{if(a===l)return o?NaN:1/0*(c?-1:1);o+=Math.pow(2,n),a-=f}return(c?-1:1)*o*Math.pow(2,a-n)},t.write=function(e,t,r,n,i,a){var o,s,l,f=8*a-i-1,u=(1<>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,c=n?0:a-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,o=u):(o=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-o))<1&&(o--,l*=2),(t+=o+h>=1?d/l:d*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(t*l-1)*Math.pow(2,i),o+=h):(s=t*Math.pow(2,h-1)*Math.pow(2,i),o=0));i>=8;e[r+c]=255&s,c+=p,s/=256,i-=8);for(o=o<0;e[r+c]=255&o,c+=p,o/=256,f-=8);e[r+c-p]|=128*g}},function(e,t,r){\"use strict\";t.byteLength=function(e){return 3*e.length/4-f(e)},t.toByteArray=function(e){var t,r,n,o,s,l=e.length;o=f(e),s=new a(3*l/4-o),r=o>0?l-4:l;var u=0;for(t=0;t>16&255,s[u++]=n>>8&255,s[u++]=255&n;2===o?(n=i[e.charCodeAt(t)]<<2|i[e.charCodeAt(t+1)]>>4,s[u++]=255&n):1===o&&(n=i[e.charCodeAt(t)]<<10|i[e.charCodeAt(t+1)]<<4|i[e.charCodeAt(t+2)]>>2,s[u++]=n>>8&255,s[u++]=255&n);return s},t.fromByteArray=function(e){for(var t,r=e.length,i=r%3,a=\"\",o=[],s=0,l=r-i;sl?l:s+16383));1===i?(t=e[r-1],a+=n[t>>2],a+=n[t<<4&63],a+=\"==\"):2===i&&(t=(e[r-2]<<8)+e[r-1],a+=n[t>>10],a+=n[t>>4&63],a+=n[t<<2&63],a+=\"=\");return o.push(a),o.join(\"\")};for(var n=[],i=[],a=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",s=0,l=o.length;s0)throw new Error(\"Invalid string. Length must be a multiple of 4\");return\"=\"===e[t-2]?2:\"=\"===e[t-1]?1:0}function u(e,t,r){for(var i,a,o=[],s=t;s>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return o.join(\"\")}i[\"-\".charCodeAt(0)]=62,i[\"_\".charCodeAt(0)]=63},function(e,t,r){\"use strict\";function n(e,t){return 255===e.byteArray[t]&&217===e.byteArray[t+1]}function i(e,t,r){var i=t.fragments[r];return!(!n(e,i.position+i.length-2)&&!n(e,i.position+i.length-3))}function a(e,t,r){for(var n=r;n0&&t<=12&&e>0&&e<=function(e,t){switch(e){case 2:return t%4==0&&t%100||t%400==0?29:28;case 9:case 4:case 6:case 11:return 30;default:return 31}}(t,r)}(i,n,r))throw\"invalid DA '\"+e+\"'\";return{year:r,month:n,day:i}}if(t)throw\"invalid DA '\"+e+\"'\";return}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){if(e.length>=2){var r=parseInt(e.substring(0,2),10),n=e.length>=4?parseInt(e.substring(2,4),10):void 0,i=e.length>=6?parseInt(e.substring(4,6),10):void 0,a=e.length>=8?parseInt(e.substring(7,13),10):void 0;if(t&&(isNaN(r)||void 0!==n&&isNaN(n)||void 0!==i&&isNaN(i)||void 0!==a&&isNaN(a)||r<0||r>23||n&&(n<0||n>59)||i&&(i<0||i>59)||a&&(a<0||a>999999)))throw\"invalid TM '\"+e+\"'\";return{hours:r,minutes:n,seconds:i,fractionalSeconds:a}}if(t)throw\"invalid TM '\"+e+\"'\";return}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.createJPEGBasicOffsetTable=t.explicitDataSetToJS=t.explicitElementToString=t.parseDA=t.parseTM=t.parsePN=t.isPrivateTag=t.isStringVr=void 0;var n=r(25),i=f(r(77)),a=f(r(76)),o=f(r(43)),s=f(r(75)),l=f(r(74));function f(e){return e&&e.__esModule?e:{default:e}}t.isStringVr=n.isStringVr,t.isPrivateTag=n.isPrivateTag,t.parsePN=n.parsePN,t.parseTM=i.default,t.parseDA=a.default,t.explicitElementToString=o.default,t.explicitDataSetToJS=s.default,t.createJPEGBasicOffsetTable=l.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.readTag=t.readSequenceItem=t.readSequenceItemsImplicit=t.readSequenceItemsExplicit=t.readPart10Header=t.readEncapsulatedPixelDataFromFragments=t.readEncapsulatedPixelData=t.readEncapsulatedImageFrame=t.readDicomElementImplicit=t.readDicomElementExplicit=t.parseDicom=t.littleEndianByteArrayParser=t.findItemDelimitationItemAndSetElementLength=t.findEndOfEncapsulatedElement=t.findAndSetUNElementLength=t.DataSet=t.sharedCopy=t.ByteStream=t.bigEndianByteArrayParser=t.version=t.alloc=t.readFixedString=t.parseDicomDataSetImplicit=t.parseDicomDataSetExplicit=t.createJPEGBasicOffsetTable=t.explicitDataSetToJS=t.explicitElementToString=t.parseDA=t.parseTM=t.parsePN=t.isPrivateTag=t.isStringVr=void 0;var n=r(78),i=r(16),a=r(14),o=P(r(22)),s=P(r(71)),l=P(r(37)),f=P(r(12)),u=P(r(11)),h=P(r(7)),d=P(r(41)),c=P(r(42)),p=P(r(24)),g=P(r(21)),m=P(r(70)),_=P(r(15)),y=P(r(23)),b=P(r(26)),v=P(r(44)),w=P(r(17)),E=P(r(36)),x=P(r(40)),S=P(r(39)),k=P(r(13)),A=P(r(4));function P(e){return e&&e.__esModule?e:{default:e}}var T={isStringVr:n.isStringVr,isPrivateTag:n.isPrivateTag,parsePN:n.parsePN,parseTM:n.parseTM,parseDA:n.parseDA,explicitElementToString:n.explicitElementToString,explicitDataSetToJS:n.explicitDataSetToJS,createJPEGBasicOffsetTable:n.createJPEGBasicOffsetTable,parseDicomDataSetExplicit:i.parseDicomDataSetExplicit,parseDicomDataSetImplicit:i.parseDicomDataSetImplicit,readFixedString:a.readFixedString,alloc:o.default,version:s.default,bigEndianByteArrayParser:l.default,ByteStream:f.default,sharedCopy:u.default,DataSet:h.default,findAndSetUNElementLength:d.default,findEndOfEncapsulatedElement:c.default,findItemDelimitationItemAndSetElementLength:p.default,littleEndianByteArrayParser:g.default,parseDicom:m.default,readDicomElementExplicit:_.default,readDicomElementImplicit:y.default,readEncapsulatedImageFrame:b.default,readEncapsulatedPixelData:v.default,readEncapsulatedPixelDataFromFragments:w.default,readPart10Header:E.default,readSequenceItemsExplicit:x.default,readSequenceItemsImplicit:S.default,readSequenceItem:k.default,readTag:A.default};t.isStringVr=n.isStringVr,t.isPrivateTag=n.isPrivateTag,t.parsePN=n.parsePN,t.parseTM=n.parseTM,t.parseDA=n.parseDA,t.explicitElementToString=n.explicitElementToString,t.explicitDataSetToJS=n.explicitDataSetToJS,t.createJPEGBasicOffsetTable=n.createJPEGBasicOffsetTable,t.parseDicomDataSetExplicit=i.parseDicomDataSetExplicit,t.parseDicomDataSetImplicit=i.parseDicomDataSetImplicit,t.readFixedString=a.readFixedString,t.alloc=o.default,t.version=s.default,t.bigEndianByteArrayParser=l.default,t.ByteStream=f.default,t.sharedCopy=u.default,t.DataSet=h.default,t.findAndSetUNElementLength=d.default,t.findEndOfEncapsulatedElement=c.default,t.findItemDelimitationItemAndSetElementLength=p.default,t.littleEndianByteArrayParser=g.default,t.parseDicom=m.default,t.readDicomElementExplicit=_.default,t.readDicomElementImplicit=y.default,t.readEncapsulatedImageFrame=b.default,t.readEncapsulatedPixelData=v.default,t.readEncapsulatedPixelDataFromFragments=w.default,t.readPart10Header=E.default,t.readSequenceItemsExplicit=x.default,t.readSequenceItemsImplicit=S.default,t.readSequenceItem=k.default,t.readTag=A.default,t.default=T}])});\n//# sourceMappingURL=dicomParser.min.js.map","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\n\n\n/*** Constructor ***/\njpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || function () {\n this.hSamp = 0; // Horizontal sampling factor\n this.quantTableSel = 0; // Quantization table destination selector\n this.vSamp = 0; // Vertical\n};\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.ComponentSpec;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\n\n\n/*** Constructor ***/\njpeg.lossless.DataStream = jpeg.lossless.DataStream || function (data, offset, length) {\n this.buffer = new DataView(data, offset, length);\n this.index = 0;\n};\n\n\n\njpeg.lossless.DataStream.prototype.get16 = function () {\n var value = this.buffer.getUint16(this.index, false);\n this.index += 2;\n return value;\n};\n\n\n\njpeg.lossless.DataStream.prototype.get8 = function () {\n var value = this.buffer.getUint8(this.index);\n this.index += 1;\n return value;\n};\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.DataStream;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\njpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\njpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || ((typeof require !== 'undefined') ? require('./huffman-table.js') : null);\njpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || ((typeof require !== 'undefined') ? require('./quantization-table.js') : null);\njpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || ((typeof require !== 'undefined') ? require('./scan-header.js') : null);\njpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || ((typeof require !== 'undefined') ? require('./frame-header.js') : null);\njpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n/*** Constructor ***/\njpeg.lossless.Decoder = jpeg.lossless.Decoder || function (buffer, numBytes) {\n this.buffer = buffer;\n this.frame = new jpeg.lossless.FrameHeader();\n this.huffTable = new jpeg.lossless.HuffmanTable();\n this.quantTable = new jpeg.lossless.QuantizationTable();\n this.scan = new jpeg.lossless.ScanHeader();\n this.DU = jpeg.lossless.Utils.createArray(10, 4, 64); // at most 10 data units in a MCU, at most 4 data units in one component\n this.HuffTab = jpeg.lossless.Utils.createArray(4, 2, 50 * 256);\n this.IDCT_Source = [];\n this.nBlock = []; // number of blocks in the i-th Comp in a scan\n this.acTab = jpeg.lossless.Utils.createArray(10, 1); // ac HuffTab for the i-th Comp in a scan\n this.dcTab = jpeg.lossless.Utils.createArray(10, 1); // dc HuffTab for the i-th Comp in a scan\n this.qTab = jpeg.lossless.Utils.createArray(10, 1); // quantization table for the i-th Comp in a scan\n this.marker = 0;\n this.markerIndex = 0;\n this.numComp = 0;\n this.restartInterval = 0;\n this.selection = 0;\n this.xDim = 0;\n this.yDim = 0;\n this.xLoc = 0;\n this.yLoc = 0;\n this.numBytes = 0;\n this.outputData = null;\n this.restarting = false;\n this.mask = 0;\n\n if (typeof numBytes !== \"undefined\") {\n this.numBytes = numBytes;\n }\n};\n\n\n/*** Static Pseudo-constants ***/\n\njpeg.lossless.Decoder.IDCT_P = [0, 5, 40, 16, 45, 2, 7, 42, 21, 56, 8, 61, 18, 47, 1, 4, 41, 23, 58, 13, 32, 24, 37, 10, 63, 17, 44, 3, 6, 43, 20,\n 57, 15, 34, 29, 48, 53, 26, 39, 9, 60, 19, 46, 22, 59, 12, 33, 31, 50, 55, 25, 36, 11, 62, 14, 35, 28, 49, 52, 27, 38, 30, 51, 54];\njpeg.lossless.Decoder.TABLE = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53,\n 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63];\njpeg.lossless.Decoder.MAX_HUFFMAN_SUBTREE = 50;\njpeg.lossless.Decoder.MSB = 0x80000000;\njpeg.lossless.Decoder.RESTART_MARKER_BEGIN = 0xFFD0;\njpeg.lossless.Decoder.RESTART_MARKER_END = 0xFFD7;\n\n/*** Prototype Methods ***/\n\njpeg.lossless.Decoder.prototype.decompress = function (buffer, offset, length) {\n return this.decode(buffer, offset, length).buffer;\n};\n\n\n\njpeg.lossless.Decoder.prototype.decode = function (buffer, offset, length, numBytes) {\n /*jslint bitwise: true */\n\n var current, scanNum = 0, pred = [], i, compN, temp = [], index = [], mcuNum;\n\n if (typeof buffer !== \"undefined\") {\n this.buffer = buffer;\n }\n\n if (typeof numBytes !== \"undefined\") {\n this.numBytes = numBytes;\n }\n\n this.stream = new jpeg.lossless.DataStream(this.buffer, offset, length);\n this.buffer = null;\n\n this.xLoc = 0;\n this.yLoc = 0;\n current = this.stream.get16();\n\n if (current !== 0xFFD8) { // SOI\n throw new Error(\"Not a JPEG file\");\n }\n\n current = this.stream.get16();\n\n while ((((current >> 4) !== 0x0FFC) || (current === 0xFFC4))) { // SOF 0~15\n switch (current) {\n case 0xFFC4: // DHT\n this.huffTable.read(this.stream, this.HuffTab);\n break;\n case 0xFFCC: // DAC\n throw new Error(\"Program doesn't support arithmetic coding. (format throw new IOException)\");\n case 0xFFDB:\n this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE);\n break;\n case 0xFFDD:\n this.restartInterval = this.readNumber();\n break;\n case 0xFFE0:\n case 0xFFE1:\n case 0xFFE2:\n case 0xFFE3:\n case 0xFFE4:\n case 0xFFE5:\n case 0xFFE6:\n case 0xFFE7:\n case 0xFFE8:\n case 0xFFE9:\n case 0xFFEA:\n case 0xFFEB:\n case 0xFFEC:\n case 0xFFED:\n case 0xFFEE:\n case 0xFFEF:\n this.readApp();\n break;\n case 0xFFFE:\n this.readComment();\n break;\n default:\n if ((current >> 8) !== 0xFF) {\n throw new Error(\"ERROR: format throw new IOException! (decode)\");\n }\n }\n\n current = this.stream.get16();\n }\n\n if ((current < 0xFFC0) || (current > 0xFFC7)) {\n throw new Error(\"ERROR: could not handle arithmetic code!\");\n }\n\n this.frame.read(this.stream);\n current = this.stream.get16();\n\n do {\n while (current !== 0x0FFDA) { // SOS\n switch (current) {\n case 0xFFC4: // DHT\n this.huffTable.read(this.stream, this.HuffTab);\n break;\n case 0xFFCC: // DAC\n throw new Error(\"Program doesn't support arithmetic coding. (format throw new IOException)\");\n case 0xFFDB:\n this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE);\n break;\n case 0xFFDD:\n this.restartInterval = this.readNumber();\n break;\n case 0xFFE0:\n case 0xFFE1:\n case 0xFFE2:\n case 0xFFE3:\n case 0xFFE4:\n case 0xFFE5:\n case 0xFFE6:\n case 0xFFE7:\n case 0xFFE8:\n case 0xFFE9:\n case 0xFFEA:\n case 0xFFEB:\n case 0xFFEC:\n case 0xFFED:\n case 0xFFEE:\n case 0xFFEF:\n this.readApp();\n break;\n case 0xFFFE:\n this.readComment();\n break;\n default:\n if ((current >> 8) !== 0xFF) {\n throw new Error(\"ERROR: format throw new IOException! (Parser.decode)\");\n }\n }\n\n current = this.stream.get16();\n }\n\n this.precision = this.frame.precision;\n this.components = this.frame.components;\n\n if (!this.numBytes) {\n this.numBytes = parseInt(Math.ceil(this.precision / 8));\n }\n\n if (this.numBytes == 1) {\n this.mask = 0xFF;\n } else {\n this.mask = 0xFFFF;\n }\n\n this.scan.read(this.stream);\n this.numComp = this.scan.numComp;\n this.selection = this.scan.selection;\n\n if (this.numBytes === 1) {\n if (this.numComp === 3) {\n this.getter = this.getValueRGB;\n this.setter = this.setValueRGB;\n this.output = this.outputRGB;\n } else {\n this.getter = this.getValue8;\n this.setter = this.setValue8;\n this.output = this.outputSingle;\n }\n } else {\n this.getter = this.getValue16;\n this.setter = this.setValue16;\n this.output = this.outputSingle;\n }\n\n switch (this.selection) {\n case 2:\n this.selector = this.select2;\n break;\n case 3:\n this.selector = this.select3;\n break;\n case 4:\n this.selector = this.select4;\n break;\n case 5:\n this.selector = this.select5;\n break;\n case 6:\n this.selector = this.select6;\n break;\n case 7:\n this.selector = this.select7;\n break;\n default:\n this.selector = this.select1;\n break;\n }\n\n this.scanComps = this.scan.components;\n this.quantTables = this.quantTable.quantTables;\n\n for (i = 0; i < this.numComp; i+=1) {\n compN = this.scanComps[i].scanCompSel;\n this.qTab[i] = this.quantTables[this.components[compN].quantTableSel];\n this.nBlock[i] = this.components[compN].vSamp * this.components[compN].hSamp;\n this.dcTab[i] = this.HuffTab[this.scanComps[i].dcTabSel][0];\n this.acTab[i] = this.HuffTab[this.scanComps[i].acTabSel][1];\n }\n\n this.xDim = this.frame.dimX;\n this.yDim = this.frame.dimY;\n this.outputData = new DataView(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp));\n\n scanNum+=1;\n\n while (true) { // Decode one scan\n temp[0] = 0;\n index[0] = 0;\n\n for (i = 0; i < 10; i+=1) {\n pred[i] = (1 << (this.precision - 1));\n }\n\n if (this.restartInterval === 0) {\n current = this.decodeUnit(pred, temp, index);\n\n while ((current === 0) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim))) {\n this.output(pred);\n current = this.decodeUnit(pred, temp, index);\n }\n\n break; //current=MARKER\n }\n\n for (mcuNum = 0; mcuNum < this.restartInterval; mcuNum+=1) {\n this.restarting = (mcuNum == 0);\n current = this.decodeUnit(pred, temp, index);\n this.output(pred);\n\n if (current !== 0) {\n break;\n }\n }\n\n if (current === 0) {\n if (this.markerIndex !== 0) {\n current = (0xFF00 | this.marker);\n this.markerIndex = 0;\n } else {\n current = this.stream.get16();\n }\n }\n\n if (!((current >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) &&\n (current <= jpeg.lossless.Decoder.RESTART_MARKER_END))) {\n break; //current=MARKER\n }\n }\n\n if ((current === 0xFFDC) && (scanNum === 1)) { //DNL\n this.readNumber();\n current = this.stream.get16();\n }\n } while ((current !== 0xFFD9) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) && (scanNum === 0));\n\n return this.outputData;\n};\n\n\n\njpeg.lossless.Decoder.prototype.decodeUnit = function (prev, temp, index) {\n if (this.numComp == 1) {\n return this.decodeSingle(prev, temp, index);\n } else if (this.numComp == 3) {\n return this.decodeRGB(prev, temp, index);\n } else {\n return -1;\n }\n};\n\n\n\njpeg.lossless.Decoder.prototype.select1 = function (compOffset) {\n return this.getPreviousX(compOffset);\n};\n\n\n\njpeg.lossless.Decoder.prototype.select2 = function (compOffset) {\n return this.getPreviousY(compOffset);\n};\n\n\n\njpeg.lossless.Decoder.prototype.select3 = function (compOffset) {\n return this.getPreviousXY(compOffset);\n};\n\n\n\njpeg.lossless.Decoder.prototype.select4 = function (compOffset) {\n return (this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) - this.getPreviousXY(compOffset);\n};\n\n\n\njpeg.lossless.Decoder.prototype.select5 = function (compOffset) {\n return this.getPreviousX(compOffset) + ((this.getPreviousY(compOffset) - this.getPreviousXY(compOffset)) >> 1);\n};\n\n\n\njpeg.lossless.Decoder.prototype.select6 = function (compOffset) {\n return this.getPreviousY(compOffset) + ((this.getPreviousX(compOffset) - this.getPreviousXY(compOffset)) >> 1);\n};\n\n\n\njpeg.lossless.Decoder.prototype.select7 = function (compOffset) {\n return ((this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) / 2);\n};\n\n\n\njpeg.lossless.Decoder.prototype.decodeRGB = function (prev, temp, index) {\n /*jslint bitwise: true */\n\n var value, actab, dctab, qtab, ctrC, i, k, j;\n\n prev[0] = this.selector(0);\n prev[1] = this.selector(1);\n prev[2] = this.selector(2);\n\n for (ctrC = 0; ctrC < this.numComp; ctrC+=1) {\n qtab = this.qTab[ctrC];\n actab = this.acTab[ctrC];\n dctab = this.dcTab[ctrC];\n for (i = 0; i < this.nBlock[ctrC]; i+=1) {\n for (k = 0; k < this.IDCT_Source.length; k+=1) {\n this.IDCT_Source[k] = 0;\n }\n\n value = this.getHuffmanValue(dctab, temp, index);\n\n if (value >= 0xFF00) {\n return value;\n }\n\n prev[ctrC] = this.IDCT_Source[0] = prev[ctrC] + this.getn(index, value, temp, index);\n this.IDCT_Source[0] *= qtab[0];\n\n for (j = 1; j < 64; j+=1) {\n value = this.getHuffmanValue(actab, temp, index);\n\n if (value >= 0xFF00) {\n return value;\n }\n\n j += (value >> 4);\n\n if ((value & 0x0F) === 0) {\n if ((value >> 4) === 0) {\n break;\n }\n } else {\n this.IDCT_Source[jpeg.lossless.Decoder.IDCT_P[j]] = this.getn(index, value & 0x0F, temp, index) * qtab[j];\n }\n }\n }\n }\n\n return 0;\n};\n\n\n\njpeg.lossless.Decoder.prototype.decodeSingle = function (prev, temp, index) {\n /*jslint bitwise: true */\n\n var value, i, n, nRestart;\n\n if (this.restarting) {\n this.restarting = false;\n prev[0] = (1 << (this.frame.precision - 1));\n } else {\n prev[0] = this.selector();\n }\n\n for (i = 0; i < this.nBlock[0]; i+=1) {\n value = this.getHuffmanValue(this.dcTab[0], temp, index);\n if (value >= 0xFF00) {\n return value;\n }\n\n n = this.getn(prev, value, temp, index);\n nRestart = (n >> 8);\n\n if ((nRestart >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && (nRestart <= jpeg.lossless.Decoder.RESTART_MARKER_END)) {\n return nRestart;\n }\n\n prev[0] += n;\n }\n\n return 0;\n};\n\n\n\n//\tHuffman table for fast search: (HuffTab) 8-bit Look up table 2-layer search architecture, 1st-layer represent 256 node (8 bits) if codeword-length > 8\n//\tbits, then the entry of 1st-layer = (# of 2nd-layer table) | MSB and it is stored in the 2nd-layer Size of tables in each layer are 256.\n//\tHuffTab[*][*][0-256] is always the only 1st-layer table.\n//\n//\tAn entry can be: (1) (# of 2nd-layer table) | MSB , for code length > 8 in 1st-layer (2) (Code length) << 8 | HuffVal\n//\n//\tHuffmanValue(table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...)\n//\t ):\n//\t return: Huffman Value of table\n//\t 0xFF?? if it receives a MARKER\n//\t Parameter: table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...)\n//\t temp temp storage for remainded bits\n//\t index index to bit of temp\n//\t in FILE pointer\n//\t Effect:\n//\t temp store new remainded bits\n//\t index change to new index\n//\t in change to new position\n//\t NOTE:\n//\t Initial by temp=0; index=0;\n//\t NOTE: (explain temp and index)\n//\t temp: is always in the form at calling time or returning time\n//\t | byte 4 | byte 3 | byte 2 | byte 1 |\n//\t | 0 | 0 | 00000000 | 00000??? | if not a MARKER\n//\t ^index=3 (from 0 to 15)\n//\t 321\n//\t NOTE (marker and marker_index):\n//\t If get a MARKER from 'in', marker=the low-byte of the MARKER\n//\t and marker_index=9\n//\t If marker_index=9 then index is always > 8, or HuffmanValue()\n//\t will not be called\njpeg.lossless.Decoder.prototype.getHuffmanValue = function (table, temp, index) {\n /*jslint bitwise: true */\n\n var code, input, mask;\n mask = 0xFFFF;\n\n if (index[0] < 8) {\n temp[0] <<= 8;\n input = this.stream.get8();\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n temp[0] |= input;\n } else {\n index[0] -= 8;\n }\n\n code = table[temp[0] >> index[0]];\n\n if ((code & jpeg.lossless.Decoder.MSB) !== 0) {\n if (this.markerIndex !== 0) {\n this.markerIndex = 0;\n return 0xFF00 | this.marker;\n }\n\n temp[0] &= (mask >> (16 - index[0]));\n temp[0] <<= 8;\n input = this.stream.get8();\n\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n\n temp[0] |= input;\n code = table[((code & 0xFF) * 256) + (temp[0] >> index[0])];\n index[0] += 8;\n }\n\n index[0] += 8 - (code >> 8);\n\n if (index[0] < 0) {\n throw new Error(\"index=\" + index[0] + \" temp=\" + temp[0] + \" code=\" + code + \" in HuffmanValue()\");\n }\n\n if (index[0] < this.markerIndex) {\n this.markerIndex = 0;\n return 0xFF00 | this.marker;\n }\n\n temp[0] &= (mask >> (16 - index[0]));\n return code & 0xFF;\n};\n\n\n\njpeg.lossless.Decoder.prototype.getn = function (PRED, n, temp, index) {\n /*jslint bitwise: true */\n\n var result, one, n_one, mask, input;\n one = 1;\n n_one = -1;\n mask = 0xFFFF;\n\n if (n === 0) {\n return 0;\n }\n\n if (n === 16) {\n if (PRED[0] >= 0) {\n return -32768;\n } else {\n return 32768;\n }\n }\n\n index[0] -= n;\n\n if (index[0] >= 0) {\n if ((index[0] < this.markerIndex) && !this.isLastPixel()) { // this was corrupting the last pixel in some cases\n this.markerIndex = 0;\n return (0xFF00 | this.marker) << 8;\n }\n\n result = temp[0] >> index[0];\n temp[0] &= (mask >> (16 - index[0]));\n } else {\n temp[0] <<= 8;\n input = this.stream.get8();\n\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n\n temp[0] |= input;\n index[0] += 8;\n\n if (index[0] < 0) {\n if (this.markerIndex !== 0) {\n this.markerIndex = 0;\n return (0xFF00 | this.marker) << 8;\n }\n\n temp[0] <<= 8;\n input = this.stream.get8();\n\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n\n temp[0] |= input;\n index[0] += 8;\n }\n\n if (index[0] < 0) {\n throw new Error(\"index=\" + index[0] + \" in getn()\");\n }\n\n if (index[0] < this.markerIndex) {\n this.markerIndex = 0;\n return (0xFF00 | this.marker) << 8;\n }\n\n result = temp[0] >> index[0];\n temp[0] &= (mask >> (16 - index[0]));\n }\n\n if (result < (one << (n - 1))) {\n result += (n_one << n) + 1;\n }\n\n return result;\n};\n\n\n\njpeg.lossless.Decoder.prototype.getPreviousX = function (compOffset) {\n /*jslint bitwise: true */\n\n if (this.xLoc > 0) {\n return this.getter((((this.yLoc * this.xDim) + this.xLoc) - 1), compOffset);\n } else if (this.yLoc > 0) {\n return this.getPreviousY(compOffset);\n } else {\n return (1 << (this.frame.precision - 1));\n }\n};\n\n\n\njpeg.lossless.Decoder.prototype.getPreviousXY = function (compOffset) {\n /*jslint bitwise: true */\n\n if ((this.xLoc > 0) && (this.yLoc > 0)) {\n return this.getter(((((this.yLoc - 1) * this.xDim) + this.xLoc) - 1), compOffset);\n } else {\n return this.getPreviousY(compOffset);\n }\n};\n\n\n\njpeg.lossless.Decoder.prototype.getPreviousY = function (compOffset) {\n /*jslint bitwise: true */\n\n if (this.yLoc > 0) {\n return this.getter((((this.yLoc - 1) * this.xDim) + this.xLoc), compOffset);\n } else {\n return this.getPreviousX(compOffset);\n }\n};\n\n\n\njpeg.lossless.Decoder.prototype.isLastPixel = function () {\n return (this.xLoc === (this.xDim - 1)) && (this.yLoc === (this.yDim - 1));\n};\n\n\n\njpeg.lossless.Decoder.prototype.outputSingle = function (PRED) {\n if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) {\n this.setter((((this.yLoc * this.xDim) + this.xLoc)), this.mask & PRED[0]);\n\n this.xLoc+=1;\n\n if (this.xLoc >= this.xDim) {\n this.yLoc+=1;\n this.xLoc = 0;\n }\n }\n};\n\n\n\njpeg.lossless.Decoder.prototype.outputRGB = function (PRED) {\n var offset = ((this.yLoc * this.xDim) + this.xLoc);\n\n if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) {\n this.setter(offset, PRED[0], 0);\n this.setter(offset, PRED[1], 1);\n this.setter(offset, PRED[2], 2);\n\n this.xLoc+=1;\n\n if (this.xLoc >= this.xDim) {\n this.yLoc+=1;\n this.xLoc = 0;\n }\n }\n};\n\n\n\njpeg.lossless.Decoder.prototype.setValue16 = function (index, val) {\n this.outputData.setInt16(index * 2, val, true);\n};\n\n\n\njpeg.lossless.Decoder.prototype.getValue16 = function (index) {\n return this.outputData.getInt16(index * 2, true);\n};\n\n\n\njpeg.lossless.Decoder.prototype.setValue8 = function (index, val) {\n this.outputData.setInt8(index, val);\n};\n\n\n\njpeg.lossless.Decoder.prototype.getValue8 = function (index) {\n return this.outputData.getInt8(index);\n};\n\n\n\njpeg.lossless.Decoder.prototype.setValueRGB = function (index, val, compOffset) {\n this.outputData.setUint8(index * 3 + compOffset, val);\n};\n\n\n\njpeg.lossless.Decoder.prototype.getValueRGB = function (index, compOffset) {\n return this.outputData.getUint8(index * 3 + compOffset);\n};\n\n\n\njpeg.lossless.Decoder.prototype.readApp = function() {\n var count = 0, length = this.stream.get16();\n count += 2;\n\n while (count < length) {\n this.stream.get8();\n count+=1;\n }\n\n return length;\n};\n\n\n\njpeg.lossless.Decoder.prototype.readComment = function () {\n var sb = \"\", count = 0, length;\n\n length = this.stream.get16();\n count += 2;\n\n while (count < length) {\n sb += this.stream.get8();\n count+=1;\n }\n\n return sb;\n};\n\n\n\njpeg.lossless.Decoder.prototype.readNumber = function() {\n var Ld = this.stream.get16();\n\n if (Ld !== 4) {\n throw new Error(\"ERROR: Define number format throw new IOException [Ld!=4]\");\n }\n\n return this.stream.get16();\n};\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.Decoder;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\njpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || ((typeof require !== 'undefined') ? require('./component-spec.js') : null);\njpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\n\n\n/*** Constructor ***/\njpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || function () {\n this.components = []; // Components\n this.dimX = 0; // Number of samples per line\n this.dimY = 0; // Number of lines\n this.numComp = 0; // Number of component in the frame\n this.precision = 0; // Sample Precision (from the original image)\n};\n\n\n\n/*** Prototype Methods ***/\n\njpeg.lossless.FrameHeader.prototype.read = function (data) {\n /*jslint bitwise: true */\n\n var count = 0, length, i, c, temp;\n\n length = data.get16();\n count += 2;\n\n this.precision = data.get8();\n count+=1;\n\n this.dimY = data.get16();\n count += 2;\n\n this.dimX = data.get16();\n count += 2;\n\n this.numComp = data.get8();\n count+=1;\n for (i = 1; i <= this.numComp; i+=1) {\n if (count > length) {\n throw new Error(\"ERROR: frame format error\");\n }\n\n c = data.get8();\n count+=1;\n\n if (count >= length) {\n throw new Error(\"ERROR: frame format error [c>=Lf]\");\n }\n\n temp = data.get8();\n count+=1;\n\n if (!this.components[c]) {\n this.components[c] = new jpeg.lossless.ComponentSpec();\n }\n\n this.components[c].hSamp = temp >> 4;\n this.components[c].vSamp = temp & 0x0F;\n this.components[c].quantTableSel = data.get8();\n count+=1;\n }\n\n if (count !== length) {\n throw new Error(\"ERROR: frame format error [Lf!=count]\");\n }\n\n return 1;\n};\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.FrameHeader;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\njpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\njpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n/*** Constructor ***/\njpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || function () {\n this.l = jpeg.lossless.Utils.createArray(4, 2, 16);\n this.th = [];\n this.v = jpeg.lossless.Utils.createArray(4, 2, 16, 200);\n this.tc = jpeg.lossless.Utils.createArray(4, 2);\n\n this.tc[0][0] = 0;\n this.tc[1][0] = 0;\n this.tc[2][0] = 0;\n this.tc[3][0] = 0;\n this.tc[0][1] = 0;\n this.tc[1][1] = 0;\n this.tc[2][1] = 0;\n this.tc[3][1] = 0;\n this.th[0] = 0;\n this.th[1] = 0;\n this.th[2] = 0;\n this.th[3] = 0;\n};\n\n\n\n/*** Static Pseudo-constants ***/\n\njpeg.lossless.HuffmanTable.MSB = 0x80000000;\n\n\n/*** Prototype Methods ***/\n\njpeg.lossless.HuffmanTable.prototype.read = function(data, HuffTab) {\n /*jslint bitwise: true */\n\n var count = 0, length, temp, t, c, i, j;\n\n length = data.get16();\n count += 2;\n\n while (count < length) {\n temp = data.get8();\n count+=1;\n t = temp & 0x0F;\n if (t > 3) {\n throw new Error(\"ERROR: Huffman table ID > 3\");\n }\n\n c = temp >> 4;\n if (c > 2) {\n throw new Error(\"ERROR: Huffman table [Table class > 2 ]\");\n }\n\n this.th[t] = 1;\n this.tc[t][c] = 1;\n\n for (i = 0; i < 16; i+=1) {\n this.l[t][c][i] = data.get8();\n count+=1;\n }\n\n for (i = 0; i < 16; i+=1) {\n for (j = 0; j < this.l[t][c][i]; j+=1) {\n if (count > length) {\n throw new Error(\"ERROR: Huffman table format error [count>Lh]\");\n }\n\n this.v[t][c][i][j] = data.get8();\n count+=1;\n }\n }\n }\n\n if (count !== length) {\n throw new Error(\"ERROR: Huffman table format error [count!=Lf]\");\n }\n\n for (i = 0; i < 4; i+=1) {\n for (j = 0; j < 2; j+=1) {\n if (this.tc[i][j] !== 0) {\n this.buildHuffTable(HuffTab[i][j], this.l[i][j], this.v[i][j]);\n }\n }\n }\n\n return 1;\n};\n\n\n\n//\tBuild_HuffTab()\n//\tParameter: t table ID\n//\t c table class ( 0 for DC, 1 for AC )\n//\t L[i] # of codewords which length is i\n//\t V[i][j] Huffman Value (length=i)\n//\tEffect:\n//\t build up HuffTab[t][c] using L and V.\njpeg.lossless.HuffmanTable.prototype.buildHuffTable = function(tab, L, V) {\n /*jslint bitwise: true */\n\n var currentTable, temp, k, i, j, n;\n temp = 256;\n k = 0;\n\n for (i = 0; i < 8; i+=1) { // i+1 is Code length\n for (j = 0; j < L[i]; j+=1) {\n for (n = 0; n < (temp >> (i + 1)); n+=1) {\n tab[k] = V[i][j] | ((i + 1) << 8);\n k+=1;\n }\n }\n }\n\n for (i = 1; k < 256; i+=1, k+=1) {\n tab[k] = i | jpeg.lossless.HuffmanTable.MSB;\n }\n\n currentTable = 1;\n k = 0;\n\n for (i = 8; i < 16; i+=1) { // i+1 is Code length\n for (j = 0; j < L[i]; j+=1) {\n for (n = 0; n < (temp >> (i - 7)); n+=1) {\n tab[(currentTable * 256) + k] = V[i][j] | ((i + 1) << 8);\n k+=1;\n }\n\n if (k >= 256) {\n if (k > 256) {\n throw new Error(\"ERROR: Huffman table error(1)!\");\n }\n\n k = 0;\n currentTable+=1;\n }\n }\n }\n};\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.HuffmanTable;\n}\n","/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\njpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || ((typeof require !== 'undefined') ? require('./component-spec.js') : null);\njpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\njpeg.lossless.Decoder = jpeg.lossless.Decoder || ((typeof require !== 'undefined') ? require('./decoder.js') : null);\njpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || ((typeof require !== 'undefined') ? require('./frame-header.js') : null);\njpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || ((typeof require !== 'undefined') ? require('./huffman-table.js') : null);\njpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || ((typeof require !== 'undefined') ? require('./quantization-table.js') : null);\njpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || ((typeof require !== 'undefined') ? require('./scan-component.js') : null);\njpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || ((typeof require !== 'undefined') ? require('./scan-header.js') : null);\njpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n/*** Exports ***/\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\njpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\njpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n/*** Constructor ***/\njpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || function () {\n this.precision = []; // Quantization precision 8 or 16\n this.tq = []; // 1: this table is presented\n this.quantTables = jpeg.lossless.Utils.createArray(4, 64); // Tables\n\n this.tq[0] = 0;\n this.tq[1] = 0;\n this.tq[2] = 0;\n this.tq[3] = 0;\n};\n\n\n\n/*** Static Methods ***/\n\njpeg.lossless.QuantizationTable.enhanceQuantizationTable = function(qtab, table) {\n /*jslint bitwise: true */\n\n var i;\n\n for (i = 0; i < 8; i+=1) {\n qtab[table[(0 * 8) + i]] *= 90;\n qtab[table[(4 * 8) + i]] *= 90;\n qtab[table[(2 * 8) + i]] *= 118;\n qtab[table[(6 * 8) + i]] *= 49;\n qtab[table[(5 * 8) + i]] *= 71;\n qtab[table[(1 * 8) + i]] *= 126;\n qtab[table[(7 * 8) + i]] *= 25;\n qtab[table[(3 * 8) + i]] *= 106;\n }\n\n for (i = 0; i < 8; i+=1) {\n qtab[table[0 + (8 * i)]] *= 90;\n qtab[table[4 + (8 * i)]] *= 90;\n qtab[table[2 + (8 * i)]] *= 118;\n qtab[table[6 + (8 * i)]] *= 49;\n qtab[table[5 + (8 * i)]] *= 71;\n qtab[table[1 + (8 * i)]] *= 126;\n qtab[table[7 + (8 * i)]] *= 25;\n qtab[table[3 + (8 * i)]] *= 106;\n }\n\n for (i = 0; i < 64; i+=1) {\n qtab[i] >>= 6;\n }\n};\n\n\n/*** Prototype Methods ***/\n\njpeg.lossless.QuantizationTable.prototype.read = function (data, table) {\n /*jslint bitwise: true */\n\n var count = 0, length, temp, t, i;\n\n length = data.get16();\n count += 2;\n\n while (count < length) {\n temp = data.get8();\n count+=1;\n t = temp & 0x0F;\n\n if (t > 3) {\n throw new Error(\"ERROR: Quantization table ID > 3\");\n }\n\n this.precision[t] = temp >> 4;\n\n if (this.precision[t] === 0) {\n this.precision[t] = 8;\n } else if (this.precision[t] === 1) {\n this.precision[t] = 16;\n } else {\n throw new Error(\"ERROR: Quantization table precision error\");\n }\n\n this.tq[t] = 1;\n\n if (this.precision[t] === 8) {\n for (i = 0; i < 64; i+=1) {\n if (count > length) {\n throw new Error(\"ERROR: Quantization table format error\");\n }\n\n this.quantTables[t][i] = data.get8();\n count+=1;\n }\n\n jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table);\n } else {\n for (i = 0; i < 64; i+=1) {\n if (count > length) {\n throw new Error(\"ERROR: Quantization table format error\");\n }\n\n this.quantTables[t][i] = data.get16();\n count += 2;\n }\n\n jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table);\n }\n }\n\n if (count !== length) {\n throw new Error(\"ERROR: Quantization table error [count!=Lq]\");\n }\n\n return 1;\n};\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.QuantizationTable;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\n\n\n/*** Constructor ***/\njpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || function () {\n this.acTabSel = 0; // AC table selector\n this.dcTabSel = 0; // DC table selector\n this.scanCompSel = 0; // Scan component selector\n};\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.ScanComponent;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\njpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\njpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || ((typeof require !== 'undefined') ? require('./scan-component.js') : null);\n\n\n/*** Constructor ***/\njpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || function () {\n this.ah = 0;\n this.al = 0;\n this.numComp = 0; // Number of components in the scan\n this.selection = 0; // Start of spectral or predictor selection\n this.spectralEnd = 0; // End of spectral selection\n this.components = [];\n};\n\n\n/*** Prototype Methods ***/\n\njpeg.lossless.ScanHeader.prototype.read = function(data) {\n /*jslint bitwise: true */\n\n var count = 0, length, i, temp;\n\n length = data.get16();\n count += 2;\n\n this.numComp = data.get8();\n count+=1;\n\n for (i = 0; i < this.numComp; i+=1) {\n this.components[i] = new jpeg.lossless.ScanComponent();\n\n if (count > length) {\n throw new Error(\"ERROR: scan header format error\");\n }\n\n this.components[i].scanCompSel = data.get8();\n count+=1;\n\n temp = data.get8();\n count+=1;\n\n this.components[i].dcTabSel = (temp >> 4);\n this.components[i].acTabSel = (temp & 0x0F);\n }\n\n this.selection = data.get8();\n count+=1;\n\n this.spectralEnd = data.get8();\n count+=1;\n\n temp = data.get8();\n this.ah = (temp >> 4);\n this.al = (temp & 0x0F);\n count+=1;\n\n if (count !== length) {\n throw new Error(\"ERROR: scan header format error [count!=Ns]\");\n }\n\n return 1;\n};\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.ScanHeader;\n}\n","/*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n/*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\nvar jpeg = jpeg || {};\njpeg.lossless = jpeg.lossless || {};\n\n\n/*** Constructor ***/\njpeg.lossless.Utils = jpeg.lossless.Utils || {};\n\n\n/*** Static methods ***/\n\n// http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript\njpeg.lossless.Utils.createArray = function (length) {\n var arr = new Array(length || 0),\n i = length;\n\n if (arguments.length > 1) {\n var args = Array.prototype.slice.call(arguments, 1);\n while(i--) arr[length-1 - i] = jpeg.lossless.Utils.createArray.apply(this, args);\n }\n\n return arr;\n};\n\n\n// http://stackoverflow.com/questions/18638900/javascript-crc32\njpeg.lossless.Utils.makeCRCTable = function(){\n var c;\n var crcTable = [];\n for(var n =0; n < 256; n++){\n c = n;\n for(var k =0; k < 8; k++){\n c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n crcTable[n] = c;\n }\n return crcTable;\n};\n\njpeg.lossless.Utils.crc32 = function(dataView) {\n var crcTable = jpeg.lossless.Utils.crcTable || (jpeg.lossless.Utils.crcTable = jpeg.lossless.Utils.makeCRCTable());\n var crc = 0 ^ (-1);\n\n for (var i = 0; i < dataView.byteLength; i++ ) {\n crc = (crc >>> 8) ^ crcTable[(crc ^ dataView.getUint8(i)) & 0xFF];\n }\n\n return (crc ^ (-1)) >>> 0;\n};\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.Utils;\n}\n","'use strict';\n\n/**\n* FUNCTION: abs( x )\n*\tComputes the absolute value of `x`.\n*\n* @param {Number} x - input value\n* @returns {Number} absolute value\n*/\nfunction abs( x ) {\n\tif ( x < 0 ) {\n\t\treturn -x;\n\t}\n\tif ( x === 0 ) {\n\t\treturn 0; // handle negative zero\n\t}\n\treturn x;\n} // end FUNCTION abs()\n\n\n// EXPORTS //\n\nmodule.exports = abs;\n","'use strict';\n\n// EXPORTS //\n\nmodule.exports = Math.ceil;\n","'use strict';\n\n// MODULES //\n\nvar floor = require( 'math-floor' );\n\n\n// DIV2 //\n\n/**\n* FUNCTION: div2( x )\n*\tConverts a nonnegative integer to a literal bit representation using the divide-by-2 algorithm.\n*\n* @param {Number} x - nonnegative integer\n* @returns {String} bit representation\n*/\nfunction div2( x ) {\n\tvar str = '';\n\tvar y;\n\n\t// We repeatedly divide by 2 and check for a remainder. If a remainder exists, the number is odd and we add a '1' bit...\n\twhile ( x > 0 ) {\n\t\ty = x / 2;\n\t\tx = floor( y );\n\t\tif ( y === x ) {\n\t\t\tstr = '0' + str;\n\t\t} else {\n\t\t\tstr = '1' + str;\n\t\t}\n\t}\n\treturn str;\n} // end FUNCTION div2()\n\n\n// EXPORTS //\n\nmodule.exports = div2;\n","'use strict';\n\n// MODULES //\n\nvar pinf = require( 'const-pinf-float32' );\nvar ninf = require( 'const-ninf-float32' );\nvar abs = require( 'math-abs' );\nvar floor = require( 'math-floor' );\nvar rpad = require( 'utils-right-pad-string' );\nvar lpad = require( 'utils-left-pad-string' );\nvar repeat = require( 'utils-repeat-string' );\nvar div2 = require( './div2.js' );\nvar mult2 = require( './mult2.js' );\n\n\n// CONSTANTS //\n\nvar BIAS = 127; // exponent bias => (2**8)/2 - 1\n\n\n// BINARY STRING //\n\n/**\n* FUNCTION: binaryString( x )\n*\tReturns a string giving the literal bit representation of a single-precision floating-point number.\n*\n* @param {Number} x - input value\n* @returns {String} bit representation\n*/\nfunction binaryString( x ) {\n\tvar nbits;\n\tvar sign;\n\tvar str;\n\tvar exp;\n\tvar n;\n\tvar f;\n\tvar i;\n\n\t// Check for a negative value or negative zero...\n\tif ( x < 0 || 1/x === ninf ) {\n\t\tsign = '1';\n\t} else {\n\t\tsign = '0';\n\t}\n\t// Special case: +-infinity\n\tif ( x === pinf || x === ninf ) {\n\t\t// Based on IEEE 754-2008...\n\t\texp = repeat( '1', 8 ); // all 1s\n\t\tstr = repeat( '0', 23 ); // all 0s\n\t\treturn sign + exp + str;\n\t}\n\t// Special case: NaN\n\tif ( x !== x ) {\n\t\t// Based on IEEE 754-2008...\n\t\texp = repeat( '1', 8 ); // all 1s\n\t\tstr = '1' + repeat( '0', 22 ); // can't be all 0s\n\t\treturn sign + exp + str;\n\t}\n\t// Special case: +-0\n\tif ( x === 0 ) {\n\t\t// Based on IEEE 754-2008...\n\t\texp = repeat( '0', 8 ); // all 0s\n\t\tstr = repeat( '0', 23 ); // all 0s\n\t\treturn sign + exp + str;\n\t}\n\tx = abs( x );\n\n\t// Isolate the integer part (digits before the decimal):\n\tn = floor( x );\n\n\t// Isolate the fractional part (digits after the decimal):\n\tf = x - n;\n\n\t// Convert the integer and fractional parts to bit strings:\n\tn = div2( n );\n\tf = mult2( f );\n\n\t// Determine the exponent needed to normalize the integer+fractional parts...\n\tif ( n ) {\n\t\t// Move the decimal `d` digits to the left:\n\t\texp = n.length - 1;\n\t} else {\n\t\t// Find the first '1' bit...\n\t\tfor ( i = 0; i < f.length; i++ ) {\n\t\t\tif ( f[ i ] === '1' ) {\n\t\t\t\tnbits = i + 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// Move the decimal `d` digits to the right:\n\t\texp = -nbits;\n\t}\n\t// Normalize the combined integer+fractional string...\n\tstr = n + f;\n\tif ( exp < 0 ) {\n\t\t// Handle subnormals...\n\t\tif ( exp <= -BIAS ) {\n\t\t\t// Cap the number of bits removed:\n\t\t\tnbits = BIAS - 1;\n\t\t}\n\t\t// Remove all leading zeros and the first '1' for normal values, and, for subnormals, remove at most BIAS-1 leading bits:\n\t\tstr = str.substring( nbits );\n\t} else {\n\t\t// Remove the leading '1' (implicit/hidden bit):\n\t\tstr = str.substring( 1 );\n\t}\n\t// Convert the exponent to a bit string:\n\texp = div2( exp + BIAS );\n\texp = lpad( exp, 8, '0' );\n\n\t// Fill in any trailing zeros and ensure we have only 23 fraction bits:\n\tstr = rpad( str, 23, '0' ).substring( 0, 23 );\n\n\t// Return a bit representation:\n\treturn sign + exp + str;\n} // end FUNCTION binaryString()\n\n\n// EXPORTS //\n\nmodule.exports = binaryString;\n","'use strict';\n\n// VARIABLES //\n\nvar MAX_ITER = 149; // 127+22 (subnormals)\nvar MAX_BITS = 24; // only 23 bits for fraction\n\n\n// MULT2 //\n\n/**\n* FUNCTION: mult2( x )\n*\tConverts a fraction to a literal bit representation using the multiply-by-2 algorithm.\n*\n* @param {Number} x - number less than 1\n* @returns {String} bit representation\n*/\nfunction mult2( x ) {\n\tvar str;\n\tvar y;\n\tvar i;\n\tvar j;\n\n\tstr = '';\n\tif ( x === 0 ) {\n\t\treturn str;\n\t}\n\tj = MAX_ITER;\n\n\t// Each time we multiply by 2 and find a ones digit, add a '1'; otherwise, add a '0'..\n\tfor ( i = 0; i < MAX_ITER; i++ ) {\n\t\ty = x * 2;\n\t\tif ( y >= 1 ) {\n\t\t\tx = y - 1;\n\t\t\tstr += '1';\n\t\t\tif ( j === MAX_ITER ) {\n\t\t\t\tj = i; // first '1'\n\t\t\t}\n\t\t} else {\n\t\t\tx = y;\n\t\t\tstr += '0';\n\t\t}\n\t\t// Stop when we have no more decimals to process or in the event we found a fraction which cannot be represented in a finite number of bits...\n\t\tif ( y === 1 || i-j > MAX_BITS ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn str;\n} // end FUNCTION mult2()\n\n\n// EXPORTS //\n\nmodule.exports = mult2;\n","'use strict';\n\n// EXPORTS //\n\nmodule.exports = Math.floor;\n","\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\n\n/**\n * nifti\n * @type {*|{}}\n */\nvar nifti = nifti || {};\nnifti.NIFTI1 = nifti.NIFTI1 || ((typeof require !== 'undefined') ? require('./nifti1.js') : null);\nnifti.NIFTI2 = nifti.NIFTI2 || ((typeof require !== 'undefined') ? require('./nifti2.js') : null);\nnifti.Utils = nifti.Utils || ((typeof require !== 'undefined') ? require('./utilities.js') : null);\n\nvar pako = pako || ((typeof require !== 'undefined') ? require('pako') : null);\n\n\n\n/*** Static Methods ***/\n\n/**\n * Returns true if this data represents a NIFTI-1 header.\n * @param {ArrayBuffer} data\n * @returns {boolean}\n */\nnifti.isNIFTI1 = function (data) {\n var buf, mag1, mag2, mag3;\n\n buf = new DataView(data);\n mag1 = buf.getUint8(nifti.NIFTI1.MAGIC_NUMBER_LOCATION);\n mag2 = buf.getUint8(nifti.NIFTI1.MAGIC_NUMBER_LOCATION + 1);\n mag3 = buf.getUint8(nifti.NIFTI1.MAGIC_NUMBER_LOCATION + 2);\n\n return !!((mag1 === nifti.NIFTI1.MAGIC_NUMBER[0]) && (mag2 === nifti.NIFTI1.MAGIC_NUMBER[1]) &&\n (mag3 === nifti.NIFTI1.MAGIC_NUMBER[2]));\n};\n\n\n/**\n * Returns true if this data represents a NIFTI-2 header.\n * @param {ArrayBuffer} data\n * @returns {boolean}\n */\nnifti.isNIFTI2 = function (data) {\n var buf, mag1, mag2, mag3;\n\n buf = new DataView(data);\n mag1 = buf.getUint8(nifti.NIFTI2.MAGIC_NUMBER_LOCATION);\n mag2 = buf.getUint8(nifti.NIFTI2.MAGIC_NUMBER_LOCATION + 1);\n mag3 = buf.getUint8(nifti.NIFTI2.MAGIC_NUMBER_LOCATION + 2);\n\n return !!((mag1 === nifti.NIFTI2.MAGIC_NUMBER[0]) && (mag2 === nifti.NIFTI2.MAGIC_NUMBER[1]) &&\n (mag3 === nifti.NIFTI2.MAGIC_NUMBER[2]));\n};\n\n\n\n/**\n * Returns true if this data represents a NIFTI header.\n * @param {ArrayBuffer} data\n * @returns {boolean}\n */\nnifti.isNIFTI = function (data) {\n return (nifti.isNIFTI1(data) || nifti.isNIFTI2(data));\n};\n\n\n\n/**\n * Returns true if this data is GZIP compressed.\n * @param {ArrayBuffer} data\n * @returns {boolean}\n */\nnifti.isCompressed = function (data) {\n var buf, magicCookie1, magicCookie2;\n\n if (data) {\n buf = new DataView(data);\n\n magicCookie1 = buf.getUint8(0);\n magicCookie2 = buf.getUint8(1);\n\n if (magicCookie1 === nifti.Utils.GUNZIP_MAGIC_COOKIE1) {\n return true;\n }\n\n if (magicCookie2 === nifti.Utils.GUNZIP_MAGIC_COOKIE2) {\n return true;\n }\n }\n\n return false;\n};\n\n\n\n/**\n * Returns decompressed data.\n * @param {ArrayBuffer} data\n * @returns {ArrayBuffer}\n */\nnifti.decompress = function (data) {\n return pako.inflate(data).buffer;\n};\n\n\n\n/**\n * Reads and returns the header object.\n * @param {ArrayBuffer} data\n * @returns {nifti.NIFTI1|nifti.NIFTI2|null}\n */\nnifti.readHeader = function (data) {\n var header = null;\n\n if (nifti.isCompressed(data)) {\n data = nifti.decompress(data);\n }\n\n if (nifti.isNIFTI1(data)) {\n header = new nifti.NIFTI1();\n } else if (nifti.isNIFTI2(data)) {\n header = new nifti.NIFTI2();\n }\n\n if (header) {\n header.readHeader(data);\n } else {\n console.error(\"That file does not appear to be NIFTI!\");\n }\n\n return header;\n};\n\n\n\n/**\n * Returns true if this header contains an extension.\n * @param {nifti.NIFTI1|nifti.NIFTI2} header\n * @returns {boolean}\n */\nnifti.hasExtension = function (header) {\n return (header.extensionFlag[0] != 0);\n};\n\n\n\n/**\n * Returns the image data.\n * @param {nifti.NIFTI1|nifti.NIFTI2} header\n * @param {ArrayBuffer} data\n * @returns {ArrayBuffer}\n */\nnifti.readImage = function (header, data) {\n var imageOffset = header.vox_offset,\n timeDim = 1,\n statDim = 1;\n\n if (header.dims[4]) {\n timeDim = header.dims[4];\n }\n\n if (header.dims[5]) {\n statDim = header.dims[5];\n }\n\n var imageSize = header.dims[1] * header.dims[2] * header.dims[3] * timeDim * statDim * (header.numBitsPerVoxel / 8);\n return data.slice(imageOffset, imageOffset + imageSize);\n};\n\n\n\n/**\n * Returns the extension data (including extension header).\n * @param {nifti.NIFTI1|nifti.NIFTI2} header\n * @param {ArrayBuffer} data\n * @returns {ArrayBuffer}\n */\nnifti.readExtension = function (header, data) {\n var loc = header.getExtensionLocation(),\n size = header.extensionSize;\n\n return data.slice(loc, loc + size);\n};\n\n\n\n/**\n * Returns the extension data.\n * @param {nifti.NIFTI1|nifti.NIFTI2} header\n * @param {ArrayBuffer} data\n * @returns {ArrayBuffer}\n */\nnifti.readExtensionData = function (header, data) {\n var loc = header.getExtensionLocation(),\n size = header.extensionSize;\n\n return data.slice(loc + 8, loc + size - 8);\n};\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = nifti;\n}\n","\n/*jslint browser: true, node: true */\n/*global */\n\n\"use strict\";\n\n/*** Imports ***/\n\nvar nifti = nifti || {};\nnifti.Utils = nifti.Utils || ((typeof require !== 'undefined') ? require('./utilities.js') : null);\n\n\n\n/*** Constructor ***/\n\n/**\n * The NIFTI1 constructor.\n * @constructor\n * @property {boolean} littleEndian\n * @property {number} dim_info\n * @property {number[]} dims - image dimensions\n * @property {number} intent_p1\n * @property {number} intent_p2\n * @property {number} intent_p3\n * @property {number} intent_code\n * @property {number} datatypeCode\n * @property {number} numBitsPerVoxel\n * @property {number} slice_start\n * @property {number} slice_end\n * @property {number} slice_code\n * @property {number[]} pixDims - voxel dimensions\n * @property {number} vox_offset\n * @property {number} scl_slope\n * @property {number} scl_inter\n * @property {number} xyzt_units\n * @property {number} cal_max\n * @property {number} cal_min\n * @property {number} slice_duration\n * @property {number} toffset\n * @property {string} description\n * @property {string} aux_file\n * @property {string} intent_name\n * @property {number} qform_code\n * @property {number} sform_code\n * @property {number} quatern_b\n * @property {number} quatern_c\n * @property {number} quatern_d\n * @property {number} quatern_x\n * @property {number} quatern_y\n * @property {number} quatern_z\n * @property {Array.>} affine\n * @property {string} magic\n * @property {boolean} isHDR - if hdr/img format\n * @property {number[]} extensionFlag\n * @property {number} extensionSize\n * @property {number} extensionCode\n * @type {Function}\n */\nnifti.NIFTI1 = nifti.NIFTI1 || function () {\n this.littleEndian = false;\n this.dim_info = 0;\n this.dims = [];\n this.intent_p1 = 0;\n this.intent_p2 = 0;\n this.intent_p3 = 0;\n this.intent_code = 0;\n this.datatypeCode = 0;\n this.numBitsPerVoxel = 0;\n this.slice_start = 0;\n this.slice_end = 0;\n this.slice_code = 0;\n this.pixDims = [];\n this.vox_offset = 0;\n this.scl_slope = 1;\n this.scl_inter = 0;\n this.xyzt_units = 0;\n this.cal_max = 0;\n this.cal_min = 0;\n this.slice_duration = 0;\n this.toffset = 0;\n this.description = \"\";\n this.aux_file = \"\";\n this.intent_name = \"\";\n this.qform_code = 0;\n this.sform_code = 0;\n this.quatern_b = 0;\n this.quatern_c = 0;\n this.quatern_d = 0;\n this.qoffset_x = 0;\n this.qoffset_y = 0;\n this.qoffset_z = 0;\n this.affine = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]];\n this.magic = 0;\n this.isHDR = false;\n this.extensionFlag = [0, 0, 0, 0];\n this.extensionSize = 0;\n this.extensionCode = 0;\n};\n\n\n\n/*** Static Pseudo-constants ***/\n\n// datatype codes\nnifti.NIFTI1.TYPE_NONE = 0;\nnifti.NIFTI1.TYPE_BINARY = 1;\nnifti.NIFTI1.TYPE_UINT8 = 2;\nnifti.NIFTI1.TYPE_INT16 = 4;\nnifti.NIFTI1.TYPE_INT32 = 8;\nnifti.NIFTI1.TYPE_FLOAT32 = 16;\nnifti.NIFTI1.TYPE_COMPLEX64 = 32;\nnifti.NIFTI1.TYPE_FLOAT64 = 64;\nnifti.NIFTI1.TYPE_RGB24 = 128;\nnifti.NIFTI1.TYPE_INT8 = 256;\nnifti.NIFTI1.TYPE_UINT16 = 512;\nnifti.NIFTI1.TYPE_UINT32 = 768;\nnifti.NIFTI1.TYPE_INT64 = 1024;\nnifti.NIFTI1.TYPE_UINT64 = 1280;\nnifti.NIFTI1.TYPE_FLOAT128 = 1536;\nnifti.NIFTI1.TYPE_COMPLEX128 = 1792;\nnifti.NIFTI1.TYPE_COMPLEX256 = 2048;\n\n// transform codes\nnifti.NIFTI1.XFORM_UNKNOWN = 0;\nnifti.NIFTI1.XFORM_SCANNER_ANAT = 1;\nnifti.NIFTI1.XFORM_ALIGNED_ANAT = 2;\nnifti.NIFTI1.XFORM_TALAIRACH = 3;\nnifti.NIFTI1.XFORM_MNI_152 = 4;\n\n// unit codes\nnifti.NIFTI1.SPATIAL_UNITS_MASK = 0x07;\nnifti.NIFTI1.TEMPORAL_UNITS_MASK = 0x38;\nnifti.NIFTI1.UNITS_UNKNOWN = 0;\nnifti.NIFTI1.UNITS_METER = 1;\nnifti.NIFTI1.UNITS_MM = 2;\nnifti.NIFTI1.UNITS_MICRON = 3;\nnifti.NIFTI1.UNITS_SEC = 8;\nnifti.NIFTI1.UNITS_MSEC = 16;\nnifti.NIFTI1.UNITS_USEC = 24;\nnifti.NIFTI1.UNITS_HZ = 32;\nnifti.NIFTI1.UNITS_PPM = 40;\nnifti.NIFTI1.UNITS_RADS = 48;\n\n// nifti1 codes\nnifti.NIFTI1.MAGIC_COOKIE = 348;\nnifti.NIFTI1.MAGIC_NUMBER_LOCATION = 344;\nnifti.NIFTI1.MAGIC_NUMBER = [0x6E, 0x2B, 0x31]; // n+1 (.nii)\nnifti.NIFTI1.MAGIC_NUMBER2 = [0x6E, 0x69, 0x31]; // ni1 (.hdr/.img)\nnifti.NIFTI1.EXTENSION_HEADER_SIZE = 8;\n\n\n/*** Prototype Methods ***/\n\n/**\n * Reads the header data.\n * @param {ArrayBuffer} data\n */\nnifti.NIFTI1.prototype.readHeader = function (data) {\n var rawData = new DataView(data),\n magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian),\n ctr,\n ctrOut,\n ctrIn,\n index;\n\n if (magicCookieVal !== nifti.NIFTI1.MAGIC_COOKIE) { // try as little endian\n this.littleEndian = true;\n magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian);\n }\n\n if (magicCookieVal !== nifti.NIFTI1.MAGIC_COOKIE) {\n throw new Error(\"This does not appear to be a NIFTI file!\");\n }\n\n this.dim_info = nifti.Utils.getByteAt(rawData, 39);\n\n for (ctr = 0; ctr < 8; ctr += 1) {\n index = 40 + (ctr * 2);\n this.dims[ctr] = nifti.Utils.getShortAt(rawData, index, this.littleEndian);\n }\n\n this.intent_p1 = nifti.Utils.getFloatAt(rawData, 56, this.littleEndian);\n this.intent_p2 = nifti.Utils.getFloatAt(rawData, 60, this.littleEndian);\n this.intent_p3 = nifti.Utils.getFloatAt(rawData, 64, this.littleEndian);\n this.intent_code = nifti.Utils.getShortAt(rawData, 68, this.littleEndian);\n\n this.datatypeCode = nifti.Utils.getShortAt(rawData, 70, this.littleEndian);\n this.numBitsPerVoxel = nifti.Utils.getShortAt(rawData, 72, this.littleEndian);\n\n this.slice_start = nifti.Utils.getShortAt(rawData, 74, this.littleEndian);\n\n for (ctr = 0; ctr < 8; ctr += 1) {\n index = 76 + (ctr * 4);\n this.pixDims[ctr] = nifti.Utils.getFloatAt(rawData, index, this.littleEndian);\n }\n\n this.vox_offset = nifti.Utils.getFloatAt(rawData, 108, this.littleEndian);\n\n this.scl_slope = nifti.Utils.getFloatAt(rawData, 112, this.littleEndian);\n this.scl_inter = nifti.Utils.getFloatAt(rawData, 116, this.littleEndian);\n\n this.slice_end = nifti.Utils.getShortAt(rawData, 120, this.littleEndian);\n this.slice_code = nifti.Utils.getByteAt(rawData, 122);\n\n this.xyzt_units = nifti.Utils.getByteAt(rawData, 123);\n\n this.cal_max = nifti.Utils.getFloatAt(rawData, 124, this.littleEndian);\n this.cal_min = nifti.Utils.getFloatAt(rawData, 128, this.littleEndian);\n\n this.slice_duration = nifti.Utils.getFloatAt(rawData, 132, this.littleEndian);\n this.toffset = nifti.Utils.getFloatAt(rawData, 136, this.littleEndian);\n\n this.description = nifti.Utils.getStringAt(rawData, 148, 228);\n this.aux_file = nifti.Utils.getStringAt(rawData, 228, 252);\n\n this.qform_code = nifti.Utils.getShortAt(rawData, 252, this.littleEndian);\n this.sform_code = nifti.Utils.getShortAt(rawData, 254, this.littleEndian);\n\n this.quatern_b = nifti.Utils.getFloatAt(rawData, 256, this.littleEndian);\n this.quatern_c = nifti.Utils.getFloatAt(rawData, 260, this.littleEndian);\n this.quatern_d = nifti.Utils.getFloatAt(rawData, 264, this.littleEndian);\n this.qoffset_x = nifti.Utils.getFloatAt(rawData, 268, this.littleEndian);\n this.qoffset_y = nifti.Utils.getFloatAt(rawData, 272, this.littleEndian);\n this.qoffset_z = nifti.Utils.getFloatAt(rawData, 276, this.littleEndian);\n\n for (ctrOut = 0; ctrOut < 3; ctrOut += 1) {\n for (ctrIn = 0; ctrIn < 4; ctrIn += 1) {\n index = 280 + (((ctrOut * 4) + ctrIn) * 4);\n this.affine[ctrOut][ctrIn] = nifti.Utils.getFloatAt(rawData, index, this.littleEndian);\n }\n }\n\n this.affine[3][0] = 0;\n this.affine[3][1] = 0;\n this.affine[3][2] = 0;\n this.affine[3][3] = 1;\n\n this.intent_name = nifti.Utils.getStringAt(rawData, 328, 344);\n this.magic = nifti.Utils.getStringAt(rawData, 344, 348);\n\n this.isHDR = (this.magic === nifti.NIFTI1.MAGIC_NUMBER2);\n\n if (rawData.byteLength > nifti.NIFTI1.MAGIC_COOKIE) {\n this.extensionFlag[0] = nifti.Utils.getByteAt(rawData, 348);\n this.extensionFlag[1] = nifti.Utils.getByteAt(rawData, 348 + 1);\n this.extensionFlag[2] = nifti.Utils.getByteAt(rawData, 348 + 2);\n this.extensionFlag[3] = nifti.Utils.getByteAt(rawData, 348 + 3);\n\n if (this.extensionFlag[0]) {\n this.extensionSize = this.getExtensionSize(rawData);\n this.extensionCode = this.getExtensionCode(rawData);\n }\n }\n};\n\n\n/**\n * Returns a formatted string of header fields.\n * @returns {string}\n */\nnifti.NIFTI1.prototype.toFormattedString = function () {\n var fmt = nifti.Utils.formatNumber,\n string = \"\";\n\n string += (\"Dim Info = \" + this.dim_info + \"\\n\");\n\n string += (\"Image Dimensions (1-8): \" +\n this.dims[0] + \", \" +\n this.dims[1] + \", \" +\n this.dims[2] + \", \" +\n this.dims[3] + \", \" +\n this.dims[4] + \", \" +\n this.dims[5] + \", \" +\n this.dims[6] + \", \" +\n this.dims[7] + \"\\n\");\n\n string += (\"Intent Parameters (1-3): \" +\n this.intent_p1 + \", \" +\n this.intent_p2 + \", \" +\n this.intent_p3) + \"\\n\";\n\n string += (\"Intent Code = \" + this.intent_code + \"\\n\");\n string += (\"Datatype = \" + this.datatypeCode + \" (\" + this.getDatatypeCodeString(this.datatypeCode) + \")\\n\");\n string += (\"Bits Per Voxel = \" + this.numBitsPerVoxel + \"\\n\");\n string += (\"Slice Start = \" + this.slice_start + \"\\n\");\n string += (\"Voxel Dimensions (1-8): \" +\n fmt(this.pixDims[0]) + \", \" +\n fmt(this.pixDims[1]) + \", \" +\n fmt(this.pixDims[2]) + \", \" +\n fmt(this.pixDims[3]) + \", \" +\n fmt(this.pixDims[4]) + \", \" +\n fmt(this.pixDims[5]) + \", \" +\n fmt(this.pixDims[6]) + \", \" +\n fmt(this.pixDims[7]) + \"\\n\");\n\n string += (\"Image Offset = \" + this.vox_offset + \"\\n\");\n string += (\"Data Scale: Slope = \" + fmt(this.scl_slope) + \" Intercept = \" + fmt(this.scl_inter) + \"\\n\");\n string += (\"Slice End = \" + this.slice_end + \"\\n\");\n string += (\"Slice Code = \" + this.slice_code + \"\\n\");\n string += (\"Units Code = \" + this.xyzt_units + \" (\" + this.getUnitsCodeString(nifti.NIFTI1.SPATIAL_UNITS_MASK & this.xyzt_units) + \", \" + this.getUnitsCodeString(nifti.NIFTI1.TEMPORAL_UNITS_MASK & this.xyzt_units) + \")\\n\");\n string += (\"Display Range: Max = \" + fmt(this.cal_max) + \" Min = \" + fmt(this.cal_min) + \"\\n\");\n string += (\"Slice Duration = \" + this.slice_duration + \"\\n\");\n string += (\"Time Axis Shift = \" + this.toffset + \"\\n\");\n string += (\"Description: \\\"\" + this.description + \"\\\"\\n\");\n string += (\"Auxiliary File: \\\"\" + this.aux_file + \"\\\"\\n\");\n string += (\"Q-Form Code = \" + this.qform_code + \" (\" + this.getTransformCodeString(this.qform_code) + \")\\n\");\n string += (\"S-Form Code = \" + this.sform_code + \" (\" + this.getTransformCodeString(this.sform_code) + \")\\n\");\n string += (\"Quaternion Parameters: \" +\n \"b = \" + fmt(this.quatern_b) + \" \" +\n \"c = \" + fmt(this.quatern_c) + \" \" +\n \"d = \" + fmt(this.quatern_d) + \"\\n\");\n\n string += (\"Quaternion Offsets: \" +\n \"x = \" + this.qoffset_x + \" \" +\n \"y = \" + this.qoffset_y + \" \" +\n \"z = \" + this.qoffset_z + \"\\n\");\n\n string += (\"S-Form Parameters X: \" +\n fmt(this.affine[0][0]) + \", \" +\n fmt(this.affine[0][1]) + \", \" +\n fmt(this.affine[0][2]) + \", \" +\n fmt(this.affine[0][3]) + \"\\n\");\n\n string += (\"S-Form Parameters Y: \" +\n fmt(this.affine[1][0]) + \", \" +\n fmt(this.affine[1][1]) + \", \" +\n fmt(this.affine[1][2]) + \", \" +\n fmt(this.affine[1][3]) + \"\\n\");\n\n string += (\"S-Form Parameters Z: \" +\n fmt(this.affine[2][0]) + \", \" +\n fmt(this.affine[2][1]) + \", \" +\n fmt(this.affine[2][2]) + \", \" +\n fmt(this.affine[2][3]) + \"\\n\");\n\n string += (\"Intent Name: \\\"\" + this.intent_name + \"\\\"\\n\");\n\n if (this.extensionFlag[0]) {\n string += (\"Extension: Size = \" + this.extensionSize + \" Code = \" + this.extensionCode + \"\\n\");\n\n }\n\n return string;\n};\n\n\n/**\n * Returns a human-readable string of datatype.\n * @param {number} code\n * @returns {string}\n */\nnifti.NIFTI1.prototype.getDatatypeCodeString = function (code) {\n if (code === nifti.NIFTI1.TYPE_UINT8) {\n return \"1-Byte Unsigned Integer\";\n } else if (code === nifti.NIFTI1.TYPE_INT16) {\n return \"2-Byte Signed Integer\";\n } else if (code === nifti.NIFTI1.TYPE_INT32) {\n return \"4-Byte Signed Integer\";\n } else if (code === nifti.NIFTI1.TYPE_FLOAT32) {\n return \"4-Byte Float\";\n } else if (code === nifti.NIFTI1.TYPE_FLOAT64) {\n return \"8-Byte Float\";\n } else if (code === nifti.NIFTI1.TYPE_RGB24) {\n return \"RGB\";\n } else if (code === nifti.NIFTI1.TYPE_INT8) {\n return \"1-Byte Signed Integer\";\n } else if (code === nifti.NIFTI1.TYPE_UINT16) {\n return \"2-Byte Unsigned Integer\";\n } else if (code === nifti.NIFTI1.TYPE_UINT32) {\n return \"4-Byte Unsigned Integer\";\n } else if (code === nifti.NIFTI1.TYPE_INT64) {\n return \"8-Byte Signed Integer\";\n } else if (code === nifti.NIFTI1.TYPE_UINT64) {\n return \"8-Byte Unsigned Integer\";\n } else {\n return \"Unknown\";\n }\n};\n\n\n/**\n * Returns a human-readable string of transform type.\n * @param {number} code\n * @returns {string}\n */\nnifti.NIFTI1.prototype.getTransformCodeString = function (code) {\n if (code === nifti.NIFTI1.XFORM_SCANNER_ANAT) {\n return \"Scanner\";\n } else if (code === nifti.NIFTI1.XFORM_ALIGNED_ANAT) {\n return \"Aligned\";\n } else if (code === nifti.NIFTI1.XFORM_TALAIRACH) {\n return \"Talairach\";\n } else if (code === nifti.NIFTI1.XFORM_MNI_152) {\n return \"MNI\";\n } else {\n return \"Unknown\";\n }\n};\n\n\n/**\n * Returns a human-readable string of spatial and temporal units.\n * @param {number} code\n * @returns {string}\n */\nnifti.NIFTI1.prototype.getUnitsCodeString = function (code) {\n if (code === nifti.NIFTI1.UNITS_METER) {\n return \"Meters\";\n } else if (code === nifti.NIFTI1.UNITS_MM) {\n return \"Millimeters\";\n } else if (code === nifti.NIFTI1.UNITS_MICRON) {\n return \"Microns\";\n } else if (code === nifti.NIFTI1.UNITS_SEC) {\n return \"Seconds\";\n } else if (code === nifti.NIFTI1.UNITS_MSEC) {\n return \"Milliseconds\";\n } else if (code === nifti.NIFTI1.UNITS_USEC) {\n return \"Microseconds\";\n } else if (code === nifti.NIFTI1.UNITS_HZ) {\n return \"Hz\";\n } else if (code === nifti.NIFTI1.UNITS_PPM) {\n return \"PPM\";\n } else if (code === nifti.NIFTI1.UNITS_RADS) {\n return \"Rads\";\n } else {\n return \"Unknown\";\n }\n};\n\n\n/**\n * Returns the qform matrix.\n * @returns {Array.>}\n */\nnifti.NIFTI1.prototype.getQformMat = function () {\n return this.convertNiftiQFormToNiftiSForm(this.quatern_b, this.quatern_c, this.quatern_d, this.qoffset_x,\n this.qoffset_y, this.qoffset_z, this.pixDims[1], this.pixDims[2], this.pixDims[3], this.pixDims[0]);\n};\n\n\n\n/**\n * Converts qform to an affine. (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c)\n * @param {number} qb\n * @param {number} qc\n * @param {number} qd\n * @param {number} qx\n * @param {number} qy\n * @param {number} qz\n * @param {number} dx\n * @param {number} dy\n * @param {number} dz\n * @param {number} qfac\n * @returns {Array.>}\n */\nnifti.NIFTI1.prototype.convertNiftiQFormToNiftiSForm = function (qb, qc, qd, qx, qy, qz, dx, dy, dz,\n qfac) {\n var R = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]],\n a,\n b = qb,\n c = qc,\n d = qd,\n xd,\n yd,\n zd;\n\n // last row is always [ 0 0 0 1 ]\n R[3][0] = R[3][1] = R[3][2] = 0.0;\n R[3][3] = 1.0;\n\n // compute a parameter from b,c,d\n a = 1.0 - (b * b + c * c + d * d);\n if (a < 0.0000001) { /* special case */\n\n a = 1.0 / Math.sqrt(b * b + c * c + d * d);\n b *= a;\n c *= a;\n d *= a; /* normalize (b,c,d) vector */\n a = 0.0; /* a = 0 ==> 180 degree rotation */\n } else {\n\n a = Math.sqrt(a); /* angle = 2*arccos(a) */\n }\n\n // load rotation matrix, including scaling factors for voxel sizes\n xd = (dx > 0.0) ? dx : 1.0; /* make sure are positive */\n yd = (dy > 0.0) ? dy : 1.0;\n zd = (dz > 0.0) ? dz : 1.0;\n\n if (qfac < 0.0) {\n zd = -zd; /* left handedness? */\n }\n\n R[0][0] = (a * a + b * b - c * c - d * d) * xd;\n R[0][1] = 2.0 * (b * c - a * d) * yd;\n R[0][2] = 2.0 * (b * d + a * c) * zd;\n R[1][0] = 2.0 * (b * c + a * d) * xd;\n R[1][1] = (a * a + c * c - b * b - d * d) * yd;\n R[1][2] = 2.0 * (c * d - a * b) * zd;\n R[2][0] = 2.0 * (b * d - a * c) * xd;\n R[2][1] = 2.0 * (c * d + a * b) * yd;\n R[2][2] = (a * a + d * d - c * c - b * b) * zd;\n\n // load offsets\n R[0][3] = qx;\n R[1][3] = qy;\n R[2][3] = qz;\n\n return R;\n};\n\n\n\n/**\n * Converts sform to an orientation string (e.g., XYZ+--). (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c)\n * @param {Array.>} R\n * @returns {string}\n */\nnifti.NIFTI1.prototype.convertNiftiSFormToNEMA = function (R) {\n var xi, xj, xk, yi, yj, yk, zi, zj, zk, val, detQ, detP, i, j, k, p, q, r, ibest, jbest, kbest, pbest, qbest, rbest,\n M, vbest, Q, P, iChar, jChar, kChar, iSense, jSense, kSense;\n k = 0;\n\n Q = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];\n P = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];\n\n //if( icod == NULL || jcod == NULL || kcod == NULL ) return ; /* bad */\n\n //*icod = *jcod = *kcod = 0 ; /* this.errorMessage returns, if sh*t happens */\n\n /* load column vectors for each (i,j,k) direction from matrix */\n\n /*-- i axis --*/ /*-- j axis --*/ /*-- k axis --*/\n\n xi = R[0][0];\n xj = R[0][1];\n xk = R[0][2];\n\n yi = R[1][0];\n yj = R[1][1];\n yk = R[1][2];\n\n zi = R[2][0];\n zj = R[2][1];\n zk = R[2][2];\n\n /* normalize column vectors to get unit vectors along each ijk-axis */\n\n /* normalize i axis */\n val = Math.sqrt(xi * xi + yi * yi + zi * zi);\n if (val === 0.0) { /* stupid input */\n return null;\n }\n\n xi /= val;\n yi /= val;\n zi /= val;\n\n /* normalize j axis */\n val = Math.sqrt(xj * xj + yj * yj + zj * zj);\n if (val === 0.0) { /* stupid input */\n return null;\n }\n\n xj /= val;\n yj /= val;\n zj /= val;\n\n /* orthogonalize j axis to i axis, if needed */\n val = xi * xj + yi * yj + zi * zj; /* dot product between i and j */\n if (Math.abs(val) > 1.E-4) {\n xj -= val * xi;\n yj -= val * yi;\n zj -= val * zi;\n val = Math.sqrt(xj * xj + yj * yj + zj * zj); /* must renormalize */\n if (val === 0.0) { /* j was parallel to i? */\n return null;\n }\n xj /= val;\n yj /= val;\n zj /= val;\n }\n\n /* normalize k axis; if it is zero, make it the cross product i x j */\n val = Math.sqrt(xk * xk + yk * yk + zk * zk);\n if (val === 0.0) {\n xk = yi * zj - zi * yj;\n yk = zi * xj - zj * xi;\n zk = xi * yj - yi * xj;\n } else {\n xk /= val;\n yk /= val;\n zk /= val;\n }\n\n /* orthogonalize k to i */\n val = xi * xk + yi * yk + zi * zk; /* dot product between i and k */\n if (Math.abs(val) > 1.E-4) {\n xk -= val * xi;\n yk -= val * yi;\n zk -= val * zi;\n val = Math.sqrt(xk * xk + yk * yk + zk * zk);\n if (val === 0.0) { /* bad */\n return null;\n }\n xk /= val;\n yk /= val;\n zk /= val;\n }\n\n /* orthogonalize k to j */\n val = xj * xk + yj * yk + zj * zk; /* dot product between j and k */\n if (Math.abs(val) > 1.e-4) {\n xk -= val * xj;\n yk -= val * yj;\n zk -= val * zj;\n val = Math.sqrt(xk * xk + yk * yk + zk * zk);\n if (val === 0.0) { /* bad */\n return null;\n }\n xk /= val;\n yk /= val;\n zk /= val;\n }\n\n Q[0][0] = xi;\n Q[0][1] = xj;\n Q[0][2] = xk;\n Q[1][0] = yi;\n Q[1][1] = yj;\n Q[1][2] = yk;\n Q[2][0] = zi;\n Q[2][1] = zj;\n Q[2][2] = zk;\n\n /* at this point, Q is the rotation matrix from the (i,j,k) to (x,y,z) axes */\n\n detQ = this.nifti_mat33_determ(Q);\n if (detQ === 0.0) { /* shouldn't happen unless user is a DUFIS */\n return null;\n }\n\n /* Build and test all possible +1/-1 coordinate permutation matrices P;\n then find the P such that the rotation matrix M=PQ is closest to the\n identity, in the sense of M having the smallest total rotation angle. */\n\n /* Despite the formidable looking 6 nested loops, there are\n only 3*3*3*2*2*2 = 216 passes, which will run very quickly. */\n\n vbest = -666.0;\n ibest = pbest = qbest = rbest = 1;\n jbest = 2;\n kbest = 3;\n\n for (i = 1; i <= 3; i += 1) { /* i = column number to use for row #1 */\n for (j = 1; j <= 3; j += 1) { /* j = column number to use for row #2 */\n if (i !== j) {\n for (k = 1; k <= 3; k += 1) { /* k = column number to use for row #3 */\n if (!(i === k || j === k)) {\n P[0][0] = P[0][1] = P[0][2] = P[1][0] = P[1][1] = P[1][2] = P[2][0] = P[2][1] = P[2][2] = 0.0;\n for (p = -1; p <= 1; p += 2) { /* p,q,r are -1 or +1 */\n for (q = -1; q <= 1; q += 2) { /* and go into rows #1,2,3 */\n for (r = -1; r <= 1; r += 2) {\n P[0][i - 1] = p;\n P[1][j - 1] = q;\n P[2][k - 1] = r;\n detP = this.nifti_mat33_determ(P); /* sign of permutation */\n if ((detP * detQ) > 0.0) {\n M = this.nifti_mat33_mul(P, Q);\n\n /* angle of M rotation = 2.0*acos(0.5*sqrt(1.0+trace(M))) */\n /* we want largest trace(M) == smallest angle == M nearest to I */\n\n val = M[0][0] + M[1][1] + M[2][2]; /* trace */\n if (val > vbest) {\n vbest = val;\n ibest = i;\n jbest = j;\n kbest = k;\n pbest = p;\n qbest = q;\n rbest = r;\n }\n } /* doesn't match sign of Q */\n }\n }\n }\n }\n }\n }\n }\n }\n\n /* At this point ibest is 1 or 2 or 3; pbest is -1 or +1; etc.\n\n The matrix P that corresponds is the best permutation approximation\n to Q-inverse; that is, P (approximately) takes (x,y,z) coordinates\n to the (i,j,k) axes.\n\n For example, the first row of P (which contains pbest in column ibest)\n determines the way the i axis points relative to the anatomical\n (x,y,z) axes. If ibest is 2, then the i axis is along the y axis,\n which is direction P2A (if pbest > 0) or A2P (if pbest < 0).\n\n So, using ibest and pbest, we can assign the output code for\n the i axis. Mutatis mutandis for the j and k axes, of course. */\n\n iChar = jChar = kChar = iSense = jSense = kSense = 0;\n\n switch (ibest * pbest) {\n case 1: /*i = NIFTI_L2R*/\n iChar = 'X';\n iSense = '+';\n break;\n case -1: /*i = NIFTI_R2L*/\n iChar = 'X';\n iSense = '-';\n break;\n case 2: /*i = NIFTI_P2A*/\n iChar = 'Y';\n iSense = '+';\n break;\n case -2: /*i = NIFTI_A2P*/\n iChar = 'Y';\n iSense = '-';\n break;\n case 3: /*i = NIFTI_I2S*/\n iChar = 'Z';\n iSense = '+';\n break;\n case -3: /*i = NIFTI_S2I*/\n iChar = 'Z';\n iSense = '-';\n break;\n }\n\n switch (jbest * qbest) {\n case 1: /*j = NIFTI_L2R*/\n jChar = 'X';\n jSense = '+';\n break;\n case -1: /*j = NIFTI_R2L*/\n jChar = 'X';\n jSense = '-';\n break;\n case 2: /*j = NIFTI_P2A*/\n jChar = 'Y';\n jSense = '+';\n break;\n case -2: /*j = NIFTI_A2P*/\n jChar = 'Y';\n jSense = '-';\n break;\n case 3: /*j = NIFTI_I2S*/\n jChar = 'Z';\n jSense = '+';\n break;\n case -3: /*j = NIFTI_S2I*/\n jChar = 'Z';\n jSense = '-';\n break;\n }\n\n switch (kbest * rbest) {\n case 1: /*k = NIFTI_L2R*/\n kChar = 'X';\n kSense = '+';\n break;\n case -1: /*k = NIFTI_R2L*/\n kChar = 'X';\n kSense = '-';\n break;\n case 2: /*k = NIFTI_P2A*/\n kChar = 'Y';\n kSense = '+';\n break;\n case -2: /*k = NIFTI_A2P*/\n kChar = 'Y';\n kSense = '-';\n break;\n case 3: /*k = NIFTI_I2S*/\n kChar = 'Z';\n kSense = '+';\n break;\n case -3: /*k = NIFTI_S2I*/\n kChar = 'Z';\n kSense = '-';\n break;\n }\n\n return (iChar + jChar + kChar + iSense + jSense + kSense);\n};\n\n\n\nnifti.NIFTI1.prototype.nifti_mat33_mul = function (A, B) {\n var C = [[0, 0, 0], [0, 0, 0], [0, 0, 0]],\n i,\n j;\n\n for (i = 0; i < 3; i += 1) {\n for (j = 0; j < 3; j += 1) {\n C[i][j] = A[i][0] * B[0][j] + A[i][1] * B[1][j] + A[i][2] * B[2][j];\n }\n }\n\n return C;\n};\n\n\n\nnifti.NIFTI1.prototype.nifti_mat33_determ = function (R) {\n var r11, r12, r13, r21, r22, r23, r31, r32, r33;\n /* INPUT MATRIX: */\n r11 = R[0][0];\n r12 = R[0][1];\n r13 = R[0][2];\n r21 = R[1][0];\n r22 = R[1][1];\n r23 = R[1][2];\n r31 = R[2][0];\n r32 = R[2][1];\n r33 = R[2][2];\n\n return (r11 * r22 * r33 - r11 * r32 * r23 - r21 * r12 * r33 + r21 * r32 * r13 + r31 * r12 * r23 - r31 * r22 * r13);\n};\n\n\n/**\n * Returns the byte index of the extension.\n * @returns {number}\n */\nnifti.NIFTI1.prototype.getExtensionLocation = function() {\n return nifti.NIFTI1.MAGIC_COOKIE + 4;\n};\n\n\n/**\n * Returns the extension size.\n * @param {DataView} data\n * @returns {number}\n */\nnifti.NIFTI1.prototype.getExtensionSize = function(data) {\n return nifti.Utils.getIntAt(data, this.getExtensionLocation(), this.littleEndian);\n};\n\n\n\n/**\n * Returns the extension code.\n * @param {DataView} data\n * @returns {number}\n */\nnifti.NIFTI1.prototype.getExtensionCode = function(data) {\n return nifti.Utils.getIntAt(data, this.getExtensionLocation() + 4, this.littleEndian);\n};\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = nifti.NIFTI1;\n}\n","\n/*jslint browser: true, node: true */\n/*global */\n\n\"use strict\";\n\n/*** Imports ***/\n\nvar nifti = nifti || {};\nnifti.Utils = nifti.Utils || ((typeof require !== 'undefined') ? require('./utilities.js') : null);\nnifti.NIFTI1 = nifti.NIFTI1 || ((typeof require !== 'undefined') ? require('./nifti1.js') : null);\n\n\n/*** Constructor ***/\n\n/**\n * The NIFTI2 constructor.\n * @constructor\n * @property {boolean} littleEndian\n * @property {number} dim_info\n * @property {number[]} dims - image dimensions\n * @property {number} intent_p1\n * @property {number} intent_p2\n * @property {number} intent_p3\n * @property {number} intent_code\n * @property {number} datatypeCode\n * @property {number} numBitsPerVoxel\n * @property {number} slice_start\n * @property {number} slice_end\n * @property {number} slice_code\n * @property {number[]} pixDims - voxel dimensions\n * @property {number} vox_offset\n * @property {number} scl_slope\n * @property {number} scl_inter\n * @property {number} xyzt_units\n * @property {number} cal_max\n * @property {number} cal_min\n * @property {number} slice_duration\n * @property {number} toffset\n * @property {string} description\n * @property {string} aux_file\n * @property {string} intent_name\n * @property {number} qform_code\n * @property {number} sform_code\n * @property {number} quatern_b\n * @property {number} quatern_c\n * @property {number} quatern_d\n * @property {number} quatern_x\n * @property {number} quatern_y\n * @property {number} quatern_z\n * @property {Array.>} affine\n * @property {string} magic\n * @property {number[]} extensionFlag\n * @type {Function}\n */\nnifti.NIFTI2 = nifti.NIFTI2 || function () {\n this.littleEndian = false;\n this.dim_info = 0;\n this.dims = [];\n this.intent_p1 = 0;\n this.intent_p2 = 0;\n this.intent_p3 = 0;\n this.intent_code = 0;\n this.datatypeCode = 0;\n this.numBitsPerVoxel = 0;\n this.slice_start = 0;\n this.slice_end = 0;\n this.slice_code = 0;\n this.pixDims = [];\n this.vox_offset = 0;\n this.scl_slope = 1;\n this.scl_inter = 0;\n this.xyzt_units = 0;\n this.cal_max = 0;\n this.cal_min = 0;\n this.slice_duration = 0;\n this.toffset = 0;\n this.description = \"\";\n this.aux_file = \"\";\n this.intent_name = \"\";\n this.qform_code = 0;\n this.sform_code = 0;\n this.quatern_b = 0;\n this.quatern_c = 0;\n this.quatern_d = 0;\n this.qoffset_x = 0;\n this.qoffset_y = 0;\n this.qoffset_z = 0;\n this.affine = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]];\n this.magic = 0;\n this.extensionFlag = [0, 0, 0, 0];\n};\n\n\n\n/*** Static Pseudo-constants ***/\n\nnifti.NIFTI2.MAGIC_COOKIE = 540;\nnifti.NIFTI2.MAGIC_NUMBER_LOCATION = 4;\nnifti.NIFTI2.MAGIC_NUMBER = [0x6E, 0x2B, 0x32, 0, 0x0D, 0x0A, 0x1A, 0x0A]; // n+2\\0\n\n\n\n/*** Prototype Methods ***/\n\n/**\n * Reads the header data.\n * @param {ArrayBuffer} data\n */\nnifti.NIFTI2.prototype.readHeader = function (data) {\n var rawData = new DataView(data),\n magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian),\n ctr,\n ctrOut,\n ctrIn,\n index,\n array;\n\n if (magicCookieVal !== nifti.NIFTI2.MAGIC_COOKIE) { // try as little endian\n this.littleEndian = true;\n magicCookieVal = nifti.Utils.getIntAt(rawData, 0, this.littleEndian);\n }\n\n if (magicCookieVal !== nifti.NIFTI2.MAGIC_COOKIE) {\n throw new Error(\"This does not appear to be a NIFTI file!\");\n }\n\n this.datatypeCode = nifti.Utils.getShortAt(rawData, 12, this.littleEndian);\n this.numBitsPerVoxel = nifti.Utils.getShortAt(rawData, 14, this.littleEndian);\n\n for (ctr = 0; ctr < 8; ctr += 1) {\n index = 16 + (ctr * 8);\n this.dims[ctr] = nifti.Utils.getLongAt(rawData, index, this.littleEndian);\n }\n\n this.intent_p1 = nifti.Utils.getDoubleAt(rawData, 80, this.littleEndian);\n this.intent_p2 = nifti.Utils.getDoubleAt(rawData, 88, this.littleEndian);\n this.intent_p3 = nifti.Utils.getDoubleAt(rawData, 96, this.littleEndian);\n\n for (ctr = 0; ctr < 8; ctr += 1) {\n index = 104 + (ctr * 8);\n this.pixDims[ctr] = nifti.Utils.getDoubleAt(rawData, index, this.littleEndian);\n }\n\n this.vox_offset = nifti.Utils.getLongAt(rawData, 168, this.littleEndian);\n\n this.scl_slope = nifti.Utils.getDoubleAt(rawData, 176, this.littleEndian);\n this.scl_inter = nifti.Utils.getDoubleAt(rawData, 184, this.littleEndian);\n\n this.cal_max = nifti.Utils.getDoubleAt(rawData, 192, this.littleEndian);\n this.cal_min = nifti.Utils.getDoubleAt(rawData, 200, this.littleEndian);\n\n this.slice_duration = nifti.Utils.getDoubleAt(rawData, 208, this.littleEndian);\n\n this.toffset = nifti.Utils.getDoubleAt(rawData, 216, this.littleEndian);\n\n this.slice_start = nifti.Utils.getLongAt(rawData, 224, this.littleEndian);\n this.slice_end = nifti.Utils.getLongAt(rawData, 232, this.littleEndian);\n\n this.description = nifti.Utils.getStringAt(rawData, 240, 240 + 80);\n this.aux_file = nifti.Utils.getStringAt(rawData, 320, 320 + 24);\n\n this.qform_code = nifti.Utils.getIntAt(rawData, 344, this.littleEndian);\n this.sform_code = nifti.Utils.getIntAt(rawData, 348, this.littleEndian);\n\n this.quatern_b = nifti.Utils.getDoubleAt(rawData, 352, this.littleEndian);\n this.quatern_c = nifti.Utils.getDoubleAt(rawData, 360, this.littleEndian);\n this.quatern_d = nifti.Utils.getDoubleAt(rawData, 368, this.littleEndian);\n this.qoffset_x = nifti.Utils.getDoubleAt(rawData, 376, this.littleEndian);\n this.qoffset_y = nifti.Utils.getDoubleAt(rawData, 384, this.littleEndian);\n this.qoffset_z = nifti.Utils.getDoubleAt(rawData, 392, this.littleEndian);\n\n for (ctrOut = 0; ctrOut < 3; ctrOut += 1) {\n for (ctrIn = 0; ctrIn < 4; ctrIn += 1) {\n index = 400 + (((ctrOut * 4) + ctrIn) * 8);\n this.affine[ctrOut][ctrIn] = nifti.Utils.getDoubleAt(rawData, index, this.littleEndian);\n }\n }\n\n this.affine[3][0] = 0;\n this.affine[3][1] = 0;\n this.affine[3][2] = 0;\n this.affine[3][3] = 1;\n\n this.slice_code = nifti.Utils.getIntAt(rawData, 496, this.littleEndian);\n this.xyzt_units = nifti.Utils.getIntAt(rawData, 500, this.littleEndian);\n this.intent_code = nifti.Utils.getIntAt(rawData, 504, this.littleEndian);\n this.intent_name = nifti.Utils.getStringAt(rawData, 508, 508 + 16);\n\n this.dim_info = nifti.Utils.getByteAt(rawData, 524);\n\n if (rawData.byteLength > nifti.NIFTI2.MAGIC_COOKIE) {\n this.extensionFlag[0] = nifti.Utils.getByteAt(rawData, 540);\n this.extensionFlag[1] = nifti.Utils.getByteAt(rawData, 540 + 1);\n this.extensionFlag[2] = nifti.Utils.getByteAt(rawData, 540 + 2);\n this.extensionFlag[3] = nifti.Utils.getByteAt(rawData, 540 + 3);\n\n if (this.extensionFlag[0]) {\n this.extensionSize = this.getExtensionSize(rawData);\n this.extensionCode = this.getExtensionCode(rawData);\n }\n }\n};\n\n\n\n/**\n * Returns a formatted string of header fields.\n * @returns {string}\n */\nnifti.NIFTI2.prototype.toFormattedString = function () {\n var fmt = nifti.Utils.formatNumber,\n string = \"\";\n\n string += (\"Datatype = \" + + this.datatypeCode + \" (\" + this.getDatatypeCodeString(this.datatypeCode) + \")\\n\");\n string += (\"Bits Per Voxel = \" + \" = \" + this.numBitsPerVoxel + \"\\n\");\n string += (\"Image Dimensions\" + \" (1-8): \" +\n this.dims[0] + \", \" +\n this.dims[1] + \", \" +\n this.dims[2] + \", \" +\n this.dims[3] + \", \" +\n this.dims[4] + \", \" +\n this.dims[5] + \", \" +\n this.dims[6] + \", \" +\n this.dims[7] + \"\\n\");\n\n string += (\"Intent Parameters (1-3): \" +\n this.intent_p1 + \", \" +\n this.intent_p2 + \", \" +\n this.intent_p3) + \"\\n\";\n\n string += (\"Voxel Dimensions (1-8): \" +\n fmt(this.pixDims[0]) + \", \" +\n fmt(this.pixDims[1]) + \", \" +\n fmt(this.pixDims[2]) + \", \" +\n fmt(this.pixDims[3]) + \", \" +\n fmt(this.pixDims[4]) + \", \" +\n fmt(this.pixDims[5]) + \", \" +\n fmt(this.pixDims[6]) + \", \" +\n fmt(this.pixDims[7]) + \"\\n\");\n\n string += (\"Image Offset = \" + this.vox_offset + \"\\n\");\n string += (\"Data Scale: Slope = \" + fmt(this.scl_slope) + \" Intercept = \" + fmt(this.scl_inter) + \"\\n\");\n string += (\"Display Range: Max = \" + fmt(this.cal_max) + \" Min = \" + fmt(this.cal_min) + \"\\n\");\n string += (\"Slice Duration = \" + this.slice_duration + \"\\n\");\n string += (\"Time Axis Shift = \" + this.toffset + \"\\n\");\n string += (\"Slice Start = \" + this.slice_start + \"\\n\");\n string += (\"Slice End = \" + this.slice_end + \"\\n\");\n string += (\"Description: \\\"\" + this.description + \"\\\"\\n\");\n string += (\"Auxiliary File: \\\"\" + this.aux_file + \"\\\"\\n\");\n string += (\"Q-Form Code = \" + this.qform_code + \" (\" + this.getTransformCodeString(this.qform_code) + \")\\n\");\n string += (\"S-Form Code = \" + this.sform_code + \" (\" + this.getTransformCodeString(this.sform_code) + \")\\n\");\n string += (\"Quaternion Parameters: \" +\n \"b = \" + fmt(this.quatern_b) + \" \" +\n \"c = \" + fmt(this.quatern_c) + \" \" +\n \"d = \" + fmt(this.quatern_d) + \"\\n\");\n\n string += (\"Quaternion Offsets: \" +\n \"x = \" + this.qoffset_x + \" \" +\n \"y = \" + this.qoffset_y + \" \" +\n \"z = \" + this.qoffset_z + \"\\n\");\n\n string += (\"S-Form Parameters X: \" +\n fmt(this.affine[0][0]) + \", \" +\n fmt(this.affine[0][1]) + \", \" +\n fmt(this.affine[0][2]) + \", \" +\n fmt(this.affine[0][3]) + \"\\n\");\n\n string += (\"S-Form Parameters Y: \" +\n fmt(this.affine[1][0]) + \", \" +\n fmt(this.affine[1][1]) + \", \" +\n fmt(this.affine[1][2]) + \", \" +\n fmt(this.affine[1][3]) + \"\\n\");\n\n string += (\"S-Form Parameters Z: \" +\n fmt(this.affine[2][0]) + \", \" +\n fmt(this.affine[2][1]) + \", \" +\n fmt(this.affine[2][2]) + \", \" +\n fmt(this.affine[2][3]) + \"\\n\");\n\n string += (\"Slice Code = \" + this.slice_code + \"\\n\");\n string += (\"Units Code = \" + this.xyzt_units + \" (\" + this.getUnitsCodeString(nifti.NIFTI1.SPATIAL_UNITS_MASK & this.xyzt_units) + \", \" + this.getUnitsCodeString(nifti.NIFTI1.TEMPORAL_UNITS_MASK & this.xyzt_units) + \")\\n\");\n string += (\"Intent Code = \" + this.intent_code + \"\\n\");\n string += (\"Intent Name: \\\"\" + this.intent_name + \"\\\"\\n\");\n\n string += (\"Dim Info = \" + this.dim_info + \"\\n\");\n\n return string;\n};\n\n\n\n/**\n * Returns the byte index of the extension.\n * @returns {number}\n */\nnifti.NIFTI2.prototype.getExtensionLocation = function() {\n return nifti.NIFTI2.MAGIC_COOKIE + 4;\n};\n\n\n\n/**\n * Returns the extension size.\n * @param {DataView} data\n * @returns {number}\n */\nnifti.NIFTI2.prototype.getExtensionSize = nifti.NIFTI1.prototype.getExtensionSize;\n\n\n\n/**\n * Returns the extension code.\n * @param {DataView} data\n * @returns {number}\n */\nnifti.NIFTI2.prototype.getExtensionCode = nifti.NIFTI1.prototype.getExtensionCode;\n\n\n\n/**\n * Returns a human-readable string of datatype.\n * @param {number} code\n * @returns {string}\n */\nnifti.NIFTI2.prototype.getDatatypeCodeString = nifti.NIFTI1.prototype.getDatatypeCodeString;\n\n\n\n/**\n * Returns a human-readable string of transform type.\n * @param {number} code\n * @returns {string}\n */\nnifti.NIFTI2.prototype.getTransformCodeString = nifti.NIFTI1.prototype.getTransformCodeString;\n\n\n\n/**\n * Returns a human-readable string of spatial and temporal units.\n * @param {number} code\n * @returns {string}\n */\nnifti.NIFTI2.prototype.getUnitsCodeString = nifti.NIFTI1.prototype.getUnitsCodeString;\n\n\n\n/**\n * Returns the qform matrix.\n * @returns {Array.>}\n */\nnifti.NIFTI2.prototype.getQformMat = nifti.NIFTI1.prototype.getQformMat;\n\n\n\n/**\n * Converts qform to an affine. (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c)\n * @param {number} qb\n * @param {number} qc\n * @param {number} qd\n * @param {number} qx\n * @param {number} qy\n * @param {number} qz\n * @param {number} dx\n * @param {number} dy\n * @param {number} dz\n * @param {number} qfac\n * @returns {Array.>}\n */\nnifti.NIFTI2.prototype.convertNiftiQFormToNiftiSForm = nifti.NIFTI1.prototype.convertNiftiQFormToNiftiSForm;\n\n\n\n/**\n * Converts sform to an orientation string (e.g., XYZ+--). (See http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c)\n * @param {Array.>} R\n * @returns {string}\n */\nnifti.NIFTI2.prototype.convertNiftiSFormToNEMA = nifti.NIFTI1.prototype.convertNiftiSFormToNEMA;\n\n\n\nnifti.NIFTI2.prototype.nifti_mat33_mul = nifti.NIFTI1.prototype.nifti_mat33_mul;\n\n\n\nnifti.NIFTI2.prototype.nifti_mat33_determ = nifti.NIFTI1.prototype.nifti_mat33_determ;\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = nifti.NIFTI2;\n}\n","\n/*jslint browser: true, node: true */\n/*global require, module */\n\n\"use strict\";\n\n/*** Imports ***/\n\nvar nifti = nifti || {};\nnifti.Utils = nifti.Utils || {};\n\n\n\n/*** Static Pseudo-constants ***/\n\nnifti.Utils.crcTable = null;\nnifti.Utils.GUNZIP_MAGIC_COOKIE1 = 31;\nnifti.Utils.GUNZIP_MAGIC_COOKIE2 = 139;\n\n\n\n/*** Static methods ***/\n\nnifti.Utils.getStringAt = function (data, start, end) {\n var str = \"\", ctr, ch;\n\n for (ctr = start; ctr < end; ctr += 1) {\n ch = data.getUint8(ctr);\n\n if (ch !== 0) {\n str += String.fromCharCode(ch);\n }\n }\n\n return str;\n};\n\n\n\nnifti.Utils.getByteAt = function (data, start) {\n return data.getInt8(start);\n};\n\n\n\nnifti.Utils.getShortAt = function (data, start, littleEndian) {\n return data.getInt16(start, littleEndian);\n};\n\n\n\nnifti.Utils.getIntAt = function (data, start, littleEndian) {\n return data.getInt32(start, littleEndian);\n};\n\n\n\nnifti.Utils.getFloatAt = function (data, start, littleEndian) {\n return data.getFloat32(start, littleEndian);\n};\n\n\n\nnifti.Utils.getDoubleAt = function (data, start, littleEndian) {\n return data.getFloat64(start, littleEndian);\n};\n\n\n\nnifti.Utils.getLongAt = function (data, start, littleEndian) {\n var ctr, array = [], value = 0;\n\n for (ctr = 0; ctr < 8; ctr += 1) {\n array[ctr] = nifti.Utils.getByteAt(data, start + ctr, littleEndian);\n }\n\n for (ctr = array.length - 1; ctr >= 0; ctr--) {\n value = (value * 256) + array[ctr];\n }\n\n return value;\n};\n\n\n\nnifti.Utils.toArrayBuffer = function (buffer) {\n var ab, view, i;\n\n ab = new ArrayBuffer(buffer.length);\n view = new Uint8Array(ab);\n for (i = 0; i < buffer.length; i += 1) {\n view[i] = buffer[i];\n }\n return ab;\n};\n\n\n\nnifti.Utils.isString = function (obj) {\n return (typeof obj === \"string\" || obj instanceof String);\n};\n\n\nnifti.Utils.formatNumber = function (num, shortFormat) {\n var val = 0;\n\n if (nifti.Utils.isString(num)) {\n val = Number(num);\n } else {\n val = num;\n }\n\n if (shortFormat) {\n val = val.toPrecision(5);\n } else {\n val = val.toPrecision(7);\n }\n\n return parseFloat(val);\n};\n\n\n\n// http://stackoverflow.com/questions/18638900/javascript-crc32\nnifti.Utils.makeCRCTable = function(){\n var c;\n var crcTable = [];\n for(var n =0; n < 256; n++){\n c = n;\n for(var k =0; k < 8; k++){\n c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n crcTable[n] = c;\n }\n return crcTable;\n};\n\n\n\nnifti.Utils.crc32 = function(dataView) {\n var crcTable = nifti.Utils.crcTable || (nifti.Utils.crcTable = nifti.Utils.makeCRCTable());\n var crc = 0 ^ (-1);\n\n for (var i = 0; i < dataView.byteLength; i++ ) {\n crc = (crc >>> 8) ^ crcTable[(crc ^ dataView.getUint8(i)) & 0xFF];\n }\n\n return (crc ^ (-1)) >>> 0;\n};\n\n\n\n/*** Exports ***/\n\nvar moduleType = typeof module;\nif ((moduleType !== 'undefined') && module.exports) {\n module.exports = nifti.Utils;\n}\n","\"use strict\";\nvar assert = require('assert');\n\nvar lineSeparatorRE = /[ \\f\\t\\v]*\\r?\\n/;\nvar NRRDMagicRE = /^NRRD\\d{4}$/;\nvar lineRE = /^([^:]*)(:[ =])(.*)$/;\nvar dataFileListRE = /^LIST(?: (\\d+))?$/;\n\n// The minimal object this accepts is formed like this:\n// {data: SomeTypedArray, sizes: [...]}\n// On the other hand, if data is not given it must have a form like this:\n// {buffer: SomeArrayBuffer, type: ..., endian: ..., sizes: [...]}\n// Of course, if 'type' is an 8-bit type, endian is not needed, and if 'type' equals 'block', 'blockSize' should be set instead of 'endian'. In this case, no interpretation of buffer is done (at all, it is written serialized directly to the buffer).\n// TODO: For now this only supports serializing \"inline\" files, or files for which you have already prepared the data.\nmodule.exports.serialize = function (nrrdOrg) {\n var i, buffer, arr, totalLen = 1, nrrd = {}, prop, nativeType, nativeSize, bufferData, arrData, line, lines = [], header;\n \n // Copy nrrdOrg to nrrd to allow modifications without altering the original\n for(prop in nrrdOrg) {\n nrrd[prop] = nrrdOrg[prop];\n }\n \n // For saving files we allow inferring certain information if it is not explicitly given.\n // Also we normalize some fields to make our own lives easier.\n if (nrrd.sizes===undefined) { // 'sizes' should ALWAYS be given\n throw new Error(\"Sizes missing from NRRD file!\");\n } else if (nrrd.dimension===undefined) {\n nrrd.dimension = nrrd.sizes.length;\n }\n if (nrrd.data instanceof Int8Array) {\n nativeType = \"int8\";\n } else if (nrrd.data instanceof Uint8Array) {\n nativeType = \"uint8\";\n } else if (nrrd.data instanceof Int16Array) {\n nativeType = \"int16\";\n } else if (nrrd.data instanceof Uint16Array) {\n nativeType = \"uint16\";\n } else if (nrrd.data instanceof Int32Array) {\n nativeType = \"int32\";\n } else if (nrrd.data instanceof Uint32Array) {\n nativeType = \"uint32\";\n //} else if (nrrd.data instanceof Int64Array) {\n // nativeType = \"int64\";\n //} else if (nrrd.data instanceof Uint64Array) {\n // nativeType = \"uint64\";\n } else if (nrrd.data instanceof Float32Array) {\n nativeType = \"float\";\n } else if (nrrd.data instanceof Float64Array) {\n nativeType = \"double\";\n }\n if (nrrd.type===undefined && nativeType!==undefined) {\n nrrd.type = nativeType;\n } else if (nrrd.type===undefined) {\n throw new Error(\"Type of data is not given and cannot be inferred!\");\n } else if ((typeof nrrd.type) == \"string\" || nrrd.type instanceof String) {\n nrrd.type = parseNRRDType(nrrd.type);\n }\n if (nrrd.encoding===undefined) {\n nrrd.encoding = \"raw\";\n } else if ((typeof nrrd.encoding) == \"string\" || nrrd.encoding instanceof String) {\n nrrd.encoding = parseNRRDEncoding(nrrd.encoding);\n }\n if (nrrd.data && nrrd.type != 'block' && nrrd.type != 'int8' && nrrd.type != 'uint8' && nrrd.encoding != 'ascii') {\n nrrd.endian = systemEndianness;\n } else if (nrrd.type == 'block' || nrrd.type == 'int8' || nrrd.type == 'uint8' || nrrd.encoding == 'ascii') {\n nrrd.endian = undefined;\n } else if ((typeof nrrd.endian) == \"string\" || nrrd.endian instanceof String) {\n nrrd.endian = parseNRRDEndian(nrrd.endian);\n }\n \n // Try to infer spatial dimension\n var spaceDimension = undefined;\n if (nrrd.spaceDimension!==undefined) {\n spaceDimension = nrrd.spaceDimension;\n } else if (nrrd.space!==undefined) {\n switch(nrrd.space) {\n case \"right-anterior-superior\":\n case \"RAS\":\n spaceDimension = 3;\n break;\n case \"left-anterior-superior\":\n case \"LAS\":\n spaceDimension = 3;\n break;\n case \"left-posterior-superior\":\n case \"LPS\":\n spaceDimension = 3;\n break;\n \t case \"right-anterior-superior-time\":\n \t case \"RAST\":\n \t spaceDimension = 4;\n \t break;\n case \"left-anterior-superior-time\":\n case \"LAST\":\n spaceDimension = 4;\n break;\n case \"left-posterior-superior-time\":\n case \"LPST\":\n spaceDimension = 4;\n break;\n case \"scanner-xyz\":\n spaceDimension = 3;\n break;\n case \"scanner-xyz-time\":\n spaceDimension = 4;\n break;\n case \"3D-right-handed\":\n spaceDimension = 3;\n break;\n case \"3D-left-handed\":\n spaceDimension = 3;\n break;\n case \"3D-right-handed-time\":\n spaceDimension = 4;\n break;\n case \"3D-left-handed-time\":\n spaceDimension = 4;\n break;\n default:\n console.warn(\"Unrecognized space: \" + nrrd.space);\n }\n }\n \n // Now check that we have a valid nrrd structure.\n checkNRRD(nrrd);\n\n // Determine number of elements and check that we have enough data (if possible)\n for(i=0; i0) integers!\");\n totalLen *= nrrd.sizes[i];\n }\n if (nrrd.data) {\n if (nrrd.data.length < totalLen) {\n throw new Error(\"Missing data to serialize!\");\n }\n } else if (nrrd.buffer) {\n if (nrrd.encoding == \"raw\") {\n if (nrrd.type==\"block\" && nrrd.blockSize!==undefined) {\n nativeSize = nrrd.blockSize;\n } else {\n nativeSize = getNRRDTypeSize(nrrd.type);\n }\n if (nrrd.buffer.byteLength < totalLen*nativeSize) {\n throw new Error(\"Missing data to serialize!\");\n }\n }\n } else if (nrrd.dataFile) {\n // Okay, if you have your data ready, we'll just write a header.\n } else {\n throw new Error(\"Will not serialize an empty NRRD file!\");\n }\n \n // Make sure we have the correct buffer in bufferData.\n if (nrrd.data) {\n switch(nrrd.encoding) {\n case 'raw':\n if (nrrd.type == nativeType && nrrd.endian == systemEndianness) {\n bufferData = nrrd.data.buffer.slice(nrrd.data.byteOffset, nrrd.data.byteOffset+nrrd.data.byteLength);\n } else if (nrrd.endian == systemEndianness) {\n bufferData = castTypedArray(nrrd.data, nrrd.type);\n bufferData = bufferData.buffer.slice(bufferData.byteOffset, bufferData.byteOffset+bufferData.byteLength);\n } else {\n bufferData = serializeToBuffer(nrrd.data, nrrd.type, nrrd.endian);\n }\n break;\n case 'ascii':\n if (nrrd.type == nativeType) {\n bufferData = serializeToTextBuffer(nrrd.data);\n } else {\n bufferData = serializeToTextBuffer(castTypedArray(nrrd.data, nrrd.type));\n }\n break;\n default:\n throw new Error(\"Unsupported NRRD encoding: \" + nrrd.encoding);\n }\n } else if (nrrd.buffer) {\n bufferData = nrrd.buffer;\n }\n \n // Start header\n lines.push(\"NRRD0005\"); // TODO: Adjust version based on features that are actually used and/or the version specified by the user (if any).\n lines.push(\"# Generated by nrrd-js\");\n \n // Put in dimension and space dimension (the NRRD spec requires that these are present before any lists whose length depends on them)\n var firstProps = ['dimension', 'spaceDimension', 'space'];\n for(i=0; i=0) continue; // Skip the fields we already output.\n line = serializeField(prop, nrrd[prop], nrrd.dimension, spaceDimension);\n if (line!==undefined) lines.push(line);\n }\n \n // Put in keys (if any)\n if (nrrd.keys) for(prop in nrrd.keys) {\n if (prop.indexOf(\":=\")>=0) throw new Error(\"The combination ':=' is not allowed in an NRRD key!\");\n lines.push(prop + \":=\" + escapeValue(nrrd[prop]));\n }\n \n // Put in data file list (if any)\n if (nrrd.dataFile && nrrd.dataFile.length) {\n lines.push(\"data file: LIST\");\n Array.prototype.push.apply(lines, nrrd.dataFile);\n } else if (nrrd.dataFile && nrrd.dataFile.files && 'subdim' in nrrd.dataFile) {\n lines.push(\"data file: LIST \" + nrrd.dataFile.subdim);\n Array.prototype.push.apply(lines, nrrd.dataFile.files);\n }\n \n // Put in empty line and inline data (if we have inline data) and convert lines to buffer\n if (bufferData && !('dataFile' in nrrd)) {\n lines.push(\"\");\n lines.push(\"\"); // We actually need an extra blank line to make sure the previous is terminated.\n header = lines.join(\"\\n\");\n buffer = new ArrayBuffer(header.length + bufferData.byteLength);\n arr = new Uint8Array(buffer);\n for(i=0; i0 && l[0] != '#'; }); // Remove comment lines\n if (!NRRDMagicRE.test(lines[0])) {\n throw new Error(\"File is not an NRRD file!\");\n }\n ret.version = parseInt(lines[0].substring(4, 8), 10);\n if (ret.version>5) {\n console.warn(\"Reading an unsupported version of the NRRD format; things may go haywire.\");\n }\n\n // Parse lines\n for(i=1; i=0) return NaN;\n if (str.indexOf('-inf')>=0) return -Infinity;\n if (str.indexOf('inf')>=0) return Infinity;\n var val = parseFloat(str);\n if (Number.isNaN(val)) throw new Error(\"Malformed NRRD float: \" + str);\n return val;\n}\n\nfunction parseNRRDVector(str) {\n if (str == \"none\") return null;\n if (str.length<2 || str[0]!==\"(\" || str[str.length-1]!==\")\") throw new Error(\"Malformed NRRD vector: \" + str);\n return str.slice(1, -1).split(\",\").map(parseNRRDFloat);\n}\n\nfunction parseNRRDQuotedString(str) {\n if (length<2 || str[0]!='\"' || str[str.length-1]!='\"') {\n throw new Error(\"Invalid NRRD quoted string: \" + str);\n }\n return str.slice(1, -1).replace('\\\\\"', '\"');\n}\n\nfunction serializeNRRDQuotedString(str) {\n return '\"' + str.replace('\"', '\\\\\"') + '\"';\n}\n\nvar whitespaceListSeparator = /[ \\t]+/; // Note that this excludes other types of whitespace on purpose!\nfunction parseNRRDWhitespaceSeparatedList(str, parseElement) {\n return str.split(whitespaceListSeparator).map(parseElement);\n}\n\nfunction parseNRRDType(descriptor) {\n switch(descriptor.toLowerCase()) {\n case \"signed char\":\n case \"int8\":\n case \"int8_t\":\n return 'int8';\n case \"uchar\":\n case \"unsigned char\":\n case \"uint8\":\n case \"uint8_t\":\n return 'uint8';\n case \"short\":\n case \"short int\":\n case \"signed short\":\n case \"signed short int\":\n case \"int16\":\n case \"int16_t\":\n return 'int16';\n case \"ushort\":\n case \"unsigned short\":\n case \"unsigned short int\":\n case \"uint16\":\n case \"uint16_t\":\n return 'uint16';\n case \"int\":\n case \"signed int\":\n case \"int32\":\n case \"int32_t\":\n return 'int32';\n case \"uint\":\n case \"unsigned int\":\n case \"uint32\":\n case \"uint32_t\":\n return 'uint32';\n case \"longlong\":\n case \"long long\":\n case \"long long int\":\n case \"signed long long\":\n case \"signed long long int\":\n case \"int64\":\n case \"int64_t\":\n return 'int64';\n case \"ulonglong\":\n case \"unsigned long long\":\n case \"unsigned long long int\":\n case \"uint64\":\n case \"uint64_t\":\n return 'uint64';\n case \"float\":\n return 'float';\n case \"double\":\n return 'double';\n case \"block\":\n return 'block';\n default:\n console.warn(\"Unrecognized NRRD type: \" + descriptor);\n return descriptor;\n }\n}\n\nfunction parseNRRDEncoding(encoding) {\n switch(encoding.toLowerCase()) {\n case \"raw\":\n return \"raw\";\n case \"txt\":\n case \"text\":\n case \"ascii\":\n return \"ascii\";\n case \"hex\":\n return \"hex\";\n case \"gz\":\n case \"gzip\":\n return \"gzip\";\n case \"bz2\":\n case \"bzip2\":\n return \"bzip2\";\n default:\n console.warn(\"Unrecognized NRRD encoding: \" + encoding);\n return encoding;\n }\n}\n\nfunction parseNRRDSpace(space) {\n switch(space.toLowerCase()) {\n case \"right-anterior-superior\":\n case \"ras\":\n return \"right-anterior-superior\";\n case \"left-anterior-superior\":\n case \"las\":\n return \"left-anterior-superior\";\n case \"left-posterior-superior\":\n case \"lps\":\n return \"left-posterior-superior\";\n \t case \"right-anterior-superior-time\":\n \t case \"rast\":\n return \"right-anterior-superior-time\";\n case \"left-anterior-superior-time\":\n case \"last\":\n return \"left-anterior-superior-time\";\n case \"left-posterior-superior-time\":\n case \"lpst\":\n return \"left-posterior-superior-time\";\n case \"scanner-xyz\":\n return \"scanner-xyz\";\n case \"scanner-xyz-time\":\n return \"scanner-xyz-time\";\n case \"3d-right-handed\":\n return \"3D-right-handed\";\n case \"3d-left-handed\":\n return \"3D-left-handed\";\n case \"3d-right-handed-time\":\n return \"3D-right-handed-time\";\n case \"3d-left-handed-time\":\n return \"3D-left-handed-time\";\n default:\n console.warn(\"Unrecognized space: \" + space);\n return space;\n }\n}\n\nfunction parseNRRDEndian(endian) {\n switch(endian.toLowerCase()) {\n case 'little':\n return 'little';\n case 'big':\n return 'big';\n default:\n console.warn(\"Unrecognized NRRD endianness: \" + endian);\n return endian;\n }\n}\n\n// Note that this function will never encounter the LIST data file specification format, as this is handled elsewhere.\nvar dataFileFormatRE = / (-?\\d+) (-?\\d+) (-?\\d+)(?: (\\d+))?$/;\nfunction parseNRRDDataFile(dataFile) {\n var match = dataFileFormatRE.exec(dataFile);\n if (match) { // We have a format specification\n if (match.length == 5 && match[4]) { // subdim specification\n return {\n format: dataFile.substring(0, match.index),\n min: parseNRRDInteger(match[1]),\n max: parseNRRDInteger(match[2]),\n step: parseNRRDInteger(match[3]),\n subdim: parseNRRDInteger(match[4])\n };\n } else {\n return {\n format: dataFile.substring(0, match.index),\n min: parseNRRDInteger(match[1]),\n max: parseNRRDInteger(match[2]),\n step: parseNRRDInteger(match[3])\n };\n }\n } else { // Just a file\n return dataFile;\n }\n}\n\nfunction serializeNRRDDataFile(dataFile) {\n if ((typeof dataFile) == \"string\" || dataFile instanceof String) {\n return dataFile;\n } else if ('format' in dataFile && 'min' in dataFile && 'max' in dataFile && 'step' in dataFile) {\n if ('subdim' in dataFile) {\n return dataFile.format + \" \" + dataFile.min + \" \" + dataFile.max + \" \" + dataFile.step + \" \" + dataFile.subdim;\n } else {\n return dataFile.format + \" \" + dataFile.min + \" \" + dataFile.max + \" \" + dataFile.step;\n }\n } else {\n throw new Error(\"Unrecognized data file format!\");\n }\n}\n\nfunction parseNRRDCenter(center) {\n switch(center.toLowerCase()) {\n case \"cell\":\n return \"cell\";\n case \"node\":\n return \"node\";\n case \"???\":\n case \"none\":\n return null;\n default:\n console.warn(\"Unrecognized NRRD center: \" + center);\n return center;\n }\n}\n\nvar NRRDKinds = {\n \"domain\": \"domain\",\n \"space\": \"space\",\n \"time\": \"time\",\n \"list\": \"list\",\n \"point\": \"point\",\n \"vector\": \"vector\",\n \"covariant-vector\": \"covariant-vector\",\n \"normal\": \"normal\",\n \"stub\": \"stub\",\n \"scalar\": \"scalar\",\n \"complex\": \"complex\",\n \"2-vector\": \"2-vector\",\n \"3-color\": \"3-color\",\n \"rgb-color\": \"RGB-color\",\n \"hsv-color\": \"HSV-color\",\n \"xyz-color\": \"XYZ-color\",\n \"4-color\": \"4-color\",\n \"rgba-color\": \"RGBA-color\",\n \"3-vector\": \"3-vector\",\n \"3-gradient\": \"3-gradient\",\n \"3-normal\": \"3-normal\",\n \"4-vector\": \"4-vector\",\n \"quaternion\": \"quaternion\",\n \"2d-symmetric-matrix\": \"2D-symmetric-matrix\",\n \"2d-masked-symmetric-matrix\": \"2D-masked-symmetric-matrix\",\n \"2d-matrix\": \"2D-matrix\",\n \"2d-masked-matrix\": \"2D-masked-matrix\",\n \"3d-symmetric-matrix\": \"3D-symmetric-matrix\",\n \"3d-masked-symmetric-matrix\": \"3D-masked-symmetric-matrix\",\n \"3d-matrix\": \"3D-matrix\",\n \"3d-masked-matrix\": \"3D-masked-matrix\",\n \"???\": null,\n \"none\": null\n};\nfunction parseNRRDKind(kind) {\n var kindLC = kind.toLowerCase();\n if (kindLC in NRRDKinds) return NRRDKinds[kindLC];\n console.warn(\"Unrecognized NRRD kind: \" + kind);\n return kind;\n}\n\nfunction serializeNRRDOptional(a) {\n return a===null ? \"???\" : a;\n}\n\nvar systemEndianness = (function() {\n var buf = new ArrayBuffer(4),\n intArr = new Uint32Array(buf),\n byteArr = new Uint8Array(buf);\n intArr[0] = 0x01020304;\n if (byteArr[0]==1 && byteArr[1]==2 && byteArr[2]==3 && byteArr[3]==4) {\n return 'big';\n } else if (byteArr[0]==4 && byteArr[1]==3 && byteArr[2]==2 && byteArr[3]==1) {\n return 'little';\n }\n console.warn(\"Unrecognized system endianness!\");\n return undefined;\n})();\n\nfunction parseNRRDRawData(buffer, type, sizes, options) {\n var i, arr, view, totalLen = 1, endianFlag;\n for(i=0; i0) integers!\");\n totalLen *= sizes[i];\n }\n if (type == 'block') {\n // Don't do anything special, just return the slice containing all blocks.\n return buffer.slice(0,totalLen*options.blockSize);\n } else if (type == 'int8' || type == 'uint8' || options.endian == systemEndianness) {\n switch(type) {\n case \"int8\":\n checkSize(1);\n return new Int8Array(buffer.slice(0,totalLen));\n case \"uint8\":\n checkSize(1);\n return new Uint8Array(buffer.slice(0,totalLen));\n case \"int16\":\n checkSize(2);\n return new Int16Array(buffer.slice(0,totalLen*2));\n case \"uint16\":\n checkSize(2);\n return new Uint16Array(buffer.slice(0,totalLen*2));\n case \"int32\":\n checkSize(4);\n return new Int32Array(buffer.slice(0,totalLen*4));\n case \"uint32\":\n checkSize(4);\n return new Uint32Array(buffer.slice(0,totalLen*4));\n //case \"int64\":\n // checkSize(8);\n // return new Int64Array(buffer.slice(0,totalLen*8));\n //case \"uint64\":\n // checkSize(8);\n // return new Uint64Array(buffer.slice(0,totalLen*8));\n case \"float\":\n checkSize(4);\n return new Float32Array(buffer.slice(0,totalLen*4));\n case \"double\":\n checkSize(8);\n return new Float64Array(buffer.slice(0,totalLen*8));\n default:\n console.warn(\"Unsupported NRRD type: \" + type + \", returning raw buffer.\");\n return undefined;\n }\n } else {\n switch(options.endian) {\n case 'big':\n endianFlag = false;\n break;\n case 'little':\n endianFlag = true;\n break;\n default:\n console.warn(\"Unsupported endianness in NRRD file: \" + options.endian);\n return undefined;\n }\n view = new DataView(buffer);\n switch(type) {\n case \"int8\": // Note that here we do not need to check the size of the buffer, as the DataView.get methods should throw an exception if we read beyond the buffer.\n arr = new Int8Array(totalLen);\n for(i=0; i0) integers!\");\n totalLen *= sizes[i];\n }\n buf8 = new Uint8Array(buffer);\n str = String.fromCharCode.apply(null, buf8);\n strList = str.split(whitespaceDataValueListSeparatorRE);\n if (strList.lengthtotalLen) {\n if (strList[0] === '') strList = strList.slice(1); // Strictly speaking the spec doesn't (explicitly) allow whitespace in front of the first number, but let's be lenient.\n strList = strList.slice(0, totalLen);\n }\n switch(type) {\n case \"int8\":\n return new Int8Array(strList.map(parseNRRDInteger));\n case \"uint8\":\n return new Uint8Array(strList.map(parseNRRDInteger));\n case \"int16\":\n return new Int16Array(strList.map(parseNRRDInteger));\n case \"uint16\":\n return new Uint16Array(strList.map(parseNRRDInteger));\n case \"int32\":\n return new Int32Array(strList.map(parseNRRDInteger));\n case \"uint32\":\n return new Uint32Array(strList.map(parseNRRDInteger));\n //case \"int64\":\n // return new Int64Array(strList.map(parseNRRDInteger));\n //case \"uint64\":\n // return new Uint64Array(strList.map(parseNRRDInteger));\n case \"float\":\n return new Float32Array(strList.map(parseNRRDFloat));\n case \"double\":\n return new Float64Array(strList.map(parseNRRDFloat));\n default:\n console.warn(\"Unsupported NRRD type: \" + type + \".\");\n return undefined;\n }\n}\n\n// This ALWAYS returns an integer, or throws an exception.\nfunction getNRRDTypeSize(type) {\n switch(type) {\n case \"int8\":\n return 1;\n case \"uint8\":\n return 1;\n case \"int16\":\n return 2;\n case \"uint16\":\n return 2;\n case \"int32\":\n return 4;\n case \"uint32\":\n return 4;\n case \"int64\":\n return 8;\n case \"uint64\":\n return 8;\n case \"float\":\n return 4;\n case \"double\":\n return 8;\n default:\n throw new Error(\"Do not know the size of NRRD type: \" + type);\n }\n}\n\nfunction checkNRRD(ret) {\n // Always necessary fields\n if (ret.dimension===undefined) {\n throw new Error(\"Dimension missing from NRRD file!\");\n } else if (ret.type===undefined) {\n throw new Error(\"Type missing from NRRD file!\");\n } else if (ret.encoding===undefined) {\n throw new Error(\"Encoding missing from NRRD file!\");\n } else if (ret.sizes===undefined) {\n throw new Error(\"Sizes missing from NRRD file!\");\n }\n \n // Sometimes necessary fields\n if (ret.type != 'block' && ret.type != 'int8' && ret.type != 'uint8' &&\n ret.encoding != 'ascii' && ret.endian === undefined) {\n throw new Error(\"Endianness missing from NRRD file!\");\n } else if (ret.type == 'block' && ret.blockSize === undefined) {\n throw new Error(\"Missing block size in NRRD file!\");\n }\n \n // Check dimension and per-axis field lengths\n if (ret.dimension === 0) {\n throw new Error(\"Zero-dimensional NRRD file?\");\n } else if (ret.dimension != ret.sizes.length) {\n throw new Error(\"Length of 'sizes' is different from 'dimension' in an NRRD file!\");\n } else if (ret.spacings && ret.dimension != ret.spacings.length) {\n throw new Error(\"Length of 'spacings' is different from 'dimension' in an NRRD file!\");\n } else if (ret.thicknesses && ret.dimension != ret.thicknesses.length) {\n throw new Error(\"Length of 'thicknesses' is different from 'dimension' in an NRRD file!\");\n } else if (ret.axisMins && ret.dimension != ret.axisMins.length) {\n throw new Error(\"Length of 'axis mins' is different from 'dimension' in an NRRD file!\");\n } else if (ret.axisMaxs && ret.dimension != ret.axisMaxs.length) {\n throw new Error(\"Length of 'axis maxs' is different from 'dimension' in an NRRD file!\");\n } else if (ret.centers && ret.dimension != ret.centers.length) {\n throw new Error(\"Length of 'centers' is different from 'dimension' in an NRRD file!\");\n } else if (ret.labels && ret.dimension != ret.labels.length) {\n throw new Error(\"Length of 'labels' is different from 'dimension' in an NRRD file!\");\n } else if (ret.units && ret.dimension != ret.units.length) {\n throw new Error(\"Length of 'units' is different from 'dimension' in an NRRD file!\");\n } else if (ret.kinds && ret.dimension != ret.kinds.length) {\n throw new Error(\"Length of 'kinds' is different from 'dimension' in an NRRD file!\");\n }\n \n // TODO: Check space/orientation fields.\n \n // We should either have inline data or external data\n if ((ret.data === undefined || ret.data.length === 0) && (ret.buffer === undefined || ret.buffer.byteLength === 0) && ret.dataFile === undefined) {\n throw new Error(\"NRRD file has neither inline or external data!\");\n }\n}\n\nfunction castTypedArray(data, type) {\n switch(type) {\n case \"int8\":\n return new Int8Array(data);\n case \"uint8\":\n return new Uint8Array(data);\n case \"int16\":\n return new Int16Array(data);\n case \"uint16\":\n return new Uint16Array(data);\n case \"int32\":\n return new Int32Array(data);\n case \"uint32\":\n return new Uint32Array(data);\n //case \"int64\":\n // return new Int64Array(data);\n //case \"uint64\":\n // return new Uint64Array(data);\n case \"float\":\n return new Float32Array(data);\n case \"double\":\n return new Float64Array(data);\n default:\n throw new Error(\"Cannot cast to NRRD type: \" + type);\n }\n}\n\nfunction serializeToBuffer(data, type, endian) {\n var i, endianFlag, view, nativeSize = getNRRDTypeSize(type), buffer = new ArrayBuffer(data.length*nativeSize);\n switch(endian) {\n case 'big':\n endianFlag = false;\n break;\n case 'little':\n endianFlag = true;\n break;\n default:\n console.warn(\"Unsupported endianness in NRRD file: \" + endian);\n return undefined;\n }\n view = new DataView(buffer);\n switch(type) {\n case \"int8\": // Note that here we do not need to check the size of the buffer, as the DataView.get methods should throw an exception if we read beyond the buffer.\n for(i=0; i Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overriden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n if (!(this instanceof Deflate)) return new Deflate(options);\n\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n var dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n\n if (this.ended) { return false; }\n\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n status = zlib_deflate.deflate(strm, _mode); /* no bad return value */\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n if (this.options.to === 'string') {\n this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === Z_SYNC_FLUSH) {\n this.onEnd(Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): ouput data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n var deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n","'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils = require('./utils/common');\nvar strings = require('./utils/strings');\nvar c = require('./zlib/constants');\nvar msg = require('./zlib/messages');\nvar ZStream = require('./zlib/zstream');\nvar GZheader = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overriden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n if (!(this instanceof Inflate)) return new Inflate(options);\n\n this.options = utils.assign({\n chunkSize: 16384,\n windowBits: 0,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var dictionary = this.options.dictionary;\n var status, _mode;\n var next_out_utf8, tail, utf8str;\n var dict;\n\n // Flag to properly process Z_BUF_ERROR on testing inflate call\n // when we check that all output data was flushed.\n var allowBufError = false;\n\n if (this.ended) { return false; }\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // Only binary strings can be decompressed on practice\n strm.input = strings.binstring2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */\n\n if (status === c.Z_NEED_DICT && dictionary) {\n // Convert data if needed\n if (typeof dictionary === 'string') {\n dict = strings.string2buf(dictionary);\n } else if (toString.call(dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(dictionary);\n } else {\n dict = dictionary;\n }\n\n status = zlib_inflate.inflateSetDictionary(this.strm, dict);\n\n }\n\n if (status === c.Z_BUF_ERROR && allowBufError === true) {\n status = c.Z_OK;\n allowBufError = false;\n }\n\n if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n if (this.options.to === 'string') {\n\n next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n tail = strm.next_out - next_out_utf8;\n utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n this.onData(utf8str);\n\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n }\n\n // When no more input data, we should check that internal inflate buffers\n // are flushed. The only way to do it when avail_out = 0 - run one more\n // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n // Here we set flag to process this error properly.\n //\n // NOTE. Deflate does not return error in this case and does not needs such\n // logic.\n if (strm.avail_in === 0 && strm.avail_out === 0) {\n allowBufError = true;\n }\n\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n if (status === c.Z_STREAM_END) {\n _mode = c.Z_FINISH;\n }\n\n // Finalize on the last chunk.\n if (_mode === c.Z_FINISH) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === c.Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === c.Z_SYNC_FLUSH) {\n this.onEnd(c.Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): ouput data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === c.Z_OK) {\n if (this.options.to === 'string') {\n // Glue & convert here, until we teach pako to send\n // utf8 alligned strings to onData\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n * , output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err)\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n var inflator = new Inflate(options);\n\n inflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) { throw inflator.msg; }\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip = inflate;\n","'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (source.hasOwnProperty(p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n","// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safary\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new utils.Buf8(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n // use fallback for big arrays to avoid stack overflow\n if (len < 65537) {\n if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n }\n }\n\n var result = '';\n for (var i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n var buf = new utils.Buf8(str.length);\n for (var i = 0, len = buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n var i, out, c, c_len;\n var len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Fuckup - very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means vuffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It doesn't worth to make additional optimizationa as in original.\n// Small size is preferable.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","'use strict';\n\nvar utils = require('../utils/common');\nvar trees = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar msg = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n s.d_buf = s.lit_bufsize >> 1;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var s;\n var str, n;\n var wrap;\n var avail;\n var next;\n var input;\n var tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = new utils.Buf8(s.w_size);\n utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n","'use strict';\n\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n","'use strict';\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n var s_window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n","'use strict';\n\n\nvar utils = require('../utils/common');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar inflate_fast = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window, src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more conveniend processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' insdead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var state;\n var dictid;\n var ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n","'use strict';\n\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n var i = 0;\n /* process all codes and make table entries */\n for (;;) {\n i++;\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n","'use strict';\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED = 1;\n//var Z_HUFFMAN_ONLY = 2;\n//var Z_RLE = 3;\nvar Z_FIXED = 4;\n//var Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits = /* extra bits for each length code */\n [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];\n\nvar extra_dbits = /* extra bits for each distance code */\n [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];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n * 2;\n var _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n","'use strict';\n\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // 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\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // 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.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","export var REVISION = '99';\nexport var MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 };\nexport var CullFaceNone = 0;\nexport var CullFaceBack = 1;\nexport var CullFaceFront = 2;\nexport var CullFaceFrontBack = 3;\nexport var FrontFaceDirectionCW = 0;\nexport var FrontFaceDirectionCCW = 1;\nexport var BasicShadowMap = 0;\nexport var PCFShadowMap = 1;\nexport var PCFSoftShadowMap = 2;\nexport var FrontSide = 0;\nexport var BackSide = 1;\nexport var DoubleSide = 2;\nexport var FlatShading = 1;\nexport var SmoothShading = 2;\nexport var NoColors = 0;\nexport var FaceColors = 1;\nexport var VertexColors = 2;\nexport var NoBlending = 0;\nexport var NormalBlending = 1;\nexport var AdditiveBlending = 2;\nexport var SubtractiveBlending = 3;\nexport var MultiplyBlending = 4;\nexport var CustomBlending = 5;\nexport var AddEquation = 100;\nexport var SubtractEquation = 101;\nexport var ReverseSubtractEquation = 102;\nexport var MinEquation = 103;\nexport var MaxEquation = 104;\nexport var ZeroFactor = 200;\nexport var OneFactor = 201;\nexport var SrcColorFactor = 202;\nexport var OneMinusSrcColorFactor = 203;\nexport var SrcAlphaFactor = 204;\nexport var OneMinusSrcAlphaFactor = 205;\nexport var DstAlphaFactor = 206;\nexport var OneMinusDstAlphaFactor = 207;\nexport var DstColorFactor = 208;\nexport var OneMinusDstColorFactor = 209;\nexport var SrcAlphaSaturateFactor = 210;\nexport var NeverDepth = 0;\nexport var AlwaysDepth = 1;\nexport var LessDepth = 2;\nexport var LessEqualDepth = 3;\nexport var EqualDepth = 4;\nexport var GreaterEqualDepth = 5;\nexport var GreaterDepth = 6;\nexport var NotEqualDepth = 7;\nexport var MultiplyOperation = 0;\nexport var MixOperation = 1;\nexport var AddOperation = 2;\nexport var NoToneMapping = 0;\nexport var LinearToneMapping = 1;\nexport var ReinhardToneMapping = 2;\nexport var Uncharted2ToneMapping = 3;\nexport var CineonToneMapping = 4;\nexport var ACESFilmicToneMapping = 5;\n\nexport var UVMapping = 300;\nexport var CubeReflectionMapping = 301;\nexport var CubeRefractionMapping = 302;\nexport var EquirectangularReflectionMapping = 303;\nexport var EquirectangularRefractionMapping = 304;\nexport var SphericalReflectionMapping = 305;\nexport var CubeUVReflectionMapping = 306;\nexport var CubeUVRefractionMapping = 307;\nexport var RepeatWrapping = 1000;\nexport var ClampToEdgeWrapping = 1001;\nexport var MirroredRepeatWrapping = 1002;\nexport var NearestFilter = 1003;\nexport var NearestMipMapNearestFilter = 1004;\nexport var NearestMipMapLinearFilter = 1005;\nexport var LinearFilter = 1006;\nexport var LinearMipMapNearestFilter = 1007;\nexport var LinearMipMapLinearFilter = 1008;\nexport var UnsignedByteType = 1009;\nexport var ByteType = 1010;\nexport var ShortType = 1011;\nexport var UnsignedShortType = 1012;\nexport var IntType = 1013;\nexport var UnsignedIntType = 1014;\nexport var FloatType = 1015;\nexport var HalfFloatType = 1016;\nexport var UnsignedShort4444Type = 1017;\nexport var UnsignedShort5551Type = 1018;\nexport var UnsignedShort565Type = 1019;\nexport var UnsignedInt248Type = 1020;\nexport var AlphaFormat = 1021;\nexport var RGBFormat = 1022;\nexport var RGBAFormat = 1023;\nexport var LuminanceFormat = 1024;\nexport var LuminanceAlphaFormat = 1025;\nexport var RGBEFormat = RGBAFormat;\nexport var DepthFormat = 1026;\nexport var DepthStencilFormat = 1027;\nexport var RedFormat = 1028;\nexport var RGB_S3TC_DXT1_Format = 33776;\nexport var RGBA_S3TC_DXT1_Format = 33777;\nexport var RGBA_S3TC_DXT3_Format = 33778;\nexport var RGBA_S3TC_DXT5_Format = 33779;\nexport var RGB_PVRTC_4BPPV1_Format = 35840;\nexport var RGB_PVRTC_2BPPV1_Format = 35841;\nexport var RGBA_PVRTC_4BPPV1_Format = 35842;\nexport var RGBA_PVRTC_2BPPV1_Format = 35843;\nexport var RGB_ETC1_Format = 36196;\nexport var RGBA_ASTC_4x4_Format = 37808;\nexport var RGBA_ASTC_5x4_Format = 37809;\nexport var RGBA_ASTC_5x5_Format = 37810;\nexport var RGBA_ASTC_6x5_Format = 37811;\nexport var RGBA_ASTC_6x6_Format = 37812;\nexport var RGBA_ASTC_8x5_Format = 37813;\nexport var RGBA_ASTC_8x6_Format = 37814;\nexport var RGBA_ASTC_8x8_Format = 37815;\nexport var RGBA_ASTC_10x5_Format = 37816;\nexport var RGBA_ASTC_10x6_Format = 37817;\nexport var RGBA_ASTC_10x8_Format = 37818;\nexport var RGBA_ASTC_10x10_Format = 37819;\nexport var RGBA_ASTC_12x10_Format = 37820;\nexport var RGBA_ASTC_12x12_Format = 37821;\nexport var LoopOnce = 2200;\nexport var LoopRepeat = 2201;\nexport var LoopPingPong = 2202;\nexport var InterpolateDiscrete = 2300;\nexport var InterpolateLinear = 2301;\nexport var InterpolateSmooth = 2302;\nexport var ZeroCurvatureEnding = 2400;\nexport var ZeroSlopeEnding = 2401;\nexport var WrapAroundEnding = 2402;\nexport var TrianglesDrawMode = 0;\nexport var TriangleStripDrawMode = 1;\nexport var TriangleFanDrawMode = 2;\nexport var LinearEncoding = 3000;\nexport var sRGBEncoding = 3001;\nexport var GammaEncoding = 3007;\nexport var RGBEEncoding = 3002;\nexport var LogLuvEncoding = 3003;\nexport var RGBM7Encoding = 3004;\nexport var RGBM16Encoding = 3005;\nexport var RGBDEncoding = 3006;\nexport var BasicDepthPacking = 3200;\nexport var RGBADepthPacking = 3201;\nexport var TangentSpaceNormalMap = 0;\nexport var ObjectSpaceNormalMap = 1;\n","import { Ray } from '../math/Ray.js';\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author bhouston / http://clara.io/\n * @author stephomi / http://stephaneginier.com/\n */\n\nfunction Raycaster( origin, direction, near, far ) {\n\n\tthis.ray = new Ray( origin, direction );\n\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\tthis.near = near || 0;\n\tthis.far = far || Infinity;\n\n\tthis.params = {\n\t\tMesh: {},\n\t\tLine: {},\n\t\tLOD: {},\n\t\tPoints: { threshold: 1 },\n\t\tSprite: {}\n\t};\n\n\tObject.defineProperties( this.params, {\n\t\tPointCloud: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\treturn this.Points;\n\n\t\t\t}\n\t\t}\n\t} );\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.visible === false ) return;\n\n\tobject.raycast( raycaster, intersects );\n\n\tif ( recursive === true ) {\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Raycaster.prototype, {\n\n\tlinePrecision: 1,\n\n\tset: function ( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t},\n\n\tsetFromCamera: function ( coords, camera ) {\n\n\t\tif ( ( camera && camera.isPerspectiveCamera ) ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\n\t\t} else if ( ( camera && camera.isOrthographicCamera ) ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type.' );\n\n\t\t}\n\n\t},\n\n\tintersectObject: function ( object, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t},\n\n\tintersectObjects: function ( objects, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\treturn intersects;\n\n\t\t}\n\n\t\tfor ( var i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n} );\n\n\nexport { Raycaster };\n","import { Vector3 } from './Vector3.js';\nimport { Sphere } from './Sphere.js';\n\n/**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Box3( min, max ) {\n\n\tthis.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity );\n\tthis.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity );\n\n}\n\nObject.assign( Box3.prototype, {\n\n\tisBox3: true,\n\n\tset: function ( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromArray: function ( array ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tvar x = array[ i ];\n\t\t\tvar y = array[ i + 1 ];\n\t\t\tvar z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromBufferAttribute: function ( attribute ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tvar x = attribute.getX( i );\n\t\t\tvar y = attribute.getY( i );\n\t\t\tvar z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCenterAndSize: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetFromObject: function ( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tmakeEmpty: function () {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t},\n\n\tisEmpty: function () {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t},\n\n\tgetSize: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getSize() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t},\n\n\texpandByPoint: function ( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t},\n\n\texpandByVector: function ( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t},\n\n\texpandByScalar: function ( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t},\n\n\texpandByObject: function () {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tvar scope, i, l;\n\n\t\tvar v1 = new Vector3();\n\n\t\tfunction traverse( node ) {\n\n\t\t\tvar geometry = node.geometry;\n\n\t\t\tif ( geometry !== undefined ) {\n\n\t\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\t\tfor ( i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tv1.copy( vertices[ i ] );\n\t\t\t\t\t\tv1.applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\tvar attribute = geometry.attributes.position;\n\n\t\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\t\tfor ( i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tv1.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn function expandByObject( object ) {\n\n\t\t\tscope = this;\n\n\t\t\tobject.updateMatrixWorld( true );\n\n\t\t\tobject.traverse( traverse );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t},\n\n\tcontainsBox: function ( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t},\n\n\tgetParameter: function ( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getParameter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t},\n\n\tintersectsSphere: ( function () {\n\n\t\tvar closestPoint = new Vector3();\n\n\t\treturn function intersectsSphere( sphere ) {\n\n\t\t\t// Find the point on the AABB closest to the sphere center.\n\t\t\tthis.clampPoint( sphere.center, closestPoint );\n\n\t\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\t\treturn closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t\t};\n\n\t} )(),\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tvar min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t},\n\n\tintersectsTriangle: ( function () {\n\n\t\t// triangle centered vertices\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\t// triangle edge vectors\n\t\tvar f0 = new Vector3();\n\t\tvar f1 = new Vector3();\n\t\tvar f2 = new Vector3();\n\n\t\tvar testAxis = new Vector3();\n\n\t\tvar center = new Vector3();\n\t\tvar extents = new Vector3();\n\n\t\tvar triangleNormal = new Vector3();\n\n\t\tfunction satForAxes( axes ) {\n\n\t\t\tvar i, j;\n\n\t\t\tfor ( i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t\t\ttestAxis.fromArray( axes, i );\n\t\t\t\t// project the aabb onto the seperating axis\n\t\t\t\tvar r = extents.x * Math.abs( testAxis.x ) + extents.y * Math.abs( testAxis.y ) + extents.z * Math.abs( testAxis.z );\n\t\t\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\t\t\tvar p0 = v0.dot( testAxis );\n\t\t\t\tvar p1 = v1.dot( testAxis );\n\t\t\t\tvar p2 = v2.dot( testAxis );\n\t\t\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\t\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t\t\t// the axis is seperating and we can exit\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn function intersectsTriangle( triangle ) {\n\n\t\t\tif ( this.isEmpty() ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// compute box center and extents\n\t\t\tthis.getCenter( center );\n\t\t\textents.subVectors( this.max, center );\n\n\t\t\t// translate triangle to aabb origin\n\t\t\tv0.subVectors( triangle.a, center );\n\t\t\tv1.subVectors( triangle.b, center );\n\t\t\tv2.subVectors( triangle.c, center );\n\n\t\t\t// compute edge vectors for triangle\n\t\t\tf0.subVectors( v1, v0 );\n\t\t\tf1.subVectors( v2, v1 );\n\t\t\tf2.subVectors( v0, v2 );\n\n\t\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\t\tvar axes = [\n\t\t\t\t0, - f0.z, f0.y, 0, - f1.z, f1.y, 0, - f2.z, f2.y,\n\t\t\t\tf0.z, 0, - f0.x, f1.z, 0, - f1.x, f2.z, 0, - f2.x,\n\t\t\t\t- f0.y, f0.x, 0, - f1.y, f1.x, 0, - f2.y, f2.x, 0\n\t\t\t];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// test 3 face normals from the aabb\n\t\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// finally testing the face normal of the triangle\n\t\t\t// use already existing triangle edge vectors here\n\t\t\ttriangleNormal.crossVectors( f0, f1 );\n\t\t\taxes = [ triangleNormal.x, triangleNormal.y, triangleNormal.z ];\n\t\t\treturn satForAxes( axes );\n\n\t\t};\n\n\t} )(),\n\n\tclampPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t},\n\n\tdistanceToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceToPoint( point ) {\n\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t};\n\n\t}(),\n\n\tgetBoundingSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getBoundingSphere( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t\ttarget = new Sphere();\n\n\t\t\t}\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( v1 ).length() * 0.5;\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tintersect: function ( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t},\n\n\tunion: function ( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function () {\n\n\t\tvar points = [\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3()\n\t\t];\n\n\t\treturn function applyMatrix4( matrix ) {\n\n\t\t\t// transform of empty box is an empty box.\n\t\t\tif ( this.isEmpty() ) return this;\n\n\t\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t\tpoints[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t\tpoints[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t\tpoints[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t\tpoints[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t\tpoints[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t\tpoints[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t\tpoints[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t\tpoints[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n} );\n\n\nexport { Box3 };\n","/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar _Math = {\n\n\tDEG2RAD: Math.PI / 180,\n\tRAD2DEG: 180 / Math.PI,\n\n\tgenerateUUID: ( function () {\n\n\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\t\tvar lut = [];\n\n\t\tfor ( var i = 0; i < 256; i ++ ) {\n\n\t\t\tlut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n\t\t}\n\n\t\treturn function generateUUID() {\n\n\t\t\tvar d0 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d1 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d2 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d3 = Math.random() * 0xffffffff | 0;\n\t\t\tvar uuid = lut[ d0 & 0xff ] + lut[ d0 >> 8 & 0xff ] + lut[ d0 >> 16 & 0xff ] + lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d1 & 0xff ] + lut[ d1 >> 8 & 0xff ] + '-' + lut[ d1 >> 16 & 0x0f | 0x40 ] + lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d2 & 0x3f | 0x80 ] + lut[ d2 >> 8 & 0xff ] + '-' + lut[ d2 >> 16 & 0xff ] + lut[ d2 >> 24 & 0xff ] +\n\t\t\t\tlut[ d3 & 0xff ] + lut[ d3 >> 8 & 0xff ] + lut[ d3 >> 16 & 0xff ] + lut[ d3 >> 24 & 0xff ];\n\n\t\t\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\t\t\treturn uuid.toUpperCase();\n\n\t\t};\n\n\t} )(),\n\n\tclamp: function ( value, min, max ) {\n\n\t\treturn Math.max( min, Math.min( max, value ) );\n\n\t},\n\n\t// compute euclidian modulo of m % n\n\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\teuclideanModulo: function ( n, m ) {\n\n\t\treturn ( ( n % m ) + m ) % m;\n\n\t},\n\n\t// Linear mapping from range to range \n\n\tmapLinear: function ( x, a1, a2, b1, b2 ) {\n\n\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n\t},\n\n\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\n\tlerp: function ( x, y, t ) {\n\n\t\treturn ( 1 - t ) * x + t * y;\n\n\t},\n\n\t// http://en.wikipedia.org/wiki/Smoothstep\n\n\tsmoothstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * ( 3 - 2 * x );\n\n\t},\n\n\tsmootherstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n\t},\n\n\t// Random integer from interval\n\n\trandInt: function ( low, high ) {\n\n\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n\t},\n\n\t// Random float from interval\n\n\trandFloat: function ( low, high ) {\n\n\t\treturn low + Math.random() * ( high - low );\n\n\t},\n\n\t// Random float from <-range/2, range/2> interval\n\n\trandFloatSpread: function ( range ) {\n\n\t\treturn range * ( 0.5 - Math.random() );\n\n\t},\n\n\tdegToRad: function ( degrees ) {\n\n\t\treturn degrees * _Math.DEG2RAD;\n\n\t},\n\n\tradToDeg: function ( radians ) {\n\n\t\treturn radians * _Math.RAD2DEG;\n\n\t},\n\n\tisPowerOfTwo: function ( value ) {\n\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t},\n\n\tceilPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n\t},\n\n\tfloorPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n\t}\n\n};\n\n\nexport { _Math };\n","import { Vector3 } from './Vector3.js';\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author philogb / http://blog.thejit.org/\n * @author jordi_ros / http://plattsoft.com\n * @author D1plo1d / http://github.com/D1plo1d\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author timknip / http://www.floorplanner.com/\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Matrix4() {\n\n\tthis.elements = [\n\n\t\t1, 0, 0, 0,\n\t\t0, 1, 0, 0,\n\t\t0, 0, 1, 0,\n\t\t0, 0, 0, 1\n\n\t];\n\n\tif ( arguments.length > 0 ) {\n\n\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t}\n\n}\n\nObject.assign( Matrix4.prototype, {\n\n\tisMatrix4: true,\n\n\tset: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t},\n\n\tidentity: function () {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t},\n\n\tcopy: function ( m ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t},\n\n\tcopyPosition: function ( m ) {\n\n\t\tvar te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\textractBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t},\n\n\tmakeBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\textractRotation: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function extractRotation( m ) {\n\n\t\t\t// this method does not support reflection matrices\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\n\t\t\tvar scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length();\n\t\t\tvar scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length();\n\t\t\tvar scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length();\n\n\t\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\t\tte[ 3 ] = 0;\n\n\t\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\t\tte[ 7 ] = 0;\n\n\t\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\t\tte[ 11 ] = 0;\n\n\t\t\tte[ 12 ] = 0;\n\t\t\tte[ 13 ] = 0;\n\t\t\tte[ 14 ] = 0;\n\t\t\tte[ 15 ] = 1;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakeRotationFromEuler: function ( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\n\t\tvar x = euler.x, y = euler.y, z = euler.z;\n\t\tvar a = Math.cos( x ), b = Math.sin( x );\n\t\tvar c = Math.cos( y ), d = Math.sin( y );\n\t\tvar e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationFromQuaternion: function () {\n\n\t\tvar zero = new Vector3( 0, 0, 0 );\n\t\tvar one = new Vector3( 1, 1, 1 );\n\n\t\treturn function makeRotationFromQuaternion( q ) {\n\n\t\t\treturn this.compose( zero, q, one );\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar x = new Vector3();\n\t\tvar y = new Vector3();\n\t\tvar z = new Vector3();\n\n\t\treturn function lookAt( eye, target, up ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tz.subVectors( eye, target );\n\n\t\t\tif ( z.lengthSq() === 0 ) {\n\n\t\t\t\t// eye and target are in the same position\n\n\t\t\t\tz.z = 1;\n\n\t\t\t}\n\n\t\t\tz.normalize();\n\t\t\tx.crossVectors( up, z );\n\n\t\t\tif ( x.lengthSq() === 0 ) {\n\n\t\t\t\t// up and z are parallel\n\n\t\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t\tz.x += 0.0001;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz.z += 0.0001;\n\n\t\t\t\t}\n\n\t\t\t\tz.normalize();\n\t\t\t\tx.crossVectors( up, z );\n\n\t\t\t}\n\n\t\t\tx.normalize();\n\t\t\ty.crossVectors( z, x );\n\n\t\t\tte[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x;\n\t\t\tte[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y;\n\t\t\tte[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmultiply: function ( m, n ) {\n\n\t\tif ( n !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t}\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t},\n\n\tpremultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t},\n\n\tmultiplyMatrices: function ( a, b ) {\n\n\t\tvar ae = a.elements;\n\t\tvar be = b.elements;\n\t\tvar te = this.elements;\n\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tvar a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tvar b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tvar b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tvar b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tvar b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t},\n\n\tapplyToBufferAttribute: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\tv1.applyMatrix4( this );\n\n\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t}\n\n\t\t\treturn attribute;\n\n\t\t};\n\n\t}(),\n\n\tdeterminant: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tvar n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tvar n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tvar n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t},\n\n\ttranspose: function () {\n\n\t\tvar te = this.elements;\n\t\tvar tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t},\n\n\tsetPosition: function ( v ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 12 ] = v.x;\n\t\tte[ 13 ] = v.y;\n\t\tte[ 14 ] = v.z;\n\n\t\treturn this;\n\n\t},\n\n\tgetInverse: function ( m, throwOnDegenerate ) {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tvar te = this.elements,\n\t\t\tme = m.elements,\n\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ],\n\t\t\tn12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ],\n\t\t\tn13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ],\n\t\t\tn14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tvar det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) {\n\n\t\t\tvar msg = \"THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\tthrow new Error( msg );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( msg );\n\n\t\t\t}\n\n\t\t\treturn this.identity();\n\n\t\t}\n\n\t\tvar detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( v ) {\n\n\t\tvar te = this.elements;\n\t\tvar x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t},\n\n\tgetMaxScaleOnAxis: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tvar scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tvar scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t},\n\n\tmakeTranslation: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationX: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationY: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationZ: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationAxis: function ( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tvar c = Math.cos( angle );\n\t\tvar s = Math.sin( angle );\n\t\tvar t = 1 - c;\n\t\tvar x = axis.x, y = axis.y, z = axis.z;\n\t\tvar tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\t return this;\n\n\t},\n\n\tmakeScale: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeShear: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, y, z, 0,\n\t\t\tx, 1, z, 0,\n\t\t\tx, y, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tcompose: function ( position, quaternion, scale ) {\n\n\t\tvar te = this.elements;\n\n\t\tvar x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tvar x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tvar xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tvar yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tvar wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tvar sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t te[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t te[ 1 ] = ( xy + wz ) * sx;\n\t te[ 2 ] = ( xz - wy ) * sx;\n\t te[ 3 ] = 0;\n\n\t te[ 4 ] = ( xy - wz ) * sy;\n\t te[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t te[ 6 ] = ( yz + wx ) * sy;\n\t te[ 7 ] = 0;\n\n\t te[ 8 ] = ( xz + wy ) * sz;\n\t te[ 9 ] = ( yz - wx ) * sz;\n\t te[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t te[ 11 ] = 0;\n\n\t te[ 12 ] = position.x;\n\t te[ 13 ] = position.y;\n\t te[ 14 ] = position.z;\n\t te[ 15 ] = 1;\n\n\t return this;\n\n\t},\n\n\tdecompose: function () {\n\n\t\tvar vector = new Vector3();\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function decompose( position, quaternion, scale ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\t\tvar sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\t\tvar sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t\t// if determine is negative, we need to invert one scale\n\t\t\tvar det = this.determinant();\n\t\t\tif ( det < 0 ) sx = - sx;\n\n\t\t\tposition.x = te[ 12 ];\n\t\t\tposition.y = te[ 13 ];\n\t\t\tposition.z = te[ 14 ];\n\n\t\t\t// scale the rotation part\n\t\t\tmatrix.copy( this );\n\n\t\t\tvar invSX = 1 / sx;\n\t\t\tvar invSY = 1 / sy;\n\t\t\tvar invSZ = 1 / sz;\n\n\t\t\tmatrix.elements[ 0 ] *= invSX;\n\t\t\tmatrix.elements[ 1 ] *= invSX;\n\t\t\tmatrix.elements[ 2 ] *= invSX;\n\n\t\t\tmatrix.elements[ 4 ] *= invSY;\n\t\t\tmatrix.elements[ 5 ] *= invSY;\n\t\t\tmatrix.elements[ 6 ] *= invSY;\n\n\t\t\tmatrix.elements[ 8 ] *= invSZ;\n\t\t\tmatrix.elements[ 9 ] *= invSZ;\n\t\t\tmatrix.elements[ 10 ] *= invSZ;\n\n\t\t\tquaternion.setFromRotationMatrix( matrix );\n\n\t\t\tscale.x = sx;\n\t\t\tscale.y = sy;\n\t\t\tscale.z = sz;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakePerspective: function ( left, right, top, bottom, near, far ) {\n\n\t\tif ( far === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\t\tvar x = 2 * near / ( right - left );\n\t\tvar y = 2 * near / ( top - bottom );\n\n\t\tvar a = ( right + left ) / ( right - left );\n\t\tvar b = ( top + bottom ) / ( top - bottom );\n\t\tvar c = - ( far + near ) / ( far - near );\n\t\tvar d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t},\n\n\tmakeOrthographic: function ( left, right, top, bottom, near, far ) {\n\n\t\tvar te = this.elements;\n\t\tvar w = 1.0 / ( right - left );\n\t\tvar h = 1.0 / ( top - bottom );\n\t\tvar p = 1.0 / ( far - near );\n\n\t\tvar x = ( right + left ) * w;\n\t\tvar y = ( top + bottom ) * h;\n\t\tvar z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( matrix ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = matrix.elements;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tvar te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n} );\n\n\nexport { Matrix4 };\n","/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n */\n\nimport { _Math } from './Math.js';\nimport { Vector3 } from './Vector3.js';\n\nfunction Quaternion( x, y, z, w ) {\n\n\tthis._x = x || 0;\n\tthis._y = y || 0;\n\tthis._z = z || 0;\n\tthis._w = ( w !== undefined ) ? w : 1;\n\n}\n\nObject.assign( Quaternion, {\n\n\tslerp: function ( qa, qb, qm, t ) {\n\n\t\treturn qm.copy( qa ).slerp( qb, t );\n\n\t},\n\n\tslerpFlat: function ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tvar x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ],\n\n\t\t\tx1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tvar s = 1 - t,\n\n\t\t\t\tcos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tvar sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tvar tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tvar f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n} );\n\nObject.defineProperties( Quaternion.prototype, {\n\n\tx: {\n\n\t\tget: function () {\n\n\t\t\treturn this._x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\ty: {\n\n\t\tget: function () {\n\n\t\t\treturn this._y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tz: {\n\n\t\tget: function () {\n\n\t\t\treturn this._z;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tw: {\n\n\t\tget: function () {\n\n\t\t\treturn this._w;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._w = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Quaternion.prototype, {\n\n\tisQuaternion: true,\n\n\tset: function ( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t},\n\n\tcopy: function ( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromEuler: function ( euler, update ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar x = euler._x, y = euler._y, z = euler._z, order = euler.order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tvar cos = Math.cos;\n\t\tvar sin = Math.sin;\n\n\t\tvar c1 = cos( x / 2 );\n\t\tvar c2 = cos( y / 2 );\n\t\tvar c3 = cos( z / 2 );\n\n\t\tvar s1 = sin( x / 2 );\n\t\tvar s2 = sin( y / 2 );\n\t\tvar s3 = sin( z / 2 );\n\n\t\tif ( order === 'XYZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'YZX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'XZY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t}\n\n\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromAxisAngle: function ( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tvar halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromRotationMatrix: function ( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33,\n\t\t\ts;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\ts = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromUnitVectors: function () {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tvar v1 = new Vector3();\n\t\tvar r;\n\n\t\tvar EPS = 0.000001;\n\n\t\treturn function setFromUnitVectors( vFrom, vTo ) {\n\n\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\n\t\t\tr = vFrom.dot( vTo ) + 1;\n\n\t\t\tif ( r < EPS ) {\n\n\t\t\t\tr = 0;\n\n\t\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\t\tv1.set( - vFrom.y, vFrom.x, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv1.set( 0, - vFrom.z, vFrom.y );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tv1.crossVectors( vFrom, vTo );\n\n\t\t\t}\n\n\t\t\tthis._x = v1.x;\n\t\t\tthis._y = v1.y;\n\t\t\tthis._z = v1.z;\n\t\t\tthis._w = r;\n\n\t\t\treturn this.normalize();\n\n\t\t};\n\n\t}(),\n\n\tangleTo: function ( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( _Math.clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t},\n\n\trotateTowards: function ( q, step ) {\n\n\t\tvar angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tvar t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t},\n\n\tinverse: function () {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t},\n\n\tconjugate: function () {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t},\n\n\tnormalize: function () {\n\n\t\tvar l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( q, p ) {\n\n\t\tif ( p !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t}\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t},\n\n\tpremultiply: function ( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t},\n\n\tmultiplyQuaternions: function ( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tvar qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tvar qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tslerp: function ( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tvar x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tvar cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tvar s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\treturn this.normalize();\n\n\t\t}\n\n\t\tvar sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tvar halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tvar ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t},\n\n\tonChange: function ( callback ) {\n\n\t\tthis.onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tonChangeCallback: function () {}\n\n} );\n\n\nexport { Quaternion };\n","import { Vector3 } from './Vector3.js';\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Ray( origin, direction ) {\n\n\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\tthis.direction = ( direction !== undefined ) ? direction : new Vector3();\n\n}\n\nObject.assign( Ray.prototype, {\n\n\tset: function ( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t},\n\n\tat: function ( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t},\n\n\tlookAt: function ( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t},\n\n\trecast: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function recast( t ) {\n\n\t\t\tthis.origin.copy( this.at( t, v1 ) );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclosestPointToPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tvar directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t},\n\n\tdistanceSqToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceSqToPoint( point ) {\n\n\t\t\tvar directionDistance = v1.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t\t// point behind the ray\n\n\t\t\tif ( directionDistance < 0 ) {\n\n\t\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t\t}\n\n\t\t\tv1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\t\treturn v1.distanceToSquared( point );\n\n\t\t};\n\n\t}(),\n\n\tdistanceSqToSegment: function () {\n\n\t\tvar segCenter = new Vector3();\n\t\tvar segDir = new Vector3();\n\t\tvar diff = new Vector3();\n\n\t\treturn function distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t\t// It returns the min distance between the ray and the segment\n\t\t\t// defined by v0 and v1\n\t\t\t// It can also set two optional targets :\n\t\t\t// - The closest point on the ray\n\t\t\t// - The closest point on the segment\n\n\t\t\tsegCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t\tsegDir.copy( v1 ).sub( v0 ).normalize();\n\t\t\tdiff.copy( this.origin ).sub( segCenter );\n\n\t\t\tvar segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\t\tvar a01 = - this.direction.dot( segDir );\n\t\t\tvar b0 = diff.dot( this.direction );\n\t\t\tvar b1 = - diff.dot( segDir );\n\t\t\tvar c = diff.lengthSq();\n\t\t\tvar det = Math.abs( 1 - a01 * a01 );\n\t\t\tvar s0, s1, sqrDist, extDet;\n\n\t\t\tif ( det > 0 ) {\n\n\t\t\t\t// The ray and segment are not parallel.\n\n\t\t\t\ts0 = a01 * b1 - b0;\n\t\t\t\ts1 = a01 * b0 - b1;\n\t\t\t\textDet = segExtent * det;\n\n\t\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\t\tvar invDet = 1 / det;\n\t\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 5\n\n\t\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t\t// region 4\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 3\n\n\t\t\t\t\t\ts0 = 0;\n\t\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 2\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Ray and segment are parallel.\n\n\t\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnRay ) {\n\n\t\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnSegment ) {\n\n\t\t\t\toptionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter );\n\n\t\t\t}\n\n\t\t\treturn sqrDist;\n\n\t\t};\n\n\t}(),\n\n\tintersectSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function intersectSphere( sphere, target ) {\n\n\t\t\tv1.subVectors( sphere.center, this.origin );\n\t\t\tvar tca = v1.dot( this.direction );\n\t\t\tvar d2 = v1.dot( v1 ) - tca * tca;\n\t\t\tvar radius2 = sphere.radius * sphere.radius;\n\n\t\t\tif ( d2 > radius2 ) return null;\n\n\t\t\tvar thc = Math.sqrt( radius2 - d2 );\n\n\t\t\t// t0 = first intersect point - entrance on front of sphere\n\t\t\tvar t0 = tca - thc;\n\n\t\t\t// t1 = second intersect point - exit point on back of sphere\n\t\t\tvar t1 = tca + thc;\n\n\t\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t\t// test to see if t0 is behind the ray:\n\t\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t\t// in order to always return an intersect point that is in front of the ray.\n\t\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\t\treturn this.at( t0, target );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t},\n\n\tdistanceToPlane: function ( plane ) {\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t},\n\n\tintersectPlane: function ( plane, target ) {\n\n\t\tvar t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t},\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tvar distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t},\n\n\tintersectBox: function ( box, target ) {\n\n\t\tvar tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tvar invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tvar origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t},\n\n\tintersectsBox: ( function () {\n\n\t\tvar v = new Vector3();\n\n\t\treturn function intersectsBox( box ) {\n\n\t\t\treturn this.intersectBox( box, v ) !== null;\n\n\t\t};\n\n\t} )(),\n\n\tintersectTriangle: function () {\n\n\t\t// Compute the offset origin, edges, and normal.\n\t\tvar diff = new Vector3();\n\t\tvar edge1 = new Vector3();\n\t\tvar edge2 = new Vector3();\n\t\tvar normal = new Vector3();\n\n\t\treturn function intersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t\tedge1.subVectors( b, a );\n\t\t\tedge2.subVectors( c, a );\n\t\t\tnormal.crossVectors( edge1, edge2 );\n\n\t\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\t\tvar DdN = this.direction.dot( normal );\n\t\t\tvar sign;\n\n\t\t\tif ( DdN > 0 ) {\n\n\t\t\t\tif ( backfaceCulling ) return null;\n\t\t\t\tsign = 1;\n\n\t\t\t} else if ( DdN < 0 ) {\n\n\t\t\t\tsign = - 1;\n\t\t\t\tDdN = - DdN;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tdiff.subVectors( this.origin, a );\n\t\t\tvar DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) );\n\n\t\t\t// b1 < 0, no intersection\n\t\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) );\n\n\t\t\t// b2 < 0, no intersection\n\t\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// b1+b2 > 1, no intersection\n\t\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Line intersects triangle, check if ray does.\n\t\t\tvar QdN = - sign * diff.dot( normal );\n\n\t\t\t// t < 0, no intersection\n\t\t\tif ( QdN < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Ray intersects triangle.\n\t\t\treturn this.at( QdN / DdN, target );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix4: function ( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n} );\n\n\nexport { Ray };\n","import { Box3 } from './Box3.js';\nimport { Vector3 } from './Vector3.js';\n\n/**\n * @author bhouston / http://clara.io\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Sphere( center, radius ) {\n\n\tthis.center = ( center !== undefined ) ? center : new Vector3();\n\tthis.radius = ( radius !== undefined ) ? radius : 0;\n\n}\n\nObject.assign( Sphere.prototype, {\n\n\tset: function ( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function () {\n\n\t\tvar box = new Box3();\n\n\t\treturn function setFromPoints( points, optionalCenter ) {\n\n\t\t\tvar center = this.center;\n\n\t\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\t\tcenter.copy( optionalCenter );\n\n\t\t\t} else {\n\n\t\t\t\tbox.setFromPoints( points ).getCenter( center );\n\n\t\t\t}\n\n\t\t\tvar maxRadiusSq = 0;\n\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t\t}\n\n\t\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t},\n\n\tempty: function () {\n\n\t\treturn ( this.radius <= 0 );\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t},\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\tvar radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t},\n\n\tintersectsPlane: function ( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t},\n\n\tclampPoint: function ( point, target ) {\n\n\t\tvar deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t},\n\n\tgetBoundingBox: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .getBoundingBox() target is now required' );\n\t\t\ttarget = new Box3();\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n} );\n\n\nexport { Sphere };\n","import { Vector3 } from './Vector3.js';\n\n/**\n * @author bhouston / http://clara.io\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Triangle( a, b, c ) {\n\n\tthis.a = ( a !== undefined ) ? a : new Vector3();\n\tthis.b = ( b !== undefined ) ? b : new Vector3();\n\tthis.c = ( c !== undefined ) ? c : new Vector3();\n\n}\n\nObject.assign( Triangle, {\n\n\tgetNormal: function () {\n\n\t\tvar v0 = new Vector3();\n\n\t\treturn function getNormal( a, b, c, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\ttarget.subVectors( c, b );\n\t\t\tv0.subVectors( a, b );\n\t\t\ttarget.cross( v0 );\n\n\t\t\tvar targetLengthSq = target.lengthSq();\n\t\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t\t}\n\n\t\t\treturn target.set( 0, 0, 0 );\n\n\t\t};\n\n\t}(),\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tgetBarycoord: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function getBarycoord( point, a, b, c, target ) {\n\n\t\t\tv0.subVectors( c, a );\n\t\t\tv1.subVectors( b, a );\n\t\t\tv2.subVectors( point, a );\n\n\t\t\tvar dot00 = v0.dot( v0 );\n\t\t\tvar dot01 = v0.dot( v1 );\n\t\t\tvar dot02 = v0.dot( v2 );\n\t\t\tvar dot11 = v1.dot( v1 );\n\t\t\tvar dot12 = v1.dot( v2 );\n\n\t\t\tvar denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\t// collinear or singular triangle\n\t\t\tif ( denom === 0 ) {\n\n\t\t\t\t// arbitrary location outside of triangle?\n\t\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t\t}\n\n\t\t\tvar invDenom = 1 / denom;\n\t\t\tvar u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\t\tvar v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t\t// barycentric coordinates must always sum to 1\n\t\t\treturn target.set( 1 - u - v, v, u );\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function containsPoint( point, a, b, c ) {\n\n\t\t\tTriangle.getBarycoord( point, a, b, c, v1 );\n\n\t\t\treturn ( v1.x >= 0 ) && ( v1.y >= 0 ) && ( ( v1.x + v1.y ) <= 1 );\n\n\t\t};\n\n\t}(),\n\n\tgetUV: function () {\n\n\t\tvar barycoord = new Vector3();\n\n\t\treturn function getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\t\tthis.getBarycoord( point, p1, p2, p3, barycoord );\n\n\t\t\ttarget.set( 0, 0 );\n\t\t\ttarget.addScaledVector( uv1, barycoord.x );\n\t\t\ttarget.addScaledVector( uv2, barycoord.y );\n\t\t\ttarget.addScaledVector( uv3, barycoord.z );\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}()\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tset: function ( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPointsAndIndices: function ( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t},\n\n\tgetArea: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getArea() {\n\n\t\t\tv0.subVectors( this.c, this.b );\n\t\t\tv1.subVectors( this.a, this.b );\n\n\t\t\treturn v0.cross( v1 ).length() * 0.5;\n\n\t\t};\n\n\t}(),\n\n\tgetMidpoint: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getMidpoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t},\n\n\tgetNormal: function ( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t},\n\n\tgetPlane: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getPlane() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t},\n\n\tgetBarycoord: function ( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t},\n\n\tgetUV: function ( point, uv1, uv2, uv3, result ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, result );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t},\n\n\tclosestPointToPoint: function () {\n\n\t\tvar vab = new Vector3();\n\t\tvar vac = new Vector3();\n\t\tvar vbc = new Vector3();\n\t\tvar vap = new Vector3();\n\t\tvar vbp = new Vector3();\n\t\tvar vcp = new Vector3();\n\n\t\treturn function closestPointToPoint( p, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tvar a = this.a, b = this.b, c = this.c;\n\t\t\tvar v, w;\n\n\t\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t\tvab.subVectors( b, a );\n\t\t\tvac.subVectors( c, a );\n\t\t\tvap.subVectors( p, a );\n\t\t\tvar d1 = vab.dot( vap );\n\t\t\tvar d2 = vac.dot( vap );\n\t\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\t\treturn target.copy( a );\n\n\t\t\t}\n\n\t\t\tvbp.subVectors( p, b );\n\t\t\tvar d3 = vab.dot( vbp );\n\t\t\tvar d4 = vac.dot( vbp );\n\t\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\t\treturn target.copy( b );\n\n\t\t\t}\n\n\t\t\tvar vc = d1 * d4 - d3 * d2;\n\t\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\t\treturn target.copy( a ).addScaledVector( vab, v );\n\n\t\t\t}\n\n\t\t\tvcp.subVectors( p, c );\n\t\t\tvar d5 = vab.dot( vcp );\n\t\t\tvar d6 = vac.dot( vcp );\n\t\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\t\treturn target.copy( c );\n\n\t\t\t}\n\n\t\t\tvar vb = d5 * d2 - d1 * d6;\n\t\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\t\treturn target.copy( a ).addScaledVector( vac, w );\n\n\t\t\t}\n\n\t\t\tvar va = d3 * d6 - d5 * d4;\n\t\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t\tvbc.subVectors( c, b );\n\t\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\t\treturn target.copy( b ).addScaledVector( vbc, w ); // edge region of BC\n\n\t\t\t}\n\n\t\t\t// face region\n\t\t\tvar denom = 1 / ( va + vb + vc );\n\t\t\t// u = va * denom\n\t\t\tv = vb * denom;\n\t\t\tw = vc * denom;\n\t\t\treturn target.copy( a ).addScaledVector( vab, v ).addScaledVector( vac, w );\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n} );\n\n\nexport { Triangle };\n","/**\n * @author mrdoob / http://mrdoob.com/\n * @author philogb / http://blog.thejit.org/\n * @author egraether / http://egraether.com/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n */\n\nfunction Vector2( x, y ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\n}\n\nObject.defineProperties( Vector2.prototype, {\n\n\t\"width\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.x = value;\n\n\t\t}\n\n\t},\n\n\t\"height\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.y = value;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tisVector2: true,\n\n\tset: function ( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min = new Vector2();\n\t\tvar max = new Vector2();\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tmin.set( minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t},\n\n\tcross: function ( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tangle: function () {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tvar angle = Math.atan2( this.y, this.x );\n\n\t\tif ( angle < 0 ) angle += 2 * Math.PI;\n\n\t\treturn angle;\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t},\n\n\trotateAround: function ( center, angle ) {\n\n\t\tvar c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tvar x = this.x - center.x;\n\t\tvar y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n\nexport { Vector2 };\n","import { _Math } from './Math.js';\nimport { Matrix4 } from './Matrix4.js';\nimport { Quaternion } from './Quaternion.js';\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author kile / http://kile.stravaganza.org/\n * @author philogb / http://blog.thejit.org/\n * @author mikael emtinger / http://gomo.se/\n * @author egraether / http://egraether.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Vector3( x, y, z ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\tthis.z = z || 0;\n\n}\n\nObject.assign( Vector3.prototype, {\n\n\tisVector3: true,\n\n\tset: function ( x, y, z ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t}\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyVectors: function ( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyEuler: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyEuler( euler ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromEuler( euler ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyAxisAngle: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyAxisAngle( axis, angle ) {\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tvar w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tvar ix = qw * x + qy * z - qz * y;\n\t\tvar iy = qw * y + qz * x - qx * z;\n\t\tvar iz = qw * z + qx * y - qy * x;\n\t\tvar iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t},\n\n\tproject: function ( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t},\n\n\tunproject: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function unproject( camera ) {\n\n\t\t\treturn this.applyMatrix4( matrix.getInverse( camera.projectionMatrix ) ).applyMatrix4( camera.matrixWorld );\n\n\t\t};\n\n\t}(),\n\n\ttransformDirection: function ( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min = new Vector3();\n\t\tvar max = new Vector3();\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tmin.set( minVal, minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t},\n\n\t// TODO lengthSquared?\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tcross: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\treturn this.crossVectors( v, w );\n\n\t\t}\n\n\t\treturn this.crossVectors( this, v );\n\n\t},\n\n\tcrossVectors: function ( a, b ) {\n\n\t\tvar ax = a.x, ay = a.y, az = a.z;\n\t\tvar bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t},\n\n\tprojectOnVector: function ( vector ) {\n\n\t\tvar scalar = vector.dot( this ) / vector.lengthSq();\n\n\t\treturn this.copy( vector ).multiplyScalar( scalar );\n\n\t},\n\n\tprojectOnPlane: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function projectOnPlane( planeNormal ) {\n\n\t\t\tv1.copy( this ).projectOnVector( planeNormal );\n\n\t\t\treturn this.sub( v1 );\n\n\t\t};\n\n\t}(),\n\n\treflect: function () {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function reflect( normal ) {\n\n\t\t\treturn this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t\t};\n\n\t}(),\n\n\tangleTo: function ( v ) {\n\n\t\tvar theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) );\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( _Math.clamp( theta, - 1, 1 ) );\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t},\n\n\tsetFromSpherical: function ( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t},\n\n\tsetFromSphericalCoords: function ( radius, phi, theta ) {\n\n\t\tvar sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCylindrical: function ( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t},\n\n\tsetFromCylindricalCoords: function ( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixPosition: function ( m ) {\n\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixScale: function ( m ) {\n\n\t\tvar sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tvar sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tvar sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixColumn: function ( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n\nexport { Vector3 };\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","'use strict';\n\n// MODULES //\n\nvar isString = require( 'validate.io-string-primitive' );\nvar isNonNegativeInteger = require( 'validate.io-nonnegative-integer' );\nvar ceil = require( 'math-ceil' );\nvar repeat = require( 'utils-repeat-string' );\n\n\n// CONSTANTS //\n\nvar MAX_SAFE_INTEGER = 9007199254740991; // 2**53 - 1\n\n\n// LEFT PAD //\n\n/**\n* FUNCTION: lpad( str, len[, pad] )\n*\tLeft pads a string such that the padded string has a length of at least `len`.\n*\n* @param {String} str - string to pad\n* @param {Number} len - minimum string length\n* @param {String} [pad=' '] - string used to pad\n* @returns {String} padded string\n*/\nfunction lpad( str, len, pad ) {\n\tvar n;\n\tvar p;\n\tif ( !isString( str ) ) {\n\t\tthrow new TypeError( 'invalid input argument. First argument must be a string. Value: `' + str + '`.' );\n\t}\n\tif ( !isNonNegativeInteger( len ) ) {\n\t\tthrow new TypeError( 'invalid input argument. Second argument must be a nonnegative integer. Value: `' + len + '`.' );\n\t}\n\tif ( arguments.length > 2 ) {\n\t\tp = pad;\n\t\tif ( !isString( p ) ) {\n\t\t\tthrow new TypeError( 'invalid input argument. Third argument must be a string. Value: `' + p + '`.' );\n\t\t}\n\t\tif ( p.length === 0 ) {\n\t\t\tthrow new RangeError( 'invalid input argument. Pad string must not be an empty string.' );\n\t\t}\n\t} else {\n\t\tp = ' ';\n\t}\n\tif ( len > MAX_SAFE_INTEGER ) {\n\t\tthrow new RangeError( 'invalid input argument. Output string length exceeds maximum allowed string length.' );\n\t}\n\tn = ( len - str.length ) / p.length;\n\tif ( n <= 0 ) {\n\t\treturn str;\n\t}\n\tn = ceil( n );\n\treturn repeat( p, n ) + str;\n} // end FUNCTION lpad()\n\n\n// EXPORTS //\n\nmodule.exports = lpad;\n","'use strict';\n\n// MODULES //\n\nvar isString = require( 'validate.io-string-primitive' );\nvar isNonNegativeInteger = require( 'validate.io-nonnegative-integer' );\n\n\n// NOTES //\n\n/**\n* The algorithmic trick used in the implementation is to treat string concatenation the same as binary addition (i.e., any natural number (nonnegative integer) can be expressed as a sum of powers of two).\n*\n* For example,\n*\n* n = 10 => 1010 => 2^3 + 2^0 + 2^1 + 2^0\n*\n* We can produce a 10-repeat string by \"adding\" the results of a 8-repeat string and a 2-repeat string.\n*\n* The implementation is then as follows:\n* : Let `s` be the string to be repeated and `o` be an output string.\n* 0) Initialize an output string `o`.\n* 1) Check the least significant bit to determine if the current `s` string should be \"added\" to the output \"total\".\n* - if the bit is a one, add\n* - otherwise, move on\n* 2) Double the string `s` by adding `s` to `s`.\n* 3) Right-shift the bits of `n`.\n* 4) Check if we have shifted off all bits.\n* - if yes, done.\n* - otherwise, move on\n* 5) Repeat 1-4.\n*\n* The result is that, as the string is repeated, we continually check to see if the doubled string is one which we want to add to our \"total\".\n*\n* The algorithm runs in O(log_2(n)) compared to O(n).\n*/\n\n\n// CONSTANTS //\n\nvar MAX_SAFE_INTEGER = 9007199254740991; // 2**53 - 1\n\n\n// REPEAT //\n\n/**\n* FUNCTION: repeat( str, n )\n*\tRepeats a string a specified number of times and returns the concatenated result.\n*\n* @param {String} str - string to repeat\n* @param {Number} n - number of times to repeat the string\n* @returns {String}\n*/\nfunction repeat( str, n ) {\n\tvar rpt;\n\tvar cnt;\n\tif ( !isString( str ) ) {\n\t\tthrow new TypeError( 'invalid input argument. First argument must be a string. Value: `' + str + '`.' );\n\t}\n\tif ( !isNonNegativeInteger( n ) ) {\n\t\tthrow new TypeError( 'invalid input argument. Second argument must be a nonnegative integer. Value: `' + n + '`.' );\n\t}\n\tif ( str.length === 0 || n === 0 ) {\n\t\treturn '';\n\t}\n\t// Check that output string will not exceed the maximum string length:\n\tif ( str.length * n > MAX_SAFE_INTEGER ) {\n\t\tthrow new RangeError( 'invalid input argument. Output string length exceeds maximum allowed string length.' );\n\t}\n\trpt = '';\n\tcnt = n;\n\tfor( ; ; ) {\n\t\t// If the count is odd, append the current concatenated string:\n\t\tif ( (cnt&1) === 1 ) {\n\t\t\trpt += str;\n\t\t}\n\t\t// Right-shift the bits:\n\t\tcnt >>>= 1;\n\t\tif ( cnt === 0 ) {\n\t\t\tbreak;\n\t\t}\n\t\t// Double the string:\n\t\tstr += str;\n\t}\n\treturn rpt;\n} // end FUNCTION repeat()\n\n\n// EXPORTS //\n\nmodule.exports = repeat;\n","'use strict';\n\n// MODULES //\n\nvar isString = require( 'validate.io-string-primitive' );\nvar isNonNegativeInteger = require( 'validate.io-nonnegative-integer' );\nvar ceil = require( 'math-ceil' );\nvar repeat = require( 'utils-repeat-string' );\n\n\n// CONSTANTS //\n\nvar MAX_SAFE_INTEGER = 9007199254740991; // 2**53 - 1\n\n\n// RIGHT PAD //\n\n/**\n* FUNCTION: rpad( str, len[, pad] )\n*\tRight pads a string such that the padded string has a length of at least `len`.\n*\n* @param {String} str - string to pad\n* @param {Number} len - minimum string length\n* @param {String} [pad=' '] - string used to pad\n* @returns {String} padded string\n*/\nfunction rpad( str, len, pad ) {\n\tvar n;\n\tvar p;\n\tif ( !isString( str ) ) {\n\t\tthrow new TypeError( 'invalid input argument. First argument must be a string. Value: `' + str + '`.' );\n\t}\n\tif ( !isNonNegativeInteger( len ) ) {\n\t\tthrow new TypeError( 'invalid input argument. Second argument must be a nonnegative integer. Value: `' + len + '`.' );\n\t}\n\tif ( arguments.length > 2 ) {\n\t\tp = pad;\n\t\tif ( !isString( p ) ) {\n\t\t\tthrow new TypeError( 'invalid input argument. Third argument must be a string. Value: `' + p + '`.' );\n\t\t}\n\t\tif ( p.length === 0 ) {\n\t\t\tthrow new RangeError( 'invalid input argument. Pad string must not be an empty string.' );\n\t\t}\n\t} else {\n\t\tp = ' ';\n\t}\n\tif ( len > MAX_SAFE_INTEGER ) {\n\t\tthrow new RangeError( 'invalid input argument. Output string length exceeds maximum allowed string length.' );\n\t}\n\tn = ( len - str.length ) / p.length;\n\tif ( n <= 0 ) {\n\t\treturn str;\n\t}\n\tn = ceil( n );\n\treturn str + repeat( p, n );\n} // end FUNCTION rpad()\n\n\n// EXPORTS //\n\nmodule.exports = rpad;\n","/**\n*\n*\tVALIDATE: integer\n*\n*\n*\tDESCRIPTION:\n*\t\t- Validates if a value is an integer.\n*\n*\n*\tNOTES:\n*\t\t[1]\n*\n*\n*\tTODO:\n*\t\t[1]\n*\n*\n*\tLICENSE:\n*\t\tMIT\n*\n*\tCopyright (c) 2014. Athan Reines.\n*\n*\n*\tAUTHOR:\n*\t\tAthan Reines. kgryte@gmail.com. 2014.\n*\n*/\n\n'use strict';\n\n// MODULES //\n\nvar isNumber = require( 'validate.io-number' );\n\n\n// ISINTEGER //\n\n/**\n* FUNCTION: isInteger( value )\n*\tValidates if a value is an integer.\n*\n* @param {Number} value - value to be validated\n* @returns {Boolean} boolean indicating whether value is an integer\n*/\nfunction isInteger( value ) {\n\treturn isNumber( value ) && value%1 === 0;\n} // end FUNCTION isInteger()\n\n\n// EXPORTS //\n\nmodule.exports = isInteger;\n","/**\n*\n*\tVALIDATE: nonnegative-integer\n*\n*\n*\tDESCRIPTION:\n*\t\t- Validates if a value is a nonnegative integer.\n*\n*\n*\tNOTES:\n*\t\t[1]\n*\n*\n*\tTODO:\n*\t\t[1]\n*\n*\n*\tLICENSE:\n*\t\tMIT\n*\n*\tCopyright (c) 2015. Athan Reines.\n*\n*\n*\tAUTHOR:\n*\t\tAthan Reines. kgryte@gmail.com. 2015.\n*\n*/\n\n'use strict';\n\n// MODULES //\n\nvar isInteger = require( 'validate.io-integer' );\n\n\n// IS NONNEGATIVE INTEGER //\n\n/**\n* FUNCTION: isNonNegativeInteger( value )\n*\tValidates if a value is a nonnegative integer.\n*\n* @param {*} value - value to be validated\n* @returns {Boolean} boolean indicating if a value is a nonnegative integer\n*/\nfunction isNonNegativeInteger( value ) {\n\treturn isInteger( value ) && value >= 0;\n} // end FUNCTION isNonNegativeInteger()\n\n\n// EXPORTS //\n\nmodule.exports = isNonNegativeInteger;\n","/**\n*\n*\tVALIDATE: number\n*\n*\n*\tDESCRIPTION:\n*\t\t- Validates if a value is a number.\n*\n*\n*\tNOTES:\n*\t\t[1]\n*\n*\n*\tTODO:\n*\t\t[1]\n*\n*\n*\tLICENSE:\n*\t\tMIT\n*\n*\tCopyright (c) 2014. Athan Reines.\n*\n*\n*\tAUTHOR:\n*\t\tAthan Reines. kgryte@gmail.com. 2014.\n*\n*/\n\n'use strict';\n\n/**\n* FUNCTION: isNumber( value )\n*\tValidates if a value is a number.\n*\n* @param {*} value - value to be validated\n* @returns {Boolean} boolean indicating whether value is a number\n*/\nfunction isNumber( value ) {\n\treturn ( typeof value === 'number' || Object.prototype.toString.call( value ) === '[object Number]' ) && value.valueOf() === value.valueOf();\n} // end FUNCTION isNumber()\n\n\n// EXPORTS //\n\nmodule.exports = isNumber;\n","'use strict';\n\n/**\n* Tests if a value is a string primitive.\n*\n* @param {*} value - value to test\n* @returns {Boolean} boolean indicating if a value is a string primitive\n*/\nfunction isString( value ) {\n\treturn typeof value === 'string';\n} // end FUNCTION isString()\n\n\n// EXPORTS //\n\nmodule.exports = isString;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","export * from './cameras/cameras';\nexport * from './controls/controls';\nexport * from './core/core';\nexport * from './geometries/geometries';\nexport * from './helpers/helpers';\nexport * from './loaders/loaders';\nexport * from './models/models';\nexport * from './parsers/parsers';\nexport * from './presets/presets';\nexport * from './shaders/shaders';\nexport * from './widgets/widgets';\n\nimport { Raycaster } from 'three/src/core/Raycaster';\n\nconst packageVersion = require('../package.json').version;\nconst d3Version = require('../node_modules/three/package.json').version;\nwindow.console.log(`ami ${packageVersion} (three ${d3Version})`);","import Orthographic, { camerasOrthographic } from './cameras.orthographic';\n\nexport { Orthographic as OrthographicCamera, camerasOrthographic as orthographicCameraFactory };\n","import Intersections from '../core/core.intersections';\nimport Validators from '../core/core.validators';\n\n/**\n * Orthographic camera from THREE.JS with some extra convenience\n * functionalities.\n *\n * @example\n * //\n * //\n *\n * @module cameras/orthographic\n */\n\nconst camerasOrthographic = (three = window.THREE) => {\n if (three === undefined || three.OrthographicCamera === undefined) {\n return null;\n }\n\n const Constructor = three.OrthographicCamera;\n return class extends Constructor {\n constructor(left, right, top, bottom, near, far) {\n super(left, right, top, bottom, near, far);\n\n this._front = null;\n this._back = null;\n\n this._directions = [\n new three.Vector3(1, 0, 0),\n new three.Vector3(0, 1, 0),\n new three.Vector3(0, 0, 1),\n ];\n\n this._directionsLabel = [\n 'A',\n 'P', // TOP/BOTTOM\n 'L',\n 'R', // LEFT/RIGHT\n 'I',\n 'S', // FROM/TO\n ];\n\n this._orientation = 'default';\n this._convention = 'radio';\n this._stackOrientation = 0;\n\n this._right = null;\n this._up = null;\n this._direction = null;\n\n this._controls = null;\n this._box = null;\n this._canvas = {\n width: null,\n height: null,\n };\n\n this._fromFront = true;\n this._angle = 0;\n }\n\n /**\n * Initialize orthographic camera variables\n */\n init(xCosine, yCosine, zCosine, controls, box, canvas) {\n // DEPRECATION NOTICE\n window.console.warn(\n `cameras.orthographic.init(...) is deprecated.\n Use .cosines, .controls, .box and .canvas instead.`\n );\n\n //\n if (\n !(\n Validators.vector3(xCosine) &&\n Validators.vector3(yCosine) &&\n Validators.vector3(zCosine) &&\n Validators.box(box) &&\n controls\n )\n ) {\n window.console.log('Invalid input provided.');\n\n return false;\n }\n\n this._right = xCosine;\n this._up = this._adjustTopDirection(xCosine, yCosine);\n this._direction = new three.Vector3().crossVectors(this._right, this._up);\n this._controls = controls;\n this._box = box;\n this._canvas = canvas;\n\n let ray = {\n position: this._box.center,\n direction: this._direction,\n };\n\n let intersections = this._orderIntersections(\n Intersections.rayBox(ray, this._box),\n this._direction\n );\n this._front = intersections[0];\n this._back = intersections[1];\n\n // set default values\n this.up.set(this._up.x, this._up.y, this._up.z);\n this._updateCanvas();\n this._updatePositionAndTarget(this._front, this._back);\n this._updateMatrices();\n this._updateDirections();\n }\n\n update() {\n // http://www.grahamwideman.com/gw/brain/orientation/orientterms.htm\n // do magics depending on orientation and convention\n // also needs a default mode\n\n if (this._orientation === 'default') {\n switch (this._getMaxIndex(this._directions[2])) {\n case 0:\n this._orientation = 'sagittal';\n break;\n\n case 1:\n this._orientation = 'coronal';\n break;\n\n case 2:\n this._orientation = 'axial';\n break;\n\n default:\n this._orientation = 'free';\n break;\n }\n }\n\n if (this._orientation === 'free') {\n this._right = this._directions[0];\n this._up = this._directions[1];\n this._direction = this._directions[2];\n } else {\n let leftIndex = this.leftDirection();\n let leftDirection = this._directions[leftIndex];\n let posteriorIndex = this.posteriorDirection();\n let posteriorDirection = this._directions[posteriorIndex];\n let superiorIndex = this.superiorDirection();\n let superiorDirection = this._directions[superiorIndex];\n\n if (this._convention === 'radio') {\n switch (this._orientation) {\n case 'axial':\n // up vector is 'anterior'\n if (posteriorDirection.y > 0) {\n posteriorDirection.negate();\n }\n\n // looking towards superior\n if (superiorDirection.z < 0) {\n superiorDirection.negate();\n }\n\n //\n this._right = leftDirection; // does not matter right/left\n this._up = posteriorDirection;\n this._direction = superiorDirection;\n break;\n\n case 'coronal':\n // up vector is 'superior'\n if (superiorDirection.z < 0) {\n superiorDirection.negate();\n }\n\n // looking towards posterior\n if (posteriorDirection.y < 0) {\n posteriorDirection.negate();\n }\n\n //\n this._right = leftDirection; // does not matter right/left\n this._up = superiorDirection;\n this._direction = posteriorDirection;\n break;\n\n case 'sagittal':\n // up vector is 'superior'\n if (superiorDirection.z < 0) {\n superiorDirection.negate();\n }\n\n // looking towards right\n if (leftDirection.x > 0) {\n leftDirection.negate();\n }\n\n //\n this._right = posteriorDirection; // does not matter right/left\n this._up = superiorDirection;\n this._direction = leftDirection;\n\n break;\n\n default:\n window.console.warn(\n `\"${this._orientation}\" orientation is not valid.\n (choices: axial, coronal, sagittal)`\n );\n break;\n }\n } else if (this._convention === 'neuro') {\n switch (this._orientation) {\n case 'axial':\n // up vector is 'anterior'\n if (posteriorDirection.y > 0) {\n posteriorDirection.negate();\n }\n\n // looking towards inferior\n if (superiorDirection.z > 0) {\n superiorDirection.negate();\n }\n\n //\n this._right = leftDirection; // does not matter right/left\n this._up = posteriorDirection;\n this._direction = superiorDirection;\n break;\n\n case 'coronal':\n // up vector is 'superior'\n if (superiorDirection.z < 0) {\n superiorDirection.negate();\n }\n\n // looking towards anterior\n if (posteriorDirection.y > 0) {\n posteriorDirection.negate();\n }\n\n //\n this._right = leftDirection; // does not matter right/left\n this._up = superiorDirection;\n this._direction = posteriorDirection;\n break;\n\n case 'sagittal':\n // up vector is 'superior'\n if (superiorDirection.z < 0) {\n superiorDirection.negate();\n }\n\n // looking towards right\n if (leftDirection.x > 0) {\n leftDirection.negate();\n }\n\n //\n this._right = posteriorDirection; // does not matter right/left\n this._up = superiorDirection;\n this._direction = leftDirection;\n\n break;\n\n default:\n window.console.warn(\n `\"${this._orientation}\" orientation is not valid.\n (choices: axial, coronal, sagittal)`\n );\n break;\n }\n } else {\n window.console.warn(`${this._convention} is not valid (choices: radio, neuro)`);\n }\n }\n\n // that is what determines left/right\n let ray = {\n position: this._box.center,\n direction: this._direction,\n };\n\n let intersections = this._orderIntersections(\n Intersections.rayBox(ray, this._box),\n this._direction\n );\n this._front = intersections[0];\n this._back = intersections[1];\n\n // set default values\n this.up.set(this._up.x, this._up.y, this._up.z);\n this._updateCanvas();\n this._updatePositionAndTarget(this._front, this._back);\n this._updateMatrices();\n this._updateDirections();\n }\n\n leftDirection() {\n return this._findMaxIndex(this._directions, 0);\n }\n\n posteriorDirection() {\n return this._findMaxIndex(this._directions, 1);\n }\n\n superiorDirection() {\n return this._findMaxIndex(this._directions, 2);\n }\n\n /**\n * Invert rows in the current slice.\n * Inverting rows in 2 steps:\n * * Flip the \"up\" vector\n * * Look at the slice from the other side\n */\n invertRows() {\n // flip \"up\" vector\n // we flip up first because invertColumns update projectio matrices\n this.up.multiplyScalar(-1);\n this.invertColumns();\n\n this._updateDirections();\n }\n\n /**\n * Invert rows in the current slice.\n * Inverting rows in 1 step:\n * * Look at the slice from the other side\n */\n invertColumns() {\n this.center();\n // rotate 180 degrees around the up vector...\n let oppositePosition = this._oppositePosition(this.position);\n\n // update posistion and target\n // clone is needed because this.position is overwritten in method\n this._updatePositionAndTarget(oppositePosition, this.position.clone());\n this._updateMatrices();\n this._fromFront = !this._fromFront;\n\n this._angle %= 360;\n this._angle = 360 - this._angle;\n\n this._updateDirections();\n }\n\n /**\n * Center slice in the camera FOV.\n * It also updates the controllers properly.\n * We can center a camera from the front or from the back.\n */\n center() {\n if (this._fromFront) {\n this._updatePositionAndTarget(this._front, this._back);\n } else {\n this._updatePositionAndTarget(this._back, this._front);\n }\n\n this._updateMatrices();\n this._updateDirections();\n }\n\n /**\n * Pi/2 rotation around the zCosine axis.\n * Clock-wise rotation from the user point of view.\n */\n rotate(angle = null) {\n this.center();\n\n let rotationToApply = 90;\n if (angle === null) {\n rotationToApply *= -1;\n this._angle += 90;\n } else {\n rotationToApply = 360 - (angle - this._angle);\n this._angle = angle;\n }\n\n this._angle %= 360;\n\n // Rotate the up vector around the \"zCosine\"\n let rotation = new three.Matrix4().makeRotationAxis(\n this._direction,\n (rotationToApply * Math.PI) / 180\n );\n this.up.applyMatrix4(rotation);\n\n this._updateMatrices();\n this._updateDirections();\n }\n\n // dimensions[0] // width\n // dimensions[1] // height\n // direction= 0 width, 1 height, 2 best\n // factor\n fitBox(direction = 0, factor = 1.5) {\n //\n // if (!(dimensions && dimensions.length >= 2)) {\n // window.console.log('Invalid dimensions container.');\n // window.console.log(dimensions);\n\n // return false;\n // }\n\n //\n let zoom = 1;\n\n // update zoom\n switch (direction) {\n case 0:\n zoom = factor * this._computeZoom(this._canvas.width, this._right);\n break;\n case 1:\n zoom = factor * this._computeZoom(this._canvas.height, this._up);\n break;\n case 2:\n zoom =\n factor *\n Math.min(\n this._computeZoom(this._canvas.width, this._right),\n this._computeZoom(this._canvas.height, this._up)\n );\n break;\n default:\n break;\n }\n\n if (!zoom) {\n return false;\n }\n\n this.zoom = zoom;\n\n this.center();\n }\n\n _adjustTopDirection(horizontalDirection, verticalDirection) {\n const vMaxIndex = this._getMaxIndex(verticalDirection);\n\n // should handle vMax index === 0\n if (\n (vMaxIndex === 2 && verticalDirection.getComponent(vMaxIndex) < 0) ||\n (vMaxIndex === 1 && verticalDirection.getComponent(vMaxIndex) > 0) ||\n (vMaxIndex === 0 && verticalDirection.getComponent(vMaxIndex) > 0)\n ) {\n verticalDirection.negate();\n }\n\n return verticalDirection;\n }\n\n _getMaxIndex(vector) {\n // init with X value\n let maxValue = Math.abs(vector.x);\n let index = 0;\n\n if (Math.abs(vector.y) > maxValue) {\n maxValue = Math.abs(vector.y);\n index = 1;\n }\n\n if (Math.abs(vector.z) > maxValue) {\n index = 2;\n }\n\n return index;\n }\n\n _findMaxIndex(directions, target) {\n // get index of the most superior direction\n let maxIndices = this._getMaxIndices(directions);\n\n for (let i = 0; i < maxIndices.length; i++) {\n if (maxIndices[i] === target) {\n return i;\n }\n }\n }\n\n _getMaxIndices(directions) {\n let indices = [];\n indices.push(this._getMaxIndex(directions[0]));\n indices.push(this._getMaxIndex(directions[1]));\n indices.push(this._getMaxIndex(directions[2]));\n\n return indices;\n }\n\n _orderIntersections(intersections, direction) {\n const ordered = intersections[0].dot(direction) < intersections[1].dot(direction);\n\n if (!ordered) {\n return [intersections[1], intersections[0]];\n }\n\n return intersections;\n }\n\n _updateCanvas() {\n let camFactor = 2;\n this.left = -this._canvas.width / camFactor;\n this.right = this._canvas.width / camFactor;\n this.top = this._canvas.height / camFactor;\n this.bottom = -this._canvas.height / camFactor;\n\n this._updateMatrices();\n this.controls.handleResize();\n }\n\n _oppositePosition(position) {\n let oppositePosition = position.clone();\n // center world postion around box center\n oppositePosition.sub(this._box.center);\n // rotate\n let rotation = new three.Matrix4().makeRotationAxis(this.up, Math.PI);\n\n oppositePosition.applyMatrix4(rotation);\n // translate back to world position\n oppositePosition.add(this._box.center);\n return oppositePosition;\n }\n\n _computeZoom(dimension, direction) {\n if (!(dimension && dimension > 0)) {\n window.console.log('Invalid dimension provided.');\n window.console.log(dimension);\n return false;\n }\n\n // ray\n let ray = {\n position: this._box.center.clone(),\n direction: direction,\n };\n\n let intersections = Intersections.rayBox(ray, this._box);\n if (intersections.length < 2) {\n window.console.log('Can not adjust the camera ( < 2 intersections).');\n window.console.log(ray);\n window.console.log(this._box);\n return false;\n }\n\n return dimension / intersections[0].distanceTo(intersections[1]);\n }\n\n _updatePositionAndTarget(position, target) {\n // position\n this.position.set(position.x, position.y, position.z);\n\n // targets\n this.lookAt(target.x, target.y, target.z);\n this._controls.target.set(target.x, target.y, target.z);\n }\n\n _updateMatrices() {\n this._controls.update();\n // THEN camera\n this.updateProjectionMatrix();\n this.updateMatrixWorld();\n }\n\n _updateLabels() {\n this._directionsLabel = [\n this._vector2Label(this._up),\n this._vector2Label(this._up.clone().negate()),\n this._vector2Label(this._right),\n this._vector2Label(this._right.clone().negate()),\n this._vector2Label(this._direction),\n this._vector2Label(this._direction.clone().negate()),\n ];\n }\n\n _vector2Label(direction) {\n const index = this._getMaxIndex(direction);\n // set vector max value to 1\n const scaledDirection = direction\n .clone()\n .divideScalar(Math.abs(direction.getComponent(index)));\n const delta = 0.2;\n let label = '';\n\n // loop through components of the vector\n for (let i = 0; i < 3; i++) {\n if (i === 0) {\n if (scaledDirection.getComponent(i) + delta >= 1) {\n label += 'L';\n } else if (scaledDirection.getComponent(i) - delta <= -1) {\n label += 'R';\n }\n }\n\n if (i === 1) {\n if (scaledDirection.getComponent(i) + delta >= 1) {\n label += 'P';\n } else if (scaledDirection.getComponent(i) - delta <= -1) {\n label += 'A';\n }\n }\n\n if (i === 2) {\n if (scaledDirection.getComponent(i) + delta >= 1) {\n label += 'S';\n } else if (scaledDirection.getComponent(i) - delta <= -1) {\n label += 'I';\n }\n }\n }\n\n return label;\n }\n\n _updateDirections() {\n // up is correct\n this._up = this.up.clone();\n\n // direction\n let pLocal = new three.Vector3(0, 0, -1);\n let pWorld = pLocal.applyMatrix4(this.matrixWorld);\n this._direction = pWorld.sub(this.position).normalize();\n\n // right\n this._right = new three.Vector3().crossVectors(this._direction, this.up);\n\n // update labels accordingly\n this._updateLabels();\n }\n\n set controls(controls) {\n this._controls = controls;\n }\n\n get controls() {\n return this._controls;\n }\n\n set box(box) {\n this._box = box;\n }\n\n get box() {\n return this._box;\n }\n\n set canvas(canvas) {\n this._canvas = canvas;\n this._updateCanvas();\n }\n\n get canvas() {\n return this._canvas;\n }\n\n set angle(angle) {\n this.rotate(angle);\n }\n\n get angle() {\n return this._angle;\n }\n\n set directions(directions) {\n this._directions = directions;\n }\n\n get directions() {\n return this._directions;\n }\n\n set convention(convention) {\n this._convention = convention;\n }\n\n get convention() {\n return this._convention;\n }\n\n set orientation(orientation) {\n this._orientation = orientation;\n }\n\n get orientation() {\n return this._orientation;\n }\n\n set directionsLabel(directionsLabel) {\n this._directionsLabel = directionsLabel;\n }\n\n get directionsLabel() {\n return this._directionsLabel;\n }\n\n set stackOrientation(stackOrientation) {\n this._stackOrientation = stackOrientation;\n\n if (this._stackOrientation === 0) {\n this._orientation = 'default';\n } else {\n const maxIndex = this._getMaxIndex(this._directions[(this._stackOrientation + 2) % 3]);\n\n if (maxIndex === 0) {\n this._orientation = 'sagittal';\n } else if (maxIndex === 1) {\n this._orientation = 'coronal';\n } else if (maxIndex === 2) {\n this._orientation = 'axial';\n }\n }\n }\n\n get stackOrientation() {\n //\n if (this._orientation === 'default') {\n this._stackOrientation = 0;\n } else {\n let maxIndex = this._getMaxIndex(this._direction);\n\n if (maxIndex === this._getMaxIndex(this._directions[2])) {\n this._stackOrientation = 0;\n } else if (maxIndex === this._getMaxIndex(this._directions[0])) {\n this._stackOrientation = 1;\n } else if (maxIndex === this._getMaxIndex(this._directions[1])) {\n this._stackOrientation = 2;\n }\n }\n\n return this._stackOrientation;\n }\n };\n};\n\n// export factory\nexport { camerasOrthographic };\n// default export to\nexport default camerasOrthographic();\n","import ControlsTrackball, { trackball } from './controls.trackball';\nimport TrackballOrtho, { trackballOrtho } from './controls.trackballortho';\nimport ControlsOrbit, { orbit } from './controls.orbit';\n\nexport {\n ControlsTrackball as TrackballControl,\n trackball as trackballControlFactory,\n TrackballOrtho as TrackballOrthoControl,\n trackballOrtho as trackballOrthoControlFactory,\n ControlsOrbit as OrbitControl,\n orbit as orbitControlFactory,\n};\n","/**\n * @author qiao / https://github.com/qiao\n * @author mrdoob / http://mrdoob.com\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author erich666 / http://erichaines.com\n */\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one-finger move\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\n// adapted from https://github.com/mrdoob/three.js/blob/dev/examples/jsm/controls/OrbitControls.js\n\nconst orbit = (three = window.THREE) => {\n if (three === undefined || three.EventDispatcher === undefined) {\n return null;\n }\n\nvar OrbitControls = function ( object, domElement ) {\n\n\tthis.object = object;\n\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\n\n\t// Set to false to disable this control\n\tthis.enabled = true;\n\n\t// Set to prevent default event\n\tthis.preventDefault = true;\n\n\t// \"target\" sets the location of focus, where the object orbits around\n\tthis.target = new three.Vector3();\n\n\t// How far you can dolly in and out ( PerspectiveCamera only )\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\t// How far you can zoom in and out ( OrthographicCamera only )\n\tthis.minZoom = 0;\n\tthis.maxZoom = Infinity;\n\n\t// How far you can orbit vertically, upper and lower limits.\n\t// Range is 0 to Math.PI radians.\n\tthis.minPolarAngle = 0; // radians\n\tthis.maxPolarAngle = Math.PI; // radians\n\n\t// How far you can orbit horizontally, upper and lower limits.\n\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n\tthis.minAzimuthAngle = - Infinity; // radians\n\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t// Set to true to enable damping (inertia)\n\t// If damping is enabled, you must call controls.update() in your animation loop\n\tthis.enableDamping = false;\n\tthis.dampingFactor = 0.25;\n\n\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t// Set to false to disable zooming\n\tthis.enableZoom = true;\n\tthis.zoomSpeed = 1.0;\n\n\t// Set to false to disable rotating\n\tthis.enableRotate = true;\n\tthis.rotateSpeed = 1.0;\n\n\t// Set to false to disable panning\n\tthis.enablePan = true;\n\tthis.panSpeed = 1.0;\n\tthis.screenSpacePanning = false; // if true, pan in screen-space\n\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\n\t// Set to true to automatically rotate around the target\n\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\tthis.autoRotate = false;\n\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t// Set to false to disable use of the keys\n\tthis.enableKeys = true;\n\n\t// The four arrow keys\n\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t// Mouse buttons\n\tthis.mouseButtons = { LEFT: three.MOUSE.LEFT, MIDDLE: three.MOUSE.MIDDLE, RIGHT: three.MOUSE.RIGHT };\n\n\t// for reset\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\tthis.zoom0 = this.object.zoom;\n\n\t//\n\t// public methods\n\t//\n\n\tthis.getPolarAngle = function () {\n\n\t\treturn spherical.phi;\n\n\t};\n\n\tthis.getAzimuthalAngle = function () {\n\n\t\treturn spherical.theta;\n\n\t};\n\n\tthis.saveState = function () {\n\n\t\tscope.target0.copy( scope.target );\n\t\tscope.position0.copy( scope.object.position );\n\t\tscope.zoom0 = scope.object.zoom;\n\n\t};\n\n\tthis.reset = function () {\n\n\t\tscope.target.copy( scope.target0 );\n\t\tscope.object.position.copy( scope.position0 );\n\t\tscope.object.zoom = scope.zoom0;\n\n\t\tscope.object.updateProjectionMatrix();\n\t\tscope.dispatchEvent( changeEvent );\n\n\t\tscope.update();\n\n\t\tstate = STATE.NONE;\n\n };\n \n // this method is there to match the Trackball API\n this.handleResize = function () {\n\n }\n\n\t// this method is exposed, but perhaps it would be better if we can make it private...\n\tthis.update = function () {\n\n\t\tvar offset = new three.Vector3();\n\n\t\t// so camera.up is the orbit axis\n\t\tvar quat = new three.Quaternion().setFromUnitVectors( object.up, new three.Vector3( 0, 1, 0 ) );\n\t\tvar quatInverse = quat.clone().inverse();\n\n\t\tvar lastPosition = new three.Vector3();\n\t\tvar lastQuaternion = new three.Quaternion();\n\n\t\treturn function update() {\n\n\t\t\tvar position = scope.object.position;\n\n\t\t\toffset.copy( position ).sub( scope.target );\n\n\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\toffset.applyQuaternion( quat );\n\n\t\t\t// angle from z-axis around y-axis\n\t\t\tspherical.setFromVector3( offset );\n\n\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\n\n\t\t\t\trotateLeft( getAutoRotationAngle() );\n\n\t\t\t}\n\n\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\tspherical.phi += sphericalDelta.phi;\n\n\t\t\t// restrict theta to be between desired limits\n\t\t\tspherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) );\n\n\t\t\t// restrict phi to be between desired limits\n\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n\t\t\tspherical.makeSafe();\n\n\n\t\t\tspherical.radius *= scale;\n\n\t\t\t// restrict radius to be between desired limits\n\t\t\tspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\n\n\t\t\t// move target to panned location\n\t\t\tscope.target.add( panOffset );\n\n\t\t\toffset.setFromSpherical( spherical );\n\n\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\toffset.applyQuaternion( quatInverse );\n\n\t\t\tposition.copy( scope.target ).add( offset );\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\n\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n\t\t\t} else {\n\n\t\t\t\tsphericalDelta.set( 0, 0, 0 );\n\n\t\t\t\tpanOffset.set( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t\tscale = 1;\n\n\t\t\t// update condition is:\n\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\tif ( zoomChanged ||\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tzoomChanged = false;\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t};\n\n\t}();\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );\n\t\tscope.domElement.removeEventListener( 'mousedown', onMouseDown, false );\n\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel, false );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', onTouchStart, false );\n\t\tscope.domElement.removeEventListener( 'touchend', onTouchEnd, false );\n\t\tscope.domElement.removeEventListener( 'touchmove', onTouchMove, false );\n\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\n\n\t\twindow.removeEventListener( 'keydown', onKeyDown, false );\n\n\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t};\n\n\t//\n\t// internals\n\t//\n\n\tvar scope = this;\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\tvar STATE = { NONE: - 1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY_PAN: 4 };\n\n\tvar state = STATE.NONE;\n\n\tvar EPS = 0.000001;\n\n\t// current position in spherical coordinates\n\tvar spherical = new three.Spherical();\n\tvar sphericalDelta = new three.Spherical();\n\n\tvar scale = 1;\n\tvar panOffset = new three.Vector3();\n\tvar zoomChanged = false;\n\n\tvar rotateStart = new three.Vector2();\n\tvar rotateEnd = new three.Vector2();\n\tvar rotateDelta = new three.Vector2();\n\n\tvar panStart = new three.Vector2();\n\tvar panEnd = new three.Vector2();\n\tvar panDelta = new three.Vector2();\n\n\tvar dollyStart = new three.Vector2();\n\tvar dollyEnd = new three.Vector2();\n\tvar dollyDelta = new three.Vector2();\n\n\tfunction getAutoRotationAngle() {\n\n\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t}\n\n\tfunction getZoomScale() {\n\n\t\treturn Math.pow( 0.95, scope.zoomSpeed );\n\n\t}\n\n\tfunction rotateLeft( angle ) {\n\n\t\tsphericalDelta.theta -= angle;\n\n\t}\n\n\tfunction rotateUp( angle ) {\n\n\t\tsphericalDelta.phi -= angle;\n\n\t}\n\n\tvar panLeft = function () {\n\n\t\tvar v = new three.Vector3();\n\n\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\tv.multiplyScalar( - distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\tvar panUp = function () {\n\n\t\tvar v = new three.Vector3();\n\n\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\tif ( scope.screenSpacePanning === true ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t\t} else {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t\tv.crossVectors( scope.object.up, v );\n\n\t\t\t}\n\n\t\t\tv.multiplyScalar( distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\tvar pan = function () {\n\n\t\tvar offset = new three.Vector3();\n\n\t\treturn function pan( deltaX, deltaY ) {\n\n\t\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t// perspective\n\t\t\t\tvar position = scope.object.position;\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\tvar targetDistance = offset.length();\n\n\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t// orthographic\n\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else {\n\n\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\tscope.enablePan = false;\n\n\t\t\t}\n\n\t\t};\n\n\t}();\n\n\tfunction dollyIn( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale /= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\tfunction dollyOut( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale *= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\tfunction handleMouseDownRotate( event ) {\n\n\t\t//console.log( 'handleMouseDownRotate' );\n\n\t\trotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownDolly( event ) {\n\n\t\t//console.log( 'handleMouseDownDolly' );\n\n\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownPan( event ) {\n\n\t\t//console.log( 'handleMouseDownPan' );\n\n\t\tpanStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseMoveRotate( event ) {\n\n\t\t//console.log( 'handleMouseMoveRotate' );\n\n\t\trotateEnd.set( event.clientX, event.clientY );\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMoveDolly( event ) {\n\n\t\t//console.log( 'handleMouseMoveDolly' );\n\n\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t}\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMovePan( event ) {\n\n\t\t//console.log( 'handleMouseMovePan' );\n\n\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseUp( event ) {\n\n\t\t// console.log( 'handleMouseUp' );\n\n\t}\n\n\tfunction handleMouseWheel( event ) {\n\n\t\t// console.log( 'handleMouseWheel' );\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t}\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleKeyDown( event ) {\n\n\t\t//console.log( 'handleKeyDown' );\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase scope.keys.UP:\n\t\t\t\tpan( 0, scope.keyPanSpeed );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.LEFT:\n\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.RIGHT:\n\t\t\t\tpan( - scope.keyPanSpeed, 0 );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartRotate( event ) {\n\n\t\t//console.log( 'handleTouchStartRotate' );\n\n\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t}\n\n\tfunction handleTouchStartDollyPan( event ) {\n\n\t\t//console.log( 'handleTouchStartDollyPan' );\n\n\t\tif ( scope.enableZoom ) {\n\n\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyStart.set( 0, distance );\n\n\t\t}\n\n\t\tif ( scope.enablePan ) {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchMoveRotate( event ) {\n\n\t\t//console.log( 'handleTouchMoveRotate' );\n\n\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleTouchMoveDollyPan( event ) {\n\n\t\t//console.log( 'handleTouchMoveDollyPan' );\n\n\t\tif ( scope.enableZoom ) {\n\n\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyEnd.set( 0, distance );\n\n\t\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n\t\t\tdollyIn( dollyDelta.y );\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t}\n\n\t\tif ( scope.enablePan ) {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanEnd.set( x, y );\n\n\t\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t}\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleTouchEnd( event ) {\n\n\t\t//console.log( 'handleTouchEnd' );\n\n\t}\n\n\t//\n\t// event handlers - FSM: listen for events and reset state\n\t//\n\n\tfunction onMouseDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tif ( scope.preventDefault === true ) event.preventDefault();\n\n\t\tswitch ( event.button ) {\n\n\t\t\tcase scope.mouseButtons.LEFT:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase scope.mouseButtons.MIDDLE:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\tbreak;\n\n\t\t\tcase scope.mouseButtons.RIGHT:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tdocument.addEventListener( 'mousemove', onMouseMove, false );\n\t\t\tdocument.addEventListener( 'mouseup', onMouseUp, false );\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tif ( scope.preventDefault === true ) event.preventDefault();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.DOLLY:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleMouseUp( event );\n\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onMouseWheel( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\n\n\t\tif ( scope.preventDefault === true ) {\n\t\t event.preventDefault();\n\t\t event.stopPropagation();\n\t\t}\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t\thandleMouseWheel( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction onKeyDown( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;\n\n\t\thandleKeyDown( event );\n\n\t}\n\n\tfunction onTouchStart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tif ( scope.preventDefault === true ) event.preventDefault();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\t// one-fingered touch: rotate\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchStartRotate( event );\n\n\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\t// two-fingered touch: dolly-pan\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchStartDollyPan( event );\n\n\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onTouchMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tif ( scope.preventDefault === true ) {\n\t\t event.preventDefault();\n\t\t event.stopPropagation();\n\t\t}\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1: // one-fingered touch: rotate\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\t\t\t\tif ( state !== STATE.TOUCH_ROTATE ) return; // is this needed?\n\n\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2: // two-fingered touch: dolly-pan\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\t\t\t\tif ( state !== STATE.TOUCH_DOLLY_PAN ) return; // is this needed?\n\n\t\t\t\thandleTouchMoveDollyPan( event );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t}\n\n\tfunction onTouchEnd( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleTouchEnd( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onContextMenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tif ( scope.preventDefault === true ) event.preventDefault();\n\n\t}\n\n\t//\n\n\tscope.domElement.addEventListener( 'contextmenu', onContextMenu, false );\n\n\tscope.domElement.addEventListener( 'mousedown', onMouseDown, false );\n\tscope.domElement.addEventListener( 'wheel', onMouseWheel, false );\n\n\tscope.domElement.addEventListener( 'touchstart', onTouchStart, false );\n\tscope.domElement.addEventListener( 'touchend', onTouchEnd, false );\n\tscope.domElement.addEventListener( 'touchmove', onTouchMove, false );\n\n\twindow.addEventListener( 'keydown', onKeyDown, false );\n\n\t// force an update at start\n\n\tthis.update();\n\n};\n\nOrbitControls.prototype = Object.create( three.EventDispatcher.prototype );\nOrbitControls.prototype.constructor = OrbitControls;\n\nObject.defineProperties( OrbitControls.prototype, {\n\n\tcenter: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .center has been renamed to .target' );\n\t\t\treturn this.target;\n\n\t\t}\n\n\t},\n\n\t// backward compatibility\n\n\tnoZoom: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n\t\t\treturn ! this.enableZoom;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n\t\t\tthis.enableZoom = ! value;\n\n\t\t}\n\n\t},\n\n\tnoRotate: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n\t\t\treturn ! this.enableRotate;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n\t\t\tthis.enableRotate = ! value;\n\n\t\t}\n\n\t},\n\n\tnoPan: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n\t\t\treturn ! this.enablePan;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n\t\t\tthis.enablePan = ! value;\n\n\t\t}\n\n\t},\n\n\tnoKeys: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n\t\t\treturn ! this.enableKeys;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n\t\t\tthis.enableKeys = ! value;\n\n\t\t}\n\n\t},\n\n\tstaticMoving: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n\t\t\treturn ! this.enableDamping;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n\t\t\tthis.enableDamping = ! value;\n\n\t\t}\n\n\t},\n\n\tdynamicDampingFactor: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n\t\t\treturn this.dampingFactor;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n\t\t\tthis.dampingFactor = value;\n\n\t\t}\n\n\t}\n\n} );\n\nreturn OrbitControls;\n}\n\nexport { orbit };\nexport default orbit();\n","/**\n * Original authors from THREEJS repo\n * @author Eberhard Graether / http://egraether.com/\n * @author Mark Lundin / http://mark-lundin.com\n * @author Simone Manini / http://daron1337.github.io\n * @author Luca Antiga / http://lantiga.github.io\n */\n\nconst trackball = (three = window.THREE) => {\n if (three === undefined || three.EventDispatcher === undefined) {\n return null;\n }\n\n const Constructor = three.EventDispatcher;\n return class extends Constructor {\n constructor(object, domElement) {\n super();\n\n let _this = this;\n let STATE = {\n NONE: -1,\n ROTATE: 0,\n ZOOM: 1,\n PAN: 2,\n TOUCH_ROTATE: 3,\n TOUCH_ZOOM: 4,\n TOUCH_PAN: 5,\n CUSTOM: 99,\n };\n\n this.object = object;\n this.domElement = domElement !== undefined ? domElement : document;\n\n // API\n\n this.enabled = true;\n\n this.screen = { left: 0, top: 0, width: 0, height: 0 };\n\n this.rotateSpeed = 1.0;\n this.zoomSpeed = 1.2;\n this.panSpeed = 0.3;\n\n this.noRotate = false;\n this.noZoom = false;\n this.noPan = false;\n this.noCustom = false;\n\n this.forceState = -1;\n\n this.staticMoving = false;\n this.dynamicDampingFactor = 0.2;\n\n this.minDistance = 0;\n this.maxDistance = Infinity;\n\n this.keys = [65 /* A*/, 83 /* S*/, 68];\n\n // internals\n\n this.target = new three.Vector3();\n\n let EPS = 0.000001;\n\n let lastPosition = new three.Vector3();\n\n let _state = STATE.NONE,\n _prevState = STATE.NONE,\n _eye = new three.Vector3(),\n _movePrev = new three.Vector2(),\n _moveCurr = new three.Vector2(),\n _lastAxis = new three.Vector3(),\n _lastAngle = 0,\n _zoomStart = new three.Vector2(),\n _zoomEnd = new three.Vector2(),\n _touchZoomDistanceStart = 0,\n _touchZoomDistanceEnd = 0,\n _panStart = new three.Vector2(),\n _panEnd = new three.Vector2(),\n _customStart = new three.Vector2(),\n _customEnd = new three.Vector2();\n\n // for reset\n\n this.target0 = this.target.clone();\n this.position0 = this.object.position.clone();\n this.up0 = this.object.up.clone();\n\n // events\n\n let changeEvent = { type: 'change' };\n let startEvent = { type: 'start' };\n let endEvent = { type: 'end' };\n\n // methods\n\n this.handleResize = function() {\n if (this.domElement === document) {\n this.screen.left = 0;\n this.screen.top = 0;\n this.screen.width = window.innerWidth;\n this.screen.height = window.innerHeight;\n } else {\n let box = this.domElement.getBoundingClientRect();\n // adjustments come from similar code in the jquery offset() function\n let d = this.domElement.ownerDocument.documentElement;\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\n this.screen.width = box.width;\n this.screen.height = box.height;\n }\n };\n\n this.handleEvent = function(event) {\n if (typeof this[event.type] == 'function') {\n this[event.type](event);\n }\n };\n\n let getMouseOnScreen = (function() {\n let vector = new three.Vector2();\n\n return function(pageX, pageY) {\n vector.set(\n (pageX - _this.screen.left) / _this.screen.width,\n (pageY - _this.screen.top) / _this.screen.height\n );\n\n return vector;\n };\n })();\n\n let getMouseOnCircle = (function() {\n let vector = new three.Vector2();\n\n return function(pageX, pageY) {\n vector.set(\n (pageX - _this.screen.width * 0.5 - _this.screen.left) / (_this.screen.width * 0.5),\n (_this.screen.height + 2 * (_this.screen.top - pageY)) / _this.screen.width // screen.width intentional\n );\n\n return vector;\n };\n })();\n\n this.rotateCamera = (function() {\n let axis = new three.Vector3(),\n quaternion = new three.Quaternion(),\n eyeDirection = new three.Vector3(),\n objectUpDirection = new three.Vector3(),\n objectSidewaysDirection = new three.Vector3(),\n moveDirection = new three.Vector3(),\n angle;\n\n return function() {\n moveDirection.set(_moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0);\n angle = moveDirection.length();\n\n if (angle) {\n _eye.copy(_this.object.position).sub(_this.target);\n\n eyeDirection.copy(_eye).normalize();\n objectUpDirection.copy(_this.object.up).normalize();\n objectSidewaysDirection.crossVectors(objectUpDirection, eyeDirection).normalize();\n\n objectUpDirection.setLength(_moveCurr.y - _movePrev.y);\n objectSidewaysDirection.setLength(_moveCurr.x - _movePrev.x);\n\n moveDirection.copy(objectUpDirection.add(objectSidewaysDirection));\n\n axis.crossVectors(moveDirection, _eye).normalize();\n\n angle *= _this.rotateSpeed;\n quaternion.setFromAxisAngle(axis, angle);\n\n _eye.applyQuaternion(quaternion);\n _this.object.up.applyQuaternion(quaternion);\n\n _lastAxis.copy(axis);\n _lastAngle = angle;\n } else if (!_this.staticMoving && _lastAngle) {\n _lastAngle *= Math.sqrt(1.0 - _this.dynamicDampingFactor);\n _eye.copy(_this.object.position).sub(_this.target);\n quaternion.setFromAxisAngle(_lastAxis, _lastAngle);\n _eye.applyQuaternion(quaternion);\n _this.object.up.applyQuaternion(quaternion);\n }\n\n _movePrev.copy(_moveCurr);\n };\n })();\n\n this.zoomCamera = function() {\n let factor;\n\n if (_state === STATE.TOUCH_ZOOM) {\n factor = _touchZoomDistanceStart / _touchZoomDistanceEnd;\n _touchZoomDistanceStart = _touchZoomDistanceEnd;\n _eye.multiplyScalar(factor);\n } else {\n factor = 1.0 + (_zoomEnd.y - _zoomStart.y) * _this.zoomSpeed;\n\n if (factor !== 1.0 && factor > 0.0) {\n _eye.multiplyScalar(factor);\n\n if (_this.staticMoving) {\n _zoomStart.copy(_zoomEnd);\n } else {\n _zoomStart.y += (_zoomEnd.y - _zoomStart.y) * this.dynamicDampingFactor;\n }\n }\n }\n };\n\n this.panCamera = (function() {\n let mouseChange = new three.Vector2(),\n objectUp = new three.Vector3(),\n pan = new three.Vector3();\n\n return function() {\n mouseChange.copy(_panEnd).sub(_panStart);\n\n if (mouseChange.lengthSq()) {\n mouseChange.multiplyScalar(_eye.length() * _this.panSpeed);\n\n pan\n .copy(_eye)\n .cross(_this.object.up)\n .setLength(mouseChange.x);\n pan.add(objectUp.copy(_this.object.up).setLength(mouseChange.y));\n\n _this.object.position.add(pan);\n _this.target.add(pan);\n\n if (_this.staticMoving) {\n _panStart.copy(_panEnd);\n } else {\n _panStart.add(\n mouseChange\n .subVectors(_panEnd, _panStart)\n .multiplyScalar(_this.dynamicDampingFactor)\n );\n }\n }\n };\n })();\n\n this.checkDistances = function() {\n if (!_this.noZoom || !_this.noPan) {\n if (_eye.lengthSq() > _this.maxDistance * _this.maxDistance) {\n _this.object.position.addVectors(_this.target, _eye.setLength(_this.maxDistance));\n }\n\n if (_eye.lengthSq() < _this.minDistance * _this.minDistance) {\n _this.object.position.addVectors(_this.target, _eye.setLength(_this.minDistance));\n }\n }\n };\n\n this.update = function() {\n _eye.subVectors(_this.object.position, _this.target);\n\n if (!_this.noRotate) {\n _this.rotateCamera();\n }\n\n if (!_this.noZoom) {\n _this.zoomCamera();\n }\n\n if (!_this.noPan) {\n _this.panCamera();\n }\n\n if (!_this.noCustom) {\n _this.custom(_customStart, _customEnd);\n }\n\n _this.object.position.addVectors(_this.target, _eye);\n\n _this.checkDistances();\n\n _this.object.lookAt(_this.target);\n\n if (lastPosition.distanceToSquared(_this.object.position) > EPS) {\n _this.dispatchEvent(changeEvent);\n\n lastPosition.copy(_this.object.position);\n }\n };\n\n this.reset = function() {\n _state = STATE.NONE;\n _prevState = STATE.NONE;\n\n _this.target.copy(_this.target0);\n _this.object.position.copy(_this.position0);\n _this.object.up.copy(_this.up0);\n\n _eye.subVectors(_this.object.position, _this.target);\n\n _this.object.lookAt(_this.target);\n\n _this.dispatchEvent(changeEvent);\n\n lastPosition.copy(_this.object.position);\n };\n\n this.setState = function(targetState) {\n _this.forceState = targetState;\n _prevState = targetState;\n _state = targetState;\n };\n\n this.custom = function(customStart, customEnd) {};\n\n // listeners\n\n function keydown(event) {\n if (_this.enabled === false) return;\n\n window.removeEventListener('keydown', keydown);\n\n _prevState = _state;\n\n if (_state !== STATE.NONE) {\n return;\n } else if (event.keyCode === _this.keys[STATE.ROTATE] && !_this.noRotate) {\n _state = STATE.ROTATE;\n } else if (event.keyCode === _this.keys[STATE.ZOOM] && !_this.noZoom) {\n _state = STATE.ZOOM;\n } else if (event.keyCode === _this.keys[STATE.PAN] && !_this.noPan) {\n _state = STATE.PAN;\n }\n }\n\n function keyup(event) {\n if (_this.enabled === false) return;\n\n _state = _prevState;\n\n window.addEventListener('keydown', keydown, false);\n }\n\n function mousedown(event) {\n if (_this.enabled === false) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (_state === STATE.NONE) {\n _state = event.button;\n }\n\n if (_state === STATE.ROTATE && !_this.noRotate) {\n _moveCurr.copy(getMouseOnCircle(event.pageX, event.pageY));\n _movePrev.copy(_moveCurr);\n } else if (_state === STATE.ZOOM && !_this.noZoom) {\n _zoomStart.copy(getMouseOnScreen(event.pageX, event.pageY));\n _zoomEnd.copy(_zoomStart);\n } else if (_state === STATE.PAN && !_this.noPan) {\n _panStart.copy(getMouseOnScreen(event.pageX, event.pageY));\n _panEnd.copy(_panStart);\n } else if (_state === STATE.CUSTOM && !_this.noCustom) {\n _customStart.copy(getMouseOnScreen(event.pageX, event.pageY));\n _customEnd.copy(_panStart);\n }\n\n document.addEventListener('mousemove', mousemove, false);\n document.addEventListener('mouseup', mouseup, false);\n\n _this.dispatchEvent(startEvent);\n }\n\n function mousemove(event) {\n if (_this.enabled === false) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (_state === STATE.ROTATE && !_this.noRotate) {\n _movePrev.copy(_moveCurr);\n _moveCurr.copy(getMouseOnCircle(event.pageX, event.pageY));\n } else if (_state === STATE.ZOOM && !_this.noZoom) {\n _zoomEnd.copy(getMouseOnScreen(event.pageX, event.pageY));\n } else if (_state === STATE.PAN && !_this.noPan) {\n _panEnd.copy(getMouseOnScreen(event.pageX, event.pageY));\n } else if (_state === STATE.CUSTOM && !_this.noCustom) {\n _customEnd.copy(getMouseOnScreen(event.pageX, event.pageY));\n }\n }\n\n function mouseup(event) {\n if (_this.enabled === false) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (_this.forceState === -1) {\n _state = STATE.NONE;\n }\n\n document.removeEventListener('mousemove', mousemove);\n document.removeEventListener('mouseup', mouseup);\n _this.dispatchEvent(endEvent);\n }\n\n function mousewheel(event) {\n if (_this.enabled === false) return;\n\n if (_this.noZoom === true) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n switch (event.deltaMode) {\n case 2:\n // Zoom in pages\n _zoomStart.y -= event.deltaY * 0.025;\n break;\n\n case 1:\n // Zoom in lines\n _zoomStart.y -= event.deltaY * 0.01;\n break;\n\n default:\n // undefined, 0, assume pixels\n _zoomStart.y -= event.deltaY * 0.00025;\n break;\n }\n\n // _zoomStart.y += delta * 0.01;\n _this.dispatchEvent(startEvent);\n _this.dispatchEvent(endEvent);\n }\n\n function touchstart(event) {\n if (_this.enabled === false) return;\n\n if (_this.forceState === -1) {\n switch (event.touches.length) {\n case 1:\n _state = STATE.TOUCH_ROTATE;\n _moveCurr.copy(getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\n _movePrev.copy(_moveCurr);\n break;\n\n case 2:\n _state = STATE.TOUCH_ZOOM;\n var dx = event.touches[0].pageX - event.touches[1].pageX;\n var dy = event.touches[0].pageY - event.touches[1].pageY;\n _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy);\n\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n _panStart.copy(getMouseOnScreen(x, y));\n _panEnd.copy(_panStart);\n break;\n\n default:\n _state = STATE.NONE;\n }\n } else {\n // { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4, CUSTOM: 99 };\n switch (_state) {\n case 0:\n // 1 or 2 fingers, smae behavior\n _state = STATE.TOUCH_ROTATE;\n _moveCurr.copy(getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\n _movePrev.copy(_moveCurr);\n break;\n\n case 1:\n case 4:\n if (event.touches.length >= 2) {\n _state = STATE.TOUCH_ZOOM;\n var dx = event.touches[0].pageX - event.touches[1].pageX;\n var dy = event.touches[0].pageY - event.touches[1].pageY;\n _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy);\n } else {\n _state = STATE.ZOOM;\n _zoomStart.copy(getMouseOnScreen(event.touches[0].pageX, event.touches[0].pageY));\n _zoomEnd.copy(_zoomStart);\n }\n break;\n\n case 2:\n case 5:\n if (event.touches.length >= 2) {\n _state = STATE.TOUCH_PAN;\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n _panStart.copy(getMouseOnScreen(x, y));\n _panEnd.copy(_panStart);\n } else {\n _state = STATE.PAN;\n _panStart.copy(getMouseOnScreen(event.touches[0].pageX, event.touches[0].pageY));\n _panEnd.copy(_panStart);\n }\n break;\n\n case 99:\n _state = STATE.CUSTOM;\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n _customStart.copy(getMouseOnScreen(x, y));\n _customEnd.copy(_customStart);\n break;\n\n default:\n _state = STATE.NONE;\n }\n }\n\n _this.dispatchEvent(startEvent);\n }\n\n function touchmove(event) {\n if (_this.enabled === false) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (_this.forceState === -1) {\n switch (event.touches.length) {\n case 1:\n _movePrev.copy(_moveCurr);\n _moveCurr.copy(getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\n break;\n\n case 2:\n var dx = event.touches[0].pageX - event.touches[1].pageX;\n var dy = event.touches[0].pageY - event.touches[1].pageY;\n _touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy);\n\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n _panEnd.copy(getMouseOnScreen(x, y));\n break;\n\n default:\n _state = STATE.NONE;\n }\n } else {\n // { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4, CUSTOM: 99 };\n switch (_state) {\n case 0:\n _movePrev.copy(_moveCurr);\n _moveCurr.copy(getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\n break;\n\n case 1:\n _zoomEnd.copy(getMouseOnScreen(event.touches[0].pageX, event.touches[0].pageY));\n break;\n\n case 2:\n _panEnd.copy(getMouseOnScreen(event.touches[0].pageX, event.touches[0].pageY));\n break;\n\n case 4:\n // 2 fingers!\n // TOUCH ZOOM\n var dx = event.touches[0].pageX - event.touches[1].pageX;\n var dy = event.touches[0].pageY - event.touches[1].pageY;\n _touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy);\n break;\n\n case 5:\n // 2 fingers\n // TOUCH_PAN\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n _panEnd.copy(getMouseOnScreen(x, y));\n break;\n\n case 99:\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n _customEnd.copy(getMouseOnScreen(x, y));\n break;\n\n default:\n _state = STATE.NONE;\n }\n }\n }\n\n function touchend(event) {\n if (_this.enabled === false) return;\n\n if (_this.forceState === -1) {\n switch (event.touches.length) {\n case 1:\n _movePrev.copy(_moveCurr);\n _moveCurr.copy(getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\n break;\n\n case 2:\n _touchZoomDistanceStart = _touchZoomDistanceEnd = 0;\n\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n _panEnd.copy(getMouseOnScreen(x, y));\n _panStart.copy(_panEnd);\n break;\n }\n\n _state = STATE.NONE;\n } else {\n switch (_state) {\n case 0:\n _movePrev.copy(_moveCurr);\n _moveCurr.copy(getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\n break;\n\n case 1:\n case 2:\n break;\n\n case 4:\n // TOUCH ZOOM\n _touchZoomDistanceStart = _touchZoomDistanceEnd = 0;\n _state = STATE.ZOOM;\n break;\n\n case 5:\n // TOUCH ZOOM\n if (event.touches.length >= 2) {\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n _panEnd.copy(getMouseOnScreen(x, y));\n _panStart.copy(_panEnd);\n }\n _state = STATE.PAN;\n break;\n\n case 99:\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n _customEnd.copy(getMouseOnScreen(x, y));\n _customStart.copy(_customEnd);\n break;\n\n default:\n _state = STATE.NONE;\n }\n }\n\n _this.dispatchEvent(endEvent);\n }\n\n function contextmenu(event) {\n event.preventDefault();\n }\n\n this.dispose = function() {\n this.domElement.removeEventListener('contextmenu', contextmenu, false);\n this.domElement.removeEventListener('mousedown', mousedown, false);\n this.domElement.removeEventListener('wheel', mousewheel, false);\n\n this.domElement.removeEventListener('touchstart', touchstart, false);\n this.domElement.removeEventListener('touchend', touchend, false);\n this.domElement.removeEventListener('touchmove', touchmove, false);\n\n window.removeEventListener('keydown', keydown, false);\n window.removeEventListener('keyup', keyup, false);\n };\n\n this.domElement.addEventListener('contextmenu', contextmenu, false);\n this.domElement.addEventListener('mousedown', mousedown, false);\n this.domElement.addEventListener('wheel', mousewheel, false);\n\n this.domElement.addEventListener('touchstart', touchstart, false);\n this.domElement.addEventListener('touchend', touchend, false);\n this.domElement.addEventListener('touchmove', touchmove, false);\n\n window.addEventListener('keydown', keydown, false);\n window.addEventListener('keyup', keyup, false);\n\n this.handleResize();\n\n // force an update at start\n this.update();\n }\n };\n};\n\n// export factory\nexport { trackball };\n// default export to\nexport default trackball();\n","/**\n * @author Eberhard Graether / http://egraether.com/\n * @author Mark Lundin / http://mark-lundin.com\n * @author Patrick Fuller / http://patrick-fuller.com\n * @author Max Smolens / https://github.com/msmolens\n */\n\nconst trackballOrtho = (three = window.THREE) => {\n if (three === undefined || three.EventDispatcher === undefined) {\n return null;\n }\n\n const Constructor = three.EventDispatcher;\n return class extends Constructor {\n constructor(\n object,\n domElement,\n state = {\n NONE: -1,\n ROTATE: 1,\n ZOOM: 2,\n PAN: 0,\n SCROLL: 4,\n TOUCH_ROTATE: 4,\n TOUCH_ZOOM_PAN: 5,\n }\n ) {\n super();\n\n let _this = this;\n let STATE = state;\n\n this.object = object;\n this.domElement = domElement !== undefined ? domElement : document;\n\n // API\n\n this.enabled = true;\n\n this.screen = { left: 0, top: 0, width: 0, height: 0 };\n\n this.radius = 0;\n\n this.zoomSpeed = 1.2;\n\n this.noZoom = false;\n this.noPan = false;\n\n this.staticMoving = false;\n this.dynamicDampingFactor = 0.2;\n\n this.keys = [65 /* A*/, 83 /* S*/, 68];\n\n // internals\n\n this.target = new three.Vector3();\n\n let EPS = 0.000001;\n\n let _changed = true;\n\n let _state = STATE.NONE,\n _prevState = STATE.NONE,\n _eye = new three.Vector3(),\n _zoomStart = new three.Vector2(),\n _zoomEnd = new three.Vector2(),\n _touchZoomDistanceStart = 0,\n _touchZoomDistanceEnd = 0,\n _panStart = new three.Vector2(),\n _panEnd = new three.Vector2();\n\n // window level fire after...\n\n // for reset\n\n this.target0 = this.target.clone();\n this.position0 = this.object.position.clone();\n this.up0 = this.object.up.clone();\n\n this.left0 = this.object.left;\n this.right0 = this.object.right;\n this.top0 = this.object.top;\n this.bottom0 = this.object.bottom;\n\n // events\n\n let changeEvent = { type: 'change' };\n let startEvent = { type: 'start' };\n let endEvent = { type: 'end' };\n\n // methods\n\n this.handleResize = function() {\n if (this.domElement === document) {\n this.screen.left = 0;\n this.screen.top = 0;\n this.screen.width = window.innerWidth;\n this.screen.height = window.innerHeight;\n } else {\n let box = this.domElement.getBoundingClientRect();\n // adjustments come from similar code in the jquery offset() function\n let d = this.domElement.ownerDocument.documentElement;\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\n this.screen.width = box.width;\n this.screen.height = box.height;\n }\n\n this.radius = 0.5 * Math.min(this.screen.width, this.screen.height);\n\n this.left0 = this.object.left;\n this.right0 = this.object.right;\n this.top0 = this.object.top;\n this.bottom0 = this.object.bottom;\n };\n\n this.handleEvent = function(event) {\n if (typeof this[event.type] == 'function') {\n this[event.type](event);\n }\n };\n\n let getMouseOnScreen = (function() {\n let vector = new three.Vector2();\n\n return function getMouseOnScreen(pageX, pageY) {\n vector.set(\n (pageX - _this.screen.left) / _this.screen.width,\n (pageY - _this.screen.top) / _this.screen.height\n );\n\n return vector;\n };\n })();\n\n this.zoomCamera = function() {\n if (_state === STATE.TOUCH_ZOOM_PAN) {\n var factor = _touchZoomDistanceEnd / _touchZoomDistanceStart;\n _touchZoomDistanceStart = _touchZoomDistanceEnd;\n\n _this.object.zoom *= factor;\n\n _changed = true;\n } else {\n var factor = 1.0 + (_zoomEnd.y - _zoomStart.y) * _this.zoomSpeed;\n\n if (Math.abs(factor - 1.0) > EPS && factor > 0.0) {\n _this.object.zoom /= factor;\n\n if (_this.staticMoving) {\n _zoomStart.copy(_zoomEnd);\n } else {\n _zoomStart.y += (_zoomEnd.y - _zoomStart.y) * this.dynamicDampingFactor;\n }\n\n _changed = true;\n }\n }\n };\n\n this.panCamera = (function() {\n let mouseChange = new three.Vector2(),\n objectUp = new three.Vector3(),\n pan = new three.Vector3();\n\n return function panCamera() {\n mouseChange.copy(_panEnd).sub(_panStart);\n\n if (mouseChange.lengthSq()) {\n // Scale movement to keep clicked/dragged position under cursor\n let scale_x = (_this.object.right - _this.object.left) / _this.object.zoom;\n let scale_y = (_this.object.top - _this.object.bottom) / _this.object.zoom;\n mouseChange.x *= scale_x;\n mouseChange.y *= scale_y;\n\n pan\n .copy(_eye)\n .cross(_this.object.up)\n .setLength(mouseChange.x);\n pan.add(objectUp.copy(_this.object.up).setLength(mouseChange.y));\n\n _this.object.position.add(pan);\n _this.target.add(pan);\n\n if (_this.staticMoving) {\n _panStart.copy(_panEnd);\n } else {\n _panStart.add(\n mouseChange\n .subVectors(_panEnd, _panStart)\n .multiplyScalar(_this.dynamicDampingFactor)\n );\n }\n\n _changed = true;\n }\n };\n })();\n\n this.update = function() {\n _eye.subVectors(_this.object.position, _this.target);\n\n if (!_this.noZoom) {\n _this.zoomCamera();\n\n if (_changed) {\n _this.object.updateProjectionMatrix();\n }\n }\n\n if (!_this.noPan) {\n _this.panCamera();\n }\n\n _this.object.position.addVectors(_this.target, _eye);\n\n _this.object.lookAt(_this.target);\n\n if (_changed) {\n _this.dispatchEvent(changeEvent);\n\n _changed = false;\n }\n };\n\n this.reset = function() {\n _state = STATE.NONE;\n _prevState = STATE.NONE;\n\n _this.target.copy(_this.target0);\n _this.object.position.copy(_this.position0);\n _this.object.up.copy(_this.up0);\n\n _eye.subVectors(_this.object.position, _this.target);\n\n _this.object.left = _this.left0;\n _this.object.right = _this.right0;\n _this.object.top = _this.top0;\n _this.object.bottom = _this.bottom0;\n\n _this.object.lookAt(_this.target);\n\n _this.dispatchEvent(changeEvent);\n\n _changed = false;\n };\n\n // listeners\n\n function keydown(event) {\n if (_this.enabled === false) return;\n\n window.removeEventListener('keydown', keydown);\n\n _prevState = _state;\n\n if (_state !== STATE.NONE) {\n return;\n } else if (event.keyCode === _this.keys[STATE.ROTATE] && !_this.noRotate) {\n _state = STATE.ROTATE;\n } else if (event.keyCode === _this.keys[STATE.ZOOM] && !_this.noZoom) {\n _state = STATE.ZOOM;\n } else if (event.keyCode === _this.keys[STATE.PAN] && !_this.noPan) {\n _state = STATE.PAN;\n }\n }\n\n function keyup(event) {\n if (_this.enabled === false) return;\n\n _state = _prevState;\n\n window.addEventListener('keydown', keydown, false);\n }\n\n function mousedown(event) {\n if (_this.enabled === false) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (_state === STATE.NONE) {\n _state = event.button;\n }\n\n if (_state === STATE.ROTATE && !_this.noRotate) {\n } else if (_state === STATE.ZOOM && !_this.noZoom) {\n _zoomStart.copy(getMouseOnScreen(event.pageX, event.pageY));\n _zoomEnd.copy(_zoomStart);\n } else if (_state === STATE.PAN && !_this.noPan) {\n _panStart.copy(getMouseOnScreen(event.pageX, event.pageY));\n _panEnd.copy(_panStart);\n }\n\n document.addEventListener('mousemove', mousemove, false);\n document.addEventListener('mouseup', mouseup, false);\n\n _this.dispatchEvent(startEvent);\n }\n\n function mousemove(event) {\n if (_this.enabled === false) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (_state === STATE.ROTATE && !_this.noRotate) {\n } else if (_state === STATE.ZOOM && !_this.noZoom) {\n _zoomEnd.copy(getMouseOnScreen(event.pageX, event.pageY));\n } else if (_state === STATE.PAN && !_this.noPan) {\n _panEnd.copy(getMouseOnScreen(event.pageX, event.pageY));\n }\n }\n\n function mouseup(event) {\n if (_this.enabled === false) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n _state = STATE.NONE;\n\n document.removeEventListener('mousemove', mousemove);\n document.removeEventListener('mouseup', mouseup);\n _this.dispatchEvent(endEvent);\n }\n\n function mousewheel(event) {\n if (_this.enabled === false) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n //_zoomStart.y += event.deltaY * 0.01;\n /**\n * Watch deltaX and deltaY because in some cases, (i.e. Shift or Alt key pressed)\n * deltaX and deltaY are inverted.\n *\n * It is known behaviors/shortcuts to scroll through a page horizontally.\n */\n _this.dispatchEvent({\n type: 'OnScroll',\n delta: event.deltaX * 0.01 + event.deltaY * 0.01,\n });\n\n _this.dispatchEvent(startEvent);\n _this.dispatchEvent(endEvent);\n }\n\n function touchstart(event) {\n if (_this.enabled === false) return;\n\n switch (event.touches.length) {\n case 1:\n _state = STATE.TOUCH_ROTATE;\n\n break;\n\n case 2:\n _state = STATE.TOUCH_ZOOM_PAN;\n var dx = event.touches[0].pageX - event.touches[1].pageX;\n var dy = event.touches[0].pageY - event.touches[1].pageY;\n _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy);\n\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n _panStart.copy(getMouseOnScreen(x, y));\n _panEnd.copy(_panStart);\n break;\n\n default:\n _state = STATE.NONE;\n }\n _this.dispatchEvent(startEvent);\n }\n\n function touchmove(event) {\n if (_this.enabled === false) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n switch (event.touches.length) {\n case 1:\n break;\n\n case 2:\n var dx = event.touches[0].pageX - event.touches[1].pageX;\n var dy = event.touches[0].pageY - event.touches[1].pageY;\n _touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy);\n\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n _panEnd.copy(getMouseOnScreen(x, y));\n break;\n\n default:\n _state = STATE.NONE;\n }\n }\n\n function touchend(event) {\n if (_this.enabled === false) return;\n\n switch (event.touches.length) {\n case 1:\n break;\n\n case 2:\n _touchZoomDistanceStart = _touchZoomDistanceEnd = 0;\n\n var x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n var y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n _panEnd.copy(getMouseOnScreen(x, y));\n _panStart.copy(_panEnd);\n break;\n }\n\n _state = STATE.NONE;\n _this.dispatchEvent(endEvent);\n }\n\n function contextmenu(event) {\n event.preventDefault();\n }\n\n this.dispose = function() {\n this.domElement.removeEventListener('contextmenu', contextmenu, false);\n this.domElement.removeEventListener('mousedown', mousedown, false);\n this.domElement.removeEventListener('wheel', mousewheel, false);\n\n this.domElement.removeEventListener('touchstart', touchstart, false);\n this.domElement.removeEventListener('touchend', touchend, false);\n this.domElement.removeEventListener('touchmove', touchmove, false);\n\n window.removeEventListener('keydown', keydown, false);\n window.removeEventListener('keyup', keyup, false);\n };\n\n this.domElement.addEventListener('contextmenu', contextmenu, false);\n this.domElement.addEventListener('mousedown', mousedown, false);\n this.domElement.addEventListener('wheel', mousewheel, false);\n\n this.domElement.addEventListener('touchstart', touchstart, false);\n this.domElement.addEventListener('touchend', touchend, false);\n this.domElement.addEventListener('touchmove', touchmove, false);\n\n window.addEventListener('keydown', keydown, false);\n window.addEventListener('keyup', keyup, false);\n\n this.handleResize();\n\n // force an update at start\n this.update();\n }\n };\n};\n\n// export factory\nexport { trackballOrtho };\n// default export to\nexport default trackballOrtho();\n","export enum COLORS {\n blue = '#00B0FF',\n yellow = '#FFEB3B',\n red = '#F50057',\n green = '#76FF03',\n white = '#FFF',\n lightRed = '#F77',\n}\n\n/**\n * Colors utility functions\n */\nexport default class Colors {\n /**\n * Convert LAB to XYZ\n * http://www.easyrgb.com/index.php?X=MATH&H=08#text8\n *\n * @param {*} l\n * @param {*} a\n * @param {*} b\n *\n * @return {*}\n */\n public static cielab2XYZ(l: number, a: number, b: number) {\n // https://www.mathworks.com/help/images/ref/whitepoint.html\n // d65: 0.9504, 1, 1.0888\n const refX = 95.047;\n const refY = 100.0;\n const refZ = 108.883;\n\n let y = (l + 16) / 116;\n let x = a / 500 + y;\n let z = y - b / 200;\n\n if (Math.pow(y, 3) > 0.008856) {\n y = Math.pow(y, 3);\n } else {\n y = (y - 16 / 116) / 7.787;\n }\n\n if (Math.pow(x, 3) > 0.008856) {\n x = Math.pow(x, 3);\n } else {\n x = (x - 16 / 116) / 7.787;\n }\n\n if (Math.pow(z, 3) > 0.008856) {\n z = Math.pow(z, 3);\n } else {\n z = (z - 16 / 116) / 7.787;\n }\n return [refX * x, refY * y, refZ * z];\n }\n\n /**\n * Convert XYZ to RGB space\n *\n * @param {*} x\n * @param {*} y\n * @param {*} z\n *\n * @return {*}\n */\n public static xyz2RGB(x: number, y: number, z: number) {\n x /= 100;\n y /= 100;\n z /= 100;\n let r = x * 3.2406 + y * -1.5372 + z * -0.4986;\n let g = x * -0.9689 + y * 1.8758 + z * 0.0415;\n let b = x * 0.0557 + y * -0.204 + z * 1.057;\n\n if (r > 0.0031308) {\n r = 1.055 * Math.pow(r, 1 / 2.4) - 0.055;\n } else {\n r = 12.92 * r;\n }\n\n if (g > 0.0031308) {\n g = 1.055 * Math.pow(g, 1 / 2.4) - 0.055;\n } else {\n g = 12.92 * g;\n }\n\n if (b > 0.0031308) {\n b = 1.055 * Math.pow(b, 1 / 2.4) - 0.055;\n } else {\n b = 12.92 * b;\n }\n\n r = r * 255;\n g = g * 255;\n b = b * 255;\n\n return [r, g, b];\n }\n\n /**\n * Convert LAB to RGB\n *\n * @param {*} l\n * @param {*} a\n * @param {*} b\n *\n * @return {*}\n */\n public static cielab2RGB(l: number = 50, a: number = 0, b: number = 0) {\n if (!(l >= 0 && l <= 100)) {\n return null;\n }\n\n const [x, y, z] = this.cielab2XYZ(l, a, b);\n return this.xyz2RGB(x, y, z);\n }\n}\n","import CoreUtils from './core.utils';\nimport Validators from './core.validators';\n\nimport { Matrix4 } from 'three/src/math/Matrix4';\nimport { Vector3 } from 'three/src/math/Vector3';\n\n/**\n * Compute/test intersection between different objects.\n *\n * @module core/intersections\n */\n\nexport default class Intersections {\n /**\n * Compute intersection between oriented bounding box and a plane.\n *\n * Returns intersection in plane's space.\n *\n * Should return at least 3 intersections. If not, the plane and the box do not\n * intersect.\n *\n * @param {Object} aabb - Axe Aligned Bounding Box representation.\n * @param {Vector3} aabb.halfDimensions - Half dimensions of the box.\n * @param {Vector3} aabb.center - Center of the box.\n * @param {Matrix4} aabb.toAABB - Transform to go from plane space to box space.\n * @param {Object} plane - Plane representation\n * @param {Vector3} plane.position - position of normal which describes the plane.\n * @param {Vector3} plane.direction - Direction of normal which describes the plane.\n *\n * @returns {Array} List of all intersections in plane's space.\n * @returns {boolean} false is invalid input provided.\n *\n * @example\n * //Returns array with intersection N intersections\n * let aabb = {\n * center: new Vector3(150, 150, 150),\n * halfDimensions: new Vector3(50, 60, 70),\n * toAABB: new Matrix4()\n * }\n * let plane = {\n * position: new Vector3(110, 120, 130),\n * direction: new Vector3(1, 0, 0)\n * }\n *\n * let intersections = CoreIntersections.aabbPlane(aabb, plane);\n * // intersections ==\n * //[ { x : 110, y : 90, z : 80 },\n * // { x : 110, y : 210, z : 220 },\n * // { x : 110, y : 210, z : 80 },\n * // { x : 110, y : 90, z : 220 } ]\n *\n * //Returns empty array with 0 intersections\n * let aabb = {\n *\n * }\n * let plane = {\n *\n * }\n *\n * let intersections = VJS.Core.Validators.matrix4(new Vector3());\n *\n * //Returns false if invalid input?\n *\n */\n static aabbPlane(aabb, plane) {\n //\n // obb = { halfDimensions, orientation, center, toAABB }\n // plane = { position, direction }\n //\n //\n // LOGIC:\n //\n // Test intersection of each edge of the Oriented Bounding Box with the Plane\n //\n // ALL EDGES\n //\n // .+-------+\n // .' | .'|\n // +---+---+' |\n // | | | |\n // | ,+---+---+\n // |.' | .'\n // +-------+'\n //\n // SPACE ORIENTATION\n //\n // +\n // j |\n // |\n // | i\n // k ,+-------+\n // .'\n // +\n //\n //\n // 1- Move Plane position and orientation in IJK space\n // 2- Test Edges/ IJK Plane intersections\n // 3- Return intersection Edge/ IJK Plane if it touches the Oriented BBox\n\n let intersections = [];\n\n if (!(this.validateAabb(aabb) && this.validatePlane(plane))) {\n window.console.log('Invalid aabb or plane provided.');\n return false;\n }\n\n // invert space matrix\n let fromAABB = new Matrix4();\n fromAABB.getInverse(aabb.toAABB);\n\n let t1 = plane.direction.clone().applyMatrix4(aabb.toAABB);\n let t0 = new Vector3(0, 0, 0).applyMatrix4(aabb.toAABB);\n\n let planeAABB = this.posdir(\n plane.position.clone().applyMatrix4(aabb.toAABB),\n new Vector3(t1.x - t0.x, t1.y - t0.y, t1.z - t0.z).normalize()\n );\n\n let bbox = CoreUtils.bbox(aabb.center, aabb.halfDimensions);\n\n let orientation = new Vector3(new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1));\n\n // 12 edges (i.e. ray)/plane intersection tests\n // RAYS STARTING FROM THE FIRST CORNER (0, 0, 0)\n //\n // +\n // |\n // |\n // |\n // ,+---+---+\n // .'\n // +\n\n let ray = this.posdir(\n new Vector3(\n aabb.center.x - aabb.halfDimensions.x,\n aabb.center.y - aabb.halfDimensions.y,\n aabb.center.z - aabb.halfDimensions.z\n ),\n orientation.x\n );\n this.rayPlaneInBBox(ray, planeAABB, bbox, intersections);\n\n ray.direction = orientation.y;\n this.rayPlaneInBBox(ray, planeAABB, bbox, intersections);\n\n ray.direction = orientation.z;\n this.rayPlaneInBBox(ray, planeAABB, bbox, intersections);\n\n // RAYS STARTING FROM THE LAST CORNER\n //\n // +\n // .'\n // +-------+'\n // |\n // |\n // |\n // +\n //\n\n let ray2 = this.posdir(\n new Vector3(\n aabb.center.x + aabb.halfDimensions.x,\n aabb.center.y + aabb.halfDimensions.y,\n aabb.center.z + aabb.halfDimensions.z\n ),\n orientation.x\n );\n this.rayPlaneInBBox(ray2, planeAABB, bbox, intersections);\n\n ray2.direction = orientation.y;\n this.rayPlaneInBBox(ray2, planeAABB, bbox, intersections);\n\n ray2.direction = orientation.z;\n this.rayPlaneInBBox(ray2, planeAABB, bbox, intersections);\n\n // RAYS STARTING FROM THE SECOND CORNER\n //\n // +\n // |\n // |\n // |\n // +\n // .'\n // +'\n\n let ray3 = this.posdir(\n new Vector3(\n aabb.center.x + aabb.halfDimensions.x,\n aabb.center.y - aabb.halfDimensions.y,\n aabb.center.z - aabb.halfDimensions.z\n ),\n orientation.y\n );\n this.rayPlaneInBBox(ray3, planeAABB, bbox, intersections);\n\n ray3.direction = orientation.z;\n this.rayPlaneInBBox(ray3, planeAABB, bbox, intersections);\n\n // RAYS STARTING FROM THE THIRD CORNER\n //\n // .+-------+\n // .'\n // +\n //\n //\n //\n //\n\n let ray4 = this.posdir(\n new Vector3(\n aabb.center.x - aabb.halfDimensions.x,\n aabb.center.y + aabb.halfDimensions.y,\n aabb.center.z - aabb.halfDimensions.z\n ),\n orientation.x\n );\n this.rayPlaneInBBox(ray4, planeAABB, bbox, intersections);\n\n ray4.direction = orientation.z;\n this.rayPlaneInBBox(ray4, planeAABB, bbox, intersections);\n\n // RAYS STARTING FROM THE FOURTH CORNER\n //\n //\n //\n // +\n // |\n // |\n // |\n // +-------+\n\n let ray5 = this.posdir(\n new Vector3(\n aabb.center.x - aabb.halfDimensions.x,\n aabb.center.y - aabb.halfDimensions.y,\n aabb.center.z + aabb.halfDimensions.z\n ),\n orientation.x\n );\n this.rayPlaneInBBox(ray5, planeAABB, bbox, intersections);\n\n ray5.direction = orientation.y;\n this.rayPlaneInBBox(ray5, planeAABB, bbox, intersections);\n\n // @todo make sure objects are unique...\n\n // back to original space\n intersections.map(function(element) {\n return element.applyMatrix4(fromAABB);\n });\n\n return intersections;\n }\n\n /**\n * Compute intersection between a ray and a plane.\n *\n * @memberOf this\n * @public\n *\n * @param {Object} ray - Ray representation.\n * @param {Vector3} ray.position - position of normal which describes the ray.\n * @param {Vector3} ray.direction - Direction of normal which describes the ray.\n * @param {Object} plane - Plane representation\n * @param {Vector3} plane.position - position of normal which describes the plane.\n * @param {Vector3} plane.direction - Direction of normal which describes the plane.\n *\n * @returns {Vector3|null} Intersection between ray and plane or null.\n */\n static rayPlane(ray, plane) {\n // ray: {position, direction}\n // plane: {position, direction}\n\n if (ray.direction.dot(plane.direction) !== 0) {\n //\n // not parallel, move forward\n //\n // LOGIC:\n //\n // Ray equation: P = P0 + tV\n // P = \n // P0 = \n // V = \n //\n // Therefore:\n // Px = ray.position.x + t*ray.direction.x\n // Py = ray.position.y + t*ray.direction.y\n // Pz = ray.position.z + t*ray.direction.z\n //\n //\n //\n // Plane equation: ax + by + cz + d = 0\n // a = plane.direction.x\n // b = plane.direction.y\n // c = plane.direction.z\n // d = -( plane.direction.x*plane.position.x +\n // plane.direction.y*plane.position.y +\n // plane.direction.z*plane.position.z )\n //\n //\n // 1- in the plane equation, we replace x, y and z by Px, Py and Pz\n // 2- find t\n // 3- replace t in Px, Py and Pz to get the coordinate of the intersection\n //\n let t =\n (plane.direction.x * (plane.position.x - ray.position.x) +\n plane.direction.y * (plane.position.y - ray.position.y) +\n plane.direction.z * (plane.position.z - ray.position.z)) /\n (plane.direction.x * ray.direction.x +\n plane.direction.y * ray.direction.y +\n plane.direction.z * ray.direction.z);\n\n let intersection = new Vector3(\n ray.position.x + t * ray.direction.x,\n ray.position.y + t * ray.direction.y,\n ray.position.z + t * ray.direction.z\n );\n\n return intersection;\n }\n\n return null;\n }\n\n /**\n * Compute intersection between a ray and a box\n * @param {Object} ray\n * @param {Object} box\n * @return {Array}\n */\n static rayBox(ray, box) {\n // should also do the space transforms here\n // ray: {position, direction}\n // box: {halfDimensions, center}\n\n let intersections = [];\n\n let bbox = CoreUtils.bbox(box.center, box.halfDimensions);\n\n // window.console.log(bbox);\n\n // X min\n let plane = this.posdir(\n new Vector3(bbox.min.x, box.center.y, box.center.z),\n new Vector3(-1, 0, 0)\n );\n this.rayPlaneInBBox(ray, plane, bbox, intersections);\n\n // X max\n plane = this.posdir(new Vector3(bbox.max.x, box.center.y, box.center.z), new Vector3(1, 0, 0));\n this.rayPlaneInBBox(ray, plane, bbox, intersections);\n\n // Y min\n plane = this.posdir(new Vector3(box.center.x, bbox.min.y, box.center.z), new Vector3(0, -1, 0));\n this.rayPlaneInBBox(ray, plane, bbox, intersections);\n\n // Y max\n plane = this.posdir(new Vector3(box.center.x, bbox.max.y, box.center.z), new Vector3(0, 1, 0));\n this.rayPlaneInBBox(ray, plane, bbox, intersections);\n\n // Z min\n plane = this.posdir(new Vector3(box.center.x, box.center.y, bbox.min.z), new Vector3(0, 0, -1));\n this.rayPlaneInBBox(ray, plane, bbox, intersections);\n\n // Z max\n plane = this.posdir(new Vector3(box.center.x, box.center.y, bbox.max.z), new Vector3(0, 0, 1));\n this.rayPlaneInBBox(ray, plane, bbox, intersections);\n\n return intersections;\n }\n\n /**\n * Intersection between ray and a plane that are in a box.\n * @param {*} ray\n * @param {*} planeAABB\n * @param {*} bbox\n * @param {*} intersections\n */\n static rayPlaneInBBox(ray, planeAABB, bbox, intersections) {\n let intersection = this.rayPlane(ray, planeAABB);\n // window.console.log(intersection);\n if (intersection && this.inBBox(intersection, bbox)) {\n if (!intersections.find(this.findIntersection(intersection))) {\n intersections.push(intersection);\n }\n }\n }\n\n /**\n * Find intersection in array\n * @param {*} myintersection\n */\n static findIntersection(myintersection) {\n return function found(element, index, array) {\n if (\n myintersection.x === element.x &&\n myintersection.y === element.y &&\n myintersection.z === element.z\n ) {\n return true;\n }\n\n return false;\n };\n }\n\n /**\n * Is point in box.\n * @param {Object} point\n * @param {Object} bbox\n * @return {Boolean}\n */\n static inBBox(point, bbox) {\n //\n let epsilon = 0.0001;\n if (\n point &&\n point.x >= bbox.min.x - epsilon &&\n point.y >= bbox.min.y - epsilon &&\n point.z >= bbox.min.z - epsilon &&\n point.x <= bbox.max.x + epsilon &&\n point.y <= bbox.max.y + epsilon &&\n point.z <= bbox.max.z + epsilon\n ) {\n return true;\n }\n return false;\n }\n\n static posdir(position, direction) {\n return { position, direction };\n }\n\n static validatePlane(plane) {\n //\n if (plane === null) {\n window.console.log('Invalid plane.');\n window.console.log(plane);\n\n return false;\n }\n\n if (!Validators.vector3(plane.position)) {\n window.console.log('Invalid plane.position.');\n window.console.log(plane.position);\n\n return false;\n }\n\n if (!Validators.vector3(plane.direction)) {\n window.console.log('Invalid plane.direction.');\n window.console.log(plane.direction);\n\n return false;\n }\n\n return true;\n }\n\n static validateAabb(aabb) {\n //\n if (aabb === null) {\n window.console.log('Invalid aabb.');\n window.console.log(aabb);\n return false;\n }\n\n if (!Validators.matrix4(aabb.toAABB)) {\n window.console.log('Invalid aabb.toAABB: ');\n window.console.log(aabb.toAABB);\n\n return false;\n }\n\n if (!Validators.vector3(aabb.center)) {\n window.console.log('Invalid aabb.center.');\n window.console.log(aabb.center);\n\n return false;\n }\n\n if (\n !(\n Validators.vector3(aabb.halfDimensions) &&\n aabb.halfDimensions.x >= 0 &&\n aabb.halfDimensions.y >= 0 &&\n aabb.halfDimensions.z >= 0\n )\n ) {\n window.console.log('Invalid aabb.halfDimensions.');\n window.console.log(aabb.halfDimensions);\n\n return false;\n }\n\n return true;\n }\n}\n","import Colors from './core.colors';\nimport Intersections from './core.intersections';\nimport Validators from './core.validators';\nimport Utils from './core.utils';\n\nexport {\n Colors as ColorsCore,\n Intersections as IntersectionsCore,\n Utils as UtilsCore,\n Validators as ValidatorsCore,\n};\n","import Validators from './core.validators';\n\nimport { Box3 } from 'three/src/math/Box3';\nimport { Raycaster } from 'three/src/core/Raycaster';\nimport { Triangle } from 'three/src/math/Triangle';\nimport { Matrix4 } from 'three/src/math/Matrix4';\nimport { Vector3 } from 'three/src/math/Vector3';\n\n/**\n * General purpose functions.\n *\n * @module core/utils\n */\nexport default class CoreUtils {\n /**\n * Generate a bouding box object.\n * @param {Vector3} center - Center of the box.\n * @param {Vector3} halfDimensions - Half Dimensions of the box.\n * @return {Object} The bounding box object. {Object.min} is a {Vector3}\n * containing the min bounds. {Object.max} is a {Vector3} containing the\n * max bounds.\n * @return {boolean} False input NOT valid.\n * @example\n * // Returns\n * //{ min: { x : 0, y : 0, z : 0 },\n * // max: { x : 2, y : 4, z : 6 }\n * //}\n * VJS.Core.Utils.bbox(\n * new Vector3(1, 2, 3), new Vector3(1, 2, 3));\n *\n * //Returns false\n * VJS.Core.Utils.bbox(new Vector3(), new Matrix4());\n *\n */\n static bbox(center, halfDimensions) {\n // make sure we have valid inputs\n if (!(Validators.vector3(center) && Validators.vector3(halfDimensions))) {\n console.log('Invalid center or plane halfDimensions.');\n return false;\n }\n\n // make sure half dimensions are >= 0\n if (!(halfDimensions.x >= 0 && halfDimensions.y >= 0 && halfDimensions.z >= 0)) {\n window.console.log('halfDimensions must be >= 0.');\n window.console.log(halfDimensions);\n return false;\n }\n\n // min/max bound\n let min = center.clone().sub(halfDimensions);\n let max = center.clone().add(halfDimensions);\n\n return {\n min,\n max,\n };\n }\n\n /**\n * Find min/max values in an array\n * @param {Array} data\n * @return {Array}\n */\n static minMax(data = []) {\n let minMax = [65535, -32768];\n let numPixels = data.length;\n\n for (let index = 0; index < numPixels; index++) {\n let spv = data[index];\n minMax[0] = Math.min(minMax[0], spv);\n minMax[1] = Math.max(minMax[1], spv);\n }\n\n return minMax;\n }\n\n /**\n * Check HTMLElement\n * @param {HTMLElement} obj\n * @return {boolean}\n */\n static isElement(obj) {\n try {\n // Using W3 DOM2 (works for FF, Opera and Chrom)\n return obj instanceof HTMLElement;\n } catch (e) {\n // Browsers not supporting W3 DOM2 don't have HTMLElement and\n // an exception is thrown and we end up here. Testing some\n // properties that all elements have. (works on IE7)\n return (\n typeof obj === 'object' &&\n obj.nodeType === 1 &&\n typeof obj.style === 'object' &&\n typeof obj.ownerDocument === 'object'\n );\n }\n }\n\n /**\n * Check string\n * @param {String} str\n * @return {Boolean}\n */\n static isString(str) {\n return typeof str === 'string' || str instanceof String;\n }\n\n /**\n * Parse url and find out the extension of the exam file.\n *\n * @param {*} url - The url to be parsed.\n * The query string can contain some \"special\" parameters that can be used to ease the parsing process\n * when the url doesn't match the exam file name on the filesystem:\n * - filename: the name of the exam file\n * - contentType: the mime type of the exam file. Currently only \"application/dicom\" is recognized, nifti files don't have a standard mime type.\n * For example:\n * http:///getExam?id=100&filename=myexam%2Enii%2Egz\n * http:///getExam?id=100&contentType=application%2Fdicom\n *\n * @return {Object}\n */\n static parseUrl(url) {\n const parsedUrl = new URL(url, 'http://fix.me');\n const data = {\n filename: parsedUrl.searchParams.get('filename'),\n extension: '',\n pathname: parsedUrl.pathname,\n query: parsedUrl.search,\n };\n // get file name\n if (!data.filename) {\n data.filename = data.pathname.split('/').pop();\n }\n\n // find extension\n const splittedName = data.filename.split('.');\n\n data.extension = splittedName.length > 1 ? splittedName.pop() : 'dicom';\n\n const skipExt = [\n 'asp',\n 'aspx',\n 'go',\n 'gs',\n 'hs',\n 'jsp',\n 'js',\n 'php',\n 'pl',\n 'py',\n 'rb',\n 'htm',\n 'html',\n ];\n\n if (\n !isNaN(data.extension) ||\n skipExt.indexOf(data.extension) !== -1 ||\n (data.query && data.query.includes('contentType=application%2Fdicom'))\n ) {\n data.extension = 'dicom';\n }\n console.log('url data', data);\n\n return data;\n }\n\n /**\n * Compute IJK to LPS tranform.\n * http://nipy.org/nibabel/dicom/dicom_orientation.html\n *\n * @param {*} xCos\n * @param {*} yCos\n * @param {*} zCos\n * @param {*} spacing\n * @param {*} origin\n * @param {*} registrationMatrix\n *\n * @return {*}\n */\n static ijk2LPS(xCos, yCos, zCos, spacing, origin, registrationMatrix = new Matrix4()) {\n const ijk2LPS = new Matrix4();\n ijk2LPS.set(\n xCos.x * spacing.y,\n yCos.x * spacing.x,\n zCos.x * spacing.z,\n origin.x,\n xCos.y * spacing.y,\n yCos.y * spacing.x,\n zCos.y * spacing.z,\n origin.y,\n xCos.z * spacing.y,\n yCos.z * spacing.x,\n zCos.z * spacing.z,\n origin.z,\n 0,\n 0,\n 0,\n 1\n );\n ijk2LPS.premultiply(registrationMatrix);\n\n return ijk2LPS;\n }\n\n /**\n * Compute AABB to LPS transform.\n * AABB: Axe Aligned Bounding Box.\n *\n * @param {*} xCos\n * @param {*} yCos\n * @param {*} zCos\n * @param {*} origin\n *\n * @return {*}\n */\n static aabb2LPS(xCos, yCos, zCos, origin) {\n const aabb2LPS = new Matrix4();\n aabb2LPS.set(\n xCos.x,\n yCos.x,\n zCos.x,\n origin.x,\n xCos.y,\n yCos.y,\n zCos.y,\n origin.y,\n xCos.z,\n yCos.z,\n zCos.z,\n origin.z,\n 0,\n 0,\n 0,\n 1\n );\n\n return aabb2LPS;\n }\n\n /**\n * Transform coordinates from world coordinate to data\n *\n * @param {*} lps2IJK\n * @param {*} worldCoordinates\n *\n * @return {*}\n */\n static worldToData(lps2IJK, worldCoordinates) {\n let dataCoordinate = new Vector3().copy(worldCoordinates).applyMatrix4(lps2IJK);\n\n // same rounding in the shaders\n dataCoordinate.addScalar(0.5).floor();\n\n return dataCoordinate;\n }\n\n static value(stack, coordinate) {\n window.console.warn('value is deprecated, please use getPixelData instead');\n this.getPixelData(stack, coordinate);\n }\n\n /**\n * Get voxel value\n *\n * @param {ModelsStack} stack\n * @param {Vector3} coordinate\n * @return {*}\n */\n static getPixelData(stack, coordinate) {\n if (coordinate.z >= 0 && coordinate.z < stack._frame.length) {\n return stack._frame[coordinate.z].getPixelData(coordinate.x, coordinate.y);\n } else {\n return null;\n }\n }\n\n /**\n * Set voxel value\n *\n * @param {ModelsStack} stack\n * @param {Vector3} coordinate\n * @param {Number} value\n * @return {*}\n */\n static setPixelData(stack, coordinate, value) {\n if (coordinate.z >= 0 && coordinate.z < stack._frame.length) {\n stack._frame[coordinate.z].setPixelData(coordinate.x, coordinate.y, value);\n } else {\n return null;\n }\n }\n\n /**\n * Apply slope/intercept to a value\n *\n * @param {*} value\n * @param {*} slope\n * @param {*} intercept\n *\n * @return {*}\n */\n static rescaleSlopeIntercept(value, slope, intercept) {\n return value * slope + intercept;\n }\n\n /**\n *\n * Convenience function to extract center of mass from list of points.\n *\n * @param {Array} points - Set of points from which we want to extract the center of mass.\n *\n * @returns {Vector3} Center of mass from given points.\n */\n static centerOfMass(points) {\n let centerOfMass = new Vector3(0, 0, 0);\n for (let i = 0; i < points.length; i++) {\n centerOfMass.x += points[i].x;\n centerOfMass.y += points[i].y;\n centerOfMass.z += points[i].z;\n }\n centerOfMass.divideScalar(points.length);\n\n return centerOfMass;\n }\n\n /**\n *\n * Order 3D planar points around a refence point.\n *\n * @private\n *\n * @param {Array} points - Set of planar 3D points to be ordered.\n * @param {Vector3} direction - Direction of the plane in which points and reference are sitting.\n *\n * @returns {Array} Set of object representing the ordered points.\n */\n static orderIntersections(points, direction) {\n let reference = this.centerOfMass(points);\n // direction from first point to reference\n let referenceDirection = new Vector3(\n points[0].x - reference.x,\n points[0].y - reference.y,\n points[0].z - reference.z\n ).normalize();\n\n let base = new Vector3(0, 0, 0).crossVectors(referenceDirection, direction).normalize();\n\n let orderedpoints = [];\n\n // other lines // if inter, return location + angle\n for (let j = 0; j < points.length; j++) {\n let point = new Vector3(points[j].x, points[j].y, points[j].z);\n point.direction = new Vector3(\n points[j].x - reference.x,\n points[j].y - reference.y,\n points[j].z - reference.z\n ).normalize();\n\n let x = referenceDirection.dot(point.direction);\n let y = base.dot(point.direction);\n point.xy = { x, y };\n\n let theta = Math.atan2(y, x) * (180 / Math.PI);\n point.angle = theta;\n\n orderedpoints.push(point);\n }\n\n orderedpoints.sort(function(a, b) {\n return a.angle - b.angle;\n });\n\n let noDups = [orderedpoints[0]];\n let epsilon = 0.0001;\n for (let i = 1; i < orderedpoints.length; i++) {\n if (Math.abs(orderedpoints[i - 1].angle - orderedpoints[i].angle) > epsilon) {\n noDups.push(orderedpoints[i]);\n }\n }\n\n return noDups;\n }\n\n /**\n * Get min, max, mean and sd of voxel values behind the mesh\n *\n * @param {THREE.Mesh} mesh Region of Interest\n * @param {*} camera Tested on CamerasOrthographic\n * @param {ModelsStack} stack\n *\n * @return {Object|null}\n */\n static getRoI(mesh, camera, stack) {\n mesh.geometry.computeBoundingBox();\n\n const bbox = new Box3().setFromObject(mesh);\n const min = bbox.min.clone().project(camera);\n const max = bbox.max.clone().project(camera);\n const offsetWidth = camera.controls.domElement.offsetWidth;\n const offsetHeight = camera.controls.domElement.offsetHeight;\n const rayCaster = new Raycaster();\n const values = [];\n\n min.x = Math.round(((min.x + 1) * offsetWidth) / 2);\n min.y = Math.round(((-min.y + 1) * offsetHeight) / 2);\n max.x = Math.round(((max.x + 1) * offsetWidth) / 2);\n max.y = Math.round(((-max.y + 1) * offsetHeight) / 2);\n [min.x, max.x] = [Math.min(min.x, max.x), Math.max(min.x, max.x)];\n [min.y, max.y] = [Math.min(min.y, max.y), Math.max(min.y, max.y)];\n\n let intersect = [];\n let value = null;\n\n for (let x = min.x; x <= max.x; x++) {\n for (let y = min.y; y <= max.y; y++) {\n rayCaster.setFromCamera(\n {\n x: (x / offsetWidth) * 2 - 1,\n y: -(y / offsetHeight) * 2 + 1,\n },\n camera\n );\n intersect = rayCaster.intersectObject(mesh);\n\n if (intersect.length === 0) {\n continue;\n }\n\n value = CoreUtils.getPixelData(\n stack,\n CoreUtils.worldToData(stack.lps2IJK, intersect[0].point)\n );\n\n // the image isn't RGB and coordinates are inside it\n if (value !== null && stack.numberOfChannels === 1) {\n values.push(\n CoreUtils.rescaleSlopeIntercept(value, stack.rescaleSlope, stack.rescaleIntercept)\n );\n }\n }\n }\n\n if (values.length === 0) {\n return null;\n }\n\n const avg = values.reduce((sum, val) => sum + val) / values.length;\n\n return {\n min: values.reduce((prev, val) => (prev < val ? prev : val)),\n max: values.reduce((prev, val) => (prev > val ? prev : val)),\n mean: avg,\n sd: Math.sqrt(values.reduce((sum, val) => sum + Math.pow(val - avg, 2), 0) / values.length),\n };\n }\n\n /**\n * Calculate shape area (sum of triangle polygons area).\n * May be inaccurate or completely wrong for some shapes.\n *\n * @param {THREE.Geometry} geometry\n *\n * @returns {Number}\n */\n static getGeometryArea(geometry) {\n if (geometry.faces.length < 1) {\n return 0.0;\n }\n\n let area = 0.0;\n let vertices = geometry.vertices;\n\n geometry.faces.forEach(function(elem) {\n area += new Triangle(vertices[elem.a], vertices[elem.b], vertices[elem.c]).getArea();\n });\n\n return area;\n }\n\n static stringToNumber(numberAsString) {\n let number = Number(numberAsString);\n\n // returns true is number is NaN\n if (number !== number) {\n const dots = (numberAsString.match(/\\./g)||[]).length;\n const commas = (numberAsString.match(/\\,/g)||[]).length;\n\n if (commas === 1 && dots < 2) {\n // convert 1,45 to 1.45\n // convert 1,456.78 to 1456.78\n const replaceBy = dots === 0 ? '.' : '';\n const stringWithoutComma = numberAsString.replace(/,/g, replaceBy);\n number = Number(stringWithoutComma);\n }\n\n // if that didn't help\n // weird stuff happenning\n // should throw an error instead of setting value to 1.0\n if (number !== number) {\n console.error(`String could not be converted to number (${numberAsString}). Setting value to \"1.0\".`);\n number = 1.0;\n }\n }\n\n return number;\n }\n}\n","/**\n * Validate basic structures.\n *\n * @example\n * //Returns true\n * VJS.Core.Validators.matrix4(new THREE.Matrix4());\n *\n * //Returns false\n * VJS.Core.Validators.matrix4(new THREE.Vector3());\n *\n * @module core/validators\n */\n\nexport default class Validators {\n /**\n * Validates a matrix as a THREEJS.Matrix4\n * link\n * @param {Object} objectToTest - The object to be tested.\n * @return {boolean} True if valid Matrix4, false if NOT.\n */\n static matrix4(objectToTest) {\n if (\n !(\n objectToTest !== null &&\n typeof objectToTest !== 'undefined' &&\n objectToTest.hasOwnProperty('elements') &&\n objectToTest.elements.length === 16 &&\n typeof objectToTest.identity === 'function' &&\n typeof objectToTest.copy === 'function' &&\n typeof objectToTest.determinant === 'function'\n )\n ) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Validates a vector as a THREEJS.Vector3\n * @param {Object} objectToTest - The object to be tested.\n * @return {boolean} True if valid Vector3, false if NOT.\n */\n static vector3(objectToTest) {\n if (\n !(\n objectToTest !== null &&\n typeof objectToTest !== 'undefined' &&\n objectToTest.hasOwnProperty('x') &&\n objectToTest.hasOwnProperty('y') &&\n objectToTest.hasOwnProperty('z') &&\n !objectToTest.hasOwnProperty('w')\n )\n ) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Validates a box.\n *\n * @example\n * // a box is defined as\n * let box = {\n * center: THREE.Vector3,\n * halfDimensions: THREE.Vector3\n * }\n *\n * @param {Object} objectToTest - The object to be tested.\n * @return {boolean} True if valid box, false if NOT.\n */\n static box(objectToTest) {\n if (\n !(\n objectToTest !== null &&\n typeof objectToTest !== 'undefined' &&\n objectToTest.hasOwnProperty('center') &&\n this.vector3(objectToTest.center) &&\n objectToTest.hasOwnProperty('halfDimensions') &&\n this.vector3(objectToTest.halfDimensions) &&\n objectToTest.halfDimensions.x >= 0 &&\n objectToTest.halfDimensions.y >= 0 &&\n objectToTest.halfDimensions.z >= 0\n )\n ) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Validates a ray.\n *\n * @example\n * // a ray is defined as\n * let ray = {\n * postion: THREE.Vector3,\n * direction: THREE.Vector3\n * }\n *\n * @param {Object} objectToTest - The object to be tested.\n * @return {boolean} True if valid ray, false if NOT.\n */\n static ray(objectToTest) {\n if (\n !(\n objectToTest !== null &&\n typeof objectToTest !== 'undefined' &&\n objectToTest.hasOwnProperty('position') &&\n this.vector3(objectToTest.position) &&\n objectToTest.hasOwnProperty('direction') &&\n this.vector3(objectToTest.direction)\n )\n ) {\n return false;\n }\n\n return true;\n }\n}\n","// from dicom wadoo loader\n// https://github.com/cornerstonejs/cornerstoneWADOImageLoader/blob/master/src/shared/decoders/decodeRLE.js\nfunction decodeRLE(imageFrame, pixelData) {\n if (imageFrame.bitsAllocated === 8) {\n if (imageFrame.planarConfiguration) {\n return decode8Planar(imageFrame, pixelData);\n }\n\n return decode8(imageFrame, pixelData);\n } else if (imageFrame.bitsAllocated === 16) {\n return decode16(imageFrame, pixelData);\n }\n\n throw new Error('unsupported pixel format for RLE');\n}\n\nfunction decode8(imageFrame, pixelData) {\n const frameData = pixelData;\n const frameSize = imageFrame.rows * imageFrame.columns;\n const outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel);\n const header = new DataView(frameData.buffer, frameData.byteOffset);\n const data = new Int8Array(frameData.buffer, frameData.byteOffset);\n const out = new Int8Array(outFrame);\n\n let outIndex = 0;\n const numSegments = header.getInt32(0, true);\n\n for (let s = 0; s < numSegments; ++s) {\n outIndex = s;\n\n let inIndex = header.getInt32((s + 1) * 4, true);\n let maxIndex = header.getInt32((s + 2) * 4, true);\n\n if (maxIndex === 0) {\n maxIndex = frameData.length;\n }\n\n const endOfSegment = frameSize * numSegments;\n\n while (inIndex < maxIndex) {\n const n = data[inIndex++];\n\n if (n >= 0 && n <= 127) {\n // copy n bytes\n for (let i = 0; i < n + 1 && outIndex < endOfSegment; ++i) {\n out[outIndex] = data[inIndex++];\n outIndex += imageFrame.samplesPerPixel;\n }\n } else if (n <= -1 && n >= -127) {\n const value = data[inIndex++];\n // run of n bytes\n\n for (let j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) {\n out[outIndex] = value;\n outIndex += imageFrame.samplesPerPixel;\n }\n } /* else if (n === -128) {\n } // do nothing */\n }\n }\n imageFrame.pixelData = new Uint8Array(outFrame);\n\n return imageFrame;\n}\n\nfunction decode8Planar(imageFrame, pixelData) {\n const frameData = pixelData;\n const frameSize = imageFrame.rows * imageFrame.columns;\n const outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel);\n const header = new DataView(frameData.buffer, frameData.byteOffset);\n const data = new Int8Array(frameData.buffer, frameData.byteOffset);\n const out = new Int8Array(outFrame);\n\n let outIndex = 0;\n const numSegments = header.getInt32(0, true);\n\n for (let s = 0; s < numSegments; ++s) {\n outIndex = s * frameSize;\n\n let inIndex = header.getInt32((s + 1) * 4, true);\n let maxIndex = header.getInt32((s + 2) * 4, true);\n\n if (maxIndex === 0) {\n maxIndex = frameData.length;\n }\n\n const endOfSegment = frameSize * numSegments;\n\n while (inIndex < maxIndex) {\n const n = data[inIndex++];\n\n if (n >= 0 && n <= 127) {\n // copy n bytes\n for (let i = 0; i < n + 1 && outIndex < endOfSegment; ++i) {\n out[outIndex] = data[inIndex++];\n outIndex++;\n }\n } else if (n <= -1 && n >= -127) {\n const value = data[inIndex++];\n // run of n bytes\n\n for (let j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) {\n out[outIndex] = value;\n outIndex++;\n }\n } /* else if (n === -128) {\n } // do nothing */\n }\n }\n imageFrame.pixelData = new Uint8Array(outFrame);\n\n return imageFrame;\n}\n\nfunction decode16(imageFrame, pixelData) {\n const frameData = pixelData;\n const frameSize = imageFrame.rows * imageFrame.columns;\n\n const outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel * 2);\n\n const header = new DataView(frameData.buffer, frameData.byteOffset);\n const data = new Int8Array(frameData.buffer, frameData.byteOffset);\n\n const out = new Int8Array(outFrame);\n\n const numSegments = header.getInt32(0, true);\n\n for (let s = 0; s < numSegments; ++s) {\n let outIndex = 0;\n const highByte = s === 0 ? 1 : 0;\n\n let inIndex = header.getInt32((s + 1) * 4, true);\n let maxIndex = header.getInt32((s + 2) * 4, true);\n\n if (maxIndex === 0) {\n maxIndex = frameData.length;\n }\n\n while (inIndex < maxIndex) {\n const n = data[inIndex++];\n\n if (n >= 0 && n <= 127) {\n for (let i = 0; i < n + 1 && outIndex < frameSize; ++i) {\n out[outIndex * 2 + highByte] = data[inIndex++];\n outIndex++;\n }\n } else if (n <= -1 && n >= -127) {\n const value = data[inIndex++];\n\n for (let j = 0; j < -n + 1 && outIndex < frameSize; ++j) {\n out[outIndex * 2 + highByte] = value;\n outIndex++;\n }\n } /* else if (n === -128) {\n } // do nothing */\n }\n }\n if (imageFrame.pixelRepresentation === 0) {\n imageFrame.pixelData = new Uint16Array(outFrame);\n } else {\n imageFrame.pixelData = new Int16Array(outFrame);\n }\n\n return imageFrame;\n}\n\nexport const RLEDecoder = decodeRLE;\n","import Slice, { geometriesSlice } from './geometries.slice';\nimport Voxel, { geometriesVoxel } from './geometries.voxel';\n\nexport {\n Slice as SliceGeometry,\n geometriesSlice as sliceGeometryFactory,\n Voxel as VoxelGeometry,\n geometriesVoxel as voxelGeometryFactory,\n};\n","/** * Imports ***/\nimport coreIntersections from '../core/core.intersections';\nimport coreUtils from '../core/core.utils';\n\n/**\n *\n * It is typically used for creating an irregular 3D planar shape given a box and the cut-plane.\n *\n * Demo: {@link https://fnndsc.github.io/vjs#geometry_slice}\n *\n * @module geometries/slice\n *\n * @param {Vector3} halfDimensions - Half-dimensions of the box to be sliced.\n * @param {Vector3} center - Center of the box to be sliced.\n * @param {Vector3} orientation - Orientation of the box to be sliced. (might not be necessary..?)\n * @param {Vector3} position - Position of the cutting plane.\n * @param {Vector3} direction - Cross direction of the cutting plane.\n *\n * @example\n * // Define box to be sliced\n * let halfDimensions = new THREE.Vector(123, 45, 67);\n * let center = new Vector3(0, 0, 0);\n * let orientation = new Vector3(\n * new Vector3(1, 0, 0),\n * new Vector3(0, 1, 0),\n * new Vector3(0, 0, 1)\n * );\n *\n * // Define slice plane\n * let position = center.clone();\n * let direction = new Vector3(-0.2, 0.5, 0.3);\n *\n * // Create the slice geometry & materials\n * let sliceGeometry = new VJS.geometries.slice(halfDimensions, center, orientation, position, direction);\n * let sliceMaterial = new THREE.MeshBasicMaterial({\n * 'side': THREE.DoubleSide,\n * 'color': 0xFF5722\n * });\n *\n * // Create mesh and add it to the scene\n * let slice = new THREE.Mesh(sliceGeometry, sliceMaterial);\n * scene.add(slice);\n */\n\nconst geometriesSlice = (three = window.THREE) => {\n if (three === undefined || three.ShapeBufferGeometry === undefined) {\n return null;\n }\n\n const Constructor = three.ShapeBufferGeometry;\n return class extends Constructor {\n constructor(halfDimensions, center, position, direction, toAABB = new three.Matrix4()) {\n //\n // prepare data for the shape!\n //\n let aabb = {\n halfDimensions,\n center,\n toAABB,\n };\n\n let plane = {\n position,\n direction,\n };\n\n // BOOM!\n let intersections = coreIntersections.aabbPlane(aabb, plane);\n\n // can not exist before calling the constructor\n if (intersections.length < 3) {\n window.console.log('WARNING: Less than 3 intersections between AABB and Plane.');\n window.console.log('AABB');\n window.console.log(aabb);\n window.console.log('Plane');\n window.console.log(plane);\n window.console.log('exiting...');\n const err = new Error(\n 'geometries.slice has less than 3 intersections, can not create a valid geometry.'\n );\n throw err;\n }\n\n let points = coreUtils.orderIntersections(intersections, direction);\n\n // create the shape\n let shape = new three.Shape();\n // move to first point!\n shape.moveTo(points[0].xy.x, points[0].xy.y);\n\n // loop through all points!\n const positions = new Float32Array(points.length * 3);\n positions.set(points[0].toArray(), 0);\n\n for (let i = 1; i < points.length; i++) {\n // project each on plane!\n positions.set(points[i].toArray(), i * 3);\n\n shape.lineTo(points[i].xy.x, points[i].xy.y);\n }\n\n // close the shape!\n shape.lineTo(points[0].xy.x, points[0].xy.y);\n\n //\n // Generate Slice Buffer Geometry from Shape Buffer Geomtry\n // bewcause it does triangulation for us!\n super(shape);\n this.type = 'SliceBufferGeometry';\n\n // update real position of each vertex! (not in 2d)\n this.addAttribute( 'position', new three.Float32BufferAttribute( positions, 3 ) );\n this.vertices = points; // legacy code to compute normals int he SliceHelper\n }\n };\n};\n\n// export factory\nexport { geometriesSlice };\n// default export to\nexport default geometriesSlice();\n","/**\n *\n * @module geometries/voxel\n */\n\nconst geometriesVoxel = (three = window.THREE) => {\n if (three === undefined || three.BoxGeometry === undefined) {\n return null;\n }\n\n const Constructor = three.BoxGeometry;\n return class extends Constructor {\n constructor(dataPosition) {\n super(1, 1, 1);\n\n this._location = dataPosition;\n\n this.applyMatrix(\n new three.Matrix4().makeTranslation(this._location.x, this._location.y, this._location.z)\n );\n\n this.verticesNeedUpdate = true;\n }\n\n resetVertices() {\n this.vertices[0].set(0.5, 0.5, 0.5);\n this.vertices[1].set(0.5, 0.5, -0.5);\n this.vertices[2].set(0.5, -0.5, 0.5);\n this.vertices[3].set(0.5, -0.5, -0.5);\n this.vertices[4].set(-0.5, 0.5, -0.5);\n this.vertices[5].set(-0.5, 0.5, 0.5);\n this.vertices[6].set(-0.5, -0.5, -0.5);\n this.vertices[7].set(-0.5, -0.5, 0.5);\n }\n\n set location(location) {\n this._location = location;\n\n // update vertices from location\n this.vertices[0].set(+0.5, +0.5, +0.5);\n this.vertices[1].set(+0.5, +0.5, -0.5);\n this.vertices[2].set(+0.5, -0.5, +0.5);\n this.vertices[3].set(+0.5, -0.5, -0.5);\n this.vertices[4].set(-0.5, +0.5, -0.5);\n this.vertices[5].set(-0.5, +0.5, +0.5);\n this.vertices[6].set(-0.5, -0.5, -0.5);\n this.vertices[7].set(-0.5, -0.5, +0.5);\n\n this.applyMatrix(\n new three.Matrix4().makeTranslation(this._location.x, this._location.y, this._location.z)\n );\n\n this.verticesNeedUpdate = true;\n }\n\n get location() {\n return this._location;\n }\n };\n};\n\n// export factory\nexport { geometriesVoxel };\n// default export to\nexport default geometriesVoxel();\n","/**\n * @module helpers/border\n */\n\nconst helpersBorder = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = three.Object3D;\n return class extends Constructor {\n constructor(helpersSlice) {\n //\n super();\n\n this._helpersSlice = helpersSlice;\n\n this._visible = true;\n this._color = 0xff0000;\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n\n this._create();\n }\n\n set helpersSlice(helpersSlice) {\n this._helpersSlice = helpersSlice;\n this._update();\n }\n\n get helpersSlice() {\n return this._helpersSlice;\n }\n\n set visible(visible) {\n this._visible = visible;\n if (this._mesh) {\n this._mesh.visible = this._visible;\n }\n }\n\n get visible() {\n return this._visible;\n }\n\n set color(color) {\n this._color = color;\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n get color() {\n return this._color;\n }\n\n _create() {\n if (!this._material) {\n this._material = new three.LineBasicMaterial({\n color: this._color,\n linewidth: 1,\n });\n }\n\n if (!this._helpersSlice.geometry.vertices) {\n return;\n }\n\n this._geometry = new three.BufferGeometry();\n \n // set vertices positions\n const nbOfVertices = this._helpersSlice.geometry.vertices.length;\n const positions = new Float32Array((nbOfVertices + 1) * 3);\n positions.set(this._helpersSlice.geometry.attributes.position.array, 0);\n positions.set(this._helpersSlice.geometry.vertices[0].toArray(), nbOfVertices * 3);\n this._geometry.addAttribute( 'position', new three.Float32BufferAttribute( positions, 3 ) );\n\n this._mesh = new three.Line(this._geometry, this._material);\n if (this._helpersSlice.aabbSpace === 'IJK') {\n this._mesh.applyMatrix(this._helpersSlice.stack.ijk2LPS);\n }\n this._mesh.visible = this._visible;\n\n // and add it!\n this.add(this._mesh);\n }\n\n _update() {\n // update slice\n if (this._mesh) {\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh = null;\n }\n\n this._create();\n }\n\n dispose() {\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._geometry.dispose();\n this._geometry = null;\n this._material.dispose();\n this._material = null;\n }\n };\n};\n\n// export factory\nexport { helpersBorder };\n// default export to\nexport default helpersBorder();\n","/**\n * @module helpers/boundingbox\n */\n\nconst helpersBoundingBox = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = three.Object3D;\n return class extends Constructor {\n constructor(stack) {\n //\n super();\n\n // private vars\n this._stack = stack;\n this._visible = true;\n this._color = 0xffffff;\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n this._meshStack = null;\n\n // create object\n this._create();\n }\n\n // getters/setters\n set visible(visible) {\n this._visible = visible;\n if (this._mesh) {\n this._mesh.visible = this._visible;\n }\n }\n\n get visible() {\n return this._visible;\n }\n\n set color(color) {\n this._color = color;\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n get color() {\n return this._color;\n }\n\n // private methods\n _create() {\n // Convenience vars\n const dimensions = this._stack.dimensionsIJK;\n const halfDimensions = this._stack.halfDimensionsIJK;\n const offset = new three.Vector3(-0.5, -0.5, -0.5);\n\n // Geometry\n const geometry = new three.BoxGeometry(dimensions.x, dimensions.y, dimensions.z);\n geometry.applyMatrix(\n new three.Matrix4().makeTranslation(\n halfDimensions.x + offset.x,\n halfDimensions.y + offset.y,\n halfDimensions.z + offset.z\n )\n );\n this._geometry = geometry;\n\n // Material\n this._material = new three.MeshBasicMaterial({\n wireframe: true,\n });\n\n const mesh = new three.Mesh(this._geometry, null);\n mesh.applyMatrix(this._stack.ijk2LPS);\n mesh.visible = this._visible;\n this._meshStack = mesh;\n\n this._mesh = new three.BoxHelper(this._meshStack, this._color);\n this._material = this._mesh.material;\n\n this.add(this._mesh);\n }\n\n _update() {\n if (this._mesh) {\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n }\n\n this._create();\n }\n\n dispose() {\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._geometry.dispose();\n this._geometry = null;\n this._material.dispose();\n this._material = null;\n }\n };\n};\n\n// export factory\nexport { helpersBoundingBox };\n// default export too\nexport default helpersBoundingBox();\n","/** * Imports ***/\nimport ShadersUniform from '../shaders/shaders.contour.uniform';\nimport ShadersVertex from '../shaders/shaders.contour.vertex';\nimport ShadersFragment from '../shaders/shaders.contour.fragment';\n\n/**\n * @module helpers/contour\n */\nconst helpersContour = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = three.Object3D;\n return class extends Constructor {\n constructor(stack, geometry, texture) {\n //\n super();\n\n this._stack = stack;\n this._textureToFilter = texture;\n this._contourWidth = 1;\n this._contourOpacity = 1;\n this._canvasWidth = 0;\n this._canvasHeight = 0;\n this._shadersFragment = ShadersFragment;\n this._shadersVertex = ShadersVertex;\n this._uniforms = ShadersUniform.uniforms();\n this._material = null;\n this._geometry = geometry;\n\n this._create();\n }\n\n _create() {\n this._prepareMaterial();\n this._mesh = new three.Mesh(this._geometry, this._material);\n this._mesh.applyMatrix(this._stack._ijk2LPS);\n this.add(this._mesh);\n }\n\n _prepareMaterial() {\n if (!this._material) {\n // contour default width\n this._uniforms.uWidth.value = this._contourWidth;\n this._uniforms.uOpacity.value = this._contourOpacity;\n\n //\n this._uniforms.uCanvasWidth.value = this._canvasWidth;\n this._uniforms.uCanvasHeight.value = this._canvasHeight;\n\n // generate material\n let fs = new ShadersFragment(this._uniforms);\n let vs = new ShadersVertex();\n this._material = new three.ShaderMaterial({\n side: three.DoubleSide,\n uniforms: this._uniforms,\n vertexShader: vs.compute(),\n fragmentShader: fs.compute(),\n transparent: true,\n });\n }\n }\n\n update() {\n if (this._mesh) {\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh = null;\n }\n\n this._create();\n }\n\n dispose() {\n //\n if (this._textureToFilter !== null) {\n this._textureToFilter.dispose();\n this._textureToFilter = null;\n }\n\n this._shadersFragment = null;\n this._shadersVertex = null;\n\n this._uniforms = null;\n\n // material, geometry and mesh\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n\n this._geometry.dispose();\n this._geometry = null;\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n this._stack = null;\n }\n\n get geometry() {\n return this._geometry;\n }\n\n set geometry(geometry) {\n if (this._mesh) {\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh = null;\n\n this._geometry.dispose();\n this._geometry = null;\n }\n\n this._geometry = geometry;\n\n this._create();\n }\n\n get textureToFilter() {\n return this._textureToFilter;\n }\n\n set textureToFilter(texture) {\n this._textureToFilter = texture;\n this._uniforms.uTextureFilled.value = texture;\n this._material.needsUpdate = true;\n }\n\n get contourOpacity() {\n return this._contourOpacity;\n }\n\n set contourOpacity(contourOpacity) {\n this._contourOpacity = contourOpacity;\n this._uniforms.uOpacity.value = this._contourOpacity;\n }\n\n get contourWidth() {\n return this._contourWidth;\n }\n\n set contourWidth(contourWidth) {\n this._contourWidth = contourWidth;\n this._uniforms.uWidth.value = this._contourWidth;\n }\n\n get canvasWidth() {\n return this._canvasWidth;\n }\n\n set canvasWidth(canvasWidth) {\n this._canvasWidth = canvasWidth;\n this._uniforms.uCanvasWidth.value = this._canvasWidth;\n }\n\n get canvasHeight() {\n return this._canvasHeight;\n }\n\n set canvasHeight(canvasHeight) {\n this._canvasHeight = canvasHeight;\n this._uniforms.uCanvasHeight.value = this._canvasHeight;\n }\n };\n};\n\n// export factory\nexport { helpersContour };\n// default export to\nexport default helpersContour();\n","import Border, { helpersBorder } from './helpers.border';\nimport BoundingBox, { helpersBoundingBox } from './helpers.boundingbox';\nimport Contour, { helpersContour } from './helpers.contour';\nimport Localizer, { helpersLocalizer } from './helpers.localizer';\nimport Lut, { helpersLut } from './helpers.lut';\nimport SegmentationLut from './helpers.segmentationlut';\nimport ProgressBar from './helpers.progressbar';\nimport ProgressBarEventBased from './helpers.progressbar.eventbased';\nimport Slice, { helpersSlice } from './helpers.slice';\nimport Stack, { helpersStack } from './helpers.stack';\nimport VolumeRendering, { helpersVolumeRendering } from './helpers.volumerendering';\n\nexport {\n Border as BorderHelper,\n helpersBorder as borderHelperFactory,\n BoundingBox as BoundingBoxHelper,\n helpersBoundingBox as boundingBoxHelperFactory,\n Contour as ContourHelper,\n helpersContour as contourHelperFactory,\n Localizer as LocalizerHelper,\n helpersLocalizer as localizerHelperFactory,\n Lut as LutHelper,\n helpersLut as lutHelperFactory,\n SegmentationLut as SegmentationLutHelper,\n ProgressBar as ProgressBarHelper,\n ProgressBarEventBased as ProgressBarEventBasedHelper,\n Slice as SliceHelper,\n helpersSlice as sliceHelperFactory,\n Stack as StackHelper,\n helpersStack as stackHelperFactory,\n VolumeRendering as VolumeRenderingHelper,\n helpersVolumeRendering as VolumeRenderingHelperFactory,\n};\n","/** * Imports ***/\nimport ShadersUniform from '../shaders/shaders.localizer.uniform';\nimport ShadersVertex from '../shaders/shaders.localizer.vertex';\nimport ShadersFragment from '../shaders/shaders.localizer.fragment';\n\n/**\n * @module helpers/localizer\n */\nconst helpersLocalizer = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = three.Object3D;\n return class extends Constructor {\n constructor(stack, geometry, referencePlane) {\n //\n super();\n\n this._stack = stack;\n this._referencePlane = referencePlane;\n this._plane1 = null;\n this._color1 = null;\n this._plane2 = null;\n this._color2 = null;\n this._plane3 = null;\n this._color3 = null;\n this._canvasWidth = 0;\n this._canvasHeight = 0;\n this._shadersFragment = ShadersFragment;\n this._shadersVertex = ShadersVertex;\n this._uniforms = ShadersUniform.uniforms();\n this._material = null;\n this._geometry = geometry;\n\n this._create();\n }\n\n _create() {\n this._prepareMaterial();\n this._mesh = new three.Mesh(this._geometry, this._material);\n this._mesh.applyMatrix(this._stack._ijk2LPS);\n this.add(this._mesh);\n }\n\n _prepareMaterial() {\n if (!this._material) {\n // reference plane\n this._uniforms.uSlice.value = this._referencePlane;\n\n // localizer planes\n if (this._plane1) {\n this._uniforms.uPlane1.value = this._plane1;\n this._uniforms.uPlaneColor1.value = this._color1;\n }\n\n if (this._plane2) {\n this._uniforms.uPlane2.value = this._plane2;\n this._uniforms.uPlaneColor2.value = this._color2;\n }\n\n if (this._plane3) {\n this._uniforms.uPlane3.value = this._plane3;\n this._uniforms.uPlaneColor3.value = this._color3;\n }\n\n //\n this._uniforms.uCanvasWidth.value = this._canvasWidth;\n this._uniforms.uCanvasHeight.value = this._canvasHeight;\n\n // generate material\n let fs = new ShadersFragment(this._uniforms);\n let vs = new ShadersVertex();\n this._material = new three.ShaderMaterial({\n side: three.DoubleSide,\n uniforms: this._uniforms,\n vertexShader: vs.compute(),\n fragmentShader: fs.compute(),\n });\n this._material.transparent = true;\n }\n }\n\n update() {\n if (this._mesh) {\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh = null;\n }\n\n this._create();\n }\n\n dispose() {\n //\n this._referencePlane = null;\n this._plane1 = null;\n this._color1 = null;\n this._plane2 = null;\n this._color2 = null;\n this._plane3 = null;\n this._color3 = null;\n\n this._shadersFragment = null;\n this._shadersVertex = null;\n\n this._uniforms = null;\n\n // material, geometry and mesh\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n\n this._geometry.dispose();\n this._geometry = null;\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n this._stack = null;\n }\n\n get geometry() {\n return this._geometry;\n }\n\n set geometry(geometry) {\n if (this._mesh) {\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh = null;\n\n this._geometry.dispose();\n this._geometry = null;\n }\n\n this._geometry = geometry;\n\n this._create();\n }\n\n get referencePlane() {\n return this._referencePlane;\n }\n\n set referencePlane(referencePlane) {\n this._referencePlane = referencePlane;\n this._uniforms.uSlice.value = this._referencePlane;\n }\n\n get plane1() {\n return this._plane1;\n }\n\n set plane1(plane1) {\n this._plane1 = plane1;\n this._uniforms.uPlane1.value = this._plane1;\n }\n\n get color1() {\n return this._color1;\n }\n\n set color1(color1) {\n this._color1 = color1;\n this._uniforms.uPlaneColor1.value = this._color1;\n }\n\n get plane2() {\n return this._plane2;\n }\n\n set plane2(plane2) {\n this._plane2 = plane2;\n this._uniforms.uPlane2.value = this._plane2;\n }\n\n get color2() {\n return this._color2;\n }\n\n set color2(color2) {\n this._color2 = color2;\n this._uniforms.uPlaneColor2.value = this._color2;\n }\n\n get plane3() {\n return this._plane3;\n }\n\n set plane3(plane3) {\n this._plane3 = plane3;\n this._uniforms.uPlane3.value = this._plane3;\n }\n\n get color3() {\n return this._color3;\n }\n\n set color3(color3) {\n this._color3 = color3;\n this._uniforms.uPlaneColor3.value = this._color3;\n }\n\n get canvasWidth() {\n return this._canvasWidth;\n }\n\n set canvasWidth(canvasWidth) {\n this._canvasWidth = canvasWidth;\n this._uniforms.uCanvasWidth.value = this._canvasWidth;\n }\n\n get canvasHeight() {\n return this._canvasHeight;\n }\n\n set canvasHeight(canvasHeight) {\n this._canvasHeight = canvasHeight;\n this._uniforms.uCanvasHeight.value = this._canvasHeight;\n }\n };\n};\n\nexport { helpersLocalizer };\nexport default helpersLocalizer();\n","import CoreUtils from '../core/core.utils';\n\n/**\n * @module helpers/lut\n */\nconst helpersLut = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n const Constructor = three.Object3D;\n return class extends Constructor {\n constructor(\n domTarget,\n lut = 'default',\n lutO = 'linear',\n color = [[0, 0, 0, 0], [1, 1, 1, 1]],\n opacity = [[0, 0], [1, 1]],\n discrete = false\n ) {\n // min/max (0-1 or real intensities)\n // show/hide\n // horizontal/vertical\n super();\n if (CoreUtils.isString(domTarget)) {\n this._dom = document.getElementById(domTarget);\n } else {\n this._dom = domTarget;\n }\n\n this._discrete = discrete;\n this._color = color;\n this._lut = lut;\n this._luts = { [lut]: color };\n\n this._opacity = opacity;\n this._lutO = lutO;\n this._lutsO = { [lutO]: opacity };\n\n this.initCanvas();\n this.paintCanvas();\n }\n\n initCanvas() {\n // container\n this._canvasContainer = this.initCanvasContainer(this._dom);\n // background\n this._canvasBg = this.createCanvas();\n this._canvasContainer.appendChild(this._canvasBg);\n // foreground\n this._canvas = this.createCanvas();\n this._canvasContainer.appendChild(this._canvas);\n }\n\n initCanvasContainer(dom) {\n let canvasContainer = dom;\n canvasContainer.style.border = '1px solid #F9F9F9';\n return canvasContainer;\n }\n\n createCanvas() {\n let canvas = document.createElement('canvas');\n canvas.height = 1;\n canvas.width = 256;\n canvas.style.width = '256px';\n canvas.style.height = '16px';\n return canvas;\n }\n\n paintCanvas() {\n // setup context\n let ctx = this._canvas.getContext('2d');\n ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n ctx.globalCompositeOperation = 'source-over';\n\n // apply color\n if (!this._discrete) {\n let color = ctx.createLinearGradient(0, 0, this._canvas.width, 0);\n for (let i = 0; i < this._color.length; i++) {\n color.addColorStop(\n this._color[i][0],\n `rgba( ${Math.round(this._color[i][1] * 255)}, ${Math.round(\n this._color[i][2] * 255\n )}, ${Math.round(this._color[i][3] * 255)}, 1)`\n );\n }\n\n ctx.fillStyle = color;\n ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n\n // setup context\n ctx.globalCompositeOperation = 'destination-in';\n\n // apply opacity\n let opacity = ctx.createLinearGradient(0, 0, this._canvas.width, 0);\n for (let i = 0; i < this._opacity.length; i++) {\n opacity.addColorStop(\n this._opacity[i][0],\n 'rgba(255, 255, 255, ' + this._opacity[i][1] + ')'\n );\n }\n ctx.fillStyle = opacity;\n ctx.fillRect(0, 0, this._canvas.width, this._canvas.height);\n } else {\n ctx.lineWidth = 2 * this._canvas.height;\n\n for (let i = 0; i < this._color.length; i++) {\n let currentPos = this._color[i][0];\n let nextPos = 1;\n if (i < this._color.length - 1) {\n nextPos = this._color[i + 1][0];\n }\n let previousPos = 0;\n if (i > 0) {\n previousPos = this._color[i - 1][0];\n }\n\n let from = previousPos + (currentPos - previousPos) / 2;\n let to = currentPos + (nextPos - currentPos) / 2;\n let color = this._color[i];\n let opacity = this._opacity[i] ? this._opacity[i][1] : 1;\n\n ctx.beginPath();\n ctx.strokeStyle = `rgba( ${Math.round(color[1] * 255)}, ${Math.round(\n color[2] * 255\n )}, ${Math.round(color[3] * 255)}, ${opacity})`;\n ctx.moveTo(from * this._canvas.width, 0);\n ctx.lineTo(to * this._canvas.width, 0);\n ctx.stroke();\n ctx.closePath();\n }\n }\n }\n\n get texture() {\n let texture = new three.Texture(this._canvas);\n texture.mapping = three.UVMapping;\n texture.wrapS = texture.wrapT = three.ClampToEdgeWrapping;\n texture.magFilter = texture.minFilter = three.NearestFilter;\n texture.premultiplyAlpha = true;\n texture.needsUpdate = true;\n return texture;\n }\n\n set lut(targetLUT) {\n this._color = this._luts[targetLUT];\n this._lut = targetLUT;\n\n this.paintCanvas();\n }\n\n get lut() {\n return this._lut;\n }\n\n set luts(newLuts) {\n this._luts = newLuts;\n }\n\n get luts() {\n return this._luts;\n }\n\n set lutO(targetLUTO) {\n this._opacity = this._lutsO[targetLUTO];\n this._lutO = targetLUTO;\n\n this.paintCanvas();\n }\n\n get lutO() {\n return this._lutO;\n }\n\n set lutsO(newLutsO) {\n this._lutsO = newLutsO;\n }\n\n get lutsO() {\n return this._lutsO;\n }\n\n set discrete(discrete) {\n this._discrete = discrete;\n\n this.paintCanvas();\n }\n\n get discrete() {\n return this._discrete;\n }\n\n lutsAvailable(type = 'color') {\n let available = [];\n let luts = this._luts;\n\n if (type !== 'color') {\n luts = this._lutsO;\n }\n\n for (let i in luts) {\n available.push(i);\n }\n\n return available;\n }\n\n // add luts to class' lut (so a user can add its own as well)\n static presetLuts() {\n return {\n default: [[0, 0, 0, 0], [1, 1, 1, 1]],\n spectrum: [\n [0, 0, 0, 0],\n [0.1, 0, 0, 1],\n [0.33, 0, 1, 1],\n [0.5, 0, 1, 0],\n [0.66, 1, 1, 0],\n [0.9, 1, 0, 0],\n [1, 1, 1, 1],\n ],\n hot_and_cold: [\n [0, 0, 0, 1],\n [0.15, 0, 1, 1],\n [0.3, 0, 1, 0],\n [0.45, 0, 0, 0],\n [0.5, 0, 0, 0],\n [0.55, 0, 0, 0],\n [0.7, 1, 1, 0],\n [0.85, 1, 0, 0],\n [1, 1, 1, 1],\n ],\n gold: [\n [0, 0, 0, 0],\n [0.13, 0.19, 0.03, 0],\n [0.25, 0.39, 0.12, 0],\n [0.38, 0.59, 0.26, 0],\n [0.5, 0.8, 0.46, 0.08],\n [0.63, 0.99, 0.71, 0.21],\n [0.75, 0.99, 0.88, 0.34],\n [0.88, 0.99, 0.99, 0.48],\n [1, 0.9, 0.95, 0.61],\n ],\n red: [[0, 0.75, 0, 0], [0.5, 1, 0.5, 0], [0.95, 1, 1, 0], [1, 1, 1, 1]],\n green: [[0, 0, 0.75, 0], [0.5, 0.5, 1, 0], [0.95, 1, 1, 0], [1, 1, 1, 1]],\n blue: [[0, 0, 0, 1], [0.5, 0, 0.5, 1], [0.95, 0, 1, 1], [1, 1, 1, 1]],\n walking_dead: [[0, 0.1, 1, 1], [1, 1, 1, 1]],\n random: [\n [0, 0, 0, 0],\n [0.27, 0.18, 0.18, 0.18],\n [0.41, 1, 1, 1],\n [0.7, 1, 0, 0],\n [1, 1, 1, 1],\n ],\n muscle_bone: [\n [0, 0, 0, 0],\n [0.00392156862745098, 0.00784313725490196, 0, 0],\n [0.00784313725490196, 0.0196078431372549, 0, 0],\n [0.011764705882352941, 0.03137254901960784, 0, 0],\n [0.01568627450980392, 0.0392156862745098, 0, 0.00392156862745098],\n [0.0196078431372549, 0.050980392156862744, 0.00392156862745098, 0.00392156862745098],\n [0.023529411764705882, 0.06274509803921569, 0.00392156862745098, 0.00392156862745098],\n [0.027450980392156862, 0.07058823529411765, 0.00392156862745098, 0.00784313725490196],\n [0.03137254901960784, 0.08235294117647059, 0.00392156862745098, 0.00784313725490196],\n [0.03529411764705882, 0.09411764705882353, 0.00784313725490196, 0.00784313725490196],\n [0.0392156862745098, 0.10196078431372549, 0.00784313725490196, 0.00784313725490196],\n [0.043137254901960784, 0.11372549019607843, 0.00784313725490196, 0.011764705882352941],\n [0.047058823529411764, 0.12549019607843137, 0.00784313725490196, 0.011764705882352941],\n [0.050980392156862744, 0.13333333333333333, 0.011764705882352941, 0.011764705882352941],\n [0.054901960784313725, 0.1450980392156863, 0.011764705882352941, 0.01568627450980392],\n [0.058823529411764705, 0.1568627450980392, 0.011764705882352941, 0.01568627450980392],\n [0.06274509803921569, 0.16470588235294117, 0.011764705882352941, 0.01568627450980392],\n [0.06666666666666667, 0.17647058823529413, 0.011764705882352941, 0.0196078431372549],\n [0.07058823529411765, 0.18823529411764706, 0.01568627450980392, 0.0196078431372549],\n [0.07450980392156863, 0.2, 0.01568627450980392, 0.0196078431372549],\n [0.0784313725490196, 0.20784313725490197, 0.01568627450980392, 0.0196078431372549],\n [0.08235294117647059, 0.2196078431372549, 0.01568627450980392, 0.023529411764705882],\n [0.08627450980392157, 0.23137254901960785, 0.0196078431372549, 0.023529411764705882],\n [0.09019607843137255, 0.23921568627450981, 0.0196078431372549, 0.023529411764705882],\n [0.09411764705882353, 0.25098039215686274, 0.0196078431372549, 0.027450980392156862],\n [0.09803921568627451, 0.2627450980392157, 0.0196078431372549, 0.027450980392156862],\n [0.10196078431372549, 0.27058823529411763, 0.023529411764705882, 0.027450980392156862],\n [0.10588235294117647, 0.2823529411764706, 0.023529411764705882, 0.027450980392156862],\n [0.10980392156862745, 0.29411764705882354, 0.023529411764705882, 0.03137254901960784],\n [0.11372549019607843, 0.30196078431372547, 0.023529411764705882, 0.03137254901960784],\n [0.11764705882352941, 0.3137254901960784, 0.023529411764705882, 0.03137254901960784],\n [0.12156862745098039, 0.3254901960784314, 0.027450980392156862, 0.03529411764705882],\n [0.12549019607843137, 0.3333333333333333, 0.027450980392156862, 0.03529411764705882],\n [0.12941176470588237, 0.34509803921568627, 0.027450980392156862, 0.03529411764705882],\n [0.13333333333333333, 0.3568627450980392, 0.027450980392156862, 0.0392156862745098],\n [0.13725490196078433, 0.36470588235294116, 0.03137254901960784, 0.0392156862745098],\n [0.1411764705882353, 0.3764705882352941, 0.03137254901960784, 0.0392156862745098],\n [0.1450980392156863, 0.38823529411764707, 0.03137254901960784, 0.0392156862745098],\n [0.14901960784313725, 0.4, 0.03137254901960784, 0.043137254901960784],\n [0.15294117647058825, 0.40784313725490196, 0.03529411764705882, 0.043137254901960784],\n [0.1568627450980392, 0.4196078431372549, 0.03529411764705882, 0.043137254901960784],\n [0.1607843137254902, 0.43137254901960786, 0.03529411764705882, 0.047058823529411764],\n [0.16470588235294117, 0.4392156862745098, 0.03529411764705882, 0.047058823529411764],\n [0.16862745098039217, 0.45098039215686275, 0.03529411764705882, 0.047058823529411764],\n [0.17254901960784313, 0.4627450980392157, 0.0392156862745098, 0.047058823529411764],\n [0.17647058823529413, 0.47058823529411764, 0.0392156862745098, 0.050980392156862744],\n [0.1803921568627451, 0.4823529411764706, 0.0392156862745098, 0.050980392156862744],\n [0.1843137254901961, 0.49411764705882355, 0.0392156862745098, 0.050980392156862744],\n [0.18823529411764706, 0.5019607843137255, 0.043137254901960784, 0.054901960784313725],\n [0.19215686274509805, 0.5137254901960784, 0.043137254901960784, 0.054901960784313725],\n [0.19607843137254902, 0.5254901960784314, 0.043137254901960784, 0.054901960784313725],\n [0.2, 0.5333333333333333, 0.043137254901960784, 0.058823529411764705],\n [0.20392156862745098, 0.5450980392156862, 0.047058823529411764, 0.058823529411764705],\n [0.20784313725490197, 0.5568627450980392, 0.047058823529411764, 0.058823529411764705],\n [0.21176470588235294, 0.5647058823529412, 0.047058823529411764, 0.058823529411764705],\n [0.21568627450980393, 0.5764705882352941, 0.047058823529411764, 0.06274509803921569],\n [0.2196078431372549, 0.5882352941176471, 0.047058823529411764, 0.06274509803921569],\n [0.2235294117647059, 0.6, 0.050980392156862744, 0.06274509803921569],\n [0.22745098039215686, 0.6078431372549019, 0.050980392156862744, 0.06666666666666667],\n [0.23137254901960785, 0.6196078431372549, 0.050980392156862744, 0.06666666666666667],\n [0.23529411764705882, 0.6313725490196078, 0.050980392156862744, 0.06666666666666667],\n [0.23921568627450981, 0.6392156862745098, 0.054901960784313725, 0.06666666666666667],\n [0.24313725490196078, 0.6509803921568628, 0.054901960784313725, 0.07058823529411765],\n [0.24705882352941178, 0.6627450980392157, 0.054901960784313725, 0.07058823529411765],\n [0.25098039215686274, 0.6705882352941176, 0.054901960784313725, 0.07058823529411765],\n [0.2549019607843137, 0.6823529411764706, 0.058823529411764705, 0.07450980392156863],\n [0.25882352941176473, 0.6941176470588235, 0.058823529411764705, 0.07450980392156863],\n [0.2627450980392157, 0.7019607843137254, 0.058823529411764705, 0.07450980392156863],\n [0.26666666666666666, 0.7137254901960784, 0.058823529411764705, 0.0784313725490196],\n [0.27058823529411763, 0.7254901960784313, 0.058823529411764705, 0.0784313725490196],\n [0.27450980392156865, 0.7333333333333333, 0.06274509803921569, 0.0784313725490196],\n [0.2784313725490196, 0.7450980392156863, 0.06274509803921569, 0.0784313725490196],\n [0.2823529411764706, 0.7568627450980392, 0.06274509803921569, 0.08235294117647059],\n [0.28627450980392155, 0.7647058823529411, 0.06274509803921569, 0.08235294117647059],\n [0.2901960784313726, 0.7764705882352941, 0.06666666666666667, 0.08235294117647059],\n [0.29411764705882354, 0.788235294117647, 0.06666666666666667, 0.08627450980392157],\n [0.2980392156862745, 0.8, 0.06666666666666667, 0.08627450980392157],\n [0.30196078431372547, 0.807843137254902, 0.06666666666666667, 0.08627450980392157],\n [0.3058823529411765, 0.8196078431372549, 0.07058823529411765, 0.08627450980392157],\n [0.30980392156862746, 0.8313725490196079, 0.07058823529411765, 0.09019607843137255],\n [0.3137254901960784, 0.8392156862745098, 0.07058823529411765, 0.09019607843137255],\n [0.3176470588235294, 0.8509803921568627, 0.07058823529411765, 0.09019607843137255],\n [0.3215686274509804, 0.8627450980392157, 0.07058823529411765, 0.09411764705882353],\n [0.3254901960784314, 0.8705882352941177, 0.07450980392156863, 0.09411764705882353],\n [0.32941176470588235, 0.8823529411764706, 0.07450980392156863, 0.09411764705882353],\n [0.3333333333333333, 0.8941176470588236, 0.07450980392156863, 0.09803921568627451],\n [0.33725490196078434, 0.9019607843137255, 0.07450980392156863, 0.09803921568627451],\n [0.3411764705882353, 0.9137254901960784, 0.0784313725490196, 0.09803921568627451],\n [0.34509803921568627, 0.9254901960784314, 0.0784313725490196, 0.09803921568627451],\n [0.34901960784313724, 0.9333333333333333, 0.0784313725490196, 0.10196078431372549],\n [0.35294117647058826, 0.9450980392156862, 0.0784313725490196, 0.10196078431372549],\n [0.3568627450980392, 0.9568627450980393, 0.08235294117647059, 0.10196078431372549],\n [0.3607843137254902, 0.9647058823529412, 0.08235294117647059, 0.10588235294117647],\n [0.36470588235294116, 0.9764705882352941, 0.08235294117647059, 0.10588235294117647],\n [0.3686274509803922, 0.9882352941176471, 0.08235294117647059, 0.10588235294117647],\n [0.37254901960784315, 1, 0.08235294117647059, 0.10588235294117647],\n [0.3764705882352941, 1, 0.09411764705882353, 0.10588235294117647],\n [0.3803921568627451, 1, 0.10588235294117647, 0.10588235294117647],\n [0.3843137254901961, 1, 0.11764705882352941, 0.10196078431372549],\n [0.38823529411764707, 1, 0.12941176470588237, 0.10196078431372549],\n [0.39215686274509803, 1, 0.1411764705882353, 0.10196078431372549],\n [0.396078431372549, 1, 0.15294117647058825, 0.09803921568627451],\n [0.4, 1, 0.16470588235294117, 0.09803921568627451],\n [0.403921568627451, 1, 0.17647058823529413, 0.09803921568627451],\n [0.40784313725490196, 1, 0.18823529411764706, 0.09411764705882353],\n [0.4117647058823529, 1, 0.2, 0.09411764705882353],\n [0.41568627450980394, 1, 0.21176470588235294, 0.09411764705882353],\n [0.4196078431372549, 1, 0.2235294117647059, 0.09019607843137255],\n [0.4235294117647059, 1, 0.23529411764705882, 0.09019607843137255],\n [0.42745098039215684, 1, 0.24705882352941178, 0.08627450980392157],\n [0.43137254901960786, 1, 0.25882352941176473, 0.08627450980392157],\n [0.43529411764705883, 1, 0.27058823529411763, 0.08627450980392157],\n [0.4392156862745098, 1, 0.2823529411764706, 0.08235294117647059],\n [0.44313725490196076, 1, 0.29411764705882354, 0.08235294117647059],\n [0.4470588235294118, 1, 0.3058823529411765, 0.08235294117647059],\n [0.45098039215686275, 1, 0.3176470588235294, 0.0784313725490196],\n [0.4549019607843137, 1, 0.32941176470588235, 0.0784313725490196],\n [0.4588235294117647, 1, 0.3411764705882353, 0.0784313725490196],\n [0.4627450980392157, 1, 0.35294117647058826, 0.07450980392156863],\n [0.4666666666666667, 1, 0.36470588235294116, 0.07450980392156863],\n [0.47058823529411764, 1, 0.3764705882352941, 0.07450980392156863],\n [0.4745098039215686, 1, 0.38823529411764707, 0.07058823529411765],\n [0.47843137254901963, 1, 0.4, 0.07058823529411765],\n [0.4823529411764706, 1, 0.4117647058823529, 0.07058823529411765],\n [0.48627450980392156, 1, 0.4235294117647059, 0.06666666666666667],\n [0.49019607843137253, 1, 0.43529411764705883, 0.06666666666666667],\n [0.49411764705882355, 1, 0.4470588235294118, 0.06274509803921569],\n [0.4980392156862745, 1, 0.4588235294117647, 0.06274509803921569],\n [0.5019607843137255, 1, 0.47058823529411764, 0.06274509803921569],\n [0.5058823529411764, 1, 0.4823529411764706, 0.058823529411764705],\n [0.5098039215686274, 1, 0.49411764705882355, 0.058823529411764705],\n [0.5137254901960784, 1, 0.5058823529411764, 0.058823529411764705],\n [0.5176470588235295, 1, 0.5137254901960784, 0.054901960784313725],\n [0.5215686274509804, 1, 0.5254901960784314, 0.054901960784313725],\n [0.5254901960784314, 1, 0.5372549019607843, 0.054901960784313725],\n [0.5294117647058824, 1, 0.5490196078431373, 0.050980392156862744],\n [0.5333333333333333, 1, 0.5607843137254902, 0.050980392156862744],\n [0.5372549019607843, 1, 0.5725490196078431, 0.050980392156862744],\n [0.5411764705882353, 1, 0.5843137254901961, 0.047058823529411764],\n [0.5450980392156862, 1, 0.596078431372549, 0.047058823529411764],\n [0.5490196078431373, 1, 0.6078431372549019, 0.043137254901960784],\n [0.5529411764705883, 1, 0.6196078431372549, 0.043137254901960784],\n [0.5568627450980392, 1, 0.6313725490196078, 0.043137254901960784],\n [0.5607843137254902, 1, 0.6431372549019608, 0.0392156862745098],\n [0.5647058823529412, 1, 0.6549019607843137, 0.0392156862745098],\n [0.5686274509803921, 1, 0.6666666666666666, 0.0392156862745098],\n [0.5725490196078431, 1, 0.6784313725490196, 0.03529411764705882],\n [0.5764705882352941, 1, 0.6901960784313725, 0.03529411764705882],\n [0.5803921568627451, 1, 0.6941176470588235, 0.0392156862745098],\n [0.5843137254901961, 1, 0.7019607843137254, 0.0392156862745098],\n [0.5882352941176471, 1, 0.7058823529411765, 0.043137254901960784],\n [0.592156862745098, 1, 0.7098039215686275, 0.043137254901960784],\n [0.596078431372549, 1, 0.7137254901960784, 0.047058823529411764],\n [0.6, 1, 0.7176470588235294, 0.047058823529411764],\n [0.6039215686274509, 1, 0.7254901960784313, 0.050980392156862744],\n [0.6078431372549019, 1, 0.7294117647058823, 0.050980392156862744],\n [0.611764705882353, 1, 0.7333333333333333, 0.054901960784313725],\n [0.615686274509804, 1, 0.7372549019607844, 0.058823529411764705],\n [0.6196078431372549, 1, 0.7411764705882353, 0.058823529411764705],\n [0.6235294117647059, 1, 0.7490196078431373, 0.06274509803921569],\n [0.6274509803921569, 1, 0.7529411764705882, 0.06274509803921569],\n [0.6313725490196078, 1, 0.7568627450980392, 0.06666666666666667],\n [0.6352941176470588, 1, 0.7607843137254902, 0.06666666666666667],\n [0.6392156862745098, 1, 0.7647058823529411, 0.07058823529411765],\n [0.6431372549019608, 1, 0.7725490196078432, 0.07058823529411765],\n [0.6470588235294118, 1, 0.7764705882352941, 0.07450980392156863],\n [0.6509803921568628, 1, 0.7803921568627451, 0.07450980392156863],\n [0.6549019607843137, 1, 0.7843137254901961, 0.0784313725490196],\n [0.6588235294117647, 1, 0.788235294117647, 0.08235294117647059],\n [0.6627450980392157, 1, 0.796078431372549, 0.08235294117647059],\n [0.6666666666666666, 1, 0.8, 0.08627450980392157],\n [0.6705882352941176, 1, 0.803921568627451, 0.08627450980392157],\n [0.6745098039215687, 1, 0.807843137254902, 0.09019607843137255],\n [0.6784313725490196, 1, 0.8117647058823529, 0.09019607843137255],\n [0.6823529411764706, 1, 0.8196078431372549, 0.09411764705882353],\n [0.6862745098039216, 1, 0.8235294117647058, 0.09411764705882353],\n [0.6901960784313725, 1, 0.8274509803921568, 0.09803921568627451],\n [0.6941176470588235, 1, 0.8313725490196079, 0.10196078431372549],\n [0.6980392156862745, 1, 0.8352941176470589, 0.10196078431372549],\n [0.7019607843137254, 1, 0.8431372549019608, 0.10588235294117647],\n [0.7058823529411765, 1, 0.8470588235294118, 0.10588235294117647],\n [0.7098039215686275, 1, 0.8509803921568627, 0.10980392156862745],\n [0.7137254901960784, 1, 0.8549019607843137, 0.10980392156862745],\n [0.7176470588235294, 1, 0.8627450980392157, 0.11372549019607843],\n [0.7215686274509804, 1, 0.8666666666666667, 0.11372549019607843],\n [0.7254901960784313, 1, 0.8705882352941177, 0.11764705882352941],\n [0.7294117647058823, 1, 0.8745098039215686, 0.12156862745098039],\n [0.7333333333333333, 1, 0.8784313725490196, 0.12156862745098039],\n [0.7372549019607844, 1, 0.8862745098039215, 0.12549019607843137],\n [0.7411764705882353, 1, 0.8901960784313725, 0.12549019607843137],\n [0.7450980392156863, 1, 0.8941176470588236, 0.12941176470588237],\n [0.7490196078431373, 1, 0.8980392156862745, 0.12941176470588237],\n [0.7529411764705882, 1, 0.9019607843137255, 0.13333333333333333],\n [0.7568627450980392, 1, 0.9098039215686274, 0.13333333333333333],\n [0.7607843137254902, 1, 0.9137254901960784, 0.13725490196078433],\n [0.7647058823529411, 1, 0.9176470588235294, 0.1411764705882353],\n [0.7686274509803922, 1, 0.9215686274509803, 0.1411764705882353],\n [0.7725490196078432, 1, 0.9254901960784314, 0.1450980392156863],\n [0.7764705882352941, 1, 0.9333333333333333, 0.1450980392156863],\n [0.7803921568627451, 1, 0.9372549019607843, 0.14901960784313725],\n [0.7843137254901961, 1, 0.9411764705882353, 0.14901960784313725],\n [0.788235294117647, 1, 0.9450980392156862, 0.15294117647058825],\n [0.792156862745098, 1, 0.9450980392156862, 0.16862745098039217],\n [0.796078431372549, 1, 0.9490196078431372, 0.1843137254901961],\n [0.8, 1, 0.9490196078431372, 0.2],\n [0.803921568627451, 1, 0.9490196078431372, 0.21568627450980393],\n [0.807843137254902, 1, 0.9490196078431372, 0.22745098039215686],\n [0.8117647058823529, 1, 0.9529411764705882, 0.24313725490196078],\n [0.8156862745098039, 1, 0.9529411764705882, 0.25882352941176473],\n [0.8196078431372549, 1, 0.9529411764705882, 0.27450980392156865],\n [0.8235294117647058, 1, 0.9529411764705882, 0.2901960784313726],\n [0.8274509803921568, 1, 0.9568627450980393, 0.3058823529411765],\n [0.8313725490196079, 1, 0.9568627450980393, 0.3215686274509804],\n [0.8352941176470589, 1, 0.9568627450980393, 0.33725490196078434],\n [0.8392156862745098, 1, 0.9568627450980393, 0.35294117647058826],\n [0.8431372549019608, 1, 0.9607843137254902, 0.3686274509803922],\n [0.8470588235294118, 1, 0.9607843137254902, 0.3843137254901961],\n [0.8509803921568627, 1, 0.9607843137254902, 0.4],\n [0.8549019607843137, 1, 0.9607843137254902, 0.4117647058823529],\n [0.8588235294117647, 1, 0.9647058823529412, 0.42745098039215684],\n [0.8627450980392157, 1, 0.9647058823529412, 0.44313725490196076],\n [0.8666666666666667, 1, 0.9647058823529412, 0.4588235294117647],\n [0.8705882352941177, 1, 0.9647058823529412, 0.4745098039215686],\n [0.8745098039215686, 1, 0.9686274509803922, 0.49019607843137253],\n [0.8784313725490196, 1, 0.9686274509803922, 0.5058823529411764],\n [0.8823529411764706, 1, 0.9686274509803922, 0.5215686274509804],\n [0.8862745098039215, 1, 0.9686274509803922, 0.5372549019607843],\n [0.8901960784313725, 1, 0.9725490196078431, 0.5529411764705883],\n [0.8941176470588236, 1, 0.9725490196078431, 0.5686274509803921],\n [0.8980392156862745, 1, 0.9725490196078431, 0.5843137254901961],\n [0.9019607843137255, 1, 0.9725490196078431, 0.6],\n [0.9058823529411765, 1, 0.9725490196078431, 0.611764705882353],\n [0.9098039215686274, 1, 0.9764705882352941, 0.6274509803921569],\n [0.9137254901960784, 1, 0.9764705882352941, 0.6431372549019608],\n [0.9176470588235294, 1, 0.9764705882352941, 0.6588235294117647],\n [0.9215686274509803, 1, 0.9764705882352941, 0.6745098039215687],\n [0.9254901960784314, 1, 0.9803921568627451, 0.6901960784313725],\n [0.9294117647058824, 1, 0.9803921568627451, 0.7058823529411765],\n [0.9333333333333333, 1, 0.9803921568627451, 0.7215686274509804],\n [0.9372549019607843, 1, 0.9803921568627451, 0.7372549019607844],\n [0.9411764705882353, 1, 0.984313725490196, 0.7529411764705882],\n [0.9450980392156862, 1, 0.984313725490196, 0.7686274509803922],\n [0.9490196078431372, 1, 0.984313725490196, 0.7843137254901961],\n [0.9529411764705882, 1, 0.984313725490196, 0.8],\n [0.9568627450980393, 1, 0.9882352941176471, 0.8117647058823529],\n [0.9607843137254902, 1, 0.9882352941176471, 0.8274509803921568],\n [0.9647058823529412, 1, 0.9882352941176471, 0.8431372549019608],\n [0.9686274509803922, 1, 0.9882352941176471, 0.8588235294117647],\n [0.9725490196078431, 1, 0.9921568627450981, 0.8745098039215686],\n [0.9764705882352941, 1, 0.9921568627450981, 0.8901960784313725],\n [0.9803921568627451, 1, 0.9921568627450981, 0.9058823529411765],\n [0.984313725490196, 1, 0.9921568627450981, 0.9215686274509803],\n [0.9882352941176471, 1, 0.996078431372549, 0.9372549019607843],\n [0.9921568627450981, 1, 0.996078431372549, 0.9529411764705882],\n [0.996078431372549, 1, 0.996078431372549, 0.9686274509803922],\n [1, 1, 0.996078431372549, 0.984313725490196],\n ],\n };\n }\n\n static presetLutsO() {\n return {\n linear: [[0, 0], [1, 1]],\n lowpass: [[0, 0.8], [0.2, 0.6], [0.3, 0.1], [1, 0]],\n bandpass: [[0, 0], [0.4, 0.8], [0.6, 0.8], [1, 0]],\n highpass: [[0, 0], [0.7, 0.1], [0.8, 0.6], [1, 0.8]],\n flat: [[0, 0.7], [1, 1]],\n random: [[0, 0], [0.38, 0], [0.55, 1], [0.72, 1], [1, 0.05]],\n linear_full: [\n [0, 0],\n [0.00392156862745098, 0.00392156862745098],\n [0.00784313725490196, 0.00784313725490196],\n [0.011764705882352941, 0.011764705882352941],\n [0.01568627450980392, 0.01568627450980392],\n [0.0196078431372549, 0.0196078431372549],\n [0.023529411764705882, 0.023529411764705882],\n [0.027450980392156862, 0.027450980392156862],\n [0.03137254901960784, 0.03137254901960784],\n [0.03529411764705882, 0.03529411764705882],\n [0.0392156862745098, 0.0392156862745098],\n [0.043137254901960784, 0.043137254901960784],\n [0.047058823529411764, 0.047058823529411764],\n [0.050980392156862744, 0.050980392156862744],\n [0.054901960784313725, 0.054901960784313725],\n [0.058823529411764705, 0.058823529411764705],\n [0.06274509803921569, 0.06274509803921569],\n [0.06666666666666667, 0.06666666666666667],\n [0.07058823529411765, 0.07058823529411765],\n [0.07450980392156863, 0.07450980392156863],\n [0.0784313725490196, 0.0784313725490196],\n [0.08235294117647059, 0.08235294117647059],\n [0.08627450980392157, 0.08627450980392157],\n [0.09019607843137255, 0.09019607843137255],\n [0.09411764705882353, 0.09411764705882353],\n [0.09803921568627451, 0.09803921568627451],\n [0.10196078431372549, 0.10196078431372549],\n [0.10588235294117647, 0.10588235294117647],\n [0.10980392156862745, 0.10980392156862745],\n [0.11372549019607843, 0.11372549019607843],\n [0.11764705882352941, 0.11764705882352941],\n [0.12156862745098039, 0.12156862745098039],\n [0.12549019607843137, 0.12549019607843137],\n [0.12941176470588237, 0.12941176470588237],\n [0.13333333333333333, 0.13333333333333333],\n [0.13725490196078433, 0.13725490196078433],\n [0.1411764705882353, 0.1411764705882353],\n [0.1450980392156863, 0.1450980392156863],\n [0.14901960784313725, 0.14901960784313725],\n [0.15294117647058825, 0.15294117647058825],\n [0.1568627450980392, 0.1568627450980392],\n [0.1607843137254902, 0.1607843137254902],\n [0.16470588235294117, 0.16470588235294117],\n [0.16862745098039217, 0.16862745098039217],\n [0.17254901960784313, 0.17254901960784313],\n [0.17647058823529413, 0.17647058823529413],\n [0.1803921568627451, 0.1803921568627451],\n [0.1843137254901961, 0.1843137254901961],\n [0.18823529411764706, 0.18823529411764706],\n [0.19215686274509805, 0.19215686274509805],\n [0.19607843137254902, 0.19607843137254902],\n [0.2, 0.2],\n [0.20392156862745098, 0.20392156862745098],\n [0.20784313725490197, 0.20784313725490197],\n [0.21176470588235294, 0.21176470588235294],\n [0.21568627450980393, 0.21568627450980393],\n [0.2196078431372549, 0.2196078431372549],\n [0.2235294117647059, 0.2235294117647059],\n [0.22745098039215686, 0.22745098039215686],\n [0.23137254901960785, 0.23137254901960785],\n [0.23529411764705882, 0.23529411764705882],\n [0.23921568627450981, 0.23921568627450981],\n [0.24313725490196078, 0.24313725490196078],\n [0.24705882352941178, 0.24705882352941178],\n [0.25098039215686274, 0.25098039215686274],\n [0.2549019607843137, 0.2549019607843137],\n [0.25882352941176473, 0.25882352941176473],\n [0.2627450980392157, 0.2627450980392157],\n [0.26666666666666666, 0.26666666666666666],\n [0.27058823529411763, 0.27058823529411763],\n [0.27450980392156865, 0.27450980392156865],\n [0.2784313725490196, 0.2784313725490196],\n [0.2823529411764706, 0.2823529411764706],\n [0.28627450980392155, 0.28627450980392155],\n [0.2901960784313726, 0.2901960784313726],\n [0.29411764705882354, 0.29411764705882354],\n [0.2980392156862745, 0.2980392156862745],\n [0.30196078431372547, 0.30196078431372547],\n [0.3058823529411765, 0.3058823529411765],\n [0.30980392156862746, 0.30980392156862746],\n [0.3137254901960784, 0.3137254901960784],\n [0.3176470588235294, 0.3176470588235294],\n [0.3215686274509804, 0.3215686274509804],\n [0.3254901960784314, 0.3254901960784314],\n [0.32941176470588235, 0.32941176470588235],\n [0.3333333333333333, 0.3333333333333333],\n [0.33725490196078434, 0.33725490196078434],\n [0.3411764705882353, 0.3411764705882353],\n [0.34509803921568627, 0.34509803921568627],\n [0.34901960784313724, 0.34901960784313724],\n [0.35294117647058826, 0.35294117647058826],\n [0.3568627450980392, 0.3568627450980392],\n [0.3607843137254902, 0.3607843137254902],\n [0.36470588235294116, 0.36470588235294116],\n [0.3686274509803922, 0.3686274509803922],\n [0.37254901960784315, 0.37254901960784315],\n [0.3764705882352941, 0.3764705882352941],\n [0.3803921568627451, 0.3803921568627451],\n [0.3843137254901961, 0.3843137254901961],\n [0.38823529411764707, 0.38823529411764707],\n [0.39215686274509803, 0.39215686274509803],\n [0.396078431372549, 0.396078431372549],\n [0.4, 0.4],\n [0.403921568627451, 0.403921568627451],\n [0.40784313725490196, 0.40784313725490196],\n [0.4117647058823529, 0.4117647058823529],\n [0.41568627450980394, 0.41568627450980394],\n [0.4196078431372549, 0.4196078431372549],\n [0.4235294117647059, 0.4235294117647059],\n [0.42745098039215684, 0.42745098039215684],\n [0.43137254901960786, 0.43137254901960786],\n [0.43529411764705883, 0.43529411764705883],\n [0.4392156862745098, 0.4392156862745098],\n [0.44313725490196076, 0.44313725490196076],\n [0.4470588235294118, 0.4470588235294118],\n [0.45098039215686275, 0.45098039215686275],\n [0.4549019607843137, 0.4549019607843137],\n [0.4588235294117647, 0.4588235294117647],\n [0.4627450980392157, 0.4627450980392157],\n [0.4666666666666667, 0.4666666666666667],\n [0.47058823529411764, 0.47058823529411764],\n [0.4745098039215686, 0.4745098039215686],\n [0.47843137254901963, 0.47843137254901963],\n [0.4823529411764706, 0.4823529411764706],\n [0.48627450980392156, 0.48627450980392156],\n [0.49019607843137253, 0.49019607843137253],\n [0.49411764705882355, 0.49411764705882355],\n [0.4980392156862745, 0.4980392156862745],\n [0.5019607843137255, 0.5019607843137255],\n [0.5058823529411764, 0.5058823529411764],\n [0.5098039215686274, 0.5098039215686274],\n [0.5137254901960784, 0.5137254901960784],\n [0.5176470588235295, 0.5176470588235295],\n [0.5215686274509804, 0.5215686274509804],\n [0.5254901960784314, 0.5254901960784314],\n [0.5294117647058824, 0.5294117647058824],\n [0.5333333333333333, 0.5333333333333333],\n [0.5372549019607843, 0.5372549019607843],\n [0.5411764705882353, 0.5411764705882353],\n [0.5450980392156862, 0.5450980392156862],\n [0.5490196078431373, 0.5490196078431373],\n [0.5529411764705883, 0.5529411764705883],\n [0.5568627450980392, 0.5568627450980392],\n [0.5607843137254902, 0.5607843137254902],\n [0.5647058823529412, 0.5647058823529412],\n [0.5686274509803921, 0.5686274509803921],\n [0.5725490196078431, 0.5725490196078431],\n [0.5764705882352941, 0.5764705882352941],\n [0.5803921568627451, 0.5803921568627451],\n [0.5843137254901961, 0.5843137254901961],\n [0.5882352941176471, 0.5882352941176471],\n [0.592156862745098, 0.592156862745098],\n [0.596078431372549, 0.596078431372549],\n [0.6, 0.6],\n [0.6039215686274509, 0.6039215686274509],\n [0.6078431372549019, 0.6078431372549019],\n [0.611764705882353, 0.611764705882353],\n [0.615686274509804, 0.615686274509804],\n [0.6196078431372549, 0.6196078431372549],\n [0.6235294117647059, 0.6235294117647059],\n [0.6274509803921569, 0.6274509803921569],\n [0.6313725490196078, 0.6313725490196078],\n [0.6352941176470588, 0.6352941176470588],\n [0.6392156862745098, 0.6392156862745098],\n [0.6431372549019608, 0.6431372549019608],\n [0.6470588235294118, 0.6470588235294118],\n [0.6509803921568628, 0.6509803921568628],\n [0.6549019607843137, 0.6549019607843137],\n [0.6588235294117647, 0.6588235294117647],\n [0.6627450980392157, 0.6627450980392157],\n [0.6666666666666666, 0.6666666666666666],\n [0.6705882352941176, 0.6705882352941176],\n [0.6745098039215687, 0.6745098039215687],\n [0.6784313725490196, 0.6784313725490196],\n [0.6823529411764706, 0.6823529411764706],\n [0.6862745098039216, 0.6862745098039216],\n [0.6901960784313725, 0.6901960784313725],\n [0.6941176470588235, 0.6941176470588235],\n [0.6980392156862745, 0.6980392156862745],\n [0.7019607843137254, 0.7019607843137254],\n [0.7058823529411765, 0.7058823529411765],\n [0.7098039215686275, 0.7098039215686275],\n [0.7137254901960784, 0.7137254901960784],\n [0.7176470588235294, 0.7176470588235294],\n [0.7215686274509804, 0.7215686274509804],\n [0.7254901960784313, 0.7254901960784313],\n [0.7294117647058823, 0.7294117647058823],\n [0.7333333333333333, 0.7333333333333333],\n [0.7372549019607844, 0.7372549019607844],\n [0.7411764705882353, 0.7411764705882353],\n [0.7450980392156863, 0.7450980392156863],\n [0.7490196078431373, 0.7490196078431373],\n [0.7529411764705882, 0.7529411764705882],\n [0.7568627450980392, 0.7568627450980392],\n [0.7607843137254902, 0.7607843137254902],\n [0.7647058823529411, 0.7647058823529411],\n [0.7686274509803922, 0.7686274509803922],\n [0.7725490196078432, 0.7725490196078432],\n [0.7764705882352941, 0.7764705882352941],\n [0.7803921568627451, 0.7803921568627451],\n [0.7843137254901961, 0.7843137254901961],\n [0.788235294117647, 0.788235294117647],\n [0.792156862745098, 0.792156862745098],\n [0.796078431372549, 0.796078431372549],\n [0.8, 0.8],\n [0.803921568627451, 0.803921568627451],\n [0.807843137254902, 0.807843137254902],\n [0.8117647058823529, 0.8117647058823529],\n [0.8156862745098039, 0.8156862745098039],\n [0.8196078431372549, 0.8196078431372549],\n [0.8235294117647058, 0.8235294117647058],\n [0.8274509803921568, 0.8274509803921568],\n [0.8313725490196079, 0.8313725490196079],\n [0.8352941176470589, 0.8352941176470589],\n [0.8392156862745098, 0.8392156862745098],\n [0.8431372549019608, 0.8431372549019608],\n [0.8470588235294118, 0.8470588235294118],\n [0.8509803921568627, 0.8509803921568627],\n [0.8549019607843137, 0.8549019607843137],\n [0.8588235294117647, 0.8588235294117647],\n [0.8627450980392157, 0.8627450980392157],\n [0.8666666666666667, 0.8666666666666667],\n [0.8705882352941177, 0.8705882352941177],\n [0.8745098039215686, 0.8745098039215686],\n [0.8784313725490196, 0.8784313725490196],\n [0.8823529411764706, 0.8823529411764706],\n [0.8862745098039215, 0.8862745098039215],\n [0.8901960784313725, 0.8901960784313725],\n [0.8941176470588236, 0.8941176470588236],\n [0.8980392156862745, 0.8980392156862745],\n [0.9019607843137255, 0.9019607843137255],\n [0.9058823529411765, 0.9058823529411765],\n [0.9098039215686274, 0.9098039215686274],\n [0.9137254901960784, 0.9137254901960784],\n [0.9176470588235294, 0.9176470588235294],\n [0.9215686274509803, 0.9215686274509803],\n [0.9254901960784314, 0.9254901960784314],\n [0.9294117647058824, 0.9294117647058824],\n [0.9333333333333333, 0.9333333333333333],\n [0.9372549019607843, 0.9372549019607843],\n [0.9411764705882353, 0.9411764705882353],\n [0.9450980392156862, 0.9450980392156862],\n [0.9490196078431372, 0.9490196078431372],\n [0.9529411764705882, 0.9529411764705882],\n [0.9568627450980393, 0.9568627450980393],\n [0.9607843137254902, 0.9607843137254902],\n [0.9647058823529412, 0.9647058823529412],\n [0.9686274509803922, 0.9686274509803922],\n [0.9725490196078431, 0.9725490196078431],\n [0.9764705882352941, 0.9764705882352941],\n [0.9803921568627451, 0.9803921568627451],\n [0.984313725490196, 0.984313725490196],\n [0.9882352941176471, 0.9882352941176471],\n [0.9921568627450981, 0.9921568627450981],\n [0.996078431372549, 0.996078431372549],\n [1, 1],\n ],\n };\n }\n };\n};\n\nexport { helpersLut };\nexport default helpersLut();\n","/**\n * Helpers material mixin.\n *\n * @module helpers/material/mixin\n */\n\nconst helpersMaterialMixin = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = three.Object3D;\n return class extends Constructor {\n _createMaterial(extraOptions) {\n // generate shaders on-demand!\n let fs = new this._shadersFragment(this._uniforms);\n let vs = new this._shadersVertex();\n\n // material\n let globalOptions = {\n uniforms: this._uniforms,\n vertexShader: vs.compute(),\n fragmentShader: fs.compute(),\n };\n\n let options = Object.assign(extraOptions, globalOptions);\n this._material = new three.ShaderMaterial(options);\n this._material.needsUpdate = true;\n }\n\n _updateMaterial() {\n // generate shaders on-demand!\n let fs = new this._shadersFragment(this._uniforms);\n let vs = new this._shadersVertex();\n\n this._material.vertexShader = vs.compute();\n this._material.fragmentShader = fs.compute();\n\n this._material.needsUpdate = true;\n }\n\n _prepareTexture() {\n this._textures = [];\n for (let m = 0; m < this._stack._rawData.length; m++) {\n let tex = new three.DataTexture(\n this._stack.rawData[m],\n this._stack.textureSize,\n this._stack.textureSize,\n this._stack.textureType,\n three.UnsignedByteType,\n three.UVMapping,\n three.ClampToEdgeWrapping,\n three.ClampToEdgeWrapping,\n three.NearestFilter,\n three.NearestFilter\n );\n tex.needsUpdate = true;\n tex.flipY = true;\n this._textures.push(tex);\n }\n }\n };\n};\n\nexport { helpersMaterialMixin };\nexport default helpersMaterialMixin();\n","import CoreUtils from '../core/core.utils';\n\n/**\n * Event Based progressbar\n * @module helpers/progressBar\n *\n * @example\n *\n * let loader = new LoadersVolume();\n * const domContainer = document.getElementById('progressbar');\n * const pb = new HelpersProgressBarEventBased(loader, domContainer);\n */\n\nexport default class HelpersProgressBarEventBased {\n constructor(emitter, domTarget) {\n if (!emitter || !this._isFunction(emitter.emit)) {\n window.console.error('please give the this._emitter instance');\n return;\n }\n\n if (CoreUtils.isString(domTarget)) {\n this._dom = document.getElementById(domTarget);\n } else {\n this._dom = domTarget;\n }\n\n if (!CoreUtils.isElement(this._dom)) {\n window.console.error('please give the id of container dom or directly a dom instance');\n return;\n }\n this._emitter = emitter;\n this.initContainerDom();\n this.initEventListenner();\n this.loaded = 0;\n this.totalFile = 0;\n }\n\n _isFunction(fn) {\n return Object.prototype.toString.call(fn) === '[object Function]';\n }\n\n initEventListenner() {\n const self = this;\n\n this._emitter.on('load-start', function(event) {\n const totalFiles = event.files.length;\n self.totalFile = totalFiles;\n self._domTotalFile.innerHTML = totalFiles;\n });\n\n this._emitter.on('fetch-start', function(event) {\n const fetchLi = document.createElement('li');\n\n const fileTag = document.createElement('div');\n fileTag.innerHTML = 'file: ' + event.file;\n fileTag.style.color = '#ffffff';\n fetchLi.append(fileTag);\n\n fetchLi.className = 'fetch-file';\n fetchLi.id = 'file-' + event.file;\n fetchLi.style.marginBottom = '7px';\n fetchLi.style.border = '1px solid #ffffff;';\n fetchLi.style.width = '60%';\n const fetchprogress = document.createElement('div');\n fetchprogress.id = 'file-fetch-' + event.file;\n fetchprogress.style.width = '0%';\n fetchLi.append(fetchprogress);\n self._domProcessList.append(fetchLi);\n });\n\n this._emitter.on('fetch-progress', function(event) {\n const id = 'file-fetch-' + event.file;\n const fileFetchDom = document.getElementById(id);\n fileFetchDom.style.width = (event.loaded / event.total) * 100 + '%';\n fileFetchDom.style.border = '1px solid red';\n });\n\n this._emitter.on('fetch-success', function(event) {\n // show result\n const liParent = document.getElementById('file-' + event.file);\n const result = document.createElement('div');\n result.id = 'file-result-' + event.file;\n result.innerHTML = 'fetch-success';\n result.style.color = '#ffffff';\n liParent.append(result);\n });\n\n this._emitter.on('fetch-error', function(event) {\n // console.log(event);\n });\n\n this._emitter.on('fetch-abort', function(event) {\n // console.log(event);\n });\n\n this._emitter.on('fetch-end', function(event) {\n // console.log(event);\n });\n\n this._emitter.on('fetch-timeout', function(event) {\n // console.log(event);\n });\n\n this._emitter.on('parse-start', function(event) {\n const liParent = document.getElementById('file-' + event.file);\n const parseprogress = document.createElement('div');\n parseprogress.id = 'file-parse-' + event.file;\n parseprogress.style.width = '0%';\n liParent.append(parseprogress);\n });\n\n this._emitter.on('parsing', function(event) {\n const id = 'file-parse-' + event.file;\n const fileParseDom = document.getElementById(id);\n fileParseDom.style.width = (event.parsed / event.total) * 100 + '%';\n fileParseDom.style.border = '1px solid yellow';\n });\n\n this._emitter.on('parse-success', function(event) {\n self.loaded += 1;\n self._domCurrentFile.innerHTML = self.loaded;\n self._domCurrentProgress.style.width = (self.loaded / self.totalFile) * 100 + '%';\n // show result\n const liParent = document.getElementById('file-' + event.file);\n const result = document.createElement('div');\n result.id = 'file-result-' + event.file;\n result.innerHTML = 'parse-success';\n result.style.color = '#ffffff';\n liParent.append(result);\n });\n }\n\n initContainerDom() {\n const containerDom = `\n
\n
\n \n
\n
\n
\n
\n
    \n
\n
`;\n const wrap = document.createElement('div');\n wrap.innerHTML = containerDom;\n this._dom.append(wrap);\n // dom interface\n this._domCurrentFile = document.getElementById('current-file-index');\n this._domTotalFile = document.getElementById('total-file');\n this._domProcessList = document.getElementById('process-list');\n this._domCurrentProgress = document.getElementById('current-progress');\n }\n}\n","/**\n * @module helpers/progressBar\n */\n\nexport default class HelpersProgressBar {\n constructor(container) {\n this._container = container;\n this._modes = {\n load: {\n name: 'load',\n color: '#FFF56F',\n },\n parse: {\n name: 'parse',\n color: '#2196F3',\n },\n };\n\n this.requestAnimationFrameID = null;\n\n this._mode = null;\n this._value = null;\n this._total = null;\n this._totalFiles = null;\n\n this.init();\n }\n\n free() {\n let progressContainers = this._container.getElementsByClassName('progress container');\n if (progressContainers.length > 0) {\n progressContainers[0].parentNode.removeChild(progressContainers[0]);\n }\n progressContainers = null;\n // stop rendering loop\n window.cancelAnimationFrame(this.requestAnimationFrameID);\n }\n\n init() {\n let progressContainer = this._domContainer();\n\n for (let mode in this._modes) {\n if (this._modes.hasOwnProperty(mode)) {\n let bar = this._domBar(this._modes[mode]);\n progressContainer.appendChild(bar);\n bar = null;\n }\n }\n\n this._container.appendChild(progressContainer);\n progressContainer = null;\n\n // start rendering loop\n this.updateUI();\n }\n\n // url can be used in child class to show overall progress bar\n update(value, total, mode, url = '') {\n this._mode = mode;\n this._value = value;\n // depending on CDN, total return to XHTTPRequest can be 0.\n // In this case, we generate a random number to animate the progressbar\n if (total === 0) {\n this._total = value;\n this._value = Math.random() * value;\n } else {\n this._total = total;\n }\n }\n\n updateUI() {\n this.requestAnimationFrameID = requestAnimationFrame(() => {\n this.updateUI();\n });\n\n if (\n !(\n this._modes.hasOwnProperty(this._mode) &&\n this._modes[this._mode].hasOwnProperty('name') &&\n this._modes[this._mode].hasOwnProperty('color')\n )\n ) {\n return false;\n }\n\n const progress = Math.round((this._value / this._total) * 100);\n const color = this._modes[this._mode].color;\n\n let progressBar = this._container.getElementsByClassName(\n 'progress ' + this._modes[this._mode].name\n );\n if (progressBar.length > 0) {\n progressBar[0].style.borderColor = color;\n progressBar[0].style.width = progress + '%';\n }\n progressBar = null;\n }\n\n _domContainer() {\n let container = document.createElement('div');\n\n // class it\n container.classList.add('progress');\n container.classList.add('container');\n\n // style it\n container.style.width = '100%';\n container.style.height = '8px';\n container.style.position = 'absolute';\n container.style.backgroundColor = 'rgba(158, 158, 158, 0.5)';\n container.style.top = '0';\n container.style.zIndex = '1';\n\n return container;\n }\n\n _domBar(mode) {\n if (!(mode.hasOwnProperty('name') && mode.hasOwnProperty('color'))) {\n window.console.log('Invalid mode provided.');\n window.console.log(mode);\n\n return false;\n }\n\n let bar = document.createElement('div');\n\n // class it\n bar.classList.add(mode.name);\n bar.classList.add('progress');\n\n // style it\n bar.style.border = '2px solid ' + mode.color;\n bar.style.width = '0%';\n\n return bar;\n }\n\n set totalFiles(totalFiles) {\n this._totalFiles = totalFiles;\n }\n\n get totalFiles() {\n return this._totalFiles;\n }\n}\n","import CoreUtils from '../core/core.utils';\n\nlet defaultSegmentation = {\n 0: { color: [0, 0, 0], opacity: 0, label: 'background' },\n 1: { color: [255, 0, 0], opacity: 1, label: 'white matter' },\n};\n\nexport default class HelpersSegmentationLut {\n constructor(domTarget, segmentation = defaultSegmentation) {\n if (CoreUtils.isString(domTarget)) {\n this._dom = document.getElementById(domTarget);\n } else {\n this._dom = domTarget;\n }\n\n this._segmentation = segmentation;\n\n /* The segmentation object contains the color, opacity, label and structures associated:\n e.g\n const freesurferSegmentation = {\n 0: {color: [0, 0, 0],opacity: 0,label: 'background'},\n 1: {color: [255, 0, 0],opacity: 1,label: 'white matter'},\n }\n */\n this.initCanvas();\n this.paintCanvas();\n }\n\n initCanvas() {\n // container\n this._canvasContainer = this.initCanvasContainer(this._dom);\n // background\n this._canvasBg = this.createCanvas();\n this._canvasContainer.appendChild(this._canvasBg);\n // foreground\n this._canvas = this.createCanvas();\n this._canvasContainer.appendChild(this._canvas);\n }\n\n initCanvasContainer(dom) {\n let canvasContainer = dom;\n canvasContainer.style.width = '256 px';\n canvasContainer.style.height = '128 px';\n canvasContainer.style.border = '1px solid #F9F9F9';\n return canvasContainer;\n }\n\n createCanvas() {\n let canvas = document.createElement('canvas');\n canvas.height = 128;\n canvas.width = 256;\n return canvas;\n }\n\n paintCanvas() {\n // setup context\n let ctx = this._canvas.getContext('2d');\n ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\n ctx.globalCompositeOperation = 'source-over';\n ctx.lineWidth = 1;\n\n for (let i in this._segmentation) {\n // i is the label number and specifies the coordinates inside the canvas\n let xCoord = i % this._canvas.width;\n let yCoord = Math.floor(i / this._canvas.width);\n let opacity =\n typeof this._segmentation[i]['opacity'] != 'undefined'\n ? this._segmentation[i]['opacity']\n : 1;\n let color = this._segmentation[i]['color'];\n\n ctx.fillStyle = `rgba( ${Math.round(color[0])}, ${Math.round(color[1])}, ${Math.round(\n color[2]\n )}, ${opacity})`;\n ctx.fillRect(xCoord, yCoord, 1, 1);\n }\n }\n\n get texture() {\n let texture = new THREE.Texture(this._canvas);\n texture.mapping = THREE.UVMapping;\n texture.wrapS = texture.wrapT = THREE.ClampToEdgeWrapping;\n texture.magFilter = texture.minFilter = THREE.NearestFilter;\n texture.premultiplyAlpha = true;\n texture.needsUpdate = true;\n\n return texture;\n }\n\n /**\n * Set and get the segmentation object\n * (you can create it or get it from the presets file)\n *\n * @param {*} segmentation\n */\n set segmentation(segmentation) {\n this._segmentation = segmentation;\n this.paintCanvas();\n }\n\n get segmentation() {\n return this._segmentation;\n }\n}\n","/** * Imports ***/\nimport { geometriesSlice } from '../geometries/geometries.slice';\nimport ShadersUniform from '../shaders/shaders.data.uniform';\nimport ShadersVertex from '../shaders/shaders.data.vertex';\nimport ShadersFragment from '../shaders/shaders.data.fragment';\n\nimport { helpersMaterialMixin } from '../helpers/helpers.material.mixin';\n\n/**\n * @module helpers/slice\n */\n\nconst helpersSlice = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = helpersMaterialMixin(three);\n return class extends Constructor {\n constructor(\n stack,\n index = 0,\n position = new three.Vector3(0, 0, 0),\n direction = new three.Vector3(0, 0, 1),\n aabbSpace = 'IJK'\n ) {\n //\n super();\n\n // private vars\n this._stack = stack;\n\n // image settings\n // index only used to grab window/level and intercept/slope\n this._invert = this._stack.invert;\n\n this._lut = 'none';\n this._lutTexture = null;\n // if auto === true, get from index\n // else from stack which holds the default values\n this._intensityAuto = true;\n this._interpolation = 1; // default to trilinear interpolation\n // starts at 0\n this._index = index;\n this._windowWidth = null;\n this._windowCenter = null;\n this._opacity = 1;\n this._rescaleSlope = null;\n this._rescaleIntercept = null;\n this._spacing = 1;\n this._thickness = 0;\n this._thicknessMethod = 0; // default to MIP (Maximum Intensity Projection); 1 - Mean; 2 - MinIP\n\n // threshold\n this._lowerThreshold = null;\n this._upperThreshold = null;\n\n this._canvasWidth = 0;\n this._canvasHeight = 0;\n this._borderColor = null;\n\n // Object3D settings\n // shape\n this._planePosition = position;\n this._planeDirection = direction;\n // change aaBBSpace changes the box dimensions\n // also changes the transform\n // there is also a switch to move back mesh to LPS space automatically\n this._aaBBspace = aabbSpace; // or LPS -> different transforms, esp for the geometry/mesh\n this._material = null;\n this._textures = [];\n this._shadersFragment = ShadersFragment;\n this._shadersVertex = ShadersVertex;\n this._uniforms = ShadersUniform.uniforms();\n this._geometry = null;\n this._mesh = null;\n this._visible = true;\n\n // update dimensions, center, etc.\n // depending on aaBBSpace\n this._init();\n\n // update object\n this._create();\n }\n\n // getters/setters\n\n get stack() {\n return this._stack;\n }\n\n set stack(stack) {\n this._stack = stack;\n }\n\n get spacing() {\n return this._spacing;\n }\n\n set spacing(spacing) {\n this._spacing = spacing;\n this._uniforms.uSpacing.value = this._spacing;\n }\n\n get thickness() {\n return this._thickness;\n }\n\n set thickness(thickness) {\n this._thickness = thickness;\n this._uniforms.uThickness.value = this._thickness;\n }\n\n get thicknessMethod() {\n return this._thicknessMethod;\n }\n\n set thicknessMethod(thicknessMethod) {\n this._thicknessMethod = thicknessMethod;\n this._uniforms.uThicknessMethod.value = this._thicknessMethod;\n }\n get windowWidth() {\n return this._windowWidth;\n }\n\n set windowWidth(windowWidth) {\n this._windowWidth = windowWidth;\n this.updateIntensitySettingsUniforms();\n }\n\n get windowCenter() {\n return this._windowCenter;\n }\n\n set windowCenter(windowCenter) {\n this._windowCenter = windowCenter;\n this.updateIntensitySettingsUniforms();\n }\n\n get opacity() {\n return this._opacity;\n }\n\n set opacity(opacity) {\n this._opacity = opacity;\n this.updateIntensitySettingsUniforms();\n }\n\n // adding thresholding method\n get upperThreshold() {\n return this._upperThreshold;\n }\n\n set upperThreshold(upperThreshold) {\n this._upperThreshold = upperThreshold;\n this.updateIntensitySettingsUniforms();\n }\n\n get lowerThreshold() {\n return this._lowerThreshold;\n }\n\n set lowerThreshold(lowerThreshold) {\n this._lowerThreshold = lowerThreshold;\n this.updateIntensitySettingsUniforms();\n }\n get rescaleSlope() {\n return this._rescaleSlope;\n }\n\n set rescaleSlope(rescaleSlope) {\n this._rescaleSlope = rescaleSlope;\n this.updateIntensitySettingsUniforms();\n }\n\n get rescaleIntercept() {\n return this._rescaleIntercept;\n }\n\n set rescaleIntercept(rescaleIntercept) {\n this._rescaleIntercept = rescaleIntercept;\n this.updateIntensitySettingsUniforms();\n }\n\n get invert() {\n return this._invert;\n }\n\n set invert(invert) {\n this._invert = invert;\n this.updateIntensitySettingsUniforms();\n }\n\n get lut() {\n return this._lut;\n }\n\n set lut(lut) {\n this._lut = lut;\n }\n\n get lutTexture() {\n return this._lutTexture;\n }\n\n set lutTexture(lutTexture) {\n this._lutTexture = lutTexture;\n this.updateIntensitySettingsUniforms();\n }\n\n get intensityAuto() {\n return this._intensityAuto;\n }\n\n set intensityAuto(intensityAuto) {\n this._intensityAuto = intensityAuto;\n this.updateIntensitySettings();\n this.updateIntensitySettingsUniforms();\n }\n\n get interpolation() {\n return this._interpolation;\n }\n\n set interpolation(interpolation) {\n this._interpolation = interpolation;\n this.updateIntensitySettingsUniforms();\n this._updateMaterial();\n }\n\n get index() {\n return this._index;\n }\n\n set index(index) {\n this._index = index;\n this._update();\n }\n\n set planePosition(position) {\n this._planePosition = position;\n this._update();\n }\n\n get planePosition() {\n return this._planePosition;\n }\n\n set planeDirection(direction) {\n this._planeDirection = direction;\n this._update();\n }\n\n get planeDirection() {\n return this._planeDirection;\n }\n\n set halfDimensions(halfDimensions) {\n this._halfDimensions = halfDimensions;\n }\n\n get halfDimensions() {\n return this._halfDimensions;\n }\n\n set center(center) {\n this._center = center;\n }\n\n get center() {\n return this._center;\n }\n\n set aabbSpace(aabbSpace) {\n this._aaBBspace = aabbSpace;\n this._init();\n }\n\n get aabbSpace() {\n return this._aaBBspace;\n }\n\n set mesh(mesh) {\n this._mesh = mesh;\n }\n\n get mesh() {\n return this._mesh;\n }\n\n set geometry(geometry) {\n this._geometry = geometry;\n }\n\n get geometry() {\n return this._geometry;\n }\n\n set canvasWidth(canvasWidth) {\n this._canvasWidth = canvasWidth;\n this._uniforms.uCanvasWidth.value = this._canvasWidth;\n }\n\n get canvasWidth() {\n return this._canvasWidth;\n }\n\n set canvasHeight(canvasHeight) {\n this._canvasHeight = canvasHeight;\n this._uniforms.uCanvasHeight.value = this._canvasHeight;\n }\n\n get canvasHeight() {\n return this._canvasHeight;\n }\n\n set borderColor(borderColor) {\n this._borderColor = borderColor;\n this._uniforms.uBorderColor.value = new three.Color(borderColor);\n }\n\n get borderColor() {\n return this._borderColor;\n }\n\n _init() {\n if (!this._stack || !this._stack._prepared || !this._stack._packed) {\n return;\n }\n\n if (this._aaBBspace === 'IJK') {\n this._halfDimensions = this._stack.halfDimensionsIJK;\n this._center = new three.Vector3(\n this._stack.halfDimensionsIJK.x - 0.5,\n this._stack.halfDimensionsIJK.y - 0.5,\n this._stack.halfDimensionsIJK.z - 0.5\n );\n this._toAABB = new three.Matrix4();\n } else {\n // LPS\n let aaBBox = this._stack.AABBox();\n this._halfDimensions = aaBBox.clone().multiplyScalar(0.5);\n this._center = this._stack.centerAABBox();\n this._toAABB = this._stack.lps2AABB;\n }\n }\n\n // private methods\n _create() {\n if (!this._stack || !this._stack.prepared || !this._stack.packed) {\n return;\n }\n\n // Convenience vars\n try {\n const SliceGeometryContructor = geometriesSlice(three);\n this._geometry = new SliceGeometryContructor(\n this._halfDimensions,\n this._center,\n this._planePosition,\n this._planeDirection,\n this._toAABB\n );\n } catch (e) {\n window.console.log(e);\n window.console.log('invalid slice geometry - exiting...');\n return;\n }\n\n if (!this._geometry.vertices) {\n return;\n }\n\n if (!this._material) {\n //\n this._uniforms.uTextureSize.value = this._stack.textureSize;\n this._uniforms.uDataDimensions.value = [\n this._stack.dimensionsIJK.x,\n this._stack.dimensionsIJK.y,\n this._stack.dimensionsIJK.z,\n ];\n this._uniforms.uWorldToData.value = this._stack.lps2IJK;\n this._uniforms.uNumberOfChannels.value = this._stack.numberOfChannels;\n this._uniforms.uPixelType.value = this._stack.pixelType;\n this._uniforms.uBitsAllocated.value = this._stack.bitsAllocated;\n this._uniforms.uPackedPerPixel.value = this._stack.packedPerPixel;\n this._uniforms.uSpacing.value = this._spacing;\n this._uniforms.uThickness.value = this._thickness;\n this._uniforms.uThicknessMethod.value = this._thicknessMethod;\n // compute texture if material exist\n this._prepareTexture();\n this._uniforms.uTextureContainer.value = this._textures;\n if (this._stack.textureUnits > 8) {\n this._uniforms.uTextureContainer.length = 14;\n }\n\n this._createMaterial({\n side: three.DoubleSide,\n });\n }\n\n // update intensity related stuff\n this.updateIntensitySettings();\n this.updateIntensitySettingsUniforms();\n\n // create the mesh!\n this._mesh = new three.Mesh(this._geometry, this._material);\n if (this._aaBBspace === 'IJK') {\n this._mesh.applyMatrix(this._stack.ijk2LPS);\n }\n\n this._mesh.visible = this._visible;\n\n // and add it!\n this.add(this._mesh);\n }\n\n updateIntensitySettings() {\n // if auto, get from frame index\n if (this._intensityAuto) {\n this.updateIntensitySetting('windowCenter');\n this.updateIntensitySetting('windowWidth');\n this.updateIntensitySetting('rescaleSlope');\n this.updateIntensitySetting('rescaleIntercept');\n } else {\n if (this._windowCenter === null) {\n this._windowCenter = this._stack.windowCenter;\n }\n\n if (this._windowWidth === null) {\n this._windowWidth = this._stack.windowWidth;\n }\n\n if (this._rescaleSlope === null) {\n this._rescaleSlope = this._stack.rescaleSlope;\n }\n\n if (this._rescaleIntercept === null) {\n this._rescaleIntercept = this._stack.rescaleIntercept;\n }\n }\n\n // adding thresholding\n if (this._upperThreshold === null) {\n this._upperThreshold = this._stack._minMax[1];\n }\n\n if (this._lowerThreshold === null) {\n this._lowerThreshold = this._stack._minMax[0];\n }\n }\n\n updateIntensitySettingsUniforms() {\n // compensate for the offset to only pass > 0 values to shaders\n // models > models.stack.js : _packTo8Bits\n let offset = 0;\n if (this._stack._minMax[0] < 0) {\n offset -= this._stack._minMax[0];\n }\n\n // set slice window center and width\n this._uniforms.uRescaleSlopeIntercept.value = [this._rescaleSlope, this._rescaleIntercept];\n this._uniforms.uWindowCenterWidth.value = [offset + this._windowCenter, this._windowWidth];\n\n // set slice opacity\n this._uniforms.uOpacity.value = this._opacity;\n\n // set slice upper/lower threshold\n this._uniforms.uLowerUpperThreshold.value = [\n offset + this._lowerThreshold,\n offset + this._upperThreshold,\n ];\n\n // invert\n this._uniforms.uInvert.value = this._invert === true ? 1 : 0;\n\n // interpolation\n this._uniforms.uInterpolation.value = this._interpolation;\n\n // lut\n if (this._lut === 'none') {\n this._uniforms.uLut.value = 0;\n } else {\n this._uniforms.uLut.value = 1;\n this._uniforms.uTextureLUT.value = this._lutTexture;\n }\n }\n\n updateIntensitySetting(setting) {\n if (this._stack.frame[this._index] && this._stack.frame[this._index][setting]) {\n this['_' + setting] = this._stack.frame[this._index][setting];\n } else {\n this['_' + setting] = this._stack[setting];\n }\n }\n\n _update() {\n // update slice\n if (this._mesh) {\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n // we do not want to dispose the texture!\n // this._mesh.material.dispose();\n // this._mesh.material = null;\n this._mesh = null;\n }\n\n this._create();\n }\n\n dispose() {\n // Release memory\n for (let j = 0; j < this._textures.length; j++) {\n this._textures[j].dispose();\n this._textures[j] = null;\n }\n this._textures = null;\n this._shadersFragment = null;\n this._shadersVertex = null;\n\n this._uniforms = null;\n\n // material, geometry and mesh\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n\n this._geometry.dispose();\n this._geometry = null;\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n this._stack = null;\n }\n\n cartesianEquation() {\n // Make sure we have a geometry\n if (!this._geometry || !this._geometry.vertices || this._geometry.vertices.length < 3) {\n return new three.Vector4();\n }\n\n let vertices = this._geometry.vertices;\n let dataToWorld = this._stack.ijk2LPS;\n let p1 = new three.Vector3(vertices[0].x, vertices[0].y, vertices[0].z).applyMatrix4(\n dataToWorld\n );\n let p2 = new three.Vector3(vertices[1].x, vertices[1].y, vertices[1].z).applyMatrix4(\n dataToWorld\n );\n let p3 = new three.Vector3(vertices[2].x, vertices[2].y, vertices[2].z).applyMatrix4(\n dataToWorld\n );\n let v1 = new three.Vector3();\n let v2 = new three.Vector3();\n let normal = v1\n .subVectors(p3, p2)\n .cross(v2.subVectors(p1, p2))\n .normalize();\n\n return new three.Vector4(normal.x, normal.y, normal.z, -normal.dot(p1));\n }\n };\n};\n\nexport { helpersSlice };\nexport default helpersSlice();\n","/** * Imports ***/\nimport { helpersBorder } from '../helpers/helpers.border';\nimport { helpersBoundingBox } from '../helpers/helpers.boundingbox';\nimport { helpersSlice } from '../helpers/helpers.slice';\n\n/**\n * Helper to easily display and interact with a stack.
\n *
\n * Defaults:
\n * - orientation: 0 (acquisition direction)
\n * - index: middle slice in acquisition direction
\n *
\n * Features:
\n * - slice from the stack (in any direction)
\n * - slice border
\n * - stack bounding box
\n *
\n * Live demo at: {@link http://jsfiddle.net/gh/get/library/pure/fnndsc/ami/tree/master/lessons/01#run|Lesson 01}\n *\n * @example\n * let stack = new VJS.Models.Stack();\n * ... // prepare the stack\n *\n * let helpersStack = new VJS.Helpers.Stack(stack);\n * stackHelper.bbox.color = 0xF9F9F9;\n * stackHelper.border.color = 0xF9F9F9;\n *\n * let scene = new THREE.Scene();\n * scene.add(stackHelper);\n *\n * @see module:helpers/border\n * @see module:helpers/boundingbox\n * @see module:helpers/slice\n *\n * @module helpers/stack\n */\nconst helpersStack = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = three.Object3D;\n return class extends Constructor {\n constructor(stack) {\n //\n super();\n\n this._stack = stack;\n this._bBox = null;\n this._slice = null;\n this._border = null;\n this._dummy = null;\n\n this._orientation = 0;\n this._index = 0;\n\n this._uniforms = null;\n this._autoWindowLevel = false;\n this._outOfBounds = false;\n this._orientationMaxIndex = 0;\n this._orientationSpacing = 0;\n\n this._canvasWidth = 0;\n this._canvasHeight = 0;\n this._borderColor = null;\n\n this._create();\n }\n\n /**\n * Get stack.\n *\n * @type {ModelsStack}\n */\n get stack() {\n return this._stack;\n }\n\n /**\n * Set stack.\n *\n * @type {ModelsStack}\n */\n set stack(stack) {\n this._stack = stack;\n }\n\n /**\n * Get bounding box helper.\n *\n * @type {HelpersBoundingBox}\n */\n get bbox() {\n return this._bBox;\n }\n\n /**\n * Get slice helper.\n *\n * @type {HelpersSlice}\n */\n get slice() {\n return this._slice;\n }\n\n /**\n * Get border helper.\n *\n * @type {HelpersSlice}\n */\n get border() {\n return this._border;\n }\n\n /**\n * Set/get current slice index.
\n * Sets outOfBounds flag to know if target index is in/out stack bounding box.
\n *
\n * Internally updates the sliceHelper index and position. Also updates the\n * borderHelper with the updated sliceHelper.\n *\n * @type {number}\n */\n get index() {\n return this._index;\n }\n\n set index(index) {\n this._index = index;\n\n // update the slice\n this._slice.index = index;\n let halfDimensions = this._stack.halfDimensionsIJK;\n this._slice.planePosition = this._prepareSlicePosition(halfDimensions, this._index);\n\n // also update the border\n this._border.helpersSlice = this._slice;\n\n // update ourOfBounds flag\n this._isIndexOutOfBounds();\n }\n\n /**\n * Set/get current slice orientation.
\n * Values:
\n * - 0: acquisition direction (slice normal is z_cosine)
\n * - 1: next direction (slice normal is x_cosine)
\n * - 2: next direction (slice normal is y_cosine)
\n * - n: set orientation to 0
\n *
\n * Internally updates the sliceHelper direction. Also updates the\n * borderHelper with the updated sliceHelper.\n *\n * @type {number}\n */\n set orientation(orientation) {\n this._orientation = orientation;\n this._computeOrientationMaxIndex();\n\n this._computeOrientationSpacing();\n this._slice.spacing = Math.abs(this._orientationSpacing);\n this._slice.thickness = this._slice.spacing;\n\n this._slice.planeDirection = this._prepareDirection(this._orientation);\n\n // also update the border\n this._border.helpersSlice = this._slice;\n }\n\n get orientation() {\n return this._orientation;\n }\n\n /**\n * Set/get the outOfBound flag.\n *\n * @type {boolean}\n */\n set outOfBounds(outOfBounds) {\n this._outOfBounds = outOfBounds;\n }\n\n get outOfBounds() {\n return this._outOfBounds;\n }\n\n /**\n * Set/get the orientationMaxIndex.\n *\n * @type {number}\n */\n set orientationMaxIndex(orientationMaxIndex) {\n this._orientationMaxIndex = orientationMaxIndex;\n }\n\n get orientationMaxIndex() {\n return this._orientationMaxIndex;\n }\n\n /**\n * Set/get the orientationSpacing.\n *\n * @type {number}\n */\n set orientationSpacing(orientationSpacing) {\n this._orientationSpacing = orientationSpacing;\n }\n\n get orientationSpacing() {\n return this._orientationSpacing;\n }\n\n set canvasWidth(canvasWidth) {\n this._canvasWidth = canvasWidth;\n this._slice.canvasWidth = this._canvasWidth;\n }\n\n get canvasWidth() {\n return this._canvasWidth;\n }\n\n set canvasHeight(canvasHeight) {\n this._canvasHeight = canvasHeight;\n this._slice.canvasHeight = this._canvasHeight;\n }\n\n get canvasHeight() {\n return this._canvasHeight;\n }\n\n set borderColor(borderColor) {\n this._borderColor = borderColor;\n this._border.color = borderColor;\n this._slice.borderColor = this._borderColor;\n }\n\n get borderColor() {\n return this._borderColor;\n }\n\n //\n // PRIVATE METHODS\n //\n\n /**\n * Initial setup, including stack prepare, bbox prepare, slice prepare and\n * border prepare.\n *\n * @private\n */\n _create() {\n if (this._stack) {\n // prepare sthe stack internals\n this._prepareStack();\n\n // prepare visual objects\n this._prepareBBox();\n this._prepareSlice();\n this._prepareBorder();\n // todo: Arrow\n } else {\n window.console.log('no stack to be prepared...');\n }\n }\n\n _computeOrientationSpacing() {\n let spacing = this._stack._spacing;\n switch (this._orientation) {\n case 0:\n this._orientationSpacing = spacing.z;\n break;\n case 1:\n this._orientationSpacing = spacing.x;\n break;\n case 2:\n this._orientationSpacing = spacing.y;\n break;\n default:\n this._orientationSpacing = 0;\n break;\n }\n }\n\n _computeOrientationMaxIndex() {\n let dimensionsIJK = this._stack.dimensionsIJK;\n this._orientationMaxIndex = 0;\n switch (this._orientation) {\n case 0:\n this._orientationMaxIndex = dimensionsIJK.z - 1;\n break;\n case 1:\n this._orientationMaxIndex = dimensionsIJK.x - 1;\n break;\n case 2:\n this._orientationMaxIndex = dimensionsIJK.y - 1;\n break;\n default:\n // do nothing!\n break;\n }\n }\n\n /**\n * Given orientation, check if index is in/out of bounds.\n *\n * @private\n */\n _isIndexOutOfBounds() {\n this._computeOrientationMaxIndex();\n if (this._index >= this._orientationMaxIndex || this._index < 0) {\n this._outOfBounds = true;\n } else {\n this._outOfBounds = false;\n }\n }\n\n /**\n * Prepare a stack for visualization. (image to world transform, frames order,\n * pack data into 8 bits textures, etc.)\n *\n * @private\n */\n _prepareStack() {\n // make sure there is something, if not throw an error\n // compute image to workd transform, order frames, etc.\n if (!this._stack.prepared) {\n this._stack.prepare();\n }\n // pack data into 8 bits rgba texture for the shader\n // this one can be slow...\n if (!this._stack.packed) {\n this._stack.pack();\n }\n }\n\n /**\n * Setup bounding box helper given prepared stack and add bounding box helper\n * to stack helper.\n *\n * @private\n */\n _prepareBBox() {\n const HelpersBoundingBoxConstructor = helpersBoundingBox(three);\n this._bBox = new HelpersBoundingBoxConstructor(this._stack);\n this.add(this._bBox);\n }\n\n /**\n * Setup border helper given slice helper and add border helper\n * to stack helper.\n *\n * @private\n */\n _prepareBorder() {\n const HelpersBorderContructor = helpersBorder(three);\n this._border = new HelpersBorderContructor(this._slice);\n this.add(this._border);\n }\n\n /**\n * Setup slice helper given prepared stack helper and add slice helper\n * to stack helper.\n *\n * @private\n */\n _prepareSlice() {\n let halfDimensionsIJK = this._stack.halfDimensionsIJK;\n // compute initial index given orientation\n this._index = this._prepareSliceIndex(halfDimensionsIJK);\n // compute initial position given orientation and index\n let position = this._prepareSlicePosition(halfDimensionsIJK, this._index);\n // compute initial direction orientation\n let direction = this._prepareDirection(this._orientation);\n\n const SliceHelperConstructor = helpersSlice(three);\n this._slice = new SliceHelperConstructor(this._stack, this._index, position, direction);\n this.add(this._slice);\n }\n\n /**\n * Compute slice index depending on orientation.\n *\n * @param {Vector3} indices - Indices in each direction.\n *\n * @returns {number} Slice index according to current orientation.\n *\n * @private\n */\n _prepareSliceIndex(indices) {\n let index = 0;\n switch (this._orientation) {\n case 0:\n index = Math.floor(indices.z);\n break;\n case 1:\n index = Math.floor(indices.x);\n break;\n case 2:\n index = Math.floor(indices.y);\n break;\n default:\n // do nothing!\n break;\n }\n return index;\n }\n\n /**\n * Compute slice position depending on orientation.\n * Sets index in proper location of reference position.\n *\n * @param {Vector3} rPosition - Reference position.\n * @param {number} index - Current index.\n *\n * @returns {number} Slice index according to current orientation.\n *\n * @private\n */\n _prepareSlicePosition(rPosition, index) {\n let position = new three.Vector3(0, 0, 0);\n switch (this._orientation) {\n case 0:\n position = new three.Vector3(Math.floor(rPosition.x), Math.floor(rPosition.y), index);\n break;\n case 1:\n position = new three.Vector3(index, Math.floor(rPosition.y), Math.floor(rPosition.z));\n break;\n case 2:\n position = new three.Vector3(Math.floor(rPosition.x), index, Math.floor(rPosition.z));\n break;\n default:\n // do nothing!\n break;\n }\n return position;\n }\n\n /**\n * Compute slice direction depending on orientation.\n *\n * @param {number} orientation - Slice orientation.\n *\n * @returns {Vector3} Slice direction\n *\n * @private\n */\n _prepareDirection(orientation) {\n let direction = new three.Vector3(0, 0, 1);\n switch (orientation) {\n case 0:\n direction = new three.Vector3(0, 0, 1);\n break;\n case 1:\n direction = new three.Vector3(1, 0, 0);\n break;\n case 2:\n direction = new three.Vector3(0, 1, 0);\n break;\n default:\n // do nothing!\n break;\n }\n\n return direction;\n }\n\n /**\n * Release the stack helper memory including the slice memory.\n *\n * @public\n */\n dispose() {\n this.remove(this._slice);\n this._slice.dispose();\n this._slice = null;\n this._bBox.dispose();\n this._bBox = null;\n this._border.dispose();\n this._border = null;\n }\n };\n};\n\n// export factory\nexport { helpersStack };\n// default export to\nexport default helpersStack();\n","/** * Imports ***/\nimport ShadersUniform from '../shaders/shaders.vr.uniform';\nimport ShadersVertex from '../shaders/shaders.vr.vertex';\nimport ShadersFragment from '../shaders/shaders.vr.fragment';\n\nimport { helpersMaterialMixin } from '../helpers/helpers.material.mixin';\n\n/**\n * @module helpers/volumerendering\n */\n\nconst helpersVolumeRendering = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = helpersMaterialMixin(three);\n return class extends Constructor {\n constructor(stack) {\n //\n super();\n\n this._stack = stack;\n this._textures = [];\n this._shadersFragment = ShadersFragment;\n this._shadersVertex = ShadersVertex;\n this._uniforms = ShadersUniform.uniforms();\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n\n this._algorithm = 0; // ray marching\n this._alphaCorrection = 0.5; // default\n this._interpolation = 1; // default to trilinear interpolation\n this._shading = 1; // shading is on by default\n this._shininess = 10.0;\n this._steps = 256; // default\n this._offset = 0;\n this._windowCenter = 0.0;\n this._windowWidth = 1.0;\n\n this._create();\n }\n\n _create() {\n this._prepareStack();\n this._prepareTexture();\n this._prepareMaterial();\n this._prepareGeometry();\n\n this._mesh = new three.Mesh(this._geometry, this._material);\n this.add(this._mesh);\n }\n\n _prepareStack() {\n if (!this._stack.prepared) {\n this._stack.prepare();\n }\n\n if (!this._stack.packed) {\n this._stack.pack();\n }\n\n // compensate for the offset to only pass > 0 values to shaders\n // models > models.stack.js : _packTo8Bits\n this._offset = Math.min(0, this._stack._minMax[0]);\n this._windowCenter = this._stack.windowCenter;\n this._windowWidth = this._stack.windowWidth * 0.8; // multiply for better default visualization\n }\n\n _prepareMaterial() {\n // uniforms\n this._uniforms = ShadersUniform.uniforms();\n this._uniforms.uWorldBBox.value = this._stack.worldBoundingBox();\n this._uniforms.uTextureSize.value = this._stack.textureSize;\n this._uniforms.uTextureContainer.value = this._textures;\n if (this._stack.textureUnits > 8) {\n this._uniforms.uTextureContainer.length = 14;\n }\n this._uniforms.uWorldToData.value = this._stack.lps2IJK;\n this._uniforms.uNumberOfChannels.value = this._stack.numberOfChannels;\n this._uniforms.uPixelType.value = this._stack.pixelType;\n this._uniforms.uBitsAllocated.value = this._stack.bitsAllocated;\n this._uniforms.uPackedPerPixel.value = this._stack.packedPerPixel;\n this._uniforms.uWindowCenterWidth.value = [\n this._windowCenter - this._offset,\n this._windowWidth,\n ];\n this._uniforms.uRescaleSlopeIntercept.value = [\n this._stack.rescaleSlope,\n this._stack.rescaleIntercept,\n ];\n this._uniforms.uDataDimensions.value = [\n this._stack.dimensionsIJK.x,\n this._stack.dimensionsIJK.y,\n this._stack.dimensionsIJK.z,\n ];\n this._uniforms.uAlphaCorrection.value = this._alphaCorrection;\n this._uniforms.uInterpolation.value = this._interpolation;\n this._uniforms.uShading.value = this._shading;\n this._uniforms.uShininess.value = this._shininess;\n this._uniforms.uSteps.value = this._steps;\n this._uniforms.uAlgorithm.value = this._algorithm;\n\n this._createMaterial({\n side: three.BackSide,\n transparent: true,\n });\n }\n\n _prepareGeometry() {\n let worldBBox = this._stack.worldBoundingBox();\n let centerLPS = this._stack.worldCenter();\n\n this._geometry = new three.BoxGeometry(\n worldBBox[1] - worldBBox[0],\n worldBBox[3] - worldBBox[2],\n worldBBox[5] - worldBBox[4]\n );\n this._geometry.applyMatrix(\n new three.Matrix4().makeTranslation(centerLPS.x, centerLPS.y, centerLPS.z)\n );\n }\n\n get uniforms() {\n return this._uniforms;\n }\n\n set uniforms(uniforms) {\n this._uniforms = uniforms;\n }\n\n set mesh(mesh) {\n this._mesh = mesh;\n }\n\n get mesh() {\n return this._mesh;\n }\n\n get stack() {\n return this._stack;\n }\n\n set stack(stack) {\n this._stack = stack;\n }\n\n get windowCenter() {\n return this._windowCenter;\n }\n\n set windowCenter(windowCenter) {\n this._windowCenter = windowCenter;\n this._uniforms.uWindowCenterWidth.value[0] = this._windowCenter - this._offset;\n }\n\n get windowWidth() {\n return this._windowWidth;\n }\n\n set windowWidth(windowWidth) {\n this._windowWidth = Math.max(1, windowWidth);\n this._uniforms.uWindowCenterWidth.value[1] = this._windowWidth;\n }\n\n get steps() {\n return this._steps;\n }\n\n set steps(steps) {\n this._steps = steps;\n this._uniforms.uSteps.value = this._steps;\n }\n\n get alphaCorrection() {\n return this._alphaCorrection;\n }\n\n set alphaCorrection(alphaCorrection) {\n this._alphaCorrection = alphaCorrection;\n this._uniforms.uAlphaCorrection.value = this._alphaCorrection;\n }\n\n get interpolation() {\n return this._interpolation;\n }\n\n set interpolation(interpolation) {\n this._interpolation = interpolation;\n this._uniforms.uInterpolation.value = this._interpolation;\n this._updateMaterial();\n }\n\n get shading() {\n return this._shading;\n }\n\n set shading(shading) {\n this._shading = shading;\n this._uniforms.uShading.value = this._shading;\n }\n\n get shininess() {\n return this._shininess;\n }\n\n set shininess(shininess) {\n this._shininess = shininess;\n this._uniforms.uShininess.value = this._shininess;\n }\n\n get algorithm() {\n return this._algorithm;\n }\n\n set algorithm(algorithm) {\n this._algorithm = algorithm;\n this._uniforms.uAlgorithm.value = this._algorithm;\n }\n\n dispose() {\n // Release memory\n for (let j = 0; j < this._textures.length; j++) {\n this._textures[j].dispose();\n this._textures[j] = null;\n }\n this._textures = null;\n this._shadersFragment = null;\n this._shadersVertex = null;\n\n this._uniforms.uTextureContainer = null;\n this._uniforms.uTextureLUT = null;\n this._uniforms = null;\n\n // material, geometry and mesh\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n\n this._geometry.dispose();\n this._geometry = null;\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n this._stack = null;\n }\n };\n};\n\nexport { helpersVolumeRendering };\nexport default helpersVolumeRendering();\n","/** Imports **/\nimport HelpersProgressBar from '../helpers/helpers.progressbar';\nimport EventEmitter from 'events';\n\n/**\n *\n * It is typically used to load a DICOM image. Use loading manager for\n * advanced usage, such as multiple files handling.\n *\n * Demo: {@link https://fnndsc.github.io/vjs#loader_dicom}\n *\n * @module loaders/base\n * @extends EventEmitter\n * @example\n * var files = ['/data/dcm/fruit'];\n *\n * // Instantiate a dicom loader\n * var lDicomoader = new dicom();\n *\n * // load a resource\n * loader.load(\n * // resource URL\n * files[0],\n * // Function when resource is loaded\n * function(object) {\n * //scene.add( object );\n * window.console.log(object);\n * }\n * );\n */\nexport default class LoadersBase extends EventEmitter {\n /**\n * Create a Loader.\n * @param {dom} container - The dom container of loader.\n * @param {object} ProgressBar - The progressbar of loader.\n */\n constructor(container = null, ProgressBar = HelpersProgressBar) {\n super();\n this._loaded = -1;\n this._totalLoaded = -1;\n this._parsed = -1;\n this._totalParsed = -1;\n\n this._data = [];\n\n this._container = container;\n this._progressBar = null;\n if (this._container && ProgressBar) {\n this._progressBar = new ProgressBar(this._container);\n }\n }\n\n /**\n * free the reference.\n */\n free() {\n this._data = [];\n this._container = null;\n // this._helpersProgressBar = null;\n\n if (this._progressBar) {\n this._progressBar.free();\n this._progressBar = null;\n }\n }\n\n /**\n * load the resource by url.\n * @param {string} url - resource url.\n * @param {Map} requests - used for cancellation.\n * @return {promise} promise.\n */\n fetch(url, requests) {\n return new Promise((resolve, reject) => {\n const request = new XMLHttpRequest();\n request.open('GET', url);\n request.crossOrigin = true;\n request.responseType = 'arraybuffer';\n\n request.onloadstart = event => {\n // emit 'fetch-start' event\n this.emit('fetch-start', {\n file: url,\n time: new Date(),\n });\n };\n\n request.onload = event => {\n if (request.status === 200 || request.status === 0) {\n this._loaded = event.loaded;\n this._totalLoaded = event.total;\n\n // will be removed after eventer set up\n if (this._progressBar) {\n this._progressBar.update(this._loaded, this._totalLoaded, 'load', url);\n }\n\n let buffer = request.response;\n let response = {\n url,\n buffer,\n };\n\n // emit 'fetch-success' event\n this.emit('fetch-success', {\n file: url,\n time: new Date(),\n totalLoaded: event.total,\n });\n\n resolve(response);\n } else {\n reject(request.statusText);\n }\n };\n\n request.onerror = () => {\n // emit 'fetch-error' event\n this.emit('fetch-error', {\n file: url,\n time: new Date(),\n });\n\n reject(request.statusText);\n };\n\n request.onabort = event => {\n // emit 'fetch-abort' event\n this.emit('fetch-abort', {\n file: url,\n time: new Date(),\n });\n\n reject(request.statusText || 'Aborted');\n };\n\n request.ontimeout = () => {\n // emit 'fetch-timeout' event\n this.emit('fetch-timeout', {\n file: url,\n time: new Date(),\n });\n\n reject(request.statusText);\n };\n\n request.onprogress = event => {\n this._loaded = event.loaded;\n this._totalLoaded = event.total;\n // emit 'fetch-progress' event\n this.emit('fetch-progress', {\n file: url,\n total: event.total,\n loaded: event.loaded,\n time: new Date(),\n });\n // will be removed after eventer set up\n if (this._progressBar) {\n this._progressBar.update(this._loaded, this._totalLoaded, 'load', url);\n }\n };\n\n request.onloadend = event => {\n // emit 'fetch-end' event\n this.emit('fetch-end', {\n file: url,\n time: new Date(),\n });\n // just use onload when success and onerror when failure, etc onabort\n // reject(request.statusText);\n };\n\n if (requests instanceof Map) {\n requests.set(url, request);\n }\n\n request.send();\n });\n }\n\n /**\n * parse the data loaded\n * SHOULD BE implementd by detail loader.\n * @param {object} response - loaded data.\n * @return {promise} promise.\n */\n parse(response) {\n return new Promise((resolve, reject) => {\n resolve(response);\n });\n }\n\n /**\n * default load sequence group promise.\n * @param {array} url - resource url.\n * @param {Map} requests - used for cancellation.\n * @return {promise} promise.\n */\n loadSequenceGroup(url, requests) {\n const fetchSequence = [];\n\n url.forEach(file => {\n fetchSequence.push(this.fetch(file, requests));\n });\n\n return Promise.all(fetchSequence)\n .then(rawdata => {\n return this.parse(rawdata);\n })\n .then(data => {\n this._data.push(data);\n return data;\n })\n .catch(function (error) {\n if (error === 'Aborted') {\n return;\n }\n window.console.log('oops... something went wrong...');\n window.console.log(error);\n });\n }\n\n /**\n * default load sequence promise.\n * @param {string} url - resource url.\n * @param {Map} requests - used for cancellation.\n * @return {promise} promise.\n */\n loadSequence(url, requests) {\n return this.fetch(url, requests)\n .then(rawdata => {\n return this.parse(rawdata);\n })\n .then(data => {\n this._data.push(data);\n return data;\n })\n .catch(function (error) {\n if (error === 'Aborted') {\n return;\n }\n window.console.log('oops... something went wrong...');\n window.console.log(error);\n });\n }\n\n /**\n * load the data by url(urls)\n * @param {string|array} url - resource url.\n * @param {Map} requests - used for cancellation.\n * @return {promise} promise\n */\n load(url, requests) {\n // if we load a single file, convert it to an array\n if (!Array.isArray(url)) {\n url = [url];\n }\n\n if (this._progressBar) {\n this._progressBar.totalFiles = url.length;\n this._progressBar.requests = requests;\n }\n\n // emit 'load-start' event\n this.emit('load-start', {\n files: url,\n time: new Date(),\n });\n\n const loadSequences = [];\n url.forEach(file => {\n if (!Array.isArray(file)) {\n loadSequences.push(this.loadSequence(file, requests));\n } else {\n loadSequences.push(this.loadSequenceGroup(file, requests));\n }\n });\n return Promise.all(loadSequences);\n }\n\n /**\n * Set data\n * @param {array} data\n */\n set data(data) {\n this._data = data;\n }\n\n /**\n * Get data\n * @return {array} data loaded\n */\n get data() {\n return this._data;\n }\n}\n","/** * Imports ***/\n\nconst PAKO = require('pako');\n\nimport LoadersBase from './loaders.base';\nimport ModelsSeries from '../models/models.series';\nimport ModelsStack from '../models/models.stack';\nimport ModelsFrame from '../models/models.frame';\n\nimport {CornerstoneDataParser} from \"../utils\";\n\n/**\n *\n * It is typically used to load a DICOM image. Use loading manager for\n * advanced usage, such as multiple files handling.\n *\n * Demo: {@link https://fnndsc.github.io/vjs#loader_dicom}\n *\n * @module loaders/volumes\n * @example\n * var files = ['/data/dcm/fruit'];\n *\n * // Instantiate a dicom loader\n * var lDicomoader = new dicom();\n *\n * // load a resource\n * loader.load(\n * // resource URL\n * files[0],\n * // Function when resource is loaded\n * function(object) {\n * //scene.add( object );\n * console.log(object);\n * }\n * );\n */\nexport default class LoadersVolumesCornerstone extends LoadersBase {\n load(url, requests, cornerstone) {\n this.cornerstone = cornerstone;\n return super.load(url, requests);\n }\n\n loadSequenceGroup(url, requests) {\n window.console.log('load sequence group cornerstone');\n const fetchSequence = [];\n const loader = this.cornerstone;\n url.forEach(file => {\n fetchSequence.push(loader.loadAndCacheImage(url));\n });\n\n return Promise.all(fetchSequence)\n .then(rawdata => {\n return this.parse(rawdata);\n })\n .then(data => {\n this._data.push(data);\n return data;\n })\n .catch(function (error) {\n if (error === 'Aborted') {\n return;\n }\n window.console.log('oops... something went wrong...');\n window.console.log(error);\n });\n }\n\n loadSequence(url, requests) {\n window.console.log('load sequence cornerstone');\n return this.cornerstone.loadAndCacheImage(url)\n .then(image => {\n window.console.log('loaded by cornerstone', image);\n return this.parse(image);\n })\n .then(data => {\n this._data.push(data);\n return data;\n })\n .catch(function (error) {\n if (error === 'Aborted') {\n return;\n }\n window.console.log('oops... something went wrong...');\n window.console.log(error);\n });\n };\n\n /**\n * Parse response.\n * response is formated as:\n * {\n * url: 'resource url',\n * buffer: xmlresponse,\n * }\n * @param {object} response - response\n * @return {promise} promise\n */\n parse(response) {\n const cornerstoneImage = response;\n // emit 'parse-start' event\n this.emit('parse-start', {\n file: response.url,\n time: new Date(),\n });\n\n // give a chance to the UI to update because\n // after the rendering will be blocked with intensive JS\n // will be removed after eventer set up\n if (this._progressBar) {\n this._progressBar.update(0, 100, 'parse', response.url);\n }\n\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(\n new Promise((resolve, reject) => {\n const {imageId} = cornerstoneImage;\n const {metaData} = this.cornerstone;\n const metaDataAll = metaData.get('all', imageId);\n console.log('get all metaData', metaDataAll);\n const dataParser = new CornerstoneDataParser(metaDataAll);\n\n let volumeParser = null;\n // create a series\n let series = new ModelsSeries();\n // series.rawHeader = volumeParser.rawHeader();\n // global information\n series.seriesInstanceUID = dataParser.seriesInstanceUID();\n series.transferSyntaxUID = dataParser.transferSyntaxUID();\n\n series.seriesDate = dataParser.seriesDate();\n series.seriesDescription = dataParser.seriesDescription();\n series.studyDate = dataParser.studyDate();\n series.studyDescription = dataParser.studyDescription();\n series.numberOfFrames = dataParser.numberOfFrames();\n if (!series.numberOfFrames) {\n series.numberOfFrames = 1;\n }\n\n series.numberOfChannels = dataParser.numberOfChannels();\n series.modality = dataParser.modality();\n if (series.modality === 'SEG') {\n series.segmentationType = dataParser.segmentationType();\n // series.segmentationSegments = dataParser.segmentationSegments();\n }\n\n series.patientID = dataParser.patientID();\n series.patientName = dataParser.patientName();\n series.patientAge = dataParser.patientAge();\n series.patientBirthdate = dataParser.patientBirthdate();\n series.patientSex = dataParser.patientSex();\n\n console.log('create series', series);\n\n let stack = new ModelsStack();\n stack.pixelRepresentation = dataParser.pixelRepresentation();\n stack.pixelType = dataParser.pixelType();\n stack.invert = dataParser.invert();\n stack.spacingBetweenSlices = dataParser.spacingBetweenSlices();\n stack.modality = series.modality;\n // if it is a segmentation, attach extra information\n if (stack.modality === 'SEG') {\n // colors\n // labels\n // etc.\n stack.segmentationType = series.segmentationType;\n stack.segmentationSegments = series.segmentationSegments;\n }\n series.stack.push(stack);\n // recursive call for each frame\n // better than for loop to be able\n // to update dom with \"progress\" callback\n setTimeout(\n this.parseFrameClosure(series, stack, response.url, 0, dataParser, resolve, reject, cornerstoneImage),\n 0\n )\n })\n );\n }, 10);\n });\n }\n\n parseFrameClosure(series, stack, url, i, dataParser, resolve, reject, cornerstoneImage) {\n return () => {\n this.parseFrame(series, stack, url, i, dataParser, resolve, reject, cornerstoneImage);\n };\n }\n\n /**\n * recursive parse frame\n * @param {ModelsSeries} series - data series\n * @param {ModelsStack} stack - data stack\n * @param {string} url - resource url\n * @param {number} i - frame index\n * @param {parser} dataParser - selected parser\n * @param {promise.resolve} resolve - promise resolve args\n * @param {promise.reject} reject - promise reject args\n */\n parseFrame(series, stack, url, i, dataParser, resolve, reject, cornerstoneImage) {\n let frame = new ModelsFrame();\n frame.sopInstanceUID = dataParser.sopInstanceUID(i);\n frame.url = url;\n frame.index = i;\n frame.invert = stack.invert;\n frame.frameTime = dataParser.frameTime(i);\n frame.ultrasoundRegions = dataParser.ultrasoundRegions(i);\n frame.rows = dataParser.rows(i);\n frame.columns = dataParser.columns(i);\n frame.numberOfChannels = stack.numberOfChannels;\n frame.pixelPaddingValue = dataParser.pixelPaddingValue(i);\n frame.pixelRepresentation = stack.pixelRepresentation;\n frame.pixelType = stack.pixelType;\n frame.pixelData = cornerstoneImage.getPixelData();\n frame.pixelSpacing = dataParser.pixelSpacing(i);\n frame.spacingBetweenSlices = dataParser.spacingBetweenSlices(i);\n frame.sliceThickness = dataParser.sliceThickness(i);\n frame.imageOrientation = dataParser.imageOrientation(i);\n // frame.rightHanded = dataParser.rightHanded();\n // stack.rightHanded = frame.rightHanded;\n if (frame.imageOrientation === null) {\n frame.imageOrientation = [1, 0, 0, 0, 1, 0];\n }\n frame.imagePosition = dataParser.imagePosition(i);\n /*\n null ImagePosition should not be handle here\n if (frame.imagePosition === null) {\n frame.imagePosition = [0, 0, i];\n }*/\n // frame.dimensionIndexValues = dataParser.dimensionIndexValues(i);\n frame.bitsAllocated = dataParser.bitsAllocated(i);\n frame.instanceNumber = dataParser.instanceNumber(i);\n frame.windowCenter = dataParser.windowCenter(i);\n frame.windowWidth = dataParser.windowWidth(i);\n frame.rescaleSlope = dataParser.rescaleSlope(i);\n frame.rescaleIntercept = dataParser.rescaleIntercept(i);\n // should pass frame index for consistency...\n frame.minMax = dataParser.minMaxPixelData(frame.pixelData);\n\n // if series.mo\n if (series.modality === 'SEG') {\n frame.referencedSegmentNumber = dataParser.referencedSegmentNumber(i);\n }\n\n stack.frame.push(frame);\n\n // update status\n this._parsed = i + 1;\n this._totalParsed = series.numberOfFrames;\n\n // will be removed after eventer set up\n if (this._progressBar) {\n this._progressBar.update(this._parsed, this._totalParsed, 'parse', url);\n }\n\n // emit 'parsing' event\n this.emit('parsing', {\n file: url,\n total: this._totalParsed,\n parsed: this._parsed,\n time: new Date(),\n });\n\n if (this._parsed === this._totalParsed) {\n // emit 'parse-success' event\n this.emit('parse-success', {\n file: url,\n total: this._totalParsed,\n parsed: this._parsed,\n time: new Date(),\n });\n\n resolve(series);\n } else {\n setTimeout(\n this.parseFrameClosure(series, stack, url, this._parsed, dataParser, resolve, reject),\n 0\n );\n }\n }\n}\n","import Volume from './loaders.volume';\nimport Cornerstone from './loaders.cornerstone';\n\nexport {Volume as VolumeLoader};\nexport {Cornerstone as VolumeCornerstoneLoader}\n","/** * Imports ***/\nconst PAKO = require('pako');\n\nimport LoadersBase from './loaders.base';\nimport CoreUtils from '../core/core.utils';\nimport ModelsSeries from '../models/models.series';\nimport ModelsStack from '../models/models.stack';\nimport ModelsFrame from '../models/models.frame';\nimport ParsersDicom from '../parsers/parsers.dicom';\nimport ParsersMhd from '../parsers/parsers.mhd';\nimport ParsersNifti from '../parsers/parsers.nifti';\nimport ParsersNrrd from '../parsers/parsers.nrrd';\nimport ParsersMgh from '../parsers/parsers.mgh';\n\n/**\n *\n * It is typically used to load a DICOM image. Use loading manager for\n * advanced usage, such as multiple files handling.\n *\n * Demo: {@link https://fnndsc.github.io/vjs#loader_dicom}\n *\n * @module loaders/volumes\n * @example\n * var files = ['/data/dcm/fruit'];\n *\n * // Instantiate a dicom loader\n * var lDicomoader = new dicom();\n *\n * // load a resource\n * loader.load(\n * // resource URL\n * files[0],\n * // Function when resource is loaded\n * function(object) {\n * //scene.add( object );\n * console.log(object);\n * }\n * );\n */\nexport default class LoadersVolumes extends LoadersBase {\n /**\n * Parse response.\n * response is formated as:\n * {\n * url: 'resource url',\n * buffer: xmlresponse,\n * }\n * @param {object} response - response\n * @return {promise} promise\n */\n parse(response) {\n // emit 'parse-start' event\n this.emit('parse-start', {\n file: response.url,\n time: new Date(),\n });\n\n // give a chance to the UI to update because\n // after the rendering will be blocked with intensive JS\n // will be removed after eventer set up\n if (this._progressBar) {\n this._progressBar.update(0, 100, 'parse', response.url);\n }\n\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(\n new Promise((resolve, reject) => {\n let data = response;\n\n if (!Array.isArray(data)) {\n data = [data];\n }\n\n data.forEach(dataset => {\n this._preprocess(dataset);\n });\n\n if (data.length === 1) {\n data = data[0];\n } else {\n // if raw/mhd pair\n let mhdFile = data.filter(this._filterByExtension.bind(null, 'MHD'));\n let rawFile = data.filter(this._filterByExtension.bind(null, 'RAW'));\n if (data.length === 2 && mhdFile.length === 1 && rawFile.length === 1) {\n data.url = mhdFile[0].url;\n data.extension = mhdFile[0].extension;\n data.mhdBuffer = mhdFile[0].buffer;\n data.rawBuffer = rawFile[0].buffer;\n }\n }\n\n let Parser = this._parser(data.extension);\n if (!Parser) {\n // emit 'parse-error' event\n this.emit('parse-error', {\n file: response.url,\n time: new Date(),\n error: data.filename + 'can not be parsed.',\n });\n reject(data.filename + ' can not be parsed.');\n }\n\n // check extension\n let volumeParser = null;\n try {\n volumeParser = new Parser(data, 0);\n } catch (e) {\n console.warn(e);\n // emit 'parse-error' event\n this.emit('parse-error', {\n file: response.url,\n time: new Date(),\n error: e,\n });\n reject(e);\n }\n\n // create a series\n let series = new ModelsSeries();\n series.rawHeader = volumeParser.rawHeader();\n // global information\n series.seriesInstanceUID = volumeParser.seriesInstanceUID();\n series.transferSyntaxUID = volumeParser.transferSyntaxUID();\n series.seriesDate = volumeParser.seriesDate();\n series.seriesDescription = volumeParser.seriesDescription();\n series.studyDate = volumeParser.studyDate();\n series.studyDescription = volumeParser.studyDescription();\n series.numberOfFrames = volumeParser.numberOfFrames();\n if (!series.numberOfFrames) {\n series.numberOfFrames = 1;\n }\n series.numberOfChannels = volumeParser.numberOfChannels();\n series.modality = volumeParser.modality();\n // if it is a segmentation, attach extra information\n if (series.modality === 'SEG') {\n // colors\n // labels\n // etc.\n series.segmentationType = volumeParser.segmentationType();\n series.segmentationSegments = volumeParser.segmentationSegments();\n }\n // patient information\n series.patientID = volumeParser.patientID();\n series.patientName = volumeParser.patientName();\n series.patientAge = volumeParser.patientAge();\n series.patientBirthdate = volumeParser.patientBirthdate();\n series.patientSex = volumeParser.patientSex();\n\n // just create 1 dummy stack for now\n let stack = new ModelsStack();\n stack.numberOfChannels = volumeParser.numberOfChannels();\n stack.pixelRepresentation = volumeParser.pixelRepresentation();\n stack.pixelType = volumeParser.pixelType();\n stack.invert = volumeParser.invert();\n stack.spacingBetweenSlices = volumeParser.spacingBetweenSlices();\n stack.modality = series.modality;\n // if it is a segmentation, attach extra information\n if (stack.modality === 'SEG') {\n // colors\n // labels\n // etc.\n stack.segmentationType = series.segmentationType;\n stack.segmentationSegments = series.segmentationSegments;\n }\n series.stack.push(stack);\n // recursive call for each frame\n // better than for loop to be able\n // to update dom with \"progress\" callback\n setTimeout(\n this.parseFrameClosure(series, stack, response.url, 0, volumeParser, resolve, reject),\n 0\n );\n })\n );\n }, 10);\n });\n }\n\n parseFrameClosure(series, stack, url, i, dataParser, resolve, reject) {\n return () => {\n this.parseFrame(series, stack, url, i, dataParser, resolve, reject);\n };\n }\n\n /**\n * recursive parse frame\n * @param {ModelsSeries} series - data series\n * @param {ModelsStack} stack - data stack\n * @param {string} url - resource url\n * @param {number} i - frame index\n * @param {parser} dataParser - selected parser\n * @param {promise.resolve} resolve - promise resolve args\n * @param {promise.reject} reject - promise reject args\n */\n parseFrame(series, stack, url, i, dataParser, resolve, reject) {\n let frame = new ModelsFrame();\n frame.sopInstanceUID = dataParser.sopInstanceUID(i);\n frame.url = url;\n frame.index = i;\n frame.invert = stack.invert;\n frame.frameTime = dataParser.frameTime(i);\n frame.ultrasoundRegions = dataParser.ultrasoundRegions(i);\n frame.rows = dataParser.rows(i);\n frame.columns = dataParser.columns(i);\n frame.numberOfChannels = stack.numberOfChannels;\n frame.pixelPaddingValue = dataParser.pixelPaddingValue(i);\n frame.pixelRepresentation = stack.pixelRepresentation;\n frame.pixelType = stack.pixelType;\n frame.pixelData = dataParser.extractPixelData(i);\n frame.pixelSpacing = dataParser.pixelSpacing(i);\n frame.spacingBetweenSlices = dataParser.spacingBetweenSlices(i);\n frame.sliceThickness = dataParser.sliceThickness(i);\n frame.imageOrientation = dataParser.imageOrientation(i);\n frame.rightHanded = dataParser.rightHanded();\n stack.rightHanded = frame.rightHanded;\n if (frame.imageOrientation === null) {\n frame.imageOrientation = [1, 0, 0, 0, 1, 0];\n }\n frame.imagePosition = dataParser.imagePosition(i);\n /*\n null ImagePosition should not be handle here\n if (frame.imagePosition === null) {\n frame.imagePosition = [0, 0, i];\n }*/\n frame.dimensionIndexValues = dataParser.dimensionIndexValues(i);\n frame.bitsAllocated = dataParser.bitsAllocated(i);\n frame.instanceNumber = dataParser.instanceNumber(i);\n frame.windowCenter = dataParser.windowCenter(i);\n frame.windowWidth = dataParser.windowWidth(i);\n frame.rescaleSlope = dataParser.rescaleSlope(i);\n frame.rescaleIntercept = dataParser.rescaleIntercept(i);\n // should pass frame index for consistency...\n frame.minMax = dataParser.minMaxPixelData(frame.pixelData);\n\n // if series.mo\n if (series.modality === 'SEG') {\n frame.referencedSegmentNumber = dataParser.referencedSegmentNumber(i);\n }\n\n stack.frame.push(frame);\n\n // update status\n this._parsed = i + 1;\n this._totalParsed = series.numberOfFrames;\n\n // will be removed after eventer set up\n if (this._progressBar) {\n this._progressBar.update(this._parsed, this._totalParsed, 'parse', url);\n }\n\n // emit 'parsing' event\n this.emit('parsing', {\n file: url,\n total: this._totalParsed,\n parsed: this._parsed,\n time: new Date(),\n });\n\n if (this._parsed === this._totalParsed) {\n // emit 'parse-success' event\n this.emit('parse-success', {\n file: url,\n total: this._totalParsed,\n parsed: this._parsed,\n time: new Date(),\n });\n\n resolve(series);\n } else {\n setTimeout(\n this.parseFrameClosure(series, stack, url, this._parsed, dataParser, resolve, reject),\n 0\n );\n }\n }\n\n /**\n * Return parser given an extension\n * @param {string} extension - extension\n * @return {parser} selected parser\n */\n _parser(extension) {\n let Parser = null;\n\n switch (extension.toUpperCase()) {\n case 'NII':\n case 'NII_':\n Parser = ParsersNifti;\n break;\n case 'DCM':\n case 'DIC':\n case 'DICOM':\n case 'IMA':\n case '':\n Parser = ParsersDicom;\n break;\n case 'MHD':\n Parser = ParsersMhd;\n break;\n case 'NRRD':\n Parser = ParsersNrrd;\n break;\n case 'MGH':\n case 'MGZ':\n Parser = ParsersMgh;\n break;\n default:\n console.warn('unsupported extension: ' + extension);\n return false;\n }\n return Parser;\n }\n\n /**\n * Pre-process data to be parsed (find data type and de-compress)\n * @param {*} data\n */\n _preprocess(data) {\n const parsedUrl = CoreUtils.parseUrl(data.url);\n // update data\n data.filename = parsedUrl.filename;\n data.extension = parsedUrl.extension;\n data.pathname = parsedUrl.pathname;\n data.query = parsedUrl.query;\n\n // unzip if extension is '.gz'\n if (data.extension === 'gz') {\n data.gzcompressed = true;\n data.extension = data.filename\n .split('.gz')\n .shift()\n .split('.')\n .pop();\n } else if (data.extension === 'mgz') {\n data.gzcompressed = true;\n data.extension = 'mgh';\n } else if (data.extension === 'zraw') {\n data.gzcompressed = true;\n data.extension = 'raw';\n } else {\n data.gzcompressed = false;\n }\n\n if (data.gzcompressed) {\n let decompressedData = PAKO.inflate(data.buffer);\n data.buffer = decompressedData.buffer;\n }\n }\n\n /**\n * Filter data by extension\n * @param {*} extension\n * @param {*} item\n * @returns Boolean\n */\n _filterByExtension(extension, item) {\n if (item.extension.toUpperCase() === extension.toUpperCase()) {\n return true;\n }\n return false;\n }\n}\n","/**\n * Base object.\n *\n * @module models/base\n */\n\nexport default class ModelsBase {\n constructor() {\n this._id = -1;\n }\n /**\n * Merge 2 arrays of models.\n * Merge the target array into the reference array.\n *\n * @param {Array.} referenceArray - Array to be merge against\n * @param {Array.} targetArray - Array to be merged against reference.\n *\n * @return {boolean} True if merge was sucessful. False if something went wrong.\n */\n mergeModels(referenceArray, targetArray) {\n if (!(this._validateModelArray(referenceArray) && this._validateModelArray(targetArray))) {\n window.console.log('invalid inputs provided.');\n return false;\n }\n\n for (let i = 0, targetLength = targetArray.length; i < targetLength; i++) {\n // test targetArray against existing targetArray\n for (let j = 0, refLength = referenceArray.length; j < refLength; j++) {\n if (referenceArray[j].merge(targetArray[i])) {\n // merged successfully\n break;\n } else if (j === referenceArray.length - 1) {\n // last merge was not successful\n // this is a new targetArray\n referenceArray.push(targetArray[i]);\n }\n }\n }\n\n return true;\n }\n\n /**\n * Merge model against current model.\n */\n merge(model) {\n // make sure model is valid\n if (!this.validate(model)) {\n return false;\n }\n\n // they can be merged if they match\n if (this._id === model._id) {\n return true;\n }\n return false;\n }\n\n /**\n * Validate a model.\n *\n * @return {boolean} True if model is valid. False if not.\n */\n validate(model) {\n if (!(model && model !== null && typeof model.merge === 'function')) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Validate array of models.\n *\n * @param {Array.} modelArray - Array containing models.\n *\n * @return {boolean} True if array is valid. False if not.\n */\n _validateModelArray(modelArray) {\n if (!(modelArray !== null && Array === modelArray.constructor)) {\n window.console.log('invalid model array provided.');\n return false;\n }\n\n for (let i = 0; i < modelArray.length; i++) {\n if (\n !(\n modelArray[i] &&\n modelArray[i] !== null &&\n typeof modelArray[i].validate === 'function' &&\n modelArray[i].validate(modelArray[i])\n )\n ) {\n return false;\n }\n }\n\n return true;\n }\n}\n","/** * Imports ***/\nimport ModelsBase from '../models/models.base';\n\nimport { Vector3 } from 'three/src/math/Vector3';\n\n/**\n * Frame object.\n *\n * @module models/frame\n */\nexport default class ModelsFrame extends ModelsBase {\n /**\n * Constructor\n */\n constructor() {\n super();\n\n this._sopInstanceUID = null;\n this._url = null;\n this._stackID = -1;\n this._invert = false;\n this._frameTime = null;\n this._ultrasoundRegions = [];\n this._rows = 0;\n this._columns = 0;\n this._dimensionIndexValues = [];\n this._imagePosition = null;\n this._imageOrientation = null;\n this._rightHanded = true;\n this._sliceThickness = 1;\n this._spacingBetweenSlices = null;\n this._pixelPaddingValue = null;\n this._pixelRepresentation = 0;\n this._pixelType = 0;\n this._pixelSpacing = null;\n this._pixelAspectRatio = null;\n this._pixelData = null;\n\n this._instanceNumber = null;\n this._windowCenter = null;\n this._windowWidth = null;\n this._rescaleSlope = null;\n this._rescaleIntercept = null;\n\n this._bitsAllocated = 8;\n this._numberOfChannels = 1;\n\n this._minMax = null;\n this._dist = null;\n\n this._index = -1;\n\n this._referencedSegmentNumber = -1;\n }\n\n /**\n * Validate the frame.\n *\n * @param {*} model\n *\n * @return {*}\n */\n validate(model) {\n if (\n !(\n super.validate(model) &&\n typeof model.cosines === 'function' &&\n typeof model.spacingXY === 'function' &&\n model.hasOwnProperty('_sopInstanceUID') &&\n model.hasOwnProperty('_dimensionIndexValues') &&\n model.hasOwnProperty('_imageOrientation') &&\n model.hasOwnProperty('_imagePosition')\n )\n ) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Merge current frame with provided frame.\n *\n * Frames can be merged (i.e. are identical) if following are equals:\n * - dimensionIndexValues\n * - imageOrientation\n * - imagePosition\n * - instanceNumber\n * - sopInstanceUID\n *\n * @param {*} frame\n *\n * @return {boolean} True if frames could be merge. False if not.\n */\n merge(frame) {\n if (!this.validate(frame)) {\n return false;\n }\n\n if (\n this._compareArrays(this._dimensionIndexValues, frame.dimensionIndexValues) &&\n this._compareArrays(this._imageOrientation, frame.imageOrientation) &&\n this._compareArrays(this._imagePosition, frame.imagePosition) &&\n this._instanceNumber === frame.instanceNumber &&\n this._sopInstanceUID === frame.sopInstanceUID\n ) {\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Generate X, y and Z cosines from image orientation\n * Returns default orientation if _imageOrientation was invalid.\n *\n * @returns {array} Array[3] containing cosinesX, Y and Z.\n */\n cosines() {\n let cosines = [new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1)];\n\n if (this._imageOrientation && this._imageOrientation.length === 6) {\n let xCos = new Vector3(\n this._imageOrientation[0],\n this._imageOrientation[1],\n this._imageOrientation[2]\n );\n let yCos = new Vector3(\n this._imageOrientation[3],\n this._imageOrientation[4],\n this._imageOrientation[5]\n );\n\n if (xCos.length() > 0 && yCos.length() > 0) {\n cosines[0] = xCos;\n cosines[1] = yCos;\n cosines[2] = new Vector3(0, 0, 0).crossVectors(cosines[0], cosines[1]).normalize();\n }\n } else {\n window.console.log('No valid image orientation for frame');\n window.console.log(this);\n window.console.log('Returning default orientation.');\n }\n\n if (!this._rightHanded) {\n cosines[2].negate();\n }\n\n return cosines;\n }\n\n /**\n * Get x/y spacing of a frame.\n *\n * @return {*}\n */\n spacingXY() {\n let spacingXY = [1.0, 1.0];\n\n if (this.pixelSpacing) {\n spacingXY[0] = this.pixelSpacing[0];\n\n spacingXY[1] = this.pixelSpacing[1];\n } else if (this.pixelAspectRatio) {\n spacingXY[0] = 1.0;\n spacingXY[1] = (1.0 * this.pixelAspectRatio[1]) / this.pixelAspectRatio[0];\n }\n\n return spacingXY;\n }\n\n /**\n * Get data value\n *\n * @param {*} column\n * @param {*} row\n * @return {*}\n */\n getPixelData(column, row) {\n if (column >= 0 && column < this._columns && row >= 0 && row < this._rows) {\n return this.pixelData[column + this._columns * row];\n } else {\n return null;\n }\n }\n /**\n * Set data value\n *\n * @param {*} column\n * @param {*} row\n * @param {*} value\n * @return {*}\n */\n setPixelData(column, row, value) {\n this.pixelData[column + this._columns * row] = value;\n }\n\n /**\n * Get frame preview as data:URL\n *\n * @return {String}\n */\n getImageDataUrl() {\n const canvas = document.createElement('canvas');\n canvas.width = this._columns;\n canvas.height = this._rows;\n\n const context = canvas.getContext('2d');\n\n const imageData = context.createImageData(canvas.width, canvas.height);\n\n imageData.data.set(this._frameToCanvas());\n context.putImageData(imageData, 0, 0);\n\n return canvas.toDataURL();\n }\n\n /**\n * Convert frame.pixelData to canvas.context.imageData.data\n *\n * @return {Uint8Array}\n */\n _frameToCanvas() {\n const dimension = this._columns * this._rows;\n\n const params = {\n invert: this._invert,\n min: this._minMax[0],\n padding: this._pixelPaddingValue,\n };\n let data = new Uint8Array(dimension * 4);\n\n if (params.padding !== null) {\n // recalculation of min ignoring pixelPaddingValue\n params.min = this._minMax[1];\n for (let index = 0, numPixels = this._pixelData.length; index < numPixels; index++) {\n if (this._pixelData[index] !== params.padding) {\n params.min = Math.min(params.min, this._pixelData[index]);\n }\n }\n }\n\n if (this._windowWidth && this._windowCenter !== null) {\n // applying windowCenter and windowWidth\n const intercept = this._rescaleIntercept || 0;\n\n const slope = this._rescaleSlope || 1;\n\n params.min = Math.max(\n (this._windowCenter - this._windowWidth / 2 - intercept) / slope,\n params.min\n );\n params.max = Math.min(\n (this._windowCenter + this._windowWidth / 2 - intercept) / slope,\n this._minMax[1]\n );\n } else {\n params.max = this._minMax[1];\n }\n\n params.range = params.max - params.min || 255; // if max is 0 convert it to: 255 - black, 1 - white\n\n if (this._numberOfChannels === 1) {\n for (let i = 0; i < dimension; i++) {\n const normalized = this._pixelTo8Bit(this._pixelData[i], params);\n data[4 * i] = normalized;\n data[4 * i + 1] = normalized;\n data[4 * i + 2] = normalized;\n data[4 * i + 3] = 255; // alpha channel (fully opaque)\n }\n } else if (this._numberOfChannels === 3) {\n for (let i = 0; i < dimension; i++) {\n data[4 * i] = this._pixelTo8Bit(this._pixelData[3 * i], params);\n data[4 * i + 1] = this._pixelTo8Bit(this._pixelData[3 * i + 1], params);\n data[4 * i + 2] = this._pixelTo8Bit(this._pixelData[3 * i + 2], params);\n data[4 * i + 3] = 255; // alpha channel (fully opaque)\n }\n }\n\n return data;\n }\n\n /**\n * Convert pixel value to 8 bit (canvas.context.imageData.data: maximum 8 bit per each of RGBA value)\n *\n * @param {Number} value Pixel value\n * @param {Object} params {invert, min, mix, padding, range}\n *\n * @return {Number}\n */\n _pixelTo8Bit(value, params) {\n // values equal to pixelPaddingValue are outside of the image and should be ignored\n let packedValue = value <= params.min || value === params.padding ? 0 : 255;\n\n if (value > params.min && value < params.max) {\n packedValue = Math.round(((value - params.min) * 255) / params.range);\n }\n\n return Number.isNaN(packedValue) ? 0 : params.invert ? 255 - packedValue : packedValue;\n }\n\n /**\n * Compare 2 arrays.\n *\n * 2 null arrays return true.\n * Do no perform strict type checking.\n *\n * @param {*} reference\n * @param {*} target\n *\n * @return {boolean} True if arrays are identicals. False if not.\n */\n _compareArrays(reference, target) {\n // could both be null\n if (reference === target) {\n return true;\n }\n\n // if not null....\n if (reference && target && reference.join() === target.join()) {\n return true;\n }\n\n return false;\n }\n\n get frameTime() {\n return this._frameTime;\n }\n\n set frameTime(frameTime) {\n this._frameTime = frameTime;\n }\n\n get ultrasoundRegions() {\n return this._ultrasoundRegions;\n }\n\n set ultrasoundRegions(ultrasoundRegions) {\n this._ultrasoundRegions = ultrasoundRegions;\n }\n\n get rows() {\n return this._rows;\n }\n\n set rows(rows) {\n this._rows = rows;\n }\n\n get columns() {\n return this._columns;\n }\n\n set columns(columns) {\n this._columns = columns;\n }\n\n get spacingBetweenSlices() {\n return this._spacingBetweenSlices;\n }\n\n set spacingBetweenSlices(spacingBetweenSlices) {\n this._spacingBetweenSlices = spacingBetweenSlices;\n }\n\n get sliceThickness() {\n return this._sliceThickness;\n }\n\n set sliceThickness(sliceThickness) {\n this._sliceThickness = sliceThickness;\n }\n\n get imagePosition() {\n return this._imagePosition;\n }\n\n set imagePosition(imagePosition) {\n this._imagePosition = imagePosition;\n }\n\n get imageOrientation() {\n return this._imageOrientation;\n }\n\n set imageOrientation(imageOrientation) {\n this._imageOrientation = imageOrientation;\n }\n\n get windowWidth() {\n return this._windowWidth;\n }\n\n set windowWidth(windowWidth) {\n this._windowWidth = windowWidth;\n }\n\n get windowCenter() {\n return this._windowCenter;\n }\n\n set windowCenter(windowCenter) {\n this._windowCenter = windowCenter;\n }\n\n get rescaleSlope() {\n return this._rescaleSlope;\n }\n\n set rescaleSlope(rescaleSlope) {\n this._rescaleSlope = rescaleSlope;\n }\n\n get rescaleIntercept() {\n return this._rescaleIntercept;\n }\n\n set rescaleIntercept(rescaleIntercept) {\n this._rescaleIntercept = rescaleIntercept;\n }\n\n get bitsAllocated() {\n return this._bitsAllocated;\n }\n\n set bitsAllocated(bitsAllocated) {\n this._bitsAllocated = bitsAllocated;\n }\n\n get dist() {\n return this._dist;\n }\n\n set dist(dist) {\n this._dist = dist;\n }\n\n get pixelSpacing() {\n return this._pixelSpacing;\n }\n\n set pixelSpacing(pixelSpacing) {\n this._pixelSpacing = pixelSpacing;\n }\n\n get pixelAspectRatio() {\n return this._pixelAspectRatio;\n }\n\n set pixelAspectRatio(pixelAspectRatio) {\n this._pixelAspectRatio = pixelAspectRatio;\n }\n\n get minMax() {\n return this._minMax;\n }\n\n set minMax(minMax) {\n this._minMax = minMax;\n }\n\n get dimensionIndexValues() {\n return this._dimensionIndexValues;\n }\n\n set dimensionIndexValues(dimensionIndexValues) {\n this._dimensionIndexValues = dimensionIndexValues;\n }\n\n get instanceNumber() {\n return this._instanceNumber;\n }\n\n set instanceNumber(instanceNumber) {\n this._instanceNumber = instanceNumber;\n }\n\n get pixelData() {\n return this._pixelData;\n }\n\n set pixelData(pixelData) {\n this._pixelData = pixelData;\n }\n\n set sopInstanceUID(sopInstanceUID) {\n this._sopInstanceUID = sopInstanceUID;\n }\n\n get sopInstanceUID() {\n return this._sopInstanceUID;\n }\n\n get pixelPaddingValue() {\n return this._pixelPaddingValue;\n }\n\n set pixelPaddingValue(pixelPaddingValue) {\n this._pixelPaddingValue = pixelPaddingValue;\n }\n\n get pixelRepresentation() {\n return this._pixelRepresentation;\n }\n\n set pixelRepresentation(pixelRepresentation) {\n this._pixelRepresentation = pixelRepresentation;\n }\n\n get pixelType() {\n return this._pixelType;\n }\n\n set pixelType(pixelType) {\n this._pixelType = pixelType;\n }\n\n get url() {\n return this._url;\n }\n\n set url(url) {\n this._url = url;\n }\n\n get referencedSegmentNumber() {\n return this._referencedSegmentNumber;\n }\n\n set referencedSegmentNumber(referencedSegmentNumber) {\n this._referencedSegmentNumber = referencedSegmentNumber;\n }\n\n get rightHanded() {\n return this._rightHanded;\n }\n\n set rightHanded(rightHanded) {\n this._rightHanded = rightHanded;\n }\n\n get index() {\n return this._index;\n }\n\n set index(index) {\n this._index = index;\n }\n\n get invert() {\n return this._invert;\n }\n\n set invert(invert) {\n this._invert = invert;\n }\n\n get numberOfChannels() {\n return this._numberOfChannels;\n }\n\n set numberOfChannels(numberOfChannels) {\n this._numberOfChannels = numberOfChannels;\n }\n}\n","import Frame from './models.frame';\nimport Stack from './models.stack';\nimport Series from './models.series';\nimport Voxel from './models.voxel';\n\nexport { Frame as FrameModel, Stack as StackModel, Series as SeriesModel, Voxel as VoxelModel };\n","/** * Imports ***/\nimport ModelsBase from '../models/models.base';\n\n/**\n * Series object.\n *\n * @module models/series\n */\nexport default class ModelsSeries extends ModelsBase {\n /**\n * Models series constructor\n */\n constructor() {\n super();\n\n this._concatenationUID = -1;\n this._seriesInstanceUID = -1;\n this._transferSyntaxUID = '';\n this._seriesNumber = -1;\n this._seriesDescription = '';\n this._seriesDate = '';\n this._studyDescription = '';\n this._studyDate = '';\n this._accessionNumber = -1;\n this._modality = 'Modality not set';\n this._dimensionIndexSequence = [];\n // it is used in the loader in case a dicom/nifti contains multiple frames\n // should be updated after merge or renamed\n this._numberOfFrames = 0;\n this._numberOfChannels = 1;\n\n // patient information\n this._rawHeader = null;\n this._patientID = '';\n this._patientName = '';\n this._patientAge = '';\n this._patientBirthdate = '';\n this._patientSex = '';\n\n // SEGMENTATION STUFF\n this._segmentationType = null;\n this._segmentationSegments = [];\n\n // STACK\n this._stack = [];\n }\n\n /**\n * Validate a series.\n *\n * Requirements:\n * - mergeSeries method\n * - _seriesInstanceUID\n * - _numberOfFrames\n * - _numberOfChannels\n * _ _stack\n *\n * @param {ModelsSeries} model - Model to be validated as series.\n *\n * @return {boolean} True if series is valid. False if not.\n *\n * @override\n */\n validate(model) {\n if (\n !(\n super.validate(model) &&\n typeof model.mergeSeries === 'function' &&\n model.hasOwnProperty('_seriesInstanceUID') &&\n model.hasOwnProperty('_numberOfFrames') &&\n model.hasOwnProperty('_numberOfChannels') &&\n model.hasOwnProperty('_stack') &&\n typeof model._stack !== 'undefined' &&\n Array === model._stack.constructor\n )\n ) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Merge current series with provided series.\n * 2 series can ONLY be merge if they have the same SeriesInstanceUID.\n *\n * Also merges the stacks inside a series.\n *\n * @param {ModelsSeries} series - Series to be merged against current series.\n *\n * @return {boolean} True if series could be merge. False if not.\n *\n * @override\n */\n merge(series) {\n if (!this.validate(series)) {\n return false;\n }\n\n if (this._seriesInstanceUID === series.seriesInstanceUID) {\n // may merge incorrectly if loader will return more than one stacks per series\n if (series.stack[0]) {\n if (this._stack[0]._numberOfFrames === 0) {\n this._stack[0].computeNumberOfFrames();\n }\n this._stack[0].computeCosines();\n if (series.stack[0]._numberOfFrames === 0) {\n series.stack[0].computeNumberOfFrames();\n }\n series.stack[0].computeCosines();\n }\n return this.mergeModels(this._stack, series.stack);\n } else {\n return false;\n }\n }\n\n /**\n * Merge current series with provided array of series.\n * 2 series can ONLY be merge if they have the same SeriesInstanceUID.\n *\n * Also merges the stacks inside a series.\n *\n * @param {Array.} target - Series to be merged against current series.\n *\n * @return {Array.} Array of series properly merged.\n */\n mergeSeries(target) {\n let seriesContainer = [this];\n this.mergeModels(seriesContainer, target);\n return seriesContainer;\n }\n\n /**\n * Series instance UID setter\n *\n * @param {*} seriesInstanceUID\n */\n set seriesInstanceUID(seriesInstanceUID) {\n this._seriesInstanceUID = seriesInstanceUID;\n }\n\n /**\n * Series instace UID getter\n *\n * @return {*}\n */\n get seriesInstanceUID() {\n return this._seriesInstanceUID;\n }\n\n /**\n * Transfer syntax UID setter\n *\n * @param {*} transferSyntaxUID\n */\n set transferSyntaxUID(transferSyntaxUID) {\n this._transferSyntaxUID = transferSyntaxUID;\n }\n\n /**\n * Transfer syntax UID getter\n *\n * @return {*}\n */\n get transferSyntaxUID() {\n return this._transferSyntaxUID;\n }\n\n /**\n * Transfer syntax UID getter\n *\n * @return {*}\n */\n get transferSyntaxUIDLabel() {\n switch (this._transferSyntaxUID) {\n case '1.2.840.10008.1.2.4.90':\n return 'JPEG 2000 Lossless';\n case '1.2.840.10008.1.2.4.91':\n return 'JPEG 2000 Lossy';\n case '1.2.840.10008.1.2.4.57':\n return 'JPEG Lossless, Nonhierarchical (Processes 14)';\n case '1.2.840.10008.1.2.4.70':\n return 'JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1])';\n case '1.2.840.10008.1.2.4.50':\n return 'JPEG Baseline lossy process 1 (8 bit)';\n case '1.2.840.10008.1.2.4.51':\n return 'JPEG Baseline lossy process 2 & 4 (12 bit)';\n case '1.2.840.10008.1.2':\n return 'Implicit VR Little Endian';\n case '1.2.840.10008.1.2.1':\n return 'Explicit VR Little Endian';\n case '1.2.840.10008.1.2.2':\n return 'Explicit VR Big Endian';\n default:\n return `Unknown transfersyntax: ${this._transferSyntaxUID}`;\n }\n }\n\n /**\n * Study date setter\n *\n * @param {*} studyDate\n */\n set studyDate(studyDate) {\n this._studyDate = studyDate;\n }\n\n /**\n * Study date getter\n *\n * @return {*}\n */\n get studyDate() {\n return this._studyDate;\n }\n\n /**\n * Study descripition setter\n *\n * @param {*} studyDescription\n */\n set studyDescription(studyDescription) {\n this._studyDescription = studyDescription;\n }\n\n /**\n * Study description getter\n *\n * @return {*}\n */\n get studyDescription() {\n return this._studyDescription;\n }\n\n /**\n * Series date setter\n *\n * @param {*} seriesDate\n */\n set seriesDate(seriesDate) {\n this._seriesDate = seriesDate;\n }\n\n /**\n * Series date getter\n *\n * @return {*}\n */\n get seriesDate() {\n return this._seriesDate;\n }\n\n /**\n * Series descripition setter\n *\n * @param {*} seriesDescription\n */\n set seriesDescription(seriesDescription) {\n this._seriesDescription = seriesDescription;\n }\n\n /**\n * Series description getter\n *\n * @return {*}\n */\n get seriesDescription() {\n return this._seriesDescription;\n }\n\n /**\n * Raw Header setter\n *\n * @param {*} rawHeader\n */\n set rawHeader(rawHeader) {\n this._rawHeader = rawHeader;\n }\n\n /**\n * Raw Header getter\n *\n * @return {*}\n */\n get rawHeader() {\n return this._rawHeader;\n }\n\n /**\n * Patient ID setter\n *\n * @param {*} patientID\n */\n set patientID(patientID) {\n this._patientID = patientID;\n }\n\n /**\n * Patient ID getter\n *\n * @return {*}\n */\n get patientID() {\n return this._patientID;\n }\n\n /**\n * Patient name setter\n *\n * @param {*} patientName\n */\n set patientName(patientName) {\n this._patientName = patientName;\n }\n\n /**\n * Patient name getter\n *\n * @return {*}\n */\n get patientName() {\n return this._patientName;\n }\n\n /**\n * Patient age setter\n *\n * @param {*} patientAge\n */\n set patientAge(patientAge) {\n this._patientAge = patientAge;\n }\n\n /**\n * Patient age getter\n *\n * @return {*}\n */\n get patientAge() {\n return this._patientAge;\n }\n\n /**\n * Patient birthdate setter\n *\n * @param {*} patientBirthdate\n */\n set patientBirthdate(patientBirthdate) {\n this._patientBirthdate = patientBirthdate;\n }\n\n /**\n * Patient birthdate getter\n *\n * @return {*}\n */\n get patientBirthdate() {\n return this._patientBirthdate;\n }\n\n /**\n * Patient sex setter\n *\n * @param {*} patientSex\n */\n set patientSex(patientSex) {\n this._patientSex = patientSex;\n }\n\n /**\n * Patient sex getter\n *\n * @return {*}\n */\n get patientSex() {\n return this._patientSex;\n }\n\n /**\n * Number of frames setter\n *\n * @param {*} numberOfFrames\n */\n set numberOfFrames(numberOfFrames) {\n this._numberOfFrames = numberOfFrames;\n }\n\n /**\n * Number of frames getter\n *\n * @return {*}\n */\n get numberOfFrames() {\n return this._numberOfFrames;\n }\n\n /**\n * Number of channels setter\n *\n * @param {*} numberOfChannels\n */\n set numberOfChannels(numberOfChannels) {\n this._numberOfChannels = numberOfChannels;\n }\n\n /**\n * Number of channels getter\n *\n * @return {*}\n */\n get numberOfChannels() {\n return this._numberOfChannels;\n }\n\n /**\n * Stack setter\n *\n * @param {*} stack\n */\n set stack(stack) {\n this._stack = stack;\n }\n\n /**\n * Stack getter\n *\n * @return {*}\n */\n get stack() {\n return this._stack;\n }\n\n /**\n * Modality setter\n *\n * @param {*} modality\n */\n set modality(modality) {\n this._modality = modality;\n }\n\n /**\n * Modality getter\n *\n * @return {*}\n */\n get modality() {\n return this._modality;\n }\n\n /**\n * Segmentation type setter\n *\n * @param {*} segmentationType\n */\n set segmentationType(segmentationType) {\n this._segmentationType = segmentationType;\n }\n\n /**\n * Segmentation type getter\n *\n * @return {*}\n */\n get segmentationType() {\n return this._segmentationType;\n }\n\n /**\n * Segmentation segments setter\n *\n * @param {*} segmentationSegments\n */\n set segmentationSegments(segmentationSegments) {\n this._segmentationSegments = segmentationSegments;\n }\n\n /**\n * Segmentation segments getter\n *\n * @return {*}\n */\n get segmentationSegments() {\n return this._segmentationSegments;\n }\n}\n","/** * Imports ***/\nimport { Matrix4 } from 'three/src/math/Matrix4';\nimport { Vector3 } from 'three/src/math/Vector3';\nimport { RGBFormat, RGBAFormat } from 'three/src/constants';\n\nimport CoreColors from '../core/core.colors';\nimport CoreUtils from '../core/core.utils';\nimport ModelsBase from '../models/models.base';\n\nconst binaryString = require('math-float32-to-binary-string');\n\n/**\n * Stack object.\n *\n * @module models/stack\n */\nexport default class ModelsStack extends ModelsBase {\n /**\n * Models Stack constructor\n */\n constructor() {\n super();\n\n this._uid = null;\n this._stackID = -1;\n\n this._frame = [];\n this._numberOfFrames = 0;\n\n this._rows = 0;\n this._columns = 0;\n this._numberOfChannels = 1;\n this._bitsAllocated = 8;\n this._pixelType = 0;\n this._pixelRepresentation = 0;\n\n this._textureSize = 4096;\n this._textureUnits = 7;\n\n this._rawData = [];\n\n this._windowCenter = 0;\n this._windowWidth = 0;\n\n this._rescaleSlope = 1;\n this._rescaleIntercept = 0;\n\n this._minMax = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY];\n\n // TRANSFORMATION MATRICES\n this._regMatrix = new Matrix4();\n\n this._ijk2LPS = null;\n this._lps2IJK = null;\n\n this._aabb2LPS = null;\n this._lps2AABB = null;\n\n //\n // IJK dimensions\n this._dimensionsIJK = null;\n this._halfDimensionsIJK = null;\n this._spacing = new Vector3(1, 1, 1);\n this._spacingBetweenSlices = 0;\n this._sliceThickness = 0;\n this._origin = null;\n this._rightHanded = true;\n this._xCosine = new Vector3(1, 0, 0);\n this._yCosine = new Vector3(0, 1, 0);\n this._zCosine = new Vector3(0, 0, 1);\n\n // convenience vars\n this._prepared = false;\n this._packed = false;\n this._packedPerPixel = 1;\n\n //\n this._modality = 'Modality not set';\n\n // SEGMENTATION STUFF\n this._segmentationType = null;\n this._segmentationSegments = [];\n this._segmentationDefaultColor = [63, 174, 128];\n this._frameSegment = [];\n this._segmentationLUT = [];\n this._segmentationLUTO = [];\n\n // photometricInterpretation Monochrome1 VS Monochrome2\n this._invert = false;\n }\n\n /**\n * Prepare segmentation stack.\n * A segmentation stack can hold x frames that are at the same location\n * but segmentation specific information:\n * - Frame X contains voxels for segmentation A.\n * - Frame Y contains voxels for segmenttation B.\n * - Frame X and Y are at the same location.\n *\n * We currently merge overlaping frames into 1.\n */\n prepareSegmentation() {\n // store frame and do special pre-processing\n this._frameSegment = this._frame;\n let mergedFrames = [];\n\n // order frames\n this.computeCosines();\n this._frame.map(this._computeDistanceArrayMap.bind(null, this._zCosine));\n this._frame.sort(this._sortDistanceArraySort);\n\n // merge frames\n let prevIndex = -1;\n for (let i = 0; i < this._frame.length; i++) {\n if (!mergedFrames[prevIndex] || mergedFrames[prevIndex]._dist != this._frame[i]._dist) {\n mergedFrames.push(this._frame[i]);\n prevIndex++;\n\n // Scale frame\n // by default each frame contains binary data about a segmentation.\n // we scale it by the referenceSegmentNumber in order to have a\n // segmentation specific voxel value rather than 0 or 1.\n // That allows us to merge frames later on.\n // If we merge frames without scaling, then we can not differenciate\n // voxels from segmentation A or B as the value is 0 or 1 in both cases.\n for (let k = 0; k < mergedFrames[prevIndex]._rows * mergedFrames[prevIndex]._columns; k++) {\n mergedFrames[prevIndex]._pixelData[k] *= this._frame[i]._referencedSegmentNumber;\n }\n } else {\n // frame already exsits at this location.\n // merge data from this segmentation into existing frame\n for (let k = 0; k < mergedFrames[prevIndex]._rows * mergedFrames[prevIndex]._columns; k++) {\n mergedFrames[prevIndex]._pixelData[k] +=\n this._frame[i].pixelData[k] * this._frame[i]._referencedSegmentNumber;\n }\n }\n\n mergedFrames[prevIndex].minMax = CoreUtils.minMax(mergedFrames[prevIndex]._pixelData);\n }\n\n // get information about segments\n let dict = {};\n let max = 0;\n for (let i = 0; i < this._segmentationSegments.length; i++) {\n max = Math.max(max, parseInt(this._segmentationSegments[i].segmentNumber, 10));\n\n let color = this._segmentationSegments[i].recommendedDisplayCIELab;\n if (color === null) {\n dict[this._segmentationSegments[i].segmentNumber] = this._segmentationDefaultColor;\n } else {\n dict[this._segmentationSegments[i].segmentNumber] = CoreColors.cielab2RGB(...color);\n }\n }\n\n // generate LUTs\n for (let i = 0; i <= max; i++) {\n let index = i / max;\n let opacity = i ? 1 : 0;\n let rgb = [0, 0, 0];\n if (dict.hasOwnProperty(i.toString())) {\n rgb = dict[i.toString()];\n }\n\n rgb[0] /= 255;\n rgb[1] /= 255;\n rgb[2] /= 255;\n\n this._segmentationLUT.push([index, ...rgb]);\n this._segmentationLUTO.push([index, opacity]);\n }\n\n this._frame = mergedFrames;\n }\n\n /**\n * Compute cosines\n * Order frames\n * computeSpacing\n * sanityCheck\n * init some vars\n * compute min/max\n * compute transformation matrices\n *\n * @return {*}\n */\n prepare() {\n // if segmentation, merge some frames...\n if (this._modality === 'SEG') {\n this.prepareSegmentation();\n }\n\n this.computeNumberOfFrames();\n\n // pass parameters from frame to stack\n this._rows = this._frame[0].rows;\n this._columns = this._frame[0].columns;\n this._dimensionsIJK = new Vector3(this._columns, this._rows, this._numberOfFrames);\n this._halfDimensionsIJK = new Vector3(\n this._dimensionsIJK.x / 2,\n this._dimensionsIJK.y / 2,\n this._dimensionsIJK.z / 2\n );\n this._spacingBetweenSlices = this._frame[0].spacingBetweenSlices;\n this._sliceThickness = this._frame[0].sliceThickness;\n\n // compute direction cosines\n this.computeCosines();\n\n // order the frames\n if (this._numberOfFrames > 1) {\n this.orderFrames();\n }\n\n // compute/guess spacing\n this.computeSpacing();\n // set extra vars if nulls\n // do it now because before we would think image position/orientation\n // are defined and we would use it to compute spacing.\n if (!this._frame[0].imagePosition) {\n this._frame[0].imagePosition = [0, 0, 0];\n }\n if (!this._frame[0].imageOrientation) {\n this._frame[0].imageOrientation = [1, 0, 0, 0, 1, 0];\n }\n\n this._origin = this._arrayToVector3(this._frame[0].imagePosition, 0);\n\n // compute transforms\n this.computeIJK2LPS();\n\n this.computeLPS2AABB();\n // this.packEchos();\n\n const middleFrameIndex = Math.floor(this._frame.length / 2);\n const middleFrame = this._frame[middleFrameIndex];\n\n this._rescaleSlope = middleFrame.rescaleSlope || 1;\n this._rescaleIntercept = middleFrame.rescaleIntercept || 0;\n\n // rescale/slope min max\n this.computeMinMaxIntensities();\n this._minMax[0] = CoreUtils.rescaleSlopeIntercept(\n this._minMax[0],\n this._rescaleSlope,\n this._rescaleIntercept\n );\n this._minMax[1] = CoreUtils.rescaleSlopeIntercept(\n this._minMax[1],\n this._rescaleSlope,\n this._rescaleIntercept\n );\n\n this._windowWidth = middleFrame.windowWidth || this._minMax[1] - this._minMax[0];\n\n this._windowCenter = middleFrame.windowCenter || this._minMax[0] + this._windowWidth / 2;\n\n this._bitsAllocated = middleFrame.bitsAllocated;\n this._prepared = true;\n }\n\n packEchos() {\n // 4 echo times...\n let echos = 4;\n let packedEcho = [];\n for (let i = 0; i < this._frame.length; i += echos) {\n let frame = this._frame[i];\n for (let k = 0; k < this._rows * this._columns; k++) {\n for (let j = 1; j < echos; j++) {\n frame.pixelData[k] += this._frame[i + j].pixelData[k];\n }\n frame.pixelData[k] /= echos;\n }\n packedEcho.push(frame);\n }\n this._frame = packedEcho;\n this._numberOfFrames = this._frame.length;\n this._dimensionsIJK = new Vector3(this._columns, this._rows, this._numberOfFrames);\n this._halfDimensionsIJK = new Vector3(\n this._dimensionsIJK.x / 2,\n this._dimensionsIJK.y / 2,\n this._dimensionsIJK.z / 2\n );\n }\n\n computeNumberOfFrames() {\n // we need at least 1 frame\n if (this._frame && this._frame.length > 0) {\n this._numberOfFrames = this._frame.length;\n } else {\n window.console.warn(\"_frame doesn't contain anything....\");\n window.console.warn(this._frame);\n return false;\n }\n }\n\n // frame.cosines - returns array [x, y, z]\n computeCosines() {\n if (this._frame && this._frame[0]) {\n let cosines = this._frame[0].cosines();\n this._xCosine = cosines[0];\n this._yCosine = cosines[1];\n this._zCosine = cosines[2];\n }\n }\n\n orderFrames() {\n // order the frames based on theirs dimension indices\n // first index is the most important.\n // 1,1,1,1 will be first\n // 1,1,2,1 will be next\n // 1,1,2,3 will be next\n // 1,1,3,1 will be next\n if (this._frame[0].dimensionIndexValues) {\n this._frame.sort(this._orderFrameOnDimensionIndicesArraySort);\n\n // else order with image position and orientation\n } else if (\n this._frame[0].imagePosition &&\n this._frame[0].imageOrientation &&\n this._frame[1] &&\n this._frame[1].imagePosition &&\n this._frame[1].imageOrientation &&\n this._frame[0].imagePosition.join() !== this._frame[1].imagePosition.join()\n ) {\n // compute and sort by dist in this series\n this._frame.map(this._computeDistanceArrayMap.bind(null, this._zCosine));\n this._frame.sort(this._sortDistanceArraySort);\n } else if (\n this._frame[0].instanceNumber !== null &&\n this._frame[1] &&\n this._frame[1].instanceNumber !== null &&\n this._frame[0].instanceNumber !== this._frame[1].instanceNumber\n ) {\n this._frame.sort(this._sortInstanceNumberArraySort);\n } else if (\n this._frame[0].sopInstanceUID &&\n this._frame[1] &&\n this._frame[1].sopInstanceUID &&\n this._frame[0].sopInstanceUID !== this._frame[1].sopInstanceUID\n ) {\n this._frame.sort(this._sortSopInstanceUIDArraySort);\n } else if (!this._frame[0].imagePosition) {\n // cancel warning if you have set null imagePosition on purpose (?)\n } else {\n window.console.warn('do not know how to order the frames...');\n }\n }\n\n computeSpacing() {\n this.xySpacing();\n this.zSpacing();\n }\n\n /**\n * Compute stack z spacing\n */\n zSpacing() {\n if (this._numberOfFrames > 1) {\n if (this._frame[0].pixelSpacing && this._frame[0].pixelSpacing[2]) {\n this._spacing.z = this._frame[0].pixelSpacing[2];\n } else {\n // compute and sort by dist in this series\n this._frame.map(this._computeDistanceArrayMap.bind(null, this._zCosine));\n\n // if distances are different, re-sort array\n if (this._frame[1].dist !== this._frame[0].dist) {\n this._frame.sort(this._sortDistanceArraySort);\n this._spacing.z = this._frame[1].dist - this._frame[0].dist;\n } else if (this._spacingBetweenSlices) {\n this._spacing.z = this._spacingBetweenSlices;\n } else if (this._frame[0].sliceThickness) {\n this._spacing.z = this._frame[0].sliceThickness;\n }\n }\n }\n\n // Spacing\n // can not be 0 if not matrix can not be inverted.\n if (this._spacing.z === 0) {\n this._spacing.z = 1;\n }\n }\n\n /**\n * FRAME CAN DO IT\n */\n xySpacing() {\n if (this._frame && this._frame[0]) {\n let spacingXY = this._frame[0].spacingXY();\n this._spacing.x = spacingXY[0];\n this._spacing.y = spacingXY[1];\n }\n }\n\n /**\n * Find min and max intensities among all frames.\n */\n computeMinMaxIntensities() {\n // what about colors!!!!?\n // we ignore values if NaNs\n // https://github.com/FNNDSC/ami/issues/185\n for (let i = 0; i < this._frame.length; i++) {\n // get min/max\n let min = this._frame[i].minMax[0];\n if (!Number.isNaN(min)) {\n this._minMax[0] = Math.min(this._minMax[0], min);\n }\n\n let max = this._frame[i].minMax[1];\n if (!Number.isNaN(max)) {\n this._minMax[1] = Math.max(this._minMax[1], max);\n }\n }\n }\n\n /**\n * Compute IJK to LPS and invert transforms\n */\n computeIJK2LPS() {\n // ijk to lps\n this._ijk2LPS = CoreUtils.ijk2LPS(\n this._xCosine,\n this._yCosine,\n this._zCosine,\n this._spacing,\n this._origin,\n this._regMatrix\n );\n\n // lps 2 ijk\n this._lps2IJK = new Matrix4();\n this._lps2IJK.getInverse(this._ijk2LPS);\n }\n\n /**\n * Compute LPS to AABB and invert transforms\n */\n computeLPS2AABB() {\n this._aabb2LPS = CoreUtils.aabb2LPS(this._xCosine, this._yCosine, this._zCosine, this._origin);\n\n this._lps2AABB = new Matrix4();\n this._lps2AABB.getInverse(this._aabb2LPS);\n }\n\n /**\n * Merge stacks\n *\n * @param {*} stack\n *\n * @return {*}\n */\n merge(stack) {\n // also make sure x/y/z cosines are a match!\n if (\n this._stackID === stack.stackID &&\n this._numberOfFrames === 1 &&\n stack._numberOfFrames === 1 &&\n this._frame[0].columns === stack.frame[0].columns &&\n this._frame[0].rows === stack.frame[0].rows &&\n this._xCosine.equals(stack.xCosine) &&\n this._yCosine.equals(stack.yCosine) &&\n this._zCosine.equals(stack.zCosine)\n ) {\n return this.mergeModels(this._frame, stack.frame);\n } else {\n return false;\n }\n }\n\n /**\n * Pack current stack pixel data into 8 bits array buffers\n */\n pack() {\n // Get total number of voxels\n const nbVoxels = this._dimensionsIJK.x * this._dimensionsIJK.y * this._dimensionsIJK.z;\n\n // Packing style\n if ((this._bitsAllocated === 8 && this._numberOfChannels === 1) || this._bitsAllocated === 1) {\n this._packedPerPixel = 4;\n }\n\n if (this._bitsAllocated === 16 && this._numberOfChannels === 1) {\n this._packedPerPixel = 2;\n }\n\n // Loop through all the textures we need\n const textureDimension = this._textureSize * this._textureSize;\n let requiredTextures = Math.ceil(nbVoxels / (textureDimension * this._packedPerPixel));\n let voxelIndexStart = 0;\n let voxelIndexStop = this._packedPerPixel * textureDimension;\n if (voxelIndexStop > nbVoxels) {\n voxelIndexStop = nbVoxels;\n }\n\n if (this._textureUnits < requiredTextures) {\n console.warn('Insufficient number of supported textures. Some frames will not be packed.');\n requiredTextures = this._textureUnits;\n }\n\n for (let ii = 0; ii < requiredTextures; ii++) {\n const packed = this._packTo8Bits(\n this._numberOfChannels,\n this._frame,\n this._textureSize,\n voxelIndexStart,\n voxelIndexStop\n );\n this._textureType = packed.textureType;\n this._rawData.push(packed.data);\n\n voxelIndexStart += this._packedPerPixel * textureDimension;\n voxelIndexStop += this._packedPerPixel * textureDimension;\n if (voxelIndexStop > nbVoxels) {\n voxelIndexStop = nbVoxels;\n }\n }\n\n this._packed = true;\n }\n\n /**\n * Pack frame data to 32 bits texture\n * @param {*} channels\n * @param {*} frame\n * @param {*} textureSize\n * @param {*} startVoxel\n * @param {*} stopVoxel\n */\n _packTo8Bits(channels, frame, textureSize, startVoxel, stopVoxel) {\n const packed = {\n textureType: null,\n data: null,\n };\n\n const bitsAllocated = frame[0].bitsAllocated;\n const pixelType = frame[0].pixelType;\n\n // transform signed to unsigned for convenience\n let offset = 0;\n if (this._minMax[0] < 0) {\n offset -= this._minMax[0];\n }\n\n let packIndex = 0;\n let frameIndex = 0;\n let inFrameIndex = 0;\n // frame should return it!\n const frameDimension = frame[0].rows * frame[0].columns;\n\n if ((bitsAllocated === 8 && channels === 1) || bitsAllocated === 1) {\n let data = new Uint8Array(textureSize * textureSize * 4);\n let coordinate = 0;\n let channelOffset = 0;\n for (let i = startVoxel; i < stopVoxel; i++) {\n frameIndex = ~~(i / frameDimension);\n inFrameIndex = i % frameDimension;\n\n let raw = frame[frameIndex].pixelData[inFrameIndex] + offset;\n if (!Number.isNaN(raw)) {\n data[4 * coordinate + channelOffset] = raw;\n }\n\n packIndex++;\n coordinate = Math.floor(packIndex / 4);\n channelOffset = packIndex % 4;\n }\n packed.textureType = RGBAFormat;\n packed.data = data;\n } else if (bitsAllocated === 16 && channels === 1) {\n let data = new Uint8Array(textureSize * textureSize * 4);\n let coordinate = 0;\n let channelOffset = 0;\n\n for (let i = startVoxel; i < stopVoxel; i++) {\n frameIndex = ~~(i / frameDimension);\n inFrameIndex = i % frameDimension;\n\n let raw = frame[frameIndex].pixelData[inFrameIndex] + offset;\n if (!Number.isNaN(raw)) {\n data[4 * coordinate + 2 * channelOffset] = raw & 0x00ff;\n data[4 * coordinate + 2 * channelOffset + 1] = (raw >>> 8) & 0x00ff;\n }\n\n packIndex++;\n coordinate = Math.floor(packIndex / 2);\n channelOffset = packIndex % 2;\n }\n\n packed.textureType = RGBAFormat;\n packed.data = data;\n } else if (bitsAllocated === 32 && channels === 1 && pixelType === 0) {\n let data = new Uint8Array(textureSize * textureSize * 4);\n for (let i = startVoxel; i < stopVoxel; i++) {\n frameIndex = ~~(i / frameDimension);\n inFrameIndex = i % frameDimension;\n\n let raw = frame[frameIndex].pixelData[inFrameIndex] + offset;\n if (!Number.isNaN(raw)) {\n data[4 * packIndex] = raw & 0x000000ff;\n data[4 * packIndex + 1] = (raw >>> 8) & 0x000000ff;\n data[4 * packIndex + 2] = (raw >>> 16) & 0x000000ff;\n data[4 * packIndex + 3] = (raw >>> 24) & 0x000000ff;\n }\n\n packIndex++;\n }\n packed.textureType = RGBAFormat;\n packed.data = data;\n } else if (bitsAllocated === 32 && channels === 1 && pixelType === 1) {\n let data = new Uint8Array(textureSize * textureSize * 4);\n\n for (let i = startVoxel; i < stopVoxel; i++) {\n frameIndex = ~~(i / frameDimension);\n inFrameIndex = i % frameDimension;\n\n let raw = frame[frameIndex].pixelData[inFrameIndex] + offset;\n if (!Number.isNaN(raw)) {\n let bitString = binaryString(raw);\n let bitStringArray = bitString.match(/.{1,8}/g);\n\n data[4 * packIndex] = parseInt(bitStringArray[0], 2);\n data[4 * packIndex + 1] = parseInt(bitStringArray[1], 2);\n data[4 * packIndex + 2] = parseInt(bitStringArray[2], 2);\n data[4 * packIndex + 3] = parseInt(bitStringArray[3], 2);\n }\n\n packIndex++;\n }\n\n packed.textureType = RGBAFormat;\n packed.data = data;\n } else if (bitsAllocated === 8 && channels === 3) {\n let data = new Uint8Array(textureSize * textureSize * 3);\n\n for (let i = startVoxel; i < stopVoxel; i++) {\n frameIndex = ~~(i / frameDimension);\n inFrameIndex = i % frameDimension;\n\n data[3 * packIndex] = frame[frameIndex].pixelData[3 * inFrameIndex];\n data[3 * packIndex + 1] = frame[frameIndex].pixelData[3 * inFrameIndex + 1];\n data[3 * packIndex + 2] = frame[frameIndex].pixelData[3 * inFrameIndex + 2];\n packIndex++;\n }\n\n packed.textureType = RGBFormat;\n packed.data = data;\n }\n\n return packed;\n }\n\n /**\n * Get the stack world center\n *\n *@return {*}\n */\n worldCenter() {\n let center = this._halfDimensionsIJK\n .clone()\n .addScalar(-0.5)\n .applyMatrix4(this._ijk2LPS);\n return center;\n }\n\n /**\n * Get the stack world bounding box\n * @return {*}\n */\n worldBoundingBox() {\n let bbox = [\n Number.POSITIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n Number.POSITIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n Number.POSITIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n ];\n\n const dims = this._dimensionsIJK;\n\n for (let i = 0; i <= dims.x; i += dims.x) {\n for (let j = 0; j <= dims.y; j += dims.y) {\n for (let k = 0; k <= dims.z; k += dims.z) {\n let world = new Vector3(i, j, k).applyMatrix4(this._ijk2LPS);\n bbox = [\n Math.min(bbox[0], world.x),\n Math.max(bbox[1], world.x), // x min/max\n Math.min(bbox[2], world.y),\n Math.max(bbox[3], world.y),\n Math.min(bbox[4], world.z),\n Math.max(bbox[5], world.z),\n ];\n }\n }\n }\n\n return bbox;\n }\n\n /**\n * Get AABB size in LPS space.\n *\n * @return {*}\n */\n AABBox() {\n let world0 = new Vector3()\n .addScalar(-0.5)\n .applyMatrix4(this._ijk2LPS)\n .applyMatrix4(this._lps2AABB);\n\n let world7 = this._dimensionsIJK\n .clone()\n .addScalar(-0.5)\n .applyMatrix4(this._ijk2LPS)\n .applyMatrix4(this._lps2AABB);\n\n let minBBox = new Vector3(\n Math.abs(world0.x - world7.x),\n Math.abs(world0.y - world7.y),\n Math.abs(world0.z - world7.z)\n );\n\n return minBBox;\n }\n\n /**\n * Get AABB center in LPS space\n */\n centerAABBox() {\n let centerBBox = this.worldCenter();\n centerBBox.applyMatrix4(this._lps2AABB);\n return centerBBox;\n }\n\n static indexInDimensions(index, dimensions) {\n if (\n index.x >= 0 &&\n index.y >= 0 &&\n index.z >= 0 &&\n index.x < dimensions.x &&\n index.y < dimensions.y &&\n index.z < dimensions.z\n ) {\n return true;\n }\n\n return false;\n }\n\n _arrayToVector3(array, index) {\n return new Vector3(array[index], array[index + 1], array[index + 2]);\n }\n\n _orderFrameOnDimensionIndicesArraySort(a, b) {\n if (\n 'dimensionIndexValues' in a &&\n Object.prototype.toString.call(a.dimensionIndexValues) === '[object Array]' &&\n 'dimensionIndexValues' in b &&\n Object.prototype.toString.call(b.dimensionIndexValues) === '[object Array]'\n ) {\n for (let i = 0; i < a.dimensionIndexValues.length; i++) {\n if (parseInt(a.dimensionIndexValues[i], 10) > parseInt(b.dimensionIndexValues[i], 10)) {\n return 1;\n }\n if (parseInt(a.dimensionIndexValues[i], 10) < parseInt(b.dimensionIndexValues[i], 10)) {\n return -1;\n }\n }\n } else {\n window.console.warn(\"One of the frames doesn't have a dimensionIndexValues array.\");\n window.console.warn(a);\n window.console.warn(b);\n }\n\n return 0;\n }\n\n _computeDistanceArrayMap(normal, frame) {\n if (frame.imagePosition) {\n frame.dist =\n frame.imagePosition[0] * normal.x +\n frame.imagePosition[1] * normal.y +\n frame.imagePosition[2] * normal.z;\n }\n return frame;\n }\n\n _sortDistanceArraySort(a, b) {\n return a.dist - b.dist;\n }\n _sortInstanceNumberArraySort(a, b) {\n return a.instanceNumber - b.instanceNumber;\n }\n _sortSopInstanceUIDArraySort(a, b) {\n return a.sopInstanceUID - b.sopInstanceUID;\n }\n\n set numberOfChannels(numberOfChannels) {\n this._numberOfChannels = numberOfChannels;\n }\n\n get numberOfChannels() {\n return this._numberOfChannels;\n }\n\n set frame(frame) {\n this._frame = frame;\n }\n\n get frame() {\n return this._frame;\n }\n\n set prepared(prepared) {\n this._prepared = prepared;\n }\n\n get prepared() {\n return this._prepared;\n }\n\n set packed(packed) {\n this._packed = packed;\n }\n\n get packed() {\n return this._packed;\n }\n\n set packedPerPixel(packedPerPixel) {\n this._packedPerPixel = packedPerPixel;\n }\n\n get packedPerPixel() {\n return this._packedPerPixel;\n }\n\n set dimensionsIJK(dimensionsIJK) {\n this._dimensionsIJK = dimensionsIJK;\n }\n\n get dimensionsIJK() {\n return this._dimensionsIJK;\n }\n\n set halfDimensionsIJK(halfDimensionsIJK) {\n this._halfDimensionsIJK = halfDimensionsIJK;\n }\n\n get halfDimensionsIJK() {\n return this._halfDimensionsIJK;\n }\n\n set regMatrix(regMatrix) {\n this._regMatrix = regMatrix;\n }\n\n get regMatrix() {\n return this._regMatrix;\n }\n\n set ijk2LPS(ijk2LPS) {\n this._ijk2LPS = ijk2LPS;\n }\n\n get ijk2LPS() {\n return this._ijk2LPS;\n }\n\n set lps2IJK(lps2IJK) {\n this._lps2IJK = lps2IJK;\n }\n\n get lps2IJK() {\n return this._lps2IJK;\n }\n\n set lps2AABB(lps2AABB) {\n this._lps2AABB = lps2AABB;\n }\n\n get lps2AABB() {\n return this._lps2AABB;\n }\n\n set textureSize(textureSize) {\n this._textureSize = textureSize;\n }\n\n get textureSize() {\n return this._textureSize;\n }\n\n set textureUnits(textureUnits) {\n this._textureUnits = textureUnits;\n }\n\n get textureUnits() {\n return this._textureUnits;\n }\n\n set textureType(textureType) {\n this._textureType = textureType;\n }\n\n get textureType() {\n return this._textureType;\n }\n\n set bitsAllocated(bitsAllocated) {\n this._bitsAllocated = bitsAllocated;\n }\n\n get bitsAllocated() {\n return this._bitsAllocated;\n }\n\n set rawData(rawData) {\n this._rawData = rawData;\n }\n\n get rawData() {\n return this._rawData;\n }\n\n get windowWidth() {\n return this._windowWidth;\n }\n\n set windowWidth(windowWidth) {\n this._windowWidth = windowWidth;\n }\n\n get windowCenter() {\n return this._windowCenter;\n }\n\n set windowCenter(windowCenter) {\n this._windowCenter = windowCenter;\n }\n\n get rescaleSlope() {\n return this._rescaleSlope;\n }\n\n set rescaleSlope(rescaleSlope) {\n this._rescaleSlope = rescaleSlope;\n }\n\n get rescaleIntercept() {\n return this._rescaleIntercept;\n }\n\n set rescaleIntercept(rescaleIntercept) {\n this._rescaleIntercept = rescaleIntercept;\n }\n\n get xCosine() {\n return this._xCosine;\n }\n\n set xCosine(xCosine) {\n this._xCosine = xCosine;\n }\n\n get yCosine() {\n return this._yCosine;\n }\n\n set yCosine(yCosine) {\n this._yCosine = yCosine;\n }\n\n get zCosine() {\n return this._zCosine;\n }\n\n set zCosine(zCosine) {\n this._zCosine = zCosine;\n }\n\n get minMax() {\n return this._minMax;\n }\n\n set minMax(minMax) {\n this._minMax = minMax;\n }\n\n get stackID() {\n return this._stackID;\n }\n\n set stackID(stackID) {\n this._stackID = stackID;\n }\n\n get pixelType() {\n return this._pixelType;\n }\n\n set pixelType(pixelType) {\n this._pixelType = pixelType;\n }\n\n get pixelRepresentation() {\n return this._pixelRepresentation;\n }\n\n set pixelRepresentation(pixelRepresentation) {\n this._pixelRepresentation = pixelRepresentation;\n }\n\n set invert(invert) {\n this._invert = invert;\n }\n\n get invert() {\n return this._invert;\n }\n\n set modality(modality) {\n this._modality = modality;\n }\n\n get modality() {\n return this._modality;\n }\n\n get rightHanded() {\n return this._rightHanded;\n }\n\n set rightHanded(rightHanded) {\n this._rightHanded = rightHanded;\n }\n\n get spacingBetweenSlices() {\n return this._spacingBetweenSlices;\n }\n\n set spacingBetweenSlices(spacingBetweenSlices) {\n this._spacingBetweenSlices = spacingBetweenSlices;\n }\n\n set segmentationSegments(segmentationSegments) {\n this._segmentationSegments = segmentationSegments;\n }\n\n get segmentationSegments() {\n return this._segmentationSegments;\n }\n\n set segmentationType(segmentationType) {\n this._segmentationType = segmentationType;\n }\n\n get segmentationType() {\n return this._segmentationType;\n }\n\n set segmentationLUT(segmentationLUT) {\n this._segmentationLUT = segmentationLUT;\n }\n\n get segmentationLUT() {\n return this._segmentationLUT;\n }\n\n set segmentationLUTO(segmentationLUTO) {\n this._segmentationLUTO = segmentationLUTO;\n }\n\n get segmentationLUTO() {\n return this._segmentationLUTO;\n }\n\n // DEPRECATED FUNCTION\n\n /**\n * @deprecated for core.utils.value\n *\n * Get voxel value.\n *\n * @param {*} stack\n * @param {*} coordinate\n *\n * @return {*}\n */\n static value(stack, coordinate) {\n window.console.warn(\n `models.stack.value is deprecated.\n Please use core.utils.value instead.`\n );\n return CoreUtils.value(stack, coordinate);\n }\n\n /**\n * @deprecated for core.utils.rescaleSlopeIntercept\n *\n * Apply slope/intercept to a value.\n *\n * @param {*} value\n * @param {*} slope\n * @param {*} intercept\n *\n * @return {*}\n */\n static valueRescaleSlopeIntercept(value, slope, intercept) {\n window.console.warn(\n `models.stack.valueRescaleSlopeIntercept is deprecated.\n Please use core.utils.rescaleSlopeIntercept instead.`\n );\n return CoreUtils.rescaleSlopeIntercept(value, slope, intercept);\n }\n\n /**\n * @deprecated for core.utils.worldToData\n *\n * Transform coordinates from world coordinate to data\n *\n * @param {*} stack\n * @param {*} worldCoordinates\n *\n * @return {*}\n */\n static worldToData(stack, worldCoordinates) {\n window.console.warn(\n `models.stack.worldToData is deprecated.\n Please use core.utils.worldToData instead.`\n );\n\n return CoreUtils.worldToData(stack._lps2IJK, worldCoordinates);\n }\n}\n","/**\n * @module models/voxel\n */\n\nexport default class ModelsVoxel {\n constructor() {\n this._id = -1;\n this._worldCoordinates = null;\n this._dataCoordinates = null;\n this._screenCoordinates = null;\n this._value = null;\n }\n\n set worldCoordinates(worldCoordinates) {\n this._worldCoordinates = worldCoordinates;\n }\n\n get worldCoordinates() {\n return this._worldCoordinates;\n }\n\n set dataCoordinates(dataCoordinates) {\n this._dataCoordinates = dataCoordinates;\n }\n\n get dataCoordinates() {\n return this._dataCoordinates;\n }\n\n set screenCoordinates(screenCoordinates) {\n this._screenCoordinates = screenCoordinates;\n }\n\n get screenCoordinates() {\n return this._screenCoordinates;\n }\n\n set value(value) {\n this._value = value;\n }\n\n get value() {\n return this._value;\n }\n\n set id(id) {\n this._id = id;\n }\n\n get id() {\n return this._id;\n }\n}\n","/** * Imports ***/\nimport UtilsCore from '../core/core.utils';\nimport ParsersVolume from './parsers.volume';\n\nimport * as OpenJPEG from 'OpenJPEG.js/dist/openJPEG-DynamicMemory-browser.js';\n\nimport {RLEDecoder} from '../decoders/decoders.rle';\n\nlet DicomParser = require('dicom-parser');\nlet Jpeg = require('jpeg-lossless-decoder-js');\nlet JpegBaseline = require('../../external/scripts/jpeg');\nlet Jpx = require('../../external/scripts/jpx');\nlet openJPEG; // for one time initialization\n\n/**\n * Dicom parser is a combination of utilities to get a VJS image from dicom files.\n *scripts\n * Relies on dcmjs, jquery, HTML5 fetch API, HTML5 promise API.\n *\n * image-JPEG2000 (jpx) is still in use, because Cornerstone does it and may have identified some edge corners.\n * Ref:\n * https://github.com/cornerstonejs/cornerstoneWADOImageLoader/blob/master/docs/Codecs.md\n * https://github.com/cornerstonejs/cornerstoneWADOImageLoader/blob/a9b408f5562bde5543fc6986bd23fbac9d676562/src/shared/decoders/decodeJPEG2000.js#L127-L134\n *\n * @module parsers/dicom\n *\n * @param arrayBuffer {arraybuffer} - List of files to be parsed. It is urls from which\n * VJS.parsers.dicom can pull the data from.\n */\nexport default class ParsersDicom extends ParsersVolume {\n constructor(data, id) {\n console.log('parse image', data);\n super();\n\n this._id = id;\n\n this._arrayBuffer = data.buffer;\n\n let byteArray = new Uint8Array(this._arrayBuffer);\n\n // catch error\n // throw error if any!\n this._dataSet = null;\n\n try {\n this._dataSet = DicomParser.parseDicom(byteArray);\n // const parser = new Jpx();\n // console.log('jpx parser', parser);\n // this._dataSet = parser.parse(byteArray);\n } catch (e) {\n console.log(e);\n const error = new Error('parsers.dicom could not parse the file');\n throw error;\n }\n }\n\n /**\n * Series instance UID (0020,000e)\n *\n * @return {String}\n */\n seriesInstanceUID() {\n return this._dataSet.string('x0020000e');\n }\n\n /**\n * Study instance UID (0020,000d)\n *\n * @return {String}\n */\n studyInstanceUID() {\n return this._dataSet.string('x0020000d');\n }\n\n /**\n * Get modality (0008,0060)\n *\n * @return {String}\n */\n modality() {\n return this._dataSet.string('x00080060');\n }\n\n /**\n * Segmentation type (0062,0001)\n *\n * @return {String}\n */\n segmentationType() {\n return this._dataSet.string('x00620001');\n }\n\n /**\n * Segmentation segments\n * -> Sequence of segments (0062,0002)\n * -> Recommended Display CIELab\n * -> Segmentation Code\n * -> Segment Number (0062,0004)\n * -> Segment Label (0062,0005)\n * -> Algorithm Type (0062,0008)\n *\n * @return {*}\n */\n segmentationSegments() {\n let segmentationSegments = [];\n let segmentSequence = this._dataSet.elements.x00620002;\n\n if (!segmentSequence) {\n return segmentationSegments;\n }\n\n for (let i = 0; i < segmentSequence.items.length; i++) {\n let recommendedDisplayCIELab = this._recommendedDisplayCIELab(segmentSequence.items[i]);\n let segmentationCode = this._segmentationCode(segmentSequence.items[i]);\n let segmentNumber = segmentSequence.items[i].dataSet.uint16('x00620004');\n let segmentLabel = segmentSequence.items[i].dataSet.string('x00620005');\n let segmentAlgorithmType = segmentSequence.items[i].dataSet.string('x00620008');\n\n segmentationSegments.push({\n recommendedDisplayCIELab,\n segmentationCodeDesignator: segmentationCode['segmentationCodeDesignator'],\n segmentationCodeValue: segmentationCode['segmentationCodeValue'],\n segmentationCodeMeaning: segmentationCode['segmentationCodeMeaning'],\n segmentNumber,\n segmentLabel,\n segmentAlgorithmType,\n });\n }\n\n return segmentationSegments;\n }\n\n /**\n * Segmentation code\n * -> Code designator (0008,0102)\n * -> Code value (0008,0200)\n * -> Code Meaning Type (0008,0104)\n *\n * @param {*} segment\n *\n * @return {*}\n */\n _segmentationCode(segment) {\n let segmentationCodeDesignator = 'unknown';\n let segmentationCodeValue = 'unknown';\n let segmentationCodeMeaning = 'unknown';\n let element = segment.dataSet.elements.x00082218;\n\n if (element && element.items && element.items.length > 0) {\n segmentationCodeDesignator = element.items[0].dataSet.string('x00080102');\n segmentationCodeValue = element.items[0].dataSet.string('x00080100');\n segmentationCodeMeaning = element.items[0].dataSet.string('x00080104');\n }\n\n return {\n segmentationCodeDesignator,\n segmentationCodeValue,\n segmentationCodeMeaning,\n };\n }\n\n /**\n * Recommended display CIELab\n *\n * @param {*} segment\n *\n * @return {*}\n */\n _recommendedDisplayCIELab(segment) {\n if (!segment.dataSet.elements.x0062000d) {\n return null;\n }\n\n let offset = segment.dataSet.elements.x0062000d.dataOffset;\n let length = segment.dataSet.elements.x0062000d.length;\n let byteArray = segment.dataSet.byteArray.slice(offset, offset + length);\n\n // https://www.dabsoft.ch/dicom/3/C.10.7.1.1/\n let CIELabScaled = new Uint16Array(length / 2);\n for (let i = 0; i < length / 2; i++) {\n CIELabScaled[i] = (byteArray[2 * i + 1] << 8) + byteArray[2 * i];\n }\n\n let CIELabNormalized = [\n (CIELabScaled[0] / 65535) * 100,\n (CIELabScaled[1] / 65535) * 255 - 128,\n (CIELabScaled[2] / 65535) * 255 - 128,\n ];\n\n return CIELabNormalized;\n }\n\n /**\n * Raw dataset\n *\n * @return {*}\n */\n rawHeader() {\n return this._dataSet;\n }\n\n /**\n * SOP Instance UID\n *\n * @param {*} frameIndex\n *\n * @return {*}\n */\n sopInstanceUID(frameIndex = 0) {\n let sopInstanceUID = this._findStringEverywhere('x2005140f', 'x00080018', frameIndex);\n return sopInstanceUID;\n }\n\n /**\n * Transfer syntax UID\n *\n * @return {*}\n */\n transferSyntaxUID() {\n return this._dataSet.string('x00020010');\n }\n\n /**\n * Study date\n *\n * @return {*}\n */\n studyDate() {\n return this._dataSet.string('x00080020');\n }\n\n /**\n * Study description\n *\n * @return {*}\n */\n studyDescription() {\n return this._dataSet.string('x00081030');\n }\n\n /**\n * Series date\n *\n * @return {*}\n */\n seriesDate() {\n return this._dataSet.string('x00080021');\n }\n\n /**\n * Series description\n *\n * @return {*}\n */\n seriesDescription() {\n return this._dataSet.string('x0008103e');\n }\n\n /**\n * Patient name\n *\n * @return {*}\n */\n patientName() {\n return this._dataSet.string('x00100010');\n }\n\n /**\n * Patient ID\n *\n * @return {*}\n */\n patientID() {\n return this._dataSet.string('x00100020');\n }\n\n /**\n * Patient birthdate\n *\n * @return {*}\n */\n patientBirthdate() {\n return this._dataSet.string('x00100030');\n }\n\n /**\n * Patient sex\n *\n * @return {*}\n */\n patientSex() {\n return this._dataSet.string('x00100040');\n }\n\n /**\n * Patient age\n *\n * @return {*}\n */\n patientAge() {\n return this._dataSet.string('x00101010');\n }\n\n /**\n * Photometric interpretation\n *\n * @return {*}\n */\n photometricInterpretation() {\n return this._dataSet.string('x00280004');\n }\n\n planarConfiguration() {\n let planarConfiguration = this._dataSet.uint16('x00280006');\n\n if (typeof planarConfiguration === 'undefined') {\n planarConfiguration = null;\n }\n\n return planarConfiguration;\n }\n\n samplesPerPixel() {\n return this._dataSet.uint16('x00280002');\n }\n\n numberOfFrames() {\n let numberOfFrames = this._dataSet.intString('x00280008');\n\n // need something smarter!\n if (typeof numberOfFrames === 'undefined') {\n numberOfFrames = null;\n }\n\n return numberOfFrames;\n }\n\n numberOfChannels() {\n let numberOfChannels = 1;\n let photometricInterpretation = this.photometricInterpretation();\n\n if (\n !(\n photometricInterpretation !== 'RGB' &&\n photometricInterpretation !== 'PALETTE COLOR' &&\n photometricInterpretation !== 'YBR_FULL' &&\n photometricInterpretation !== 'YBR_FULL_422' &&\n photometricInterpretation !== 'YBR_PARTIAL_422' &&\n photometricInterpretation !== 'YBR_PARTIAL_420' &&\n photometricInterpretation !== 'YBR_RCT'\n )\n ) {\n numberOfChannels = 3;\n }\n\n // make sure we return a number! (not a string!)\n return numberOfChannels;\n }\n\n invert() {\n let photometricInterpretation = this.photometricInterpretation();\n\n return photometricInterpretation === 'MONOCHROME1' ? true : false;\n }\n\n imageOrientation(frameIndex = 0) {\n // expect frame index to start at 0!\n let imageOrientation = this._findStringEverywhere('x00209116', 'x00200037', frameIndex);\n\n // format image orientation ('1\\0\\0\\0\\1\\0') to array containing 6 numbers\n if (imageOrientation) {\n // make sure we return a number! (not a string!)\n // might not need to split (floatString + index)\n imageOrientation = imageOrientation.split('\\\\').map(UtilsCore.stringToNumber);\n }\n\n return imageOrientation;\n }\n\n referencedSegmentNumber(frameIndex = 0) {\n let referencedSegmentNumber = -1;\n let referencedSegmentNumberElement = this._findInGroupSequence(\n 'x52009230',\n 'x0062000a',\n frameIndex,\n );\n\n if (referencedSegmentNumberElement !== null) {\n referencedSegmentNumber = referencedSegmentNumberElement.uint16('x0062000b');\n }\n\n return referencedSegmentNumber;\n }\n\n pixelAspectRatio() {\n let pixelAspectRatio = [\n this._dataSet.intString('x00280034', 0),\n this._dataSet.intString('x00280034', 1),\n ];\n\n // need something smarter!\n if (typeof pixelAspectRatio[0] === 'undefined') {\n pixelAspectRatio = null;\n }\n\n // make sure we return a number! (not a string!)\n return pixelAspectRatio;\n }\n\n imagePosition(frameIndex = 0) {\n let imagePosition = this._findStringEverywhere('x00209113', 'x00200032', frameIndex);\n\n // format image orientation ('1\\0\\0\\0\\1\\0') to array containing 6 numbers\n if (imagePosition) {\n // make sure we return a number! (not a string!)\n imagePosition = imagePosition.split('\\\\').map(UtilsCore.stringToNumber);\n }\n\n return imagePosition;\n }\n\n instanceNumber(frameIndex = 0) {\n let instanceNumber = null;\n // first look for frame!\n // per frame functionnal group sequence\n let perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230;\n\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\n if (perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x2005140f) {\n let planeOrientationSequence =\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x2005140f.items[0]\n .dataSet;\n instanceNumber = planeOrientationSequence.intString('x00200013');\n } else {\n instanceNumber = this._dataSet.intString('x00200013');\n\n if (typeof instanceNumber === 'undefined') {\n instanceNumber = null;\n }\n }\n } else {\n // should we default to undefined??\n // default orientation\n instanceNumber = this._dataSet.intString('x00200013');\n\n if (typeof instanceNumber === 'undefined') {\n instanceNumber = null;\n }\n }\n\n return instanceNumber;\n }\n\n pixelSpacing(frameIndex = 0) {\n // expect frame index to start at 0!\n let pixelSpacing = this._findStringEverywhere('x00289110', 'x00280030', frameIndex);\n\n if (pixelSpacing === null) {\n pixelSpacing = this._dataSet.string('x00181164');\n\n if (typeof pixelSpacing === 'undefined') {\n pixelSpacing = null;\n }\n }\n\n if (pixelSpacing) {\n const splittedSpacing = pixelSpacing.split('\\\\');\n if (splittedSpacing.length !== 2) {\n console.error(`DICOM spacing format is not supported (could not split string on \"\\\\\"): ${pixelSpacing}`);\n pixelSpacing = null;\n } else {\n pixelSpacing = splittedSpacing.map(UtilsCore.stringToNumber);\n }\n }\n\n return pixelSpacing;\n }\n\n ultrasoundRegions(frameIndex = 0) {\n const sequence = this._dataSet.elements['x00186011'];\n\n if (!sequence || !sequence.items) {\n return [];\n }\n\n const ultrasoundRegions = [];\n\n sequence.items.forEach(item => {\n ultrasoundRegions.push({\n x0: item.dataSet.uint32('x00186018'),\n y0: item.dataSet.uint32('x0018601a'),\n x1: item.dataSet.uint32('x0018601c'),\n y1: item.dataSet.uint32('x0018601e'),\n axisX: item.dataSet.int32('x00186020') || null, // optional\n axisY: item.dataSet.int32('x00186022') || null, // optional\n unitsX: this._getUnitsName(item.dataSet.uint16('x00186024')),\n unitsY: this._getUnitsName(item.dataSet.uint16('x00186026')),\n deltaX: item.dataSet.double('x0018602c'),\n deltaY: item.dataSet.double('x0018602e'),\n });\n });\n\n return ultrasoundRegions;\n }\n\n frameTime(frameIndex = 0) {\n let frameIncrementPointer = this._dataSet.uint16('x00280009', 1);\n let frameRate = this._dataSet.intString('x00082144');\n let frameTime;\n\n if (typeof frameIncrementPointer === 'number') {\n frameIncrementPointer = frameIncrementPointer.toString(16);\n frameTime = this._dataSet.floatString('x0018' + frameIncrementPointer);\n }\n\n if (typeof frameTime === 'undefined' && typeof frameRate === 'number') {\n frameTime = 1000 / frameRate;\n }\n\n if (typeof frameTime === 'undefined') {\n frameTime = null;\n }\n\n return frameTime;\n }\n\n rows(frameIndex = 0) {\n let rows = this._dataSet.uint16('x00280010');\n\n if (typeof rows === 'undefined') {\n rows = null;\n // print warning at least...\n }\n\n return rows;\n }\n\n columns(frameIndex = 0) {\n let columns = this._dataSet.uint16('x00280011');\n\n if (typeof columns === 'undefined') {\n columns = null;\n // print warning at least...\n }\n\n return columns;\n }\n\n pixelType(frameIndex = 0) {\n // 0 integer, 1 float\n // dicom only support integers\n return 0;\n }\n\n pixelRepresentation(frameIndex = 0) {\n let pixelRepresentation = this._dataSet.uint16('x00280103');\n return pixelRepresentation;\n }\n\n pixelPaddingValue(frameIndex = 0) {\n let padding = this._dataSet.int16('x00280120');\n\n if (typeof padding === 'undefined') {\n padding = null;\n }\n\n return padding;\n }\n\n bitsAllocated(frameIndex = 0) {\n // expect frame index to start at 0!\n let bitsAllocated = this._dataSet.uint16('x00280100');\n return bitsAllocated;\n }\n\n highBit(frameIndex = 0) {\n // expect frame index to start at 0!\n let highBit = this._dataSet.uint16('x00280102');\n return highBit;\n }\n\n rescaleIntercept(frameIndex = 0) {\n return this._findFloatStringInFrameGroupSequence('x00289145', 'x00281052', frameIndex);\n }\n\n rescaleSlope(frameIndex = 0) {\n return this._findFloatStringInFrameGroupSequence('x00289145', 'x00281053', frameIndex);\n }\n\n windowCenter(frameIndex = 0) {\n return this._findFloatStringInFrameGroupSequence('x00289132', 'x00281050', frameIndex);\n }\n\n windowWidth(frameIndex = 0) {\n return this._findFloatStringInFrameGroupSequence('x00289132', 'x00281051', frameIndex);\n }\n\n sliceThickness(frameIndex = 0) {\n return this._findFloatStringInFrameGroupSequence('x00289110', 'x00180050', frameIndex);\n }\n\n spacingBetweenSlices(frameIndex = 0) {\n let spacing = this._dataSet.floatString('x00180088');\n\n if (typeof spacing === 'undefined') {\n spacing = null;\n }\n\n return spacing;\n }\n\n dimensionIndexValues(frameIndex = 0) {\n let dimensionIndexValues = null;\n\n // try to get it from enhanced MR images\n // per-frame functionnal group sequence\n let perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230;\n\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\n let frameContentSequence =\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x00209111;\n if (frameContentSequence !== undefined && frameContentSequence !== null) {\n frameContentSequence = frameContentSequence.items[0].dataSet;\n let dimensionIndexValuesElt = frameContentSequence.elements.x00209157;\n if (dimensionIndexValuesElt !== undefined && dimensionIndexValuesElt !== null) {\n // /4 because UL\n let nbValues = dimensionIndexValuesElt.length / 4;\n dimensionIndexValues = [];\n\n for (let i = 0; i < nbValues; i++) {\n dimensionIndexValues.push(frameContentSequence.uint32('x00209157', i));\n }\n }\n }\n }\n\n return dimensionIndexValues;\n }\n\n inStackPositionNumber(frameIndex = 0) {\n let inStackPositionNumber = null;\n\n // try to get it from enhanced MR images\n // per-frame functionnal group sequence\n let perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230;\n\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\n // NOT A PHILIPS TRICK!\n let philipsPrivateSequence =\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x00209111.items[0]\n .dataSet;\n inStackPositionNumber = philipsPrivateSequence.uint32('x00209057');\n } else {\n inStackPositionNumber = null;\n }\n\n return inStackPositionNumber;\n }\n\n stackID(frameIndex = 0) {\n let stackID = null;\n\n // try to get it from enhanced MR images\n // per-frame functionnal group sequence\n let perFrameFunctionnalGroupSequence = this._dataSet.elements.x52009230;\n\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\n // NOT A PHILIPS TRICK!\n let philipsPrivateSequence =\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet.elements.x00209111.items[0]\n .dataSet;\n stackID = philipsPrivateSequence.intString('x00209056');\n } else {\n stackID = null;\n }\n\n return stackID;\n }\n\n extractPixelData(frameIndex = 0) {\n // decompress\n let decompressedData = this._decodePixelData(frameIndex);\n\n let numberOfChannels = this.numberOfChannels();\n\n if (numberOfChannels > 1) {\n return this._convertColorSpace(decompressedData);\n } else {\n return decompressedData;\n }\n }\n\n //\n // private methods\n //\n\n _findInGroupSequence(sequence, subsequence, index) {\n let functionalGroupSequence = this._dataSet.elements[sequence];\n\n if (typeof functionalGroupSequence !== 'undefined') {\n let inSequence = functionalGroupSequence.items[index].dataSet.elements[subsequence];\n\n if (typeof inSequence !== 'undefined') {\n return inSequence.items[0].dataSet;\n }\n }\n\n return null;\n }\n\n _findStringInGroupSequence(sequence, subsequence, tag, index) {\n // index = 0 if shared!!!\n let dataSet = this._findInGroupSequence(sequence, subsequence, index);\n\n if (dataSet !== null) {\n return dataSet.string(tag);\n }\n\n return null;\n }\n\n _findStringInFrameGroupSequence(subsequence, tag, index) {\n return (\n this._findStringInGroupSequence('x52009229', subsequence, tag, 0) ||\n this._findStringInGroupSequence('x52009230', subsequence, tag, index)\n );\n }\n\n _findStringEverywhere(subsequence, tag, index) {\n let targetString = this._findStringInFrameGroupSequence(subsequence, tag, index);\n // PET MODULE\n if (targetString === null) {\n const petModule = 'x00540022';\n targetString = this._findStringInSequence(petModule, tag);\n }\n\n if (targetString === null) {\n targetString = this._dataSet.string(tag);\n }\n\n if (typeof targetString === 'undefined') {\n targetString = null;\n }\n\n return targetString;\n }\n\n _findStringInSequence(sequenceTag, tag, index) {\n const sequence = this._dataSet.elements[sequenceTag];\n\n let targetString;\n if (sequence) {\n targetString = sequence.items[0].dataSet.string(tag);\n }\n\n if (typeof targetString === 'undefined') {\n targetString = null;\n }\n\n return targetString;\n }\n\n _findFloatStringInGroupSequence(sequence, subsequence, tag, index) {\n let dataInGroupSequence = this._dataSet.floatString(tag);\n\n // try to get it from enhanced MR images\n // per-frame functionnal group\n if (typeof dataInGroupSequence === 'undefined') {\n dataInGroupSequence = this._findInGroupSequence(sequence, subsequence, index);\n\n if (dataInGroupSequence !== null) {\n return dataInGroupSequence.floatString(tag);\n }\n }\n\n return dataInGroupSequence;\n }\n\n _findFloatStringInFrameGroupSequence(subsequence, tag, index) {\n return (\n this._findFloatStringInGroupSequence('x52009229', subsequence, tag, 0) ||\n this._findFloatStringInGroupSequence('x52009230', subsequence, tag, index)\n );\n }\n\n _decodePixelData(frameIndex = 0) {\n // if compressed..?\n let transferSyntaxUID = this.transferSyntaxUID();\n console.log('transfer syntax uid', transferSyntaxUID);\n // find compression scheme\n if (\n transferSyntaxUID === '1.2.840.10008.1.2.4.90' ||\n // JPEG 2000 Lossless\n transferSyntaxUID === '1.2.840.10008.1.2.4.91'\n ) {\n // JPEG 2000 Lossy\n return this._decodeJ2K(frameIndex);\n } else if (\n transferSyntaxUID === '1.2.840.10008.1.2.5'\n // decodeRLE\n ) {\n return this._decodeRLE(frameIndex);\n } else if (\n transferSyntaxUID === '1.2.840.10008.1.2.4.57' ||\n // JPEG Lossless, Nonhierarchical (Processes 14)\n transferSyntaxUID === '1.2.840.10008.1.2.4.70'\n ) {\n // JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1])\n return this._decodeJPEGLossless(frameIndex);\n } else if (\n transferSyntaxUID === '1.2.840.10008.1.2.4.50' ||\n // JPEG Baseline lossy process 1 (8 bit)\n transferSyntaxUID === '1.2.840.10008.1.2.4.51'\n ) {\n // JPEG Baseline lossy process 2 & 4 (12 bit)\n return this._decodeJPEGBaseline(frameIndex);\n } else if (\n transferSyntaxUID === '1.2.840.10008.1.2' ||\n // Implicit VR Little Endian\n transferSyntaxUID === '1.2.840.10008.1.2.1'\n ) {\n // Explicit VR Little Endian\n return this._decodeUncompressed(frameIndex);\n } else if (transferSyntaxUID === '1.2.840.10008.1.2.2') {\n // Explicit VR Big Endian\n let frame = this._decodeUncompressed(frameIndex);\n // and sawp it!\n return this._swapFrame(frame);\n } else {\n throw {\n error: `no decoder for transfer syntax ${transferSyntaxUID}`,\n };\n }\n }\n\n // github.com/chafey/cornerstoneWADOImageLoader/blob/master/src/imageLoader/wadouri/getEncapsulatedImageFrame.js\n framesAreFragmented() {\n const numberOfFrames = this._dataSet.intString('x00280008');\n const pixelDataElement = this._dataSet.elements.x7fe00010;\n\n return numberOfFrames !== pixelDataElement.fragments.length;\n }\n\n getEncapsulatedImageFrame(frameIndex) {\n if (\n this._dataSet.elements.x7fe00010 &&\n this._dataSet.elements.x7fe00010.basicOffsetTable.length\n ) {\n // Basic Offset Table is not empty\n return DicomParser.readEncapsulatedImageFrame(\n this._dataSet,\n this._dataSet.elements.x7fe00010,\n frameIndex,\n );\n }\n\n if (this.framesAreFragmented()) {\n // Basic Offset Table is empty\n return DicomParser.readEncapsulatedImageFrame(\n this._dataSet,\n this._dataSet.elements.x7fe00010,\n frameIndex,\n DicomParser.createJPEGBasicOffsetTable(this._dataSet, this._dataSet.elements.x7fe00010),\n );\n }\n\n return DicomParser.readEncapsulatedPixelDataFromFragments(\n this._dataSet,\n this._dataSet.elements.x7fe00010,\n frameIndex,\n );\n }\n\n // used if OpenJPEG library isn't loaded (OHIF/image-JPEG2000 isn't supported and can't parse some images)\n _decodeJpx(frameIndex = 0) {\n const jpxImage = new Jpx();\n // https://github.com/OHIF/image-JPEG2000/issues/6\n // It currently returns either Int16 or Uint16 based on whether the codestream is signed or not.\n jpxImage.parse(this.getEncapsulatedImageFrame(frameIndex));\n\n if (jpxImage.componentsCount !== 1) {\n throw new Error(\n 'JPEG2000 decoder returned a componentCount of ${componentsCount}, when 1 is expected',\n );\n }\n\n if (jpxImage.tiles.length !== 1) {\n throw new Error('JPEG2000 decoder returned a tileCount of ${tileCount}, when 1 is expected');\n }\n\n return jpxImage.tiles[0].items;\n }\n\n _decodeOpenJPEG(frameIndex = 0) {\n const encodedPixelData = this.getEncapsulatedImageFrame(frameIndex);\n const bytesPerPixel = this.bitsAllocated(frameIndex) <= 8 ? 1 : 2;\n const signed = this.pixelRepresentation(frameIndex) === 1;\n const dataPtr = openJPEG._malloc(encodedPixelData.length);\n\n openJPEG.writeArrayToMemory(encodedPixelData, dataPtr);\n\n // create param outpout\n const imagePtrPtr = openJPEG._malloc(4);\n const imageSizePtr = openJPEG._malloc(4);\n const imageSizeXPtr = openJPEG._malloc(4);\n const imageSizeYPtr = openJPEG._malloc(4);\n const imageSizeCompPtr = openJPEG._malloc(4);\n const ret = openJPEG.ccall(\n 'jp2_decode',\n 'number',\n ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n [\n dataPtr,\n encodedPixelData.length,\n imagePtrPtr,\n imageSizePtr,\n imageSizeXPtr,\n imageSizeYPtr,\n imageSizeCompPtr,\n ],\n );\n const imagePtr = openJPEG.getValue(imagePtrPtr, '*');\n\n if (ret !== 0) {\n console.log('[opj_decode] decoding failed!');\n openJPEG._free(dataPtr);\n openJPEG._free(imagePtr);\n openJPEG._free(imageSizeXPtr);\n openJPEG._free(imageSizeYPtr);\n openJPEG._free(imageSizePtr);\n openJPEG._free(imageSizeCompPtr);\n\n return;\n }\n\n // Copy the data from the EMSCRIPTEN heap into the correct type array\n const length =\n openJPEG.getValue(imageSizeXPtr, 'i32') *\n openJPEG.getValue(imageSizeYPtr, 'i32') *\n openJPEG.getValue(imageSizeCompPtr, 'i32');\n const src32 = new Int32Array(openJPEG.HEAP32.buffer, imagePtr, length);\n let pixelData;\n\n if (bytesPerPixel === 1) {\n if (Uint8Array.from) {\n pixelData = Uint8Array.from(src32);\n } else {\n pixelData = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n pixelData[i] = src32[i];\n }\n }\n } else if (signed) {\n if (Int16Array.from) {\n pixelData = Int16Array.from(src32);\n } else {\n pixelData = new Int16Array(length);\n for (let i = 0; i < length; i++) {\n pixelData[i] = src32[i];\n }\n }\n } else if (Uint16Array.from) {\n pixelData = Uint16Array.from(src32);\n } else {\n pixelData = new Uint16Array(length);\n for (let i = 0; i < length; i++) {\n pixelData[i] = src32[i];\n }\n }\n\n openJPEG._free(dataPtr);\n openJPEG._free(imagePtrPtr);\n openJPEG._free(imagePtr);\n openJPEG._free(imageSizePtr);\n openJPEG._free(imageSizeXPtr);\n openJPEG._free(imageSizeYPtr);\n openJPEG._free(imageSizeCompPtr);\n\n return pixelData;\n }\n\n // from cornerstone\n _decodeJ2K(frameIndex = 0) {\n if (typeof OpenJPEG === 'undefined') {\n // OpenJPEG decoder not loaded\n return this._decodeJpx(frameIndex);\n }\n\n if (!openJPEG) {\n openJPEG = OpenJPEG();\n if (!openJPEG || !openJPEG._jp2_decode) {\n // OpenJPEG failed to initialize\n return this._decodeJpx(frameIndex);\n }\n }\n\n return this._decodeOpenJPEG(frameIndex);\n }\n\n _decodeRLE(frameIndex = 0) {\n const bitsAllocated = this.bitsAllocated(frameIndex);\n const planarConfiguration = this.planarConfiguration();\n const columns = this.columns();\n const rows = this.rows();\n const samplesPerPixel = this.samplesPerPixel(frameIndex);\n const pixelRepresentation = this.pixelRepresentation(frameIndex);\n\n // format data for the RLE decoder\n const imageFrame = {\n pixelRepresentation,\n bitsAllocated,\n planarConfiguration,\n columns,\n rows,\n samplesPerPixel,\n };\n\n const pixelData = DicomParser.readEncapsulatedPixelDataFromFragments(\n this._dataSet,\n this._dataSet.elements.x7fe00010,\n frameIndex,\n );\n\n const decoded = RLEDecoder(imageFrame, pixelData);\n return decoded.pixelData;\n }\n\n // from cornerstone\n _decodeJPEGLossless(frameIndex = 0) {\n let encodedPixelData = this.getEncapsulatedImageFrame(frameIndex);\n let pixelRepresentation = this.pixelRepresentation(frameIndex);\n let bitsAllocated = this.bitsAllocated(frameIndex);\n let byteOutput = bitsAllocated <= 8 ? 1 : 2;\n let decoder = new Jpeg.lossless.Decoder();\n let decompressedData = decoder.decode(\n encodedPixelData.buffer,\n encodedPixelData.byteOffset,\n encodedPixelData.length,\n byteOutput,\n );\n\n if (pixelRepresentation === 0) {\n if (byteOutput === 2) {\n return new Uint16Array(decompressedData.buffer);\n } else {\n // untested!\n return new Uint8Array(decompressedData.buffer);\n }\n } else {\n return new Int16Array(decompressedData.buffer);\n }\n }\n\n _decodeJPEGBaseline(frameIndex = 0) {\n let encodedPixelData = this.getEncapsulatedImageFrame(frameIndex);\n let rows = this.rows(frameIndex);\n let columns = this.columns(frameIndex);\n let bitsAllocated = this.bitsAllocated(frameIndex);\n let jpegBaseline = new JpegBaseline();\n jpegBaseline.parse(encodedPixelData);\n\n if (bitsAllocated === 8) {\n return jpegBaseline.getData(columns, rows);\n } else if (bitsAllocated === 16) {\n return jpegBaseline.getData16(columns, rows);\n }\n }\n\n _decodeUncompressed(frameIndex = 0) {\n let pixelRepresentation = this.pixelRepresentation(frameIndex);\n let bitsAllocated = this.bitsAllocated(frameIndex);\n let pixelDataElement = this._dataSet.elements.x7fe00010;\n let pixelDataOffset = pixelDataElement.dataOffset;\n let numberOfChannels = this.numberOfChannels();\n let numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels;\n let frameOffset = 0;\n let buffer = this._dataSet.byteArray.buffer;\n\n if (pixelRepresentation === 0 && bitsAllocated === 8) {\n // unsigned 8 bit\n frameOffset = pixelDataOffset + frameIndex * numPixels;\n return new Uint8Array(buffer, frameOffset, numPixels);\n } else if (pixelRepresentation === 0 && bitsAllocated === 16) {\n // unsigned 16 bit\n frameOffset = pixelDataOffset + frameIndex * numPixels * 2;\n return new Uint16Array(buffer, frameOffset, numPixels);\n } else if (pixelRepresentation === 1 && bitsAllocated === 16) {\n // signed 16 bit\n frameOffset = pixelDataOffset + frameIndex * numPixels * 2;\n return new Int16Array(buffer, frameOffset, numPixels);\n } else if (pixelRepresentation === 0 && bitsAllocated === 32) {\n // unsigned 32 bit\n frameOffset = pixelDataOffset + frameIndex * numPixels * 4;\n return new Uint32Array(buffer, frameOffset, numPixels);\n } else if (pixelRepresentation === 0 && bitsAllocated === 1) {\n let newBuffer = new ArrayBuffer(numPixels);\n let newArray = new Uint8Array(newBuffer);\n\n frameOffset = pixelDataOffset + frameIndex * numPixels;\n let index = 0;\n\n let bitStart = frameIndex * numPixels;\n let bitEnd = frameIndex * numPixels + numPixels;\n\n let byteStart = Math.floor(bitStart / 8);\n let bitStartOffset = bitStart - byteStart * 8;\n let byteEnd = Math.ceil(bitEnd / 8);\n\n let targetBuffer = new Uint8Array(buffer, pixelDataOffset);\n\n for (let i = byteStart; i <= byteEnd; i++) {\n while (bitStartOffset < 8) {\n switch (bitStartOffset) {\n case 0:\n newArray[index] = targetBuffer[i] & 0x0001;\n break;\n case 1:\n newArray[index] = (targetBuffer[i] >>> 1) & 0x0001;\n break;\n case 2:\n newArray[index] = (targetBuffer[i] >>> 2) & 0x0001;\n break;\n case 3:\n newArray[index] = (targetBuffer[i] >>> 3) & 0x0001;\n break;\n case 4:\n newArray[index] = (targetBuffer[i] >>> 4) & 0x0001;\n break;\n case 5:\n newArray[index] = (targetBuffer[i] >>> 5) & 0x0001;\n break;\n case 6:\n newArray[index] = (targetBuffer[i] >>> 6) & 0x0001;\n break;\n case 7:\n newArray[index] = (targetBuffer[i] >>> 7) & 0x0001;\n break;\n default:\n break;\n }\n\n bitStartOffset++;\n index++;\n // if return..\n if (index >= numPixels) {\n return newArray;\n }\n }\n bitStartOffset = 0;\n }\n }\n }\n\n _interpretAsRGB(photometricInterpretation) {\n const rgbLikeTypes = ['RGB', 'YBR_RCT', 'YBR_ICT', 'YBR_FULL_422'];\n\n return rgbLikeTypes.indexOf(photometricInterpretation) !== -1;\n }\n\n _convertColorSpace(uncompressedData) {\n let rgbData = null;\n let photometricInterpretation = this.photometricInterpretation();\n let planarConfiguration = this.planarConfiguration();\n\n const interpretAsRGB = this._interpretAsRGB(photometricInterpretation);\n if (interpretAsRGB && planarConfiguration === 0) {\n // ALL GOOD, ALREADY ORDERED\n // planar or non planar planarConfiguration\n rgbData = uncompressedData;\n } else if (interpretAsRGB && planarConfiguration === 1) {\n if (uncompressedData instanceof Int8Array) {\n rgbData = new Int8Array(uncompressedData.length);\n } else if (uncompressedData instanceof Uint8Array) {\n rgbData = new Uint8Array(uncompressedData.length);\n } else if (uncompressedData instanceof Int16Array) {\n rgbData = new Int16Array(uncompressedData.length);\n } else if (uncompressedData instanceof Uint16Array) {\n rgbData = new Uint16Array(uncompressedData.length);\n } else {\n const error = new Error(`unsuported typed array: ${uncompressedData}`);\n throw error;\n }\n\n let numPixels = uncompressedData.length / 3;\n let rgbaIndex = 0;\n let rIndex = 0;\n let gIndex = numPixels;\n let bIndex = numPixels * 2;\n for (let i = 0; i < numPixels; i++) {\n rgbData[rgbaIndex++] = uncompressedData[rIndex++]; // red\n rgbData[rgbaIndex++] = uncompressedData[gIndex++]; // green\n rgbData[rgbaIndex++] = uncompressedData[bIndex++]; // blue\n }\n } else if (photometricInterpretation === 'YBR_FULL') {\n if (uncompressedData instanceof Int8Array) {\n rgbData = new Int8Array(uncompressedData.length);\n } else if (uncompressedData instanceof Uint8Array) {\n rgbData = new Uint8Array(uncompressedData.length);\n } else if (uncompressedData instanceof Int16Array) {\n rgbData = new Int16Array(uncompressedData.length);\n } else if (uncompressedData instanceof Uint16Array) {\n rgbData = new Uint16Array(uncompressedData.length);\n } else {\n const error = new Error(`unsuported typed array: ${uncompressedData}`);\n throw error;\n }\n\n // https://github.com/chafey/cornerstoneWADOImageLoader/blob/master/src/decodeYBRFull.js\n let nPixels = uncompressedData.length / 3;\n let ybrIndex = 0;\n let rgbaIndex = 0;\n for (let i = 0; i < nPixels; i++) {\n let y = uncompressedData[ybrIndex++];\n let cb = uncompressedData[ybrIndex++];\n let cr = uncompressedData[ybrIndex++];\n rgbData[rgbaIndex++] = y + 1.402 * (cr - 128); // red\n rgbData[rgbaIndex++] = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green\n rgbData[rgbaIndex++] = y + 1.772 * (cb - 128); // blue\n // rgbData[rgbaIndex++] = 255; //alpha\n }\n } else {\n const error = new Error(\n `photometric interpolation not supported: ${photometricInterpretation}`,\n );\n throw error;\n }\n\n return rgbData;\n }\n\n /**\n * Swap bytes in frame.\n */\n _swapFrame(frame) {\n // swap bytes ( if 8bits (1byte), nothing to swap)\n let bitsAllocated = this.bitsAllocated();\n\n if (bitsAllocated === 16) {\n for (let i = 0; i < frame.length; i++) {\n frame[i] = this._swap16(frame[i]);\n }\n } else if (bitsAllocated === 32) {\n for (let i = 0; i < frame.length; i++) {\n frame[i] = this._swap32(frame[i]);\n }\n }\n\n return frame;\n }\n\n _getUnitsName(value) {\n const units = {\n 0: 'none',\n 1: 'percent',\n 2: 'dB',\n 3: 'cm',\n 4: 'seconds',\n 5: 'hertz',\n 6: 'dB/seconds',\n 7: 'cm/sec',\n 8: 'cm2',\n 9: 'cm2/sec',\n 10: 'cm3',\n 11: 'cm3/sec',\n 12: 'degrees',\n };\n\n return units.hasOwnProperty(value) ? units[value] : 'none';\n }\n}\n","import Dicom from './parsers.dicom';\nimport Mgh from './parsers.mgh';\nimport Nifti from './parsers.nifti';\nimport Nrrd from './parsers.nrrd';\n\nexport { Dicom as DicomParser, Mgh as MghParser, Nifti as NiftiParser, Nrrd as NrrdParser };\n","/** * Imports ***/\nimport ParsersVolume from './parsers.volume';\n\nimport { Vector3 } from 'three/src/math/Vector3';\n\n/**\n * @module parsers/mgh\n */\nexport default class ParsersMgh extends ParsersVolume {\n constructor(data, id) {\n super();\n\n /**\n * @member\n * @type {arraybuffer}\n */\n this._id = id;\n this._url = data.url;\n this._buffer = null;\n this._bufferPos = 0;\n this._dataPos = 0;\n this._pixelData = null;\n\n // Default MGH Header as described at:\n // https://surfer.nmr.mgh.harvard.edu/fswiki/FsTutorial/MghFormat\n // Image \"header\" with default values\n this._version = 1;\n this._width = 0;\n this._height = 0;\n this._depth = 0;\n this._nframes = 0;\n this._type = ParsersMgh.MRI_UCHAR; // 0-UCHAR, 4-SHORT, 1-INT, 3-FLOAT\n this._dof = 0;\n this._goodRASFlag = 0; // True: Use directional cosines, false assume CORONAL\n this._spacingXYZ = [1, 1, 1];\n this._Xras = [-1, 0, 0];\n this._Yras = [0, 0, -1];\n this._Zras = [0, 1, 0];\n this._Cras = [0, 0, 0];\n // Image \"footer\"\n this._tr = 0; // ms\n this._flipAngle = 0; // radians\n this._te = 0; // ms\n this._ti = 0; // ms\n this._fov = 0; // from doc: IGNORE THIS FIELD (data is inconsistent)\n this._tags = []; // Will then contain variable length char strings\n\n // Other misc\n this._origin = [0, 0, 0];\n this._imageOrient = [0, 0, 0, 0, 0, 0];\n\n // Read header\n // ArrayBuffer in data.buffer may need endian swap\n this._buffer = data.buffer;\n\n this._version = this._readInt();\n this._swapEndian = false;\n if (this._version == 1) {\n // Life is good\n } else if (this._version == 16777216) {\n this._swapEndian = true;\n this._version = this._swap32(this._version);\n } else {\n const error = new Error('MGH/MGZ parser: Unknown Endian. Version reports: ' + this._version);\n throw error;\n }\n this._width = this._readInt();\n this._height = this._readInt();\n this._depth = this._readInt(); // AMI calls this frames\n this._nframes = this._readInt();\n this._type = this._readInt();\n this._dof = this._readInt();\n this._goodRASFlag = this._readShort();\n this._spacingXYZ = this._readFloat(3);\n this._Xras = this._readFloat(3);\n this._Yras = this._readFloat(3);\n this._Zras = this._readFloat(3);\n this._Cras = this._readFloat(3);\n\n this._bufferPos = 284;\n let dataSize = this._width * this._height * this._depth * this._nframes;\n let vSize = this._width * this._height * this._depth;\n\n switch (this._type) {\n case ParsersMgh.MRI_UCHAR:\n this._pixelData = this._readUChar(dataSize);\n break;\n case ParsersMgh.MRI_INT:\n this._pixelData = this._readInt(dataSize);\n break;\n case ParsersMgh.MRI_FLOAT:\n this._pixelData = this._readFloat(dataSize);\n break;\n case ParsersMgh.MRI_SHORT:\n this._pixelData = this._readShort(dataSize);\n break;\n default:\n throw Error('MGH/MGZ parser: Unknown _type. _type reports: ' + this._type);\n }\n\n this._tr = this._readFloat(1);\n this._flipAngle = this._readFloat(1);\n this._te = this._readFloat(1);\n this._ti = this._readFloat(1);\n this._fov = this._readFloat(1);\n\n let enc = new TextDecoder();\n let t = this._tagReadStart();\n while (t[0] != undefined) {\n let tagType = t[0];\n let tagLen = t[1];\n let tagValue = undefined;\n\n switch (tagType) {\n case ParsersMgh.TAG_OLD_MGH_XFORM:\n case ParsersMgh.TAG_MGH_XFORM:\n tagValue = this._readChar(tagLen);\n break;\n default:\n tagValue = this._readChar(tagLen);\n }\n tagValue = enc.decode(tagValue);\n this._tags.push({ tagType: tagType, tagValue: tagValue });\n\n // read for next loop\n t = this._tagReadStart();\n }\n\n // detect if we are in a right handed coordinate system\n const first = new Vector3().fromArray(this._Xras);\n const second = new Vector3().fromArray(this._Yras);\n const crossFirstSecond = new Vector3().crossVectors(first, second);\n const third = new Vector3().fromArray(this._Zras);\n\n if (crossFirstSecond.angleTo(third) > Math.PI / 2) {\n this._rightHanded = false;\n }\n\n // - sign to move to LPS space\n this._imageOrient = [\n -this._Xras[0],\n -this._Xras[1],\n this._Xras[2],\n -this._Yras[0],\n -this._Yras[1],\n this._Yras[2],\n ];\n\n // Calculate origin\n let fcx = this._width / 2.0;\n let fcy = this._height / 2.0;\n let fcz = this._depth / 2.0;\n\n for (let ui = 0; ui < 3; ++ui) {\n this._origin[ui] =\n this._Cras[ui] -\n (this._Xras[ui] * this._spacingXYZ[0] * fcx +\n this._Yras[ui] * this._spacingXYZ[1] * fcy +\n this._Zras[ui] * this._spacingXYZ[2] * fcz);\n }\n\n // - sign to move to LPS space\n this._origin = [-this._origin[0], -this._origin[1], this._origin[2]];\n }\n\n seriesInstanceUID() {\n // use filename + timestamp..?\n return this._url;\n }\n\n numberOfFrames() {\n // AMI calls Z component frames, not T (_nframes)\n return this._depth;\n }\n\n sopInstanceUID(frameIndex = 0) {\n return frameIndex;\n }\n\n rows(frameIndex = 0) {\n return this._width;\n }\n\n columns(frameIndex = 0) {\n return this._height;\n }\n\n pixelType(frameIndex = 0) {\n // Return: 0 integer, 1 float\n switch (this._type) {\n case ParsersMgh.MRI_UCHAR:\n case ParsersMgh.MRI_INT:\n case ParsersMgh.MRI_SHORT:\n return 0;\n case ParsersMgh.MRI_FLOAT:\n return 1;\n default:\n throw Error('MGH/MGZ parser: Unknown _type. _type reports: ' + this._type);\n }\n }\n\n bitsAllocated(frameIndex = 0) {\n switch (this._type) {\n case ParsersMgh.MRI_UCHAR:\n return 8;\n case ParsersMgh.MRI_SHORT:\n return 16;\n case ParsersMgh.MRI_INT:\n case ParsersMgh.MRI_FLOAT:\n return 32;\n default:\n throw Error('MGH/MGZ parser: Unknown _type. _type reports: ' + this._type);\n }\n }\n\n pixelSpacing(frameIndex = 0) {\n return this._spacingXYZ;\n }\n\n imageOrientation(frameIndex = 0) {\n return this._imageOrient;\n }\n\n imagePosition(frameIndex = 0) {\n return this._origin;\n }\n\n extractPixelData(frameIndex = 0) {\n let sliceSize = this._width * this._height;\n return this._pixelData.slice(frameIndex * sliceSize, (frameIndex + 1) * sliceSize);\n }\n\n // signed int32\n _readInt(len = 1) {\n let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 4));\n this._bufferPos += len * 4;\n let v = undefined;\n if (len == 1) {\n v = tempBuff.getInt32(0, this._swapEndian);\n } else {\n v = new Int32Array(len);\n for (let i = 0; i < len; i++) {\n v[i] = tempBuff.getInt32(i * 4, this._swapEndian);\n }\n }\n return v;\n }\n\n // signed int16\n _readShort(len = 1) {\n let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 2));\n this._bufferPos += len * 2;\n let v = undefined;\n if (len == 1) {\n v = tempBuff.getInt16(0, this._swapEndian);\n } else {\n v = new Int16Array(len);\n for (let i = 0; i < len; i++) {\n v[i] = tempBuff.getInt16(i * 2, this._swapEndian);\n }\n }\n return v;\n }\n\n // signed int64\n _readLong(len = 1) {\n let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 8));\n this._bufferPos += len * 8;\n let v = new Uint16Array(len);\n for (let i = 0; i < len; i++) {\n /* DataView doesn't have Int64.\n * This work around based off Scalajs\n * (https://github.com/scala-js/scala-js/blob/master/library/src/main/scala/scala/scalajs/js/typedarray/DataViewExt.scala)\n * v[i]=tempBuff.getInt64(i*8,this._swapEndian);\n */\n let shiftHigh = 0;\n let shiftLow = 0;\n if (this._swapendian) {\n shiftHigh = 4;\n } else {\n shiftLow = 4;\n }\n let high = tempBuff.getInt32(i * 8 + shiftHigh, this._swapEndian);\n let low = tempBuff.getInt32(i * 8 + shiftLow, this._swapEndian);\n if (high != 0) {\n console.log('Unable to read Int64 with high word: ' + high + 'low word: ' + low);\n low = undefined;\n }\n v[i] = low;\n }\n if (len == 0) {\n return undefined;\n } else if (len == 1) {\n return v[0];\n } else {\n return v;\n }\n }\n\n // signed int8\n _readChar(len = 1) {\n let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len));\n this._bufferPos += len;\n let v = undefined;\n if (len == 1) {\n v = tempBuff.getInt8(0, this._swapEndian);\n } else {\n v = new Int8Array(len);\n for (let i = 0; i < len; i++) {\n v[i] = tempBuff.getInt8(i, this._swapEndian);\n }\n }\n return v;\n }\n\n // unsigned int8\n _readUChar(len = 1) {\n let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len));\n this._bufferPos += len;\n let v = undefined;\n if (len == 1) {\n v = tempBuff.getUint8(0, this._swapEndian);\n } else {\n v = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n v[i] = tempBuff.getUint8(i, this._swapEndian);\n }\n }\n return v;\n }\n\n // float32\n _readFloat(len = 1) {\n let tempBuff = new DataView(this._buffer.slice(this._bufferPos, this._bufferPos + len * 4));\n this._bufferPos += len * 4;\n let v = undefined;\n if (len == 1) {\n v = tempBuff.getFloat32(0, this._swapEndian);\n } else {\n v = new Float32Array(len);\n for (let i = 0; i < len; i++) {\n v[i] = tempBuff.getFloat32(i * 4, this._swapEndian);\n }\n }\n return v;\n }\n\n _tagReadStart() {\n if (this._bufferPos >= this._buffer.byteLength) {\n return [undefined, undefined];\n }\n let tagType = this._readInt();\n let tagLen = undefined;\n switch (tagType) {\n case ParsersMgh.TAG_OLD_MGH_XFORM:\n tagLen = this._readInt();\n tagLen -= 1;\n break;\n case ParsersMgh.TAG_OLD_SURF_GEOM:\n case ParsersMgh.TAG_OLD_USEREALRAS:\n case ParsersMgh.TAG_OLD_COLORTABLE:\n tagLen = 0;\n break;\n default:\n tagLen = this._readLong();\n }\n if (tagLen == undefined) {\n tagType = undefined;\n }\n return [tagType, tagLen];\n }\n}\n\n// https://github.com/freesurfer/freesurfer/\n// See include/mri.h\nParsersMgh.MRI_UCHAR = 0;\nParsersMgh.MRI_INT = 1;\nParsersMgh.MRI_LONG = 2;\nParsersMgh.MRI_FLOAT = 3;\nParsersMgh.MRI_SHORT = 4;\nParsersMgh.MRI_BITMAP = 5;\nParsersMgh.MRI_TENSOR = 6;\nParsersMgh.MRI_FLOAT_COMPLEX = 7;\nParsersMgh.MRI_DOUBLE_COMPLEX = 8;\nParsersMgh.MRI_RGB = 9;\n\n// https://github.com/freesurfer/freesurfer/\n// See include/tags.h\nParsersMgh.TAG_OLD_COLORTABLE = 1;\nParsersMgh.TAG_OLD_USEREALRAS = 2;\nParsersMgh.TAG_CMDLINE = 3;\nParsersMgh.TAG_USEREALRAS = 4;\nParsersMgh.TAG_COLORTABLE = 5;\nParsersMgh.TAG_GCAMORPH_GEOM = 10;\nParsersMgh.TAG_GCAMORPH_TYPE = 11;\nParsersMgh.TAG_GCAMORPH_LABELS = 12;\nParsersMgh.TAG_OLD_SURF_GEOM = 20;\nParsersMgh.TAG_SURF_GEOM = 21;\nParsersMgh.TAG_OLD_MGH_XFORM = 30;\nParsersMgh.TAG_MGH_XFORM = 31;\nParsersMgh.TAG_GROUP_AVG_SURFACE_AREA = 32;\nParsersMgh.TAG_AUTO_ALIGN = 33;\nParsersMgh.TAG_SCALAR_DOUBLE = 40;\nParsersMgh.TAG_PEDIR = 41;\nParsersMgh.TAG_MRI_FRAME = 42;\nParsersMgh.TAG_FIELDSTRENGTH = 43;\n","/** * Imports ***/\nimport ParsersVolume from './parsers.volume';\n\nimport { Vector3 } from 'three/src/math/Vector3';\n\n/**\n * @module parsers/mhd\n */\nexport default class ParsersMHD extends ParsersVolume {\n constructor(data, id) {\n super();\n\n /**\n * @member\n * @type {arraybuffer}\n */\n this._id = id;\n this._url = data.url;\n this._header = {};\n this._buffer = null;\n\n try {\n // parse header (mhd) data\n let lines = new TextDecoder().decode(data.mhdBuffer).split('\\n');\n lines.forEach(line => {\n let keyvalue = line.split('=');\n if (keyvalue.length === 2) {\n this._header[keyvalue[0].trim()] = keyvalue[1].trim();\n }\n });\n\n this._header.DimSize = this._header.DimSize.split(' ');\n this._header.ElementSpacing = this._header.ElementSpacing.split(' ');\n this._header.TransformMatrix = this._header.TransformMatrix.split(' ');\n this._header.Offset = this._header.Offset.split(' ');\n //\n this._buffer = data.rawBuffer;\n } catch (error) {\n window.console.log('ooops... :(');\n }\n }\n\n rightHanded() {\n let anatomicalOrientation = this._header.AnatomicalOrientation;\n if (\n anatomicalOrientation === 'RAS' ||\n anatomicalOrientation === 'RPI' ||\n anatomicalOrientation === 'LPS' ||\n anatomicalOrientation === 'LAI'\n ) {\n this._rightHanded = true;\n } else {\n this._rightHanded = false;\n }\n\n return this._rightHanded;\n }\n\n seriesInstanceUID() {\n // use filename + timestamp..?\n return this._url;\n }\n\n numberOfFrames() {\n return parseInt(this._header.DimSize[2], 10);\n }\n\n sopInstanceUID(frameIndex = 0) {\n return frameIndex;\n }\n\n rows(frameIndex = 0) {\n return parseInt(this._header.DimSize[1], 10);\n }\n\n columns(frameIndex = 0) {\n return parseInt(this._header.DimSize[0], 10);\n }\n\n pixelType(frameIndex = 0) {\n // 0 - int\n // 1 - float\n let type = 0;\n if (this._header.ElementType === 'MET_UFLOAT' || this._header.ElementType === 'MET_FLOAT') {\n type = 1;\n }\n return type;\n }\n\n bitsAllocated(frameIndex = 0) {\n let bitsAllocated = 1;\n\n if (this._header.ElementType === 'MET_UCHAR' || this._header.ElementType === 'MET_CHAR') {\n bitsAllocated = 8;\n } else if (\n this._header.ElementType === 'MET_USHORT' ||\n this._header.ElementType === 'MET_SHORT'\n ) {\n bitsAllocated = 16;\n } else if (\n this._header.ElementType === 'MET_UINT' ||\n this._header.ElementType === 'MET_INT' ||\n this._header.ElementType === 'MET_UFLOAT' ||\n this._header.ElementType === 'MET_FLOAT'\n ) {\n bitsAllocated = 32;\n }\n\n return bitsAllocated;\n }\n\n /**\n * https://itk.org/Wiki/ITK/MetaIO/Documentation\n * ElementSpacing[0] spacing between elements along X axis (i.e. column spacing)\n * ElementSpacing[1] spacing between elements along Y axis (i.e. row spacing)\n *\n * @param {*} frameIndex\n */\n pixelSpacing(frameIndex = 0) {\n let x = parseFloat(this._header.ElementSpacing[1], 10);\n let y = parseFloat(this._header.ElementSpacing[0], 10);\n let z = parseFloat(this._header.ElementSpacing[2], 10);\n return [x, y, z];\n }\n\n imageOrientation(frameIndex = 0) {\n let invertX = this._header.AnatomicalOrientation.match(/L/) ? -1 : 1;\n let invertY = this._header.AnatomicalOrientation.match(/P/) ? -1 : 1;\n\n let x = new Vector3(\n parseFloat(this._header.TransformMatrix[0]) * invertX,\n parseFloat(this._header.TransformMatrix[1]) * invertY,\n parseFloat(this._header.TransformMatrix[2])\n );\n x.normalize();\n\n let y = new Vector3(\n parseFloat(this._header.TransformMatrix[3]) * invertX,\n parseFloat(this._header.TransformMatrix[4]) * invertY,\n parseFloat(this._header.TransformMatrix[5])\n );\n y.normalize();\n\n return [x.x, x.y, x.z, y.x, y.y, y.z];\n }\n\n imagePosition(frameIndex = 0) {\n return [\n parseFloat(this._header.Offset[0]),\n parseFloat(this._header.Offset[1]),\n parseFloat(this._header.Offset[2]),\n ];\n }\n\n extractPixelData(frameIndex = 0) {\n return this._decompressUncompressed(frameIndex);\n }\n\n _decompressUncompressed(frameIndex = 0) {\n let buffer = this._buffer;\n let numberOfChannels = this.numberOfChannels();\n let numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels;\n if (!this.rightHanded()) {\n frameIndex = this.numberOfFrames() - 1 - frameIndex;\n }\n let frameOffset = frameIndex * numPixels;\n\n if (this._header.ElementType === 'MET_CHAR') {\n return new Int8Array(buffer, frameOffset, numPixels);\n } else if (this._header.ElementType === 'MET_UCHAR') {\n return new Uint8Array(buffer, frameOffset, numPixels);\n } else if (this._header.ElementType === 'MET_SHORT') {\n frameOffset = frameOffset * 2;\n return new Int16Array(buffer, frameOffset, numPixels);\n } else if (this._header.ElementType === 'MET_USHORT') {\n frameOffset = frameOffset * 2;\n return new Uint16Array(buffer, frameOffset, numPixels);\n } else if (this._header.ElementType === 'MET_INT') {\n frameOffset = frameOffset * 4;\n return new Int32Array(buffer, frameOffset, numPixels);\n } else if (this._header.ElementType === 'MET_UINT') {\n frameOffset = frameOffset * 4;\n return new Uint32Array(buffer, frameOffset, numPixels);\n } else if (this._header.ElementType === 'MET_FLOAT') {\n frameOffset = frameOffset * 4;\n return new Float32Array(buffer, frameOffset, numPixels);\n }\n }\n}\n","/** * Imports ***/\nimport ParsersVolume from './parsers.volume';\n\nimport NiftiReader from 'nifti-reader-js/src/nifti';\n\n/**\n * @module parsers/nifti\n */\nexport default class ParsersNifti extends ParsersVolume {\n constructor(data, id) {\n super();\n\n /**\n * @member\n * @type {arraybuffer}\n */\n this._id = id;\n this._arrayBuffer = data.buffer;\n this._url = data.url;\n this._dataSet = null;\n this._niftiHeader = null;\n this._niftiImage = null;\n this._ordered = true;\n this._orderedData = null;\n\n //\n this._qfac = 1.0;\n\n if (NiftiReader.isNIFTI(this._arrayBuffer)) {\n this._dataSet = NiftiReader.readHeader(this._arrayBuffer);\n this._niftiImage = NiftiReader.readImage(this._dataSet, this._arrayBuffer);\n } else {\n const error = new Error('parsers.nifti could not parse the file');\n throw error;\n }\n }\n\n seriesInstanceUID() {\n // use filename + timestamp..?\n return this._url;\n }\n\n numberOfFrames() {\n return this._dataSet.dims[3];\n }\n\n numberOfChannels() {\n let numberOfChannels = 1;\n\n // can dims[0] >= 5 and not multi channels with RGB datatypecode?\n\n if (this._dataSet.dims[0] >= 5) {\n numberOfChannels = this._dataSet.dims[5];\n this._ordered = false;\n } else if (this._dataSet.datatypeCode === 128) {\n numberOfChannels = 3;\n } else if (this._dataSet.datatypeCode === 2304) {\n numberOfChannels = 4;\n }\n\n return numberOfChannels;\n }\n\n sopInstanceUID(frameIndex = 0) {\n return frameIndex;\n }\n\n rows(frameIndex = 0) {\n return this._dataSet.dims[2];\n }\n\n columns(frameIndex = 0) {\n return this._dataSet.dims[1];\n }\n\n pixelType(frameIndex = 0) {\n // papaya.volume.nifti.NIFTI_TYPE_UINT8 = 2;\n // papaya.volume.nifti.NIFTI_TYPE_INT16 = 4;\n // papaya.volume.nifti.NIFTI_TYPE_INT32 = 8;\n // papaya.volume.nifti.NIFTI_TYPE_FLOAT32 = 16;\n // papaya.volume.nifti.NIFTI_TYPE_COMPLEX64 = 32;\n // papaya.volume.nifti.NIFTI_TYPE_FLOAT64 = 64;\n // papaya.volume.nifti.NIFTI_TYPE_RGB24 = 128;\n // papaya.volume.nifti.NIFTI_TYPE_INT8 = 256;\n // papaya.volume.nifti.NIFTI_TYPE_UINT16 = 512;\n // papaya.volume.nifti.NIFTI_TYPE_UINT32 = 768;\n // papaya.volume.nifti.NIFTI_TYPE_INT64 = 1024;\n // papaya.volume.nifti.NIFTI_TYPE_UINT64 = 1280;\n // papaya.volume.nifti.NIFTI_TYPE_FLOAT128 = 1536;\n // papaya.volume.nifti.NIFTI_TYPE_COMPLEX128 = 1792;\n // papaya.volume.nifti.NIFTI_TYPE_COMPLEX256 = 2048;\n\n // 0 integer, 1 float\n\n let pixelType = 0;\n if (\n this._dataSet.datatypeCode === 16 ||\n this._dataSet.datatypeCode === 64 ||\n this._dataSet.datatypeCode === 1536\n ) {\n pixelType = 1;\n }\n return pixelType;\n }\n\n bitsAllocated(frameIndex = 0) {\n return this._dataSet.numBitsPerVoxel;\n }\n\n pixelSpacing(frameIndex = 0) {\n return [this._dataSet.pixDims[1], this._dataSet.pixDims[2], this._dataSet.pixDims[3]];\n }\n\n sliceThickness() {\n // should be a string...\n return null; // this._dataSet.pixDims[3].toString();\n }\n\n imageOrientation(frameIndex = 0) {\n // http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1.h\n // http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c\n if (this._dataSet.qform_code > 0) {\n // METHOD 2 (used when qform_code > 0, which should be the \"normal\" case):\n // ---------------------------------------------------------------------\n // The (x,y,z) coordinates are given by the pixdim[] scales, a rotation\n // matrix, and a shift. This method is intended to represent\n // \"scanner-anatomical\" coordinates, which are often embedded in the\n // image header (e.g., DICOM fields (0020,0032), (0020,0037), (0028,0030),\n // and (0018,0050)), and represent the nominal orientation and location of\n // the data. This method can also be used to represent \"aligned\"\n // coordinates, which would typically result from some post-acquisition\n // alignment of the volume to a standard orientation (e.g., the same\n // subject on another day, or a rigid rotation to true anatomical\n // orientation from the tilted position of the subject in the scanner).\n // The formula for (x,y,z) in terms of header parameters and (i,j,k) is:\n\n // [ x ] [ R11 R12 R13 ] [ pixdim[1] * i ] [ qoffset_x ]\n // [ y ] = [ R21 R22 R23 ] [ pixdim[2] * j ] + [ qoffset_y ]\n // [ z ] [ R31 R32 R33 ] [ qfac * pixdim[3] * k ] [ qoffset_z ]\n\n // The qoffset_* shifts are in the NIFTI-1 header. Note that the center\n // of the (i,j,k)=(0,0,0) voxel (first value in the dataset array) is\n // just (x,y,z)=(qoffset_x,qoffset_y,qoffset_z).\n\n // The rotation matrix R is calculated from the quatern_* parameters.\n // This calculation is described below.\n\n // The scaling factor qfac is either 1 or -1. The rotation matrix R\n // defined by the quaternion parameters is \"proper\" (has determinant 1).\n // This may not fit the needs of the data; for example, if the image\n // grid is\n // i increases from Left-to-Right\n // j increases from Anterior-to-Posterior\n // k increases from Inferior-to-Superior\n // Then (i,j,k) is a left-handed triple. In this example, if qfac=1,\n // the R matrix would have to be\n\n // [ 1 0 0 ]\n // [ 0 -1 0 ] which is \"improper\" (determinant = -1).\n // [ 0 0 1 ]\n\n // If we set qfac=-1, then the R matrix would be\n\n // [ 1 0 0 ]\n // [ 0 -1 0 ] which is proper.\n // [ 0 0 -1 ]\n\n // This R matrix is represented by quaternion [a,b,c,d] = [0,1,0,0]\n // (which encodes a 180 degree rotation about the x-axis).\n // https://github.com/Kitware/ITK/blob/master/Modules/IO/NIFTI/src/itkNiftiImageIO.cxx\n let a = 0.0;\n let b = this._dataSet.quatern_b;\n let c = this._dataSet.quatern_c;\n let d = this._dataSet.quatern_d;\n // compute a\n a = 1.0 - (b * b + c * c + d * d);\n if (a < 0.0000001) {\n /* special case */\n\n a = 1.0 / Math.sqrt(b * b + c * c + d * d);\n b *= a;\n c *= a;\n d *= a; /* normalize (b,c,d) vector */\n a = 0.0; /* a = 0 ==> 180 degree rotation */\n } else {\n a = Math.sqrt(a); /* angle = 2*arccos(a) */\n }\n\n if (this._dataSet.pixDims[0] < 0.0) {\n this._rightHanded = false;\n }\n\n return [\n -(a * a + b * b - c * c - d * d),\n -2 * (b * c + a * d),\n 2 * (b * d - a * c),\n -2 * (b * c - a * d),\n -(a * a + c * c - b * b - d * d),\n 2 * (c * d + a * b),\n ];\n } else if (this._dataSet.sform_code > 0) {\n // METHOD 3 (used when sform_code > 0):\n // -----------------------------------\n // The (x,y,z) coordinates are given by a general affine transformation\n // of the (i,j,k) indexes:\n\n // x = srow_x[0] * i + srow_x[1] * j + srow_x[2] * k + srow_x[3]\n // y = srow_y[0] * i + srow_y[1] * j + srow_y[2] * k + srow_y[3]\n // z = srow_z[0] * i + srow_z[1] * j + srow_z[2] * k + srow_z[3]\n\n // The srow_* vectors are in the NIFTI_1 header. Note that no use is\n // made of pixdim[] in this method.\n const rowX = [\n -this._dataSet.affine[0][0],\n -this._dataSet.affine[0][1],\n this._dataSet.affine[0][2],\n ];\n const rowY = [\n -this._dataSet.affine[1][0],\n -this._dataSet.affine[1][1],\n this._dataSet.affine[0][2],\n ];\n return [...rowX, ...rowY];\n } else if (this._dataSet.qform_code === 0) {\n // METHOD 1 (the \"old\" way, used only when qform_code = 0):\n // -------------------------------------------------------\n // The coordinate mapping from (i,j,k) to (x,y,z) is the ANALYZE\n // 7.5 way. This is a simple scaling relationship:\n // x = pixdim[1] * i\n // y = pixdim[2] * j\n // z = pixdim[3] * k\n // No particular spatial orientation is attached to these (x,y,z)\n // coordinates. (NIFTI-1 does not have the ANALYZE 7.5 orient field,\n // which is not general and is often not set properly.) This method\n // is not recommended, and is present mainly for compatibility with\n // ANALYZE 7.5 files.\n }\n return [1, 0, 0, 0, 1, 0];\n }\n\n imagePosition(frameIndex = 0) {\n // qoffset is RAS\n return [-this._dataSet.qoffset_x, -this._dataSet.qoffset_y, this._dataSet.qoffset_z];\n }\n\n dimensionIndexValues(frameIndex = 0) {\n return null;\n }\n\n instanceNumber(frameIndex = 0) {\n return frameIndex;\n }\n\n windowCenter(frameIndex = 0) {\n // calc min and calc max\n return null;\n }\n\n windowWidth(frameIndex = 0) {\n // calc min and calc max\n return null;\n }\n\n rescaleSlope(frameIndex = 0) {\n return this._dataSet.scl_slope;\n }\n\n rescaleIntercept(frameIndex = 0) {\n return this._dataSet.scl_inter;\n }\n\n extractPixelData(frameIndex = 0) {\n return this._decompressUncompressed(frameIndex);\n }\n\n _decompressUncompressed(frameIndex = 0) {\n // papaya.volume.nifti.NIFTI_TYPE_UINT8 = 2;\n // papaya.volume.nifti.NIFTI_TYPE_INT16 = 4;\n // papaya.volume.nifti.NIFTI_TYPE_INT32 = 8;\n // papaya.volume.nifti.NIFTI_TYPE_FLOAT32 = 16;\n // papaya.volume.nifti.NIFTI_TYPE_COMPLEX64 = 32;\n // papaya.volume.nifti.NIFTI_TYPE_FLOAT64 = 64;\n // papaya.volume.nifti.NIFTI_TYPE_RGB24 = 128;\n // papaya.volume.nifti.NIFTI_TYPE_INT8 = 256;\n // papaya.volume.nifti.NIFTI_TYPE_UINT16 = 512;\n // papaya.volume.nifti.NIFTI_TYPE_UINT32 = 768;\n // papaya.volume.nifti.NIFTI_TYPE_INT64 = 1024;\n // papaya.volume.nifti.NIFTI_TYPE_UINT64 = 1280;\n // papaya.volume.nifti.NIFTI_TYPE_FLOAT128 = 1536;\n // papaya.volume.nifti.NIFTI_TYPE_COMPLEX128 = 1792;\n // papaya.volume.nifti.NIFTI_TYPE_COMPLEX256 = 2048;\n\n let numberOfChannels = this.numberOfChannels();\n let numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels;\n // if( !this.rightHanded() ){\n // frameIndex = this.numberOfFrames() - 1 - frameIndex;\n // }\n let frameOffset = frameIndex * numPixels;\n let buffer = this._niftiImage;\n\n // use bits allocated && pixel reprensentation too\n if (!this._ordered && this._orderedData === null) {\n // order then\n this._reorderData();\n }\n\n if (this._orderedData !== null) {\n // just a slice...\n return this._orderedData.slice(frameOffset, frameOffset + numPixels);\n } else if (this._dataSet.datatypeCode === 2) {\n // unsigned int 8 bit\n return new Uint8Array(buffer, frameOffset, numPixels);\n } else if (this._dataSet.datatypeCode === 256) {\n // signed int 8 bit\n return new Int8Array(buffer, frameOffset, numPixels);\n } else if (this._dataSet.datatypeCode === 512) {\n // unsigned int 16 bit\n frameOffset = frameOffset * 2;\n return new Uint16Array(buffer, frameOffset, numPixels);\n } else if (this._dataSet.datatypeCode === 4) {\n // signed int 16 bit\n frameOffset = frameOffset * 2;\n return new Int16Array(buffer, frameOffset, numPixels);\n } else if (this._dataSet.datatypeCode === 8) {\n // signed int 32 bit\n frameOffset = frameOffset * 4;\n return new Int32Array(buffer, frameOffset, numPixels);\n } else if (this._dataSet.datatypeCode === 16) {\n // signed float 32 bit\n frameOffset = frameOffset * 4;\n const data = new Float32Array(buffer, frameOffset, numPixels);\n for (let i = 0; i < data.length; i++) {\n if (data[i] === Infinity || data[i] === -Infinity) {\n data[i] = 0;\n }\n }\n return data;\n } else {\n window.console.warn(`Unknown data type: datatypeCode : ${this._dataSet.datatypeCode}`);\n }\n }\n\n _reorderData() {\n let numberOfChannels = this.numberOfChannels();\n let numPixels = this.rows() * this.columns() * numberOfChannels;\n let buffer = this._niftiImage;\n\n let totalNumPixels = numPixels * this.numberOfFrames();\n let tmp = null;\n this._orderedData = null;\n\n if (this._dataSet.datatypeCode === 2) {\n // unsigned 8 bit\n tmp = new Uint8Array(buffer, 0, totalNumPixels);\n this._orderedData = new Uint8Array(tmp.length);\n } else if (this._dataSet.datatypeCode === 256) {\n // signed 8 bit\n tmp = new Int8Array(buffer, 0, totalNumPixels);\n this._orderedData = new Int8Array(tmp.length);\n } else if (this._dataSet.datatypeCode === 512) {\n tmp = new Uint16Array(buffer, 0, totalNumPixels);\n this._orderedData = new Uint16Array(tmp.length);\n } else if (this._dataSet.datatypeCode === 4) {\n tmp = new Int16Array(buffer, 0, totalNumPixels);\n this._orderedData = new Int16Array(tmp.length);\n } else if (this._dataSet.datatypeCode === 16) {\n tmp = new Float32Array(buffer, 0, totalNumPixels);\n this._orderedData = new Float32Array(tmp.length);\n }\n\n // re-order pixels...\n let numPixels2 = tmp.length / 3;\n let rgbaIndex = 0;\n let rIndex = 0;\n let gIndex = numPixels2;\n let bIndex = numPixels2 * 2;\n\n for (let i = 0; i < numPixels2; i++) {\n this._orderedData[rgbaIndex++] = tmp[rIndex++]; // red\n this._orderedData[rgbaIndex++] = tmp[gIndex++]; // green\n this._orderedData[rgbaIndex++] = tmp[bIndex++]; // blue\n }\n\n this._ordered = true;\n }\n}\n","/** * Imports ***/\nimport ParsersVolume from './parsers.volume';\nimport { Vector3 } from 'three/src/math/Vector3';\n\nlet pako = require('pako');\nlet NrrdReader = require('nrrd-js');\n/**\n * @module parsers/nifti\n */\nexport default class ParsersNifti extends ParsersVolume {\n /**\n * Constructor\n *\n * @param {*} data\n * @param {*} id\n */\n constructor(data, id) {\n super();\n\n /**\n * @member\n * @type {arraybuffer}\n */\n this._id = id;\n this._arrayBuffer = data.buffer;\n this._url = data.url;\n this._dataSet = null;\n this._unpackedData = null;\n\n try {\n this._dataSet = NrrdReader.parse(this._arrayBuffer);\n } catch (error) {\n window.console.log('ooops... :(');\n }\n }\n\n /**\n * Is the data right-handed\n *\n * @return {*}\n */\n rightHanded() {\n if (\n this._dataSet.space.match(/^right-anterior-superior/) ||\n this._dataSet.space.match(/^left-posterior-superior/)\n ) {\n this._rightHanded = true;\n } else {\n this._rightHanded = false;\n }\n\n return this._rightHanded;\n }\n\n /**\n * Series instance UID\n *\n * @return {*}\n */\n seriesInstanceUID() {\n // use filename + timestamp..?\n return this._url;\n }\n\n /**\n * Number of frames\n *\n * @return {*}\n */\n numberOfFrames() {\n return this._dataSet.sizes[2];\n }\n\n /**\n * Number of channels\n *\n * @return {*}\n */\n numberOfChannels() {\n return 1;\n }\n\n /**\n * SOP instance UID\n *\n * @param {*} frameIndex\n *\n * @return {*}\n */\n sopInstanceUID(frameIndex = 0) {\n return frameIndex;\n }\n\n /**\n * Rows\n *\n * @param {*} frameIndex\n *\n * @return {*}\n */\n rows(frameIndex = 0) {\n return this._dataSet.sizes[1];\n }\n\n /**\n * Columns\n *\n * @param {*} frameIndex\n *\n * @return {*}\n */\n columns(frameIndex = 0) {\n return this._dataSet.sizes[0];\n }\n\n /**\n * Pixel type\n *\n * @param {*} frameIndex\n *\n * @return {*}\n */\n pixelType(frameIndex = 0) {\n // 0 - int\n // 1 - float\n let pixelType = 0;\n if (this._dataSet.type === 'float') {\n pixelType = 1;\n }\n return pixelType;\n }\n\n /**\n * Bits allocated\n *\n * @param {*} frameIndex\n *\n * @return {*}\n */\n bitsAllocated(frameIndex = 0) {\n let bitsAllocated = 1;\n\n if (\n this._dataSet.type === 'int8' ||\n this._dataSet.type === 'uint8' ||\n this._dataSet.type === 'char'\n ) {\n bitsAllocated = 8;\n } else if (\n this._dataSet.type === 'int16' ||\n this._dataSet.type === 'uint16' ||\n this._dataSet.type === 'short'\n ) {\n bitsAllocated = 16;\n } else if (\n this._dataSet.type === 'int32' ||\n this._dataSet.type === 'uint32' ||\n this._dataSet.type === 'float'\n ) {\n bitsAllocated = 32;\n }\n\n return bitsAllocated;\n }\n\n /**\n * Pixel spacing\n *\n * @param {*} frameIndex\n *\n * @return {*}\n */\n pixelSpacing(frameIndex = 0) {\n const x = new Vector3(\n this._dataSet.spaceDirections[0][0],\n this._dataSet.spaceDirections[0][1],\n this._dataSet.spaceDirections[0][2]\n );\n\n const y = new Vector3(\n this._dataSet.spaceDirections[1][0],\n this._dataSet.spaceDirections[1][1],\n this._dataSet.spaceDirections[1][2]\n );\n\n const z = new Vector3(\n this._dataSet.spaceDirections[2][0],\n this._dataSet.spaceDirections[2][1],\n this._dataSet.spaceDirections[2][2]\n );\n\n return [x.length(), y.length(), z.length()];\n }\n\n /**\n * Image orientation\n *\n * @param {*} frameIndex\n *\n * @return {*}\n */\n imageOrientation(frameIndex = 0) {\n let invertX = this._dataSet.space.match(/right/) ? -1 : 1;\n let invertY = this._dataSet.space.match(/anterior/) ? -1 : 1;\n\n let x = new Vector3(\n this._dataSet.spaceDirections[0][0] * invertX,\n this._dataSet.spaceDirections[0][1] * invertY,\n this._dataSet.spaceDirections[0][2]\n );\n x.normalize();\n\n let y = new Vector3(\n this._dataSet.spaceDirections[1][0] * invertX,\n this._dataSet.spaceDirections[1][1] * invertY,\n this._dataSet.spaceDirections[1][2]\n );\n y.normalize();\n\n return [x.x, x.y, x.z, y.x, y.y, y.z];\n }\n\n /**\n * Image position\n *\n * @param {*} frameIndex\n *\n * @return {*}\n */\n imagePosition(frameIndex = 0) {\n return [\n this._dataSet.spaceOrigin[0],\n this._dataSet.spaceOrigin[1],\n this._dataSet.spaceOrigin[2],\n ];\n }\n\n /**\n * Extract pixel data ffrom array buffer\n *\n * @param {*} frameIndex\n *\n * @return {*}\n */\n extractPixelData(frameIndex = 0) {\n return this._decompressUncompressed(frameIndex);\n }\n\n /**\n * Decompress data from uncompressed array buffer\n *\n * @param {*} frameIndex\n *\n * @return {*}\n */\n _decompressUncompressed(frameIndex = 0) {\n let buffer = this._dataSet.buffer;\n const numberOfChannels = this.numberOfChannels();\n const numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels;\n if (!this.rightHanded()) {\n frameIndex = this.numberOfFrames() - 1 - frameIndex;\n }\n let frameOffset = frameIndex * numPixels;\n\n // unpack data if needed\n if (this._unpackedData === null && this._dataSet.encoding === 'gzip') {\n let unpackedData = pako.inflate(this._dataSet.buffer);\n this._unpackedData = unpackedData.buffer;\n buffer = this._unpackedData;\n } else if (this._dataSet.encoding === 'gzip') {\n buffer = this._unpackedData;\n }\n\n if (this._dataSet.type === 'int8' || this._dataSet.type === 'char') {\n return new Int8Array(buffer, frameOffset, numPixels);\n } else if (this._dataSet.type === 'uint8') {\n return new Uint8Array(buffer, frameOffset, numPixels);\n } else if (this._dataSet.type === 'int16' || this._dataSet.type === 'short') {\n frameOffset = frameOffset * 2;\n return new Int16Array(buffer, frameOffset, numPixels);\n } else if (this._dataSet.type === 'uint16') {\n frameOffset = frameOffset * 2;\n return new Uint16Array(buffer, frameOffset, numPixels);\n } else if (this._dataSet.type === 'int32') {\n frameOffset = frameOffset * 4;\n return new Int32Array(buffer, frameOffset, numPixels);\n } else if (this._dataSet.type === 'uint32') {\n frameOffset = frameOffset * 4;\n return new Uint32Array(buffer, frameOffset, numPixels);\n } else if (this._dataSet.type === 'float') {\n frameOffset = frameOffset * 4;\n return new Float32Array(buffer, frameOffset, numPixels);\n }\n }\n}\n","/**\n * @module parsers/volume\n */\nexport default class ParsersVolume {\n constructor() {\n this._rightHanded = true;\n }\n\n pixelRepresentation() {\n return 0;\n }\n\n pixelPaddingValue(frameIndex = 0) {\n return null;\n }\n\n modality() {\n return 'unknown';\n }\n\n segmentationType() {\n return 'unknown';\n }\n\n segmentationSegments() {\n return [];\n }\n\n referencedSegmentNumber(frameIndex) {\n return -1;\n }\n\n rightHanded() {\n return this._rightHanded;\n }\n\n spacingBetweenSlices() {\n return null;\n }\n\n numberOfChannels() {\n return 1;\n }\n\n sliceThickness() {\n return null;\n }\n\n dimensionIndexValues(frameIndex = 0) {\n return null;\n }\n\n instanceNumber(frameIndex = 0) {\n return frameIndex;\n }\n\n windowCenter(frameIndex = 0) {\n return null;\n }\n\n windowWidth(frameIndex = 0) {\n return null;\n }\n\n rescaleSlope(frameIndex = 0) {\n return 1;\n }\n\n rescaleIntercept(frameIndex = 0) {\n return 0;\n }\n\n ultrasoundRegions(frameIndex = 0) {\n return [];\n }\n\n frameTime(frameIndex = 0) {\n return null;\n }\n\n _decompressUncompressed() {}\n\n // http://stackoverflow.com/questions/5320439/how-do-i-swap-endian-ness-byte-order-of-a-variable-in-javascript\n _swap16(val) {\n return ((val & 0xff) << 8) | ((val >> 8) & 0xff);\n }\n\n _swap32(val) {\n return (\n ((val & 0xff) << 24) | ((val & 0xff00) << 8) | ((val >> 8) & 0xff00) | ((val >> 24) & 0xff)\n );\n }\n\n invert() {\n return false;\n }\n\n /**\n * Get the transfer syntax UID.\n * @return {*}\n */\n transferSyntaxUID() {\n return 'no value provided';\n }\n\n /**\n * Get the study date.\n * @return {*}\n */\n studyDate() {\n return 'no value provided';\n }\n\n /**\n * Get the study desciption.\n * @return {*}\n */\n studyDescription() {\n return 'no value provided';\n }\n\n /**\n * Get the series date.\n * @return {*}\n */\n seriesDate() {\n return 'no value provided';\n }\n\n /**\n * Get the series desciption.\n * @return {*}\n */\n seriesDescription() {\n return 'no value provided';\n }\n \n /**\n * Get the raw Header.\n * @return {*}\n */\n rawHeader() {\n return 'no value provided';\n }\n\n /**\n * Get the patient ID.\n * @return {*}\n */\n patientID() {\n return 'no value provided';\n }\n\n /**\n * Get the patient name.\n * @return {*}\n */\n patientName() {\n return 'no value provided';\n }\n\n /**\n * Get the patient age.\n * @return {*}\n */\n patientAge() {\n return 'no value provided';\n }\n\n /**\n * Get the patient birthdate.\n * @return {*}\n */\n patientBirthdate() {\n return 'no value provided';\n }\n\n /**\n * Get the patient sex.\n * @return {*}\n */\n patientSex() {\n return 'no value provided';\n }\n\n /**\n * Get min/max values in array\n *\n * @param {*} pixelData\n *\n * @return {*}\n */\n minMaxPixelData(pixelData = []) {\n let minMax = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY];\n let numPixels = pixelData.length;\n for (let index = 0; index < numPixels; index++) {\n let spv = pixelData[index];\n minMax[0] = Math.min(minMax[0], spv);\n minMax[1] = Math.max(minMax[1], spv);\n }\n\n return minMax;\n }\n}\n","import Segmentation from './presets.segmentation';\nexport { Segmentation as SegmentationPreset };\n","const segmentationFs = {\n 0: { color: [0, 0, 0], opacity: 0, label: 'Unknown' },\n 1: { color: [70, 130, 180], opacity: 1, label: 'Left-Cerebral-Exterior' },\n 2: { color: [245, 245, 245], opacity: 1, label: 'Left-Cerebral-White-Matter' },\n 3: { color: [205, 62, 78], opacity: 1, label: 'Left-Cerebral-Cortex' },\n 4: { color: [120, 18, 134], opacity: 1, label: 'Left-Lateral-Ventricle' },\n 5: { color: [196, 58, 250], opacity: 1, label: 'Left-Inf-Lat-Vent' },\n 6: { color: [0, 148, 0], opacity: 1, label: 'Left-Cerebellum-Exterior' },\n 7: { color: [220, 248, 164], opacity: 1, label: 'Left-Cerebellum-White-Matter' },\n 8: { color: [230, 148, 34], opacity: 1, label: 'Left-Cerebellum-Cortex' },\n 9: { color: [0, 118, 14], opacity: 1, label: 'Left-Thalamus' },\n 10: { color: [0, 118, 14], opacity: 1, label: 'Left-Thalamus-Proper' },\n 11: { color: [122, 186, 220], opacity: 1, label: 'Left-Caudate' },\n 12: { color: [236, 13, 176], opacity: 1, label: 'Left-Putamen' },\n 13: { color: [12, 48, 255], opacity: 1, label: 'Left-Pallidum' },\n 14: { color: [204, 182, 142], opacity: 1, label: '3rd-Ventricle' },\n 15: { color: [42, 204, 164], opacity: 1, label: '4th-Ventricle' },\n 16: { color: [119, 159, 176], opacity: 1, label: 'Brain-Stem' },\n 17: { color: [220, 216, 20], opacity: 1, label: 'Left-Hippocampus' },\n 18: { color: [103, 255, 255], opacity: 1, label: 'Left-Amygdala' },\n 19: { color: [80, 196, 98], opacity: 1, label: 'Left-Insula' },\n 20: { color: [60, 58, 210], opacity: 1, label: 'Left-Operculum' },\n 21: { color: [60, 58, 210], opacity: 1, label: 'Line-1' },\n 22: { color: [60, 58, 210], opacity: 1, label: 'Line-2' },\n 23: { color: [60, 58, 210], opacity: 1, label: 'Line-3' },\n 24: { color: [60, 60, 60], opacity: 1, label: 'CSF' },\n 25: { color: [255, 165, 0], opacity: 1, label: 'Left-Lesion' },\n 26: { color: [255, 165, 0], opacity: 1, label: 'Left-Accumbens-area' },\n 27: { color: [0, 255, 127], opacity: 1, label: 'Left-Substancia-Nigra' },\n 28: { color: [165, 42, 42], opacity: 1, label: 'Left-VentralDC' },\n 29: { color: [135, 206, 235], opacity: 1, label: 'Left-undetermined' },\n 30: { color: [160, 32, 240], opacity: 1, label: 'Left-vessel' },\n 31: { color: [0, 200, 200], opacity: 1, label: 'Left-choroid-plexus' },\n 32: { color: [100, 50, 100], opacity: 1, label: 'Left-F3orb' },\n 33: { color: [135, 50, 74], opacity: 1, label: 'Left-lOg' },\n 34: { color: [122, 135, 50], opacity: 1, label: 'Left-aOg' },\n 35: { color: [51, 50, 135], opacity: 1, label: 'Left-mOg' },\n 36: { color: [74, 155, 60], opacity: 1, label: 'Left-pOg' },\n 37: { color: [120, 62, 43], opacity: 1, label: 'Left-Stellate' },\n 38: { color: [74, 155, 60], opacity: 1, label: 'Left-Porg' },\n 39: { color: [122, 135, 50], opacity: 1, label: 'Left-Aorg' },\n 40: { color: [70, 130, 180], opacity: 1, label: 'Right-Cerebral-Exterior' },\n 41: { color: [245, 245, 245], opacity: 1, label: 'Right-Cerebral-White-Matter' },\n 42: { color: [205, 62, 78], opacity: 1, label: 'Right-Cerebral-Cortex' },\n 43: { color: [120, 18, 134], opacity: 1, label: 'Right-Lateral-Ventricle' },\n 44: { color: [196, 58, 250], opacity: 1, label: 'Right-Inf-Lat-Vent' },\n 45: { color: [0, 148, 0], opacity: 1, label: 'Right-Cerebellum-Exterior' },\n 46: { color: [220, 248, 164], opacity: 1, label: 'Right-Cerebellum-White-Matter' },\n 47: { color: [230, 148, 34], opacity: 1, label: 'Right-Cerebellum-Cortex' },\n 48: { color: [0, 118, 14], opacity: 1, label: 'Right-Thalamus' },\n 49: { color: [0, 118, 14], opacity: 1, label: 'Right-Thalamus-Proper' },\n 50: { color: [122, 186, 220], opacity: 1, label: 'Right-Caudate' },\n 51: { color: [236, 13, 176], opacity: 1, label: 'Right-Putamen' },\n 52: { color: [13, 48, 255], opacity: 1, label: 'Right-Pallidum' },\n 53: { color: [220, 216, 20], opacity: 1, label: 'Right-Hippocampus' },\n 54: { color: [103, 255, 255], opacity: 1, label: 'Right-Amygdala' },\n 55: { color: [80, 196, 98], opacity: 1, label: 'Right-Insula' },\n 56: { color: [60, 58, 210], opacity: 1, label: 'Right-Operculum' },\n 57: { color: [255, 165, 0], opacity: 1, label: 'Right-Lesion' },\n 58: { color: [255, 165, 0], opacity: 1, label: 'Right-Accumbens-area' },\n 59: { color: [0, 255, 127], opacity: 1, label: 'Right-Substancia-Nigra' },\n 60: { color: [165, 42, 42], opacity: 1, label: 'Right-VentralDC' },\n 61: { color: [135, 206, 235], opacity: 1, label: 'Right-undetermined' },\n 62: { color: [160, 32, 240], opacity: 1, label: 'Right-vessel' },\n 63: { color: [0, 200, 221], opacity: 1, label: 'Right-choroid-plexus' },\n 64: { color: [100, 50, 100], opacity: 1, label: 'Right-F3orb' },\n 65: { color: [135, 50, 74], opacity: 1, label: 'Right-lOg' },\n 66: { color: [122, 135, 50], opacity: 1, label: 'Right-aOg' },\n 67: { color: [51, 50, 135], opacity: 1, label: 'Right-mOg' },\n 68: { color: [74, 155, 60], opacity: 1, label: 'Right-pOg' },\n 69: { color: [120, 62, 43], opacity: 1, label: 'Right-Stellate' },\n 70: { color: [74, 155, 60], opacity: 1, label: 'Right-Porg' },\n 71: { color: [122, 135, 50], opacity: 1, label: 'Right-Aorg' },\n 72: { color: [120, 190, 150], opacity: 1, label: '5th-Ventricle' },\n 73: { color: [122, 135, 50], opacity: 1, label: 'Left-Interior' },\n 74: { color: [122, 135, 50], opacity: 1, label: 'Right-Interior' },\n 77: { color: [200, 70, 255], opacity: 1, label: 'WM-hypointensities' },\n 78: { color: [255, 148, 10], opacity: 1, label: 'Left-WM-hypointensities' },\n 79: { color: [255, 148, 10], opacity: 1, label: 'Right-WM-hypointensities' },\n 80: { color: [164, 108, 226], opacity: 1, label: 'non-WM-hypointensities' },\n 81: { color: [164, 108, 226], opacity: 1, label: 'Left-non-WM-hypointensities' },\n 82: { color: [164, 108, 226], opacity: 1, label: 'Right-non-WM-hypointensities' },\n 83: { color: [255, 218, 185], opacity: 1, label: 'Left-F1' },\n 84: { color: [255, 218, 185], opacity: 1, label: 'Right-F1' },\n 85: { color: [234, 169, 30], opacity: 1, label: 'Optic-Chiasm' },\n 192: { color: [250, 255, 50], opacity: 1, label: 'Corpus_Callosum' },\n 86: { color: [200, 120, 255], opacity: 1, label: 'Left_future_WMSA' },\n 87: { color: [200, 121, 255], opacity: 1, label: 'Right_future_WMSA' },\n 88: { color: [200, 122, 255], opacity: 1, label: 'future_WMSA' },\n 96: { color: [205, 10, 125], opacity: 1, label: 'Left-Amygdala-Anterior' },\n 97: { color: [205, 10, 125], opacity: 1, label: 'Right-Amygdala-Anterior' },\n 98: { color: [160, 32, 240], opacity: 1, label: 'Dura' },\n 100: { color: [124, 140, 178], opacity: 1, label: 'Left-wm-intensity-abnormality' },\n 101: { color: [125, 140, 178], opacity: 1, label: 'Left-caudate-intensity-abnormality' },\n 102: { color: [126, 140, 178], opacity: 1, label: 'Left-putamen-intensity-abnormality' },\n 103: { color: [127, 140, 178], opacity: 1, label: 'Left-accumbens-intensity-abnormality' },\n 104: { color: [124, 141, 178], opacity: 1, label: 'Left-pallidum-intensity-abnormality' },\n 105: { color: [124, 142, 178], opacity: 1, label: 'Left-amygdala-intensity-abnormality' },\n 106: { color: [124, 143, 178], opacity: 1, label: 'Left-hippocampus-intensity-abnormality' },\n 107: { color: [124, 144, 178], opacity: 1, label: 'Left-thalamus-intensity-abnormality' },\n 108: { color: [124, 140, 179], opacity: 1, label: 'Left-VDC-intensity-abnormality' },\n 109: { color: [124, 140, 178], opacity: 1, label: 'Right-wm-intensity-abnormality' },\n 110: { color: [125, 140, 178], opacity: 1, label: 'Right-caudate-intensity-abnormality' },\n 111: { color: [126, 140, 178], opacity: 1, label: 'Right-putamen-intensity-abnormality' },\n 112: { color: [127, 140, 178], opacity: 1, label: 'Right-accumbens-intensity-abnormality' },\n 113: { color: [124, 141, 178], opacity: 1, label: 'Right-pallidum-intensity-abnormality' },\n 114: { color: [124, 142, 178], opacity: 1, label: 'Right-amygdala-intensity-abnormality' },\n 115: { color: [124, 143, 178], opacity: 1, label: 'Right-hippocampus-intensity-abnormality' },\n 116: { color: [124, 144, 178], opacity: 1, label: 'Right-thalamus-intensity-abnormality' },\n 117: { color: [124, 140, 179], opacity: 1, label: 'Right-VDC-intensity-abnormality' },\n 118: { color: [255, 20, 147], opacity: 1, label: 'Epidermis' },\n 119: { color: [205, 179, 139], opacity: 1, label: 'Conn-Tissue' },\n 120: { color: [238, 238, 209], opacity: 1, label: 'SC-Fat-Muscle' },\n 121: { color: [200, 200, 200], opacity: 1, label: 'Cranium' },\n 122: { color: [74, 255, 74], opacity: 1, label: 'CSF-SA' },\n 123: { color: [238, 0, 0], opacity: 1, label: 'Muscle' },\n 124: { color: [0, 0, 139], opacity: 1, label: 'Ear' },\n 125: { color: [173, 255, 47], opacity: 1, label: 'Adipose' },\n 126: { color: [133, 203, 229], opacity: 1, label: 'Spinal-Cord' },\n 127: { color: [26, 237, 57], opacity: 1, label: 'Soft-Tissue' },\n 128: { color: [34, 139, 34], opacity: 1, label: 'Nerve' },\n 129: { color: [30, 144, 255], opacity: 1, label: 'Bone' },\n 130: { color: [147, 19, 173], opacity: 1, label: 'Air' },\n 131: { color: [238, 59, 59], opacity: 1, label: 'Orbital-Fat' },\n 132: { color: [221, 39, 200], opacity: 1, label: 'Tongue' },\n 133: { color: [238, 174, 238], opacity: 1, label: 'Nasal-Structures' },\n 134: { color: [255, 0, 0], opacity: 1, label: 'Globe' },\n 135: { color: [72, 61, 139], opacity: 1, label: 'Teeth' },\n 136: { color: [21, 39, 132], opacity: 1, label: 'Left-Caudate-Putamen' },\n 137: { color: [21, 39, 132], opacity: 1, label: 'Right-Caudate-Putamen' },\n 138: { color: [65, 135, 20], opacity: 1, label: 'Left-Claustrum' },\n 139: { color: [65, 135, 20], opacity: 1, label: 'Right-Claustrum' },\n 140: { color: [134, 4, 160], opacity: 1, label: 'Cornea' },\n 142: { color: [221, 226, 68], opacity: 1, label: 'Diploe' },\n 143: { color: [255, 255, 254], opacity: 1, label: 'Vitreous-Humor' },\n 144: { color: [52, 209, 226], opacity: 1, label: 'Lens' },\n 145: { color: [239, 160, 223], opacity: 1, label: 'Aqueous-Humor' },\n 146: { color: [70, 130, 180], opacity: 1, label: 'Outer-Table' },\n 147: { color: [70, 130, 181], opacity: 1, label: 'Inner-Table' },\n 148: { color: [139, 121, 94], opacity: 1, label: 'Periosteum' },\n 149: { color: [224, 224, 224], opacity: 1, label: 'Endosteum' },\n 150: { color: [255, 0, 0], opacity: 1, label: 'R-C-S' },\n 151: { color: [205, 205, 0], opacity: 1, label: 'Iris' },\n 152: { color: [238, 238, 209], opacity: 1, label: 'SC-Adipose-Muscle' },\n 153: { color: [139, 121, 94], opacity: 1, label: 'SC-Tissue' },\n 154: { color: [238, 59, 59], opacity: 1, label: 'Orbital-Adipose' },\n 155: { color: [238, 59, 59], opacity: 1, label: 'Left-IntCapsule-Ant' },\n 156: { color: [238, 59, 59], opacity: 1, label: 'Right-IntCapsule-Ant' },\n 157: { color: [62, 10, 205], opacity: 1, label: 'Left-IntCapsule-Pos' },\n 158: { color: [62, 10, 205], opacity: 1, label: 'Right-IntCapsule-Pos' },\n 159: { color: [0, 118, 14], opacity: 1, label: 'Left-Cerebral-WM-unmyelinated' },\n 160: { color: [0, 118, 14], opacity: 1, label: 'Right-Cerebral-WM-unmyelinated' },\n 161: { color: [220, 216, 21], opacity: 1, label: 'Left-Cerebral-WM-myelinated' },\n 162: { color: [220, 216, 21], opacity: 1, label: 'Right-Cerebral-WM-myelinated' },\n 163: { color: [122, 186, 220], opacity: 1, label: 'Left-Subcortical-Gray-Matter' },\n 164: { color: [122, 186, 220], opacity: 1, label: 'Right-Subcortical-Gray-Matter' },\n 165: { color: [120, 120, 120], opacity: 1, label: 'Skull' },\n 166: { color: [14, 48, 255], opacity: 1, label: 'Posterior-fossa' },\n 167: { color: [166, 42, 42], opacity: 1, label: 'Scalp' },\n 168: { color: [121, 18, 134], opacity: 1, label: 'Hematoma' },\n 169: { color: [236, 13, 127], opacity: 1, label: 'Left-Basal-Ganglia' },\n 176: { color: [236, 13, 126], opacity: 1, label: 'Right-Basal-Ganglia' },\n 170: { color: [119, 159, 176], opacity: 1, label: 'brainstem' },\n 171: { color: [119, 0, 176], opacity: 1, label: 'DCG' },\n 172: { color: [119, 100, 176], opacity: 1, label: 'Vermis' },\n 173: { color: [242, 104, 76], opacity: 1, label: 'Midbrain' },\n 174: { color: [206, 195, 58], opacity: 1, label: 'Pons' },\n 175: { color: [119, 159, 176], opacity: 1, label: 'Medulla' },\n 177: { color: [119, 50, 176], opacity: 1, label: 'Vermis-White-Matter' },\n 178: { color: [142, 182, 0], opacity: 1, label: 'SCP' },\n 179: { color: [19, 100, 176], opacity: 1, label: 'Floculus' },\n 180: { color: [73, 61, 139], opacity: 1, label: 'Left-Cortical-Dysplasia' },\n 181: { color: [73, 62, 139], opacity: 1, label: 'Right-Cortical-Dysplasia' },\n 182: { color: [10, 100, 176], opacity: 1, label: 'CblumNodulus' },\n 193: { color: [0, 196, 255], opacity: 1, label: 'Left-hippocampal_fissure' },\n 194: { color: [255, 164, 164], opacity: 1, label: 'Left-CADG-head' },\n 195: { color: [196, 196, 0], opacity: 1, label: 'Left-subiculum' },\n 196: { color: [0, 100, 255], opacity: 1, label: 'Left-fimbria' },\n 197: { color: [128, 196, 164], opacity: 1, label: 'Right-hippocampal_fissure' },\n 198: { color: [0, 126, 75], opacity: 1, label: 'Right-CADG-head' },\n 199: { color: [128, 96, 64], opacity: 1, label: 'Right-subiculum' },\n 200: { color: [0, 50, 128], opacity: 1, label: 'Right-fimbria' },\n 201: { color: [255, 204, 153], opacity: 1, label: 'alveus' },\n 202: { color: [255, 128, 128], opacity: 1, label: 'perforant_pathway' },\n 203: { color: [255, 255, 0], opacity: 1, label: 'parasubiculum' },\n 204: { color: [64, 0, 64], opacity: 1, label: 'presubiculum' },\n 205: { color: [0, 0, 255], opacity: 1, label: 'subiculum' },\n 206: { color: [255, 0, 0], opacity: 1, label: 'CA1' },\n 207: { color: [128, 128, 255], opacity: 1, label: 'CA2' },\n 208: { color: [0, 128, 0], opacity: 1, label: 'CA3' },\n 209: { color: [196, 160, 128], opacity: 1, label: 'CA4' },\n 210: { color: [32, 200, 255], opacity: 1, label: 'GC-DG' },\n 211: { color: [128, 255, 128], opacity: 1, label: 'HATA' },\n 212: { color: [204, 153, 204], opacity: 1, label: 'fimbria' },\n 213: { color: [121, 17, 136], opacity: 1, label: 'lateral_ventricle' },\n 214: { color: [128, 0, 0], opacity: 1, label: 'molecular_layer_HP' },\n 215: { color: [128, 32, 255], opacity: 1, label: 'hippocampal_fissure' },\n 216: { color: [255, 204, 102], opacity: 1, label: 'entorhinal_cortex' },\n 217: { color: [128, 128, 128], opacity: 1, label: 'molecular_layer_subiculum' },\n 218: { color: [104, 255, 255], opacity: 1, label: 'Amygdala' },\n 219: { color: [0, 226, 0], opacity: 1, label: 'Cerebral_White_Matter' },\n 220: { color: [205, 63, 78], opacity: 1, label: 'Cerebral_Cortex' },\n 221: { color: [197, 58, 250], opacity: 1, label: 'Inf_Lat_Vent' },\n 222: { color: [33, 150, 250], opacity: 1, label: 'Perirhinal' },\n 223: { color: [226, 0, 0], opacity: 1, label: 'Cerebral_White_Matter_Edge' },\n 224: { color: [100, 100, 100], opacity: 1, label: 'Background' },\n 225: { color: [197, 150, 250], opacity: 1, label: 'Ectorhinal' },\n 226: { color: [170, 170, 255], opacity: 1, label: 'HP_tail' },\n 250: { color: [255, 0, 0], opacity: 1, label: 'Fornix' },\n 251: { color: [0, 0, 64], opacity: 1, label: 'CC_Posterior' },\n 252: { color: [0, 0, 112], opacity: 1, label: 'CC_Mid_Posterior' },\n 253: { color: [0, 0, 160], opacity: 1, label: 'CC_Central' },\n 254: { color: [0, 0, 208], opacity: 1, label: 'CC_Mid_Anterior' },\n 255: { color: [0, 0, 255], opacity: 1, label: 'CC_Anterior' },\n 256: { color: [0, 0, 0], opacity: 1, label: 'Voxel-Unchanged' },\n 257: { color: [60, 60, 60], opacity: 1, label: 'CSF-ExtraCerebral' },\n 258: { color: [150, 150, 200], opacity: 1, label: 'Head-ExtraCerebral' },\n 259: { color: [120, 120, 120], opacity: 1, label: 'SkullApprox' },\n 260: { color: [119, 159, 176], opacity: 1, label: 'BoneOrAir' },\n 261: { color: [120, 18, 134], opacity: 1, label: 'PossibleFluid' },\n 262: { color: [119, 159, 176], opacity: 1, label: 'Sinus' },\n 263: { color: [119, 159, 176], opacity: 1, label: 'Left-Eustachian' },\n 264: { color: [119, 159, 176], opacity: 1, label: 'Right-Eustachian' },\n 331: { color: [255, 0, 0], opacity: 1, label: 'Aorta' },\n 332: { color: [255, 80, 0], opacity: 1, label: 'Left-Common-IliacA' },\n 333: { color: [255, 160, 0], opacity: 1, label: 'Right-Common-IliacA' },\n 334: { color: [255, 255, 0], opacity: 1, label: 'Left-External-IliacA' },\n 335: { color: [0, 255, 0], opacity: 1, label: 'Right-External-IliacA' },\n 336: { color: [255, 0, 160], opacity: 1, label: 'Left-Internal-IliacA' },\n 337: { color: [255, 0, 255], opacity: 1, label: 'Right-Internal-IliacA' },\n 338: { color: [255, 50, 80], opacity: 1, label: 'Left-Lateral-SacralA' },\n 339: { color: [80, 255, 50], opacity: 1, label: 'Right-Lateral-SacralA' },\n 340: { color: [160, 255, 50], opacity: 1, label: 'Left-ObturatorA' },\n 341: { color: [160, 200, 255], opacity: 1, label: 'Right-ObturatorA' },\n 342: { color: [0, 255, 160], opacity: 1, label: 'Left-Internal-PudendalA' },\n 343: { color: [0, 0, 255], opacity: 1, label: 'Right-Internal-PudendalA' },\n 344: { color: [80, 50, 255], opacity: 1, label: 'Left-UmbilicalA' },\n 345: { color: [160, 0, 255], opacity: 1, label: 'Right-UmbilicalA' },\n 346: { color: [255, 210, 0], opacity: 1, label: 'Left-Inf-RectalA' },\n 347: { color: [0, 160, 255], opacity: 1, label: 'Right-Inf-RectalA' },\n 348: { color: [255, 200, 80], opacity: 1, label: 'Left-Common-IliacV' },\n 349: { color: [255, 200, 160], opacity: 1, label: 'Right-Common-IliacV' },\n 350: { color: [255, 80, 200], opacity: 1, label: 'Left-External-IliacV' },\n 351: { color: [255, 160, 200], opacity: 1, label: 'Right-External-IliacV' },\n 352: { color: [30, 255, 80], opacity: 1, label: 'Left-Internal-IliacV' },\n 353: { color: [80, 200, 255], opacity: 1, label: 'Right-Internal-IliacV' },\n 354: { color: [80, 255, 200], opacity: 1, label: 'Left-ObturatorV' },\n 355: { color: [195, 255, 200], opacity: 1, label: 'Right-ObturatorV' },\n 356: { color: [120, 200, 20], opacity: 1, label: 'Left-Internal-PudendalV' },\n 357: { color: [170, 10, 200], opacity: 1, label: 'Right-Internal-PudendalV' },\n 358: { color: [20, 130, 180], opacity: 1, label: 'Pos-Lymph' },\n 359: { color: [20, 180, 130], opacity: 1, label: 'Neg-Lymph' },\n 400: { color: [206, 62, 78], opacity: 1, label: 'V1' },\n 401: { color: [121, 18, 134], opacity: 1, label: 'V2' },\n 402: { color: [199, 58, 250], opacity: 1, label: 'BA44' },\n 403: { color: [1, 148, 0], opacity: 1, label: 'BA45' },\n 404: { color: [221, 248, 164], opacity: 1, label: 'BA4a' },\n 405: { color: [231, 148, 34], opacity: 1, label: 'BA4p' },\n 406: { color: [1, 118, 14], opacity: 1, label: 'BA6' },\n 407: { color: [120, 118, 14], opacity: 1, label: 'BA2' },\n 408: { color: [123, 186, 221], opacity: 1, label: 'BA1_old' },\n 409: { color: [238, 13, 177], opacity: 1, label: 'BAun2' },\n 410: { color: [123, 186, 220], opacity: 1, label: 'BA1' },\n 411: { color: [138, 13, 206], opacity: 1, label: 'BA2b' },\n 412: { color: [238, 130, 176], opacity: 1, label: 'BA3a' },\n 413: { color: [218, 230, 76], opacity: 1, label: 'BA3b' },\n 414: { color: [38, 213, 176], opacity: 1, label: 'MT' },\n 415: { color: [1, 225, 176], opacity: 1, label: 'AIPS_AIP_l' },\n 416: { color: [1, 225, 176], opacity: 1, label: 'AIPS_AIP_r' },\n 417: { color: [200, 2, 100], opacity: 1, label: 'AIPS_VIP_l' },\n 418: { color: [200, 2, 100], opacity: 1, label: 'AIPS_VIP_r' },\n 419: { color: [5, 200, 90], opacity: 1, label: 'IPL_PFcm_l' },\n 420: { color: [5, 200, 90], opacity: 1, label: 'IPL_PFcm_r' },\n 421: { color: [100, 5, 200], opacity: 1, label: 'IPL_PF_l' },\n 422: { color: [25, 255, 100], opacity: 1, label: 'IPL_PFm_l' },\n 423: { color: [25, 255, 100], opacity: 1, label: 'IPL_PFm_r' },\n 424: { color: [230, 7, 100], opacity: 1, label: 'IPL_PFop_l' },\n 425: { color: [230, 7, 100], opacity: 1, label: 'IPL_PFop_r' },\n 426: { color: [100, 5, 200], opacity: 1, label: 'IPL_PF_r' },\n 427: { color: [150, 10, 200], opacity: 1, label: 'IPL_PFt_l' },\n 428: { color: [150, 10, 200], opacity: 1, label: 'IPL_PFt_r' },\n 429: { color: [175, 10, 176], opacity: 1, label: 'IPL_PGa_l' },\n 430: { color: [175, 10, 176], opacity: 1, label: 'IPL_PGa_r' },\n 431: { color: [10, 100, 255], opacity: 1, label: 'IPL_PGp_l' },\n 432: { color: [10, 100, 255], opacity: 1, label: 'IPL_PGp_r' },\n 433: { color: [150, 45, 70], opacity: 1, label: 'Visual_V3d_l' },\n 434: { color: [150, 45, 70], opacity: 1, label: 'Visual_V3d_r' },\n 435: { color: [45, 200, 15], opacity: 1, label: 'Visual_V4_l' },\n 436: { color: [45, 200, 15], opacity: 1, label: 'Visual_V4_r' },\n 437: { color: [227, 45, 100], opacity: 1, label: 'Visual_V5_b' },\n 438: { color: [227, 45, 100], opacity: 1, label: 'Visual_VP_l' },\n 439: { color: [227, 45, 100], opacity: 1, label: 'Visual_VP_r' },\n 498: { color: [143, 188, 143], opacity: 1, label: 'wmsa' },\n 499: { color: [255, 248, 220], opacity: 1, label: 'other_wmsa' },\n 500: { color: [17, 85, 136], opacity: 1, label: 'right_CA2_3' },\n 501: { color: [119, 187, 102], opacity: 1, label: 'right_alveus' },\n 502: { color: [204, 68, 34], opacity: 1, label: 'right_CA1' },\n 503: { color: [204, 0, 255], opacity: 1, label: 'right_fimbria' },\n 504: { color: [221, 187, 17], opacity: 1, label: 'right_presubiculum' },\n 505: { color: [153, 221, 238], opacity: 1, label: 'right_hippocampal_fissure' },\n 506: { color: [51, 17, 17], opacity: 1, label: 'right_CA4_DG' },\n 507: { color: [0, 119, 85], opacity: 1, label: 'right_subiculum' },\n 508: { color: [20, 100, 200], opacity: 1, label: 'right_fornix' },\n 550: { color: [17, 85, 137], opacity: 1, label: 'left_CA2_3' },\n 551: { color: [119, 187, 103], opacity: 1, label: 'left_alveus' },\n 552: { color: [204, 68, 35], opacity: 1, label: 'left_CA1' },\n 553: { color: [204, 0, 254], opacity: 1, label: 'left_fimbria' },\n 554: { color: [221, 187, 16], opacity: 1, label: 'left_presubiculum' },\n 555: { color: [153, 221, 239], opacity: 1, label: 'left_hippocampal_fissure' },\n 556: { color: [51, 17, 18], opacity: 1, label: 'left_CA4_DG' },\n 557: { color: [0, 119, 86], opacity: 1, label: 'left_subiculum' },\n 558: { color: [20, 100, 201], opacity: 1, label: 'left_fornix' },\n 600: { color: [254, 254, 254], opacity: 1, label: 'Tumor' },\n 601: { color: [70, 130, 180], opacity: 1, label: 'Cbm_Left_I_IV' },\n 602: { color: [245, 245, 245], opacity: 1, label: 'Cbm_Right_I_IV' },\n 603: { color: [205, 62, 78], opacity: 1, label: 'Cbm_Left_V' },\n 604: { color: [120, 18, 134], opacity: 1, label: 'Cbm_Right_V' },\n 605: { color: [196, 58, 250], opacity: 1, label: 'Cbm_Left_VI' },\n 606: { color: [0, 148, 0], opacity: 1, label: 'Cbm_Vermis_VI' },\n 607: { color: [220, 248, 164], opacity: 1, label: 'Cbm_Right_VI' },\n 608: { color: [230, 148, 34], opacity: 1, label: 'Cbm_Left_CrusI' },\n 609: { color: [0, 118, 14], opacity: 1, label: 'Cbm_Vermis_CrusI' },\n 610: { color: [0, 118, 14], opacity: 1, label: 'Cbm_Right_CrusI' },\n 611: { color: [122, 186, 220], opacity: 1, label: 'Cbm_Left_CrusII' },\n 612: { color: [236, 13, 176], opacity: 1, label: 'Cbm_Vermis_CrusII' },\n 613: { color: [12, 48, 255], opacity: 1, label: 'Cbm_Right_CrusII' },\n 614: { color: [204, 182, 142], opacity: 1, label: 'Cbm_Left_VIIb' },\n 615: { color: [42, 204, 164], opacity: 1, label: 'Cbm_Vermis_VIIb' },\n 616: { color: [119, 159, 176], opacity: 1, label: 'Cbm_Right_VIIb' },\n 617: { color: [220, 216, 20], opacity: 1, label: 'Cbm_Left_VIIIa' },\n 618: { color: [103, 255, 255], opacity: 1, label: 'Cbm_Vermis_VIIIa' },\n 619: { color: [80, 196, 98], opacity: 1, label: 'Cbm_Right_VIIIa' },\n 620: { color: [60, 58, 210], opacity: 1, label: 'Cbm_Left_VIIIb' },\n 621: { color: [60, 58, 210], opacity: 1, label: 'Cbm_Vermis_VIIIb' },\n 622: { color: [60, 58, 210], opacity: 1, label: 'Cbm_Right_VIIIb' },\n 623: { color: [60, 58, 210], opacity: 1, label: 'Cbm_Left_IX' },\n 624: { color: [60, 60, 60], opacity: 1, label: 'Cbm_Vermis_IX' },\n 625: { color: [255, 165, 0], opacity: 1, label: 'Cbm_Right_IX' },\n 626: { color: [255, 165, 0], opacity: 1, label: 'Cbm_Left_X' },\n 627: { color: [0, 255, 127], opacity: 1, label: 'Cbm_Vermis_X' },\n 628: { color: [165, 42, 42], opacity: 1, label: 'Cbm_Right_X' },\n 640: { color: [204, 0, 0], opacity: 1, label: 'Cbm_Right_I_V_med' },\n 641: { color: [255, 0, 0], opacity: 1, label: 'Cbm_Right_I_V_mid' },\n 642: { color: [0, 0, 255], opacity: 1, label: 'Cbm_Right_VI_med' },\n 643: { color: [30, 144, 255], opacity: 1, label: 'Cbm_Right_VI_mid' },\n 644: { color: [100, 212, 237], opacity: 1, label: 'Cbm_Right_VI_lat' },\n 645: { color: [218, 165, 32], opacity: 1, label: 'Cbm_Right_CrusI_med' },\n 646: { color: [255, 215, 0], opacity: 1, label: 'Cbm_Right_CrusI_mid' },\n 647: { color: [255, 255, 166], opacity: 1, label: 'Cbm_Right_CrusI_lat' },\n 648: { color: [153, 0, 204], opacity: 1, label: 'Cbm_Right_CrusII_med' },\n 649: { color: [153, 141, 209], opacity: 1, label: 'Cbm_Right_CrusII_mid' },\n 650: { color: [204, 204, 255], opacity: 1, label: 'Cbm_Right_CrusII_lat' },\n 651: { color: [31, 212, 194], opacity: 1, label: 'Cbm_Right_7med' },\n 652: { color: [3, 255, 237], opacity: 1, label: 'Cbm_Right_7mid' },\n 653: { color: [204, 255, 255], opacity: 1, label: 'Cbm_Right_7lat' },\n 654: { color: [86, 74, 147], opacity: 1, label: 'Cbm_Right_8med' },\n 655: { color: [114, 114, 190], opacity: 1, label: 'Cbm_Right_8mid' },\n 656: { color: [184, 178, 255], opacity: 1, label: 'Cbm_Right_8lat' },\n 657: { color: [126, 138, 37], opacity: 1, label: 'Cbm_Right_PUNs' },\n 658: { color: [189, 197, 117], opacity: 1, label: 'Cbm_Right_TONs' },\n 659: { color: [240, 230, 140], opacity: 1, label: 'Cbm_Right_FLOs' },\n 660: { color: [204, 0, 0], opacity: 1, label: 'Cbm_Left_I_V_med' },\n 661: { color: [255, 0, 0], opacity: 1, label: 'Cbm_Left_I_V_mid' },\n 662: { color: [0, 0, 255], opacity: 1, label: 'Cbm_Left_VI_med' },\n 663: { color: [30, 144, 255], opacity: 1, label: 'Cbm_Left_VI_mid' },\n 664: { color: [100, 212, 237], opacity: 1, label: 'Cbm_Left_VI_lat' },\n 665: { color: [218, 165, 32], opacity: 1, label: 'Cbm_Left_CrusI_med' },\n 666: { color: [255, 215, 0], opacity: 1, label: 'Cbm_Left_CrusI_mid' },\n 667: { color: [255, 255, 166], opacity: 1, label: 'Cbm_Left_CrusI_lat' },\n 668: { color: [153, 0, 204], opacity: 1, label: 'Cbm_Left_CrusII_med' },\n 669: { color: [153, 141, 209], opacity: 1, label: 'Cbm_Left_CrusII_mid' },\n 670: { color: [204, 204, 255], opacity: 1, label: 'Cbm_Left_CrusII_lat' },\n 671: { color: [31, 212, 194], opacity: 1, label: 'Cbm_Left_7med' },\n 672: { color: [3, 255, 237], opacity: 1, label: 'Cbm_Left_7mid' },\n 673: { color: [204, 255, 255], opacity: 1, label: 'Cbm_Left_7lat' },\n 674: { color: [86, 74, 147], opacity: 1, label: 'Cbm_Left_8med' },\n 675: { color: [114, 114, 190], opacity: 1, label: 'Cbm_Left_8mid' },\n 676: { color: [184, 178, 255], opacity: 1, label: 'Cbm_Left_8lat' },\n 677: { color: [126, 138, 37], opacity: 1, label: 'Cbm_Left_PUNs' },\n 678: { color: [189, 197, 117], opacity: 1, label: 'Cbm_Left_TONs' },\n 679: { color: [240, 230, 140], opacity: 1, label: 'Cbm_Left_FLOs' },\n 690: { color: [122, 135, 50], opacity: 1, label: 'CbmWM_Gyri_Left' },\n 691: { color: [122, 135, 50], opacity: 1, label: 'CbmWM_Gyri_Right' },\n 701: { color: [120, 18, 134], opacity: 1, label: 'CSF-FSL-FAST' },\n 702: { color: [205, 62, 78], opacity: 1, label: 'GrayMatter-FSL-FAST' },\n 703: { color: [0, 225, 0], opacity: 1, label: 'WhiteMatter-FSL-FAST' },\n 999: { color: [255, 100, 100], opacity: 1, label: 'SUSPICIOUS' },\n 1000: { color: [25, 5, 25], opacity: 1, label: 'ctx-lh-unknown' },\n 1001: { color: [25, 100, 40], opacity: 1, label: 'ctx-lh-bankssts' },\n 1002: { color: [125, 100, 160], opacity: 1, label: 'ctx-lh-caudalanteriorcingulate' },\n 1003: { color: [100, 25, 0], opacity: 1, label: 'ctx-lh-caudalmiddlefrontal' },\n 1004: { color: [120, 70, 50], opacity: 1, label: 'ctx-lh-corpuscallosum' },\n 1005: { color: [220, 20, 100], opacity: 1, label: 'ctx-lh-cuneus' },\n 1006: { color: [220, 20, 10], opacity: 1, label: 'ctx-lh-entorhinal' },\n 1007: { color: [180, 220, 140], opacity: 1, label: 'ctx-lh-fusiform' },\n 1008: { color: [220, 60, 220], opacity: 1, label: 'ctx-lh-inferiorparietal' },\n 1009: { color: [180, 40, 120], opacity: 1, label: 'ctx-lh-inferiortemporal' },\n 1010: { color: [140, 20, 140], opacity: 1, label: 'ctx-lh-isthmuscingulate' },\n 1011: { color: [20, 30, 140], opacity: 1, label: 'ctx-lh-lateraloccipital' },\n 1012: { color: [35, 75, 50], opacity: 1, label: 'ctx-lh-lateralorbitofrontal' },\n 1013: { color: [225, 140, 140], opacity: 1, label: 'ctx-lh-lingual' },\n 1014: { color: [200, 35, 75], opacity: 1, label: 'ctx-lh-medialorbitofrontal' },\n 1015: { color: [160, 100, 50], opacity: 1, label: 'ctx-lh-middletemporal' },\n 1016: { color: [20, 220, 60], opacity: 1, label: 'ctx-lh-parahippocampal' },\n 1017: { color: [60, 220, 60], opacity: 1, label: 'ctx-lh-paracentral' },\n 1018: { color: [220, 180, 140], opacity: 1, label: 'ctx-lh-parsopercularis' },\n 1019: { color: [20, 100, 50], opacity: 1, label: 'ctx-lh-parsorbitalis' },\n 1020: { color: [220, 60, 20], opacity: 1, label: 'ctx-lh-parstriangularis' },\n 1021: { color: [120, 100, 60], opacity: 1, label: 'ctx-lh-pericalcarine' },\n 1022: { color: [220, 20, 20], opacity: 1, label: 'ctx-lh-postcentral' },\n 1023: { color: [220, 180, 220], opacity: 1, label: 'ctx-lh-posteriorcingulate' },\n 1024: { color: [60, 20, 220], opacity: 1, label: 'ctx-lh-precentral' },\n 1025: { color: [160, 140, 180], opacity: 1, label: 'ctx-lh-precuneus' },\n 1026: { color: [80, 20, 140], opacity: 1, label: 'ctx-lh-rostralanteriorcingulate' },\n 1027: { color: [75, 50, 125], opacity: 1, label: 'ctx-lh-rostralmiddlefrontal' },\n 1028: { color: [20, 220, 160], opacity: 1, label: 'ctx-lh-superiorfrontal' },\n 1029: { color: [20, 180, 140], opacity: 1, label: 'ctx-lh-superiorparietal' },\n 1030: { color: [140, 220, 220], opacity: 1, label: 'ctx-lh-superiortemporal' },\n 1031: { color: [80, 160, 20], opacity: 1, label: 'ctx-lh-supramarginal' },\n 1032: { color: [100, 0, 100], opacity: 1, label: 'ctx-lh-frontalpole' },\n 1033: { color: [70, 70, 70], opacity: 1, label: 'ctx-lh-temporalpole' },\n 1034: { color: [150, 150, 200], opacity: 1, label: 'ctx-lh-transversetemporal' },\n 1035: { color: [255, 192, 32], opacity: 1, label: 'ctx-lh-insula' },\n 2000: { color: [25, 5, 25], opacity: 1, label: 'ctx-rh-unknown' },\n 2001: { color: [25, 100, 40], opacity: 1, label: 'ctx-rh-bankssts' },\n 2002: { color: [125, 100, 160], opacity: 1, label: 'ctx-rh-caudalanteriorcingulate' },\n 2003: { color: [100, 25, 0], opacity: 1, label: 'ctx-rh-caudalmiddlefrontal' },\n 2004: { color: [120, 70, 50], opacity: 1, label: 'ctx-rh-corpuscallosum' },\n 2005: { color: [220, 20, 100], opacity: 1, label: 'ctx-rh-cuneus' },\n 2006: { color: [220, 20, 10], opacity: 1, label: 'ctx-rh-entorhinal' },\n 2007: { color: [180, 220, 140], opacity: 1, label: 'ctx-rh-fusiform' },\n 2008: { color: [220, 60, 220], opacity: 1, label: 'ctx-rh-inferiorparietal' },\n 2009: { color: [180, 40, 120], opacity: 1, label: 'ctx-rh-inferiortemporal' },\n 2010: { color: [140, 20, 140], opacity: 1, label: 'ctx-rh-isthmuscingulate' },\n 2011: { color: [20, 30, 140], opacity: 1, label: 'ctx-rh-lateraloccipital' },\n 2012: { color: [35, 75, 50], opacity: 1, label: 'ctx-rh-lateralorbitofrontal' },\n 2013: { color: [225, 140, 140], opacity: 1, label: 'ctx-rh-lingual' },\n 2014: { color: [200, 35, 75], opacity: 1, label: 'ctx-rh-medialorbitofrontal' },\n 2015: { color: [160, 100, 50], opacity: 1, label: 'ctx-rh-middletemporal' },\n 2016: { color: [20, 220, 60], opacity: 1, label: 'ctx-rh-parahippocampal' },\n 2017: { color: [60, 220, 60], opacity: 1, label: 'ctx-rh-paracentral' },\n 2018: { color: [220, 180, 140], opacity: 1, label: 'ctx-rh-parsopercularis' },\n 2019: { color: [20, 100, 50], opacity: 1, label: 'ctx-rh-parsorbitalis' },\n 2020: { color: [220, 60, 20], opacity: 1, label: 'ctx-rh-parstriangularis' },\n 2021: { color: [120, 100, 60], opacity: 1, label: 'ctx-rh-pericalcarine' },\n 2022: { color: [220, 20, 20], opacity: 1, label: 'ctx-rh-postcentral' },\n 2023: { color: [220, 180, 220], opacity: 1, label: 'ctx-rh-posteriorcingulate' },\n 2024: { color: [60, 20, 220], opacity: 1, label: 'ctx-rh-precentral' },\n 2025: { color: [160, 140, 180], opacity: 1, label: 'ctx-rh-precuneus' },\n 2026: { color: [80, 20, 140], opacity: 1, label: 'ctx-rh-rostralanteriorcingulate' },\n 2027: { color: [75, 50, 125], opacity: 1, label: 'ctx-rh-rostralmiddlefrontal' },\n 2028: { color: [20, 220, 160], opacity: 1, label: 'ctx-rh-superiorfrontal' },\n 2029: { color: [20, 180, 140], opacity: 1, label: 'ctx-rh-superiorparietal' },\n 2030: { color: [140, 220, 220], opacity: 1, label: 'ctx-rh-superiortemporal' },\n 2031: { color: [80, 160, 20], opacity: 1, label: 'ctx-rh-supramarginal' },\n 2032: { color: [100, 0, 100], opacity: 1, label: 'ctx-rh-frontalpole' },\n 2033: { color: [70, 70, 70], opacity: 1, label: 'ctx-rh-temporalpole' },\n 2034: { color: [150, 150, 200], opacity: 1, label: 'ctx-rh-transversetemporal' },\n 2035: { color: [255, 192, 32], opacity: 1, label: 'ctx-rh-insula' },\n 3000: { color: [230, 250, 230], opacity: 1, label: 'wm-lh-unknown' },\n 3001: { color: [230, 155, 215], opacity: 1, label: 'wm-lh-bankssts' },\n 3002: { color: [130, 155, 95], opacity: 1, label: 'wm-lh-caudalanteriorcingulate' },\n 3003: { color: [155, 230, 255], opacity: 1, label: 'wm-lh-caudalmiddlefrontal' },\n 3004: { color: [135, 185, 205], opacity: 1, label: 'wm-lh-corpuscallosum' },\n 3005: { color: [35, 235, 155], opacity: 1, label: 'wm-lh-cuneus' },\n 3006: { color: [35, 235, 245], opacity: 1, label: 'wm-lh-entorhinal' },\n 3007: { color: [75, 35, 115], opacity: 1, label: 'wm-lh-fusiform' },\n 3008: { color: [35, 195, 35], opacity: 1, label: 'wm-lh-inferiorparietal' },\n 3009: { color: [75, 215, 135], opacity: 1, label: 'wm-lh-inferiortemporal' },\n 3010: { color: [115, 235, 115], opacity: 1, label: 'wm-lh-isthmuscingulate' },\n 3011: { color: [235, 225, 115], opacity: 1, label: 'wm-lh-lateraloccipital' },\n 3012: { color: [220, 180, 205], opacity: 1, label: 'wm-lh-lateralorbitofrontal' },\n 3013: { color: [30, 115, 115], opacity: 1, label: 'wm-lh-lingual' },\n 3014: { color: [55, 220, 180], opacity: 1, label: 'wm-lh-medialorbitofrontal' },\n 3015: { color: [95, 155, 205], opacity: 1, label: 'wm-lh-middletemporal' },\n 3016: { color: [235, 35, 195], opacity: 1, label: 'wm-lh-parahippocampal' },\n 3017: { color: [195, 35, 195], opacity: 1, label: 'wm-lh-paracentral' },\n 3018: { color: [35, 75, 115], opacity: 1, label: 'wm-lh-parsopercularis' },\n 3019: { color: [235, 155, 205], opacity: 1, label: 'wm-lh-parsorbitalis' },\n 3020: { color: [35, 195, 235], opacity: 1, label: 'wm-lh-parstriangularis' },\n 3021: { color: [135, 155, 195], opacity: 1, label: 'wm-lh-pericalcarine' },\n 3022: { color: [35, 235, 235], opacity: 1, label: 'wm-lh-postcentral' },\n 3023: { color: [35, 75, 35], opacity: 1, label: 'wm-lh-posteriorcingulate' },\n 3024: { color: [195, 235, 35], opacity: 1, label: 'wm-lh-precentral' },\n 3025: { color: [95, 115, 75], opacity: 1, label: 'wm-lh-precuneus' },\n 3026: { color: [175, 235, 115], opacity: 1, label: 'wm-lh-rostralanteriorcingulate' },\n 3027: { color: [180, 205, 130], opacity: 1, label: 'wm-lh-rostralmiddlefrontal' },\n 3028: { color: [235, 35, 95], opacity: 1, label: 'wm-lh-superiorfrontal' },\n 3029: { color: [235, 75, 115], opacity: 1, label: 'wm-lh-superiorparietal' },\n 3030: { color: [115, 35, 35], opacity: 1, label: 'wm-lh-superiortemporal' },\n 3031: { color: [175, 95, 235], opacity: 1, label: 'wm-lh-supramarginal' },\n 3032: { color: [155, 255, 155], opacity: 1, label: 'wm-lh-frontalpole' },\n 3033: { color: [185, 185, 185], opacity: 1, label: 'wm-lh-temporalpole' },\n 3034: { color: [105, 105, 55], opacity: 1, label: 'wm-lh-transversetemporal' },\n 3035: { color: [20, 220, 160], opacity: 1, label: 'wm-lh-insula' },\n 4000: { color: [230, 250, 230], opacity: 1, label: 'wm-rh-unknown' },\n 4001: { color: [230, 155, 215], opacity: 1, label: 'wm-rh-bankssts' },\n 4002: { color: [130, 155, 95], opacity: 1, label: 'wm-rh-caudalanteriorcingulate' },\n 4003: { color: [155, 230, 255], opacity: 1, label: 'wm-rh-caudalmiddlefrontal' },\n 4004: { color: [135, 185, 205], opacity: 1, label: 'wm-rh-corpuscallosum' },\n 4005: { color: [35, 235, 155], opacity: 1, label: 'wm-rh-cuneus' },\n 4006: { color: [35, 235, 245], opacity: 1, label: 'wm-rh-entorhinal' },\n 4007: { color: [75, 35, 115], opacity: 1, label: 'wm-rh-fusiform' },\n 4008: { color: [35, 195, 35], opacity: 1, label: 'wm-rh-inferiorparietal' },\n 4009: { color: [75, 215, 135], opacity: 1, label: 'wm-rh-inferiortemporal' },\n 4010: { color: [115, 235, 115], opacity: 1, label: 'wm-rh-isthmuscingulate' },\n 4011: { color: [235, 225, 115], opacity: 1, label: 'wm-rh-lateraloccipital' },\n 4012: { color: [220, 180, 205], opacity: 1, label: 'wm-rh-lateralorbitofrontal' },\n 4013: { color: [30, 115, 115], opacity: 1, label: 'wm-rh-lingual' },\n 4014: { color: [55, 220, 180], opacity: 1, label: 'wm-rh-medialorbitofrontal' },\n 4015: { color: [95, 155, 205], opacity: 1, label: 'wm-rh-middletemporal' },\n 4016: { color: [235, 35, 195], opacity: 1, label: 'wm-rh-parahippocampal' },\n 4017: { color: [195, 35, 195], opacity: 1, label: 'wm-rh-paracentral' },\n 4018: { color: [35, 75, 115], opacity: 1, label: 'wm-rh-parsopercularis' },\n 4019: { color: [235, 155, 205], opacity: 1, label: 'wm-rh-parsorbitalis' },\n 4020: { color: [35, 195, 235], opacity: 1, label: 'wm-rh-parstriangularis' },\n 4021: { color: [135, 155, 195], opacity: 1, label: 'wm-rh-pericalcarine' },\n 4022: { color: [35, 235, 235], opacity: 1, label: 'wm-rh-postcentral' },\n 4023: { color: [35, 75, 35], opacity: 1, label: 'wm-rh-posteriorcingulate' },\n 4024: { color: [195, 235, 35], opacity: 1, label: 'wm-rh-precentral' },\n 4025: { color: [95, 115, 75], opacity: 1, label: 'wm-rh-precuneus' },\n 4026: { color: [175, 235, 115], opacity: 1, label: 'wm-rh-rostralanteriorcingulate' },\n 4027: { color: [180, 205, 130], opacity: 1, label: 'wm-rh-rostralmiddlefrontal' },\n 4028: { color: [235, 35, 95], opacity: 1, label: 'wm-rh-superiorfrontal' },\n 4029: { color: [235, 75, 115], opacity: 1, label: 'wm-rh-superiorparietal' },\n 4030: { color: [115, 35, 35], opacity: 1, label: 'wm-rh-superiortemporal' },\n 4031: { color: [175, 95, 235], opacity: 1, label: 'wm-rh-supramarginal' },\n 4032: { color: [155, 255, 155], opacity: 1, label: 'wm-rh-frontalpole' },\n 4033: { color: [185, 185, 185], opacity: 1, label: 'wm-rh-temporalpole' },\n 4034: { color: [105, 105, 55], opacity: 1, label: 'wm-rh-transversetemporal' },\n 4035: { color: [20, 220, 160], opacity: 1, label: 'wm-rh-insula' },\n 3201: { color: [235, 35, 95], opacity: 1, label: 'wm-lh-frontal-lobe' },\n 3203: { color: [35, 75, 35], opacity: 1, label: 'wm-lh-cingulate-lobe' },\n 3204: { color: [135, 155, 195], opacity: 1, label: 'wm-lh-occiptal-lobe' },\n 3205: { color: [115, 35, 35], opacity: 1, label: 'wm-lh-temporal-lobe' },\n 3206: { color: [35, 195, 35], opacity: 1, label: 'wm-lh-parietal-lobe' },\n 3207: { color: [20, 220, 160], opacity: 1, label: 'wm-lh-insula-lobe' },\n 4201: { color: [235, 35, 95], opacity: 1, label: 'wm-rh-frontal-lobe' },\n 4203: { color: [35, 75, 35], opacity: 1, label: 'wm-rh-cingulate-lobe' },\n 4204: { color: [135, 155, 195], opacity: 1, label: 'wm-rh-occiptal-lobe' },\n 4205: { color: [115, 35, 35], opacity: 1, label: 'wm-rh-temporal-lobe' },\n 4206: { color: [35, 195, 35], opacity: 1, label: 'wm-rh-parietal-lobe' },\n 4207: { color: [20, 220, 160], opacity: 1, label: 'wm-rh-insula-lobe' },\n 1100: { color: [0, 0, 0], opacity: 1, label: 'ctx-lh-Unknown' },\n 1101: { color: [50, 50, 50], opacity: 1, label: 'ctx-lh-Corpus_callosum' },\n 1102: { color: [180, 20, 30], opacity: 1, label: 'ctx-lh-G_and_S_Insula_ONLY_AVERAGE' },\n 1103: { color: [60, 25, 25], opacity: 1, label: 'ctx-lh-G_cingulate-Isthmus' },\n 1104: { color: [25, 60, 60], opacity: 1, label: 'ctx-lh-G_cingulate-Main_part' },\n 1200: { color: [25, 60, 61], opacity: 1, label: 'ctx-lh-G_cingulate-caudal_ACC' },\n 1201: { color: [25, 90, 60], opacity: 1, label: 'ctx-lh-G_cingulate-rostral_ACC' },\n 1202: { color: [25, 120, 60], opacity: 1, label: 'ctx-lh-G_cingulate-posterior' },\n 1205: { color: [25, 150, 60], opacity: 1, label: 'ctx-lh-S_cingulate-caudal_ACC' },\n 1206: { color: [25, 180, 60], opacity: 1, label: 'ctx-lh-S_cingulate-rostral_ACC' },\n 1207: { color: [25, 210, 60], opacity: 1, label: 'ctx-lh-S_cingulate-posterior' },\n 1210: { color: [25, 150, 90], opacity: 1, label: 'ctx-lh-S_pericallosal-caudal' },\n 1211: { color: [25, 180, 90], opacity: 1, label: 'ctx-lh-S_pericallosal-rostral' },\n 1212: { color: [25, 210, 90], opacity: 1, label: 'ctx-lh-S_pericallosal-posterior' },\n 1105: { color: [180, 20, 20], opacity: 1, label: 'ctx-lh-G_cuneus' },\n 1106: { color: [220, 20, 100], opacity: 1, label: 'ctx-lh-G_frontal_inf-Opercular_part' },\n 1107: { color: [140, 60, 60], opacity: 1, label: 'ctx-lh-G_frontal_inf-Orbital_part' },\n 1108: { color: [180, 220, 140], opacity: 1, label: 'ctx-lh-G_frontal_inf-Triangular_part' },\n 1109: { color: [140, 100, 180], opacity: 1, label: 'ctx-lh-G_frontal_middle' },\n 1110: { color: [180, 20, 140], opacity: 1, label: 'ctx-lh-G_frontal_superior' },\n 1111: { color: [140, 20, 140], opacity: 1, label: 'ctx-lh-G_frontomarginal' },\n 1112: { color: [21, 10, 10], opacity: 1, label: 'ctx-lh-G_insular_long' },\n 1113: { color: [225, 140, 140], opacity: 1, label: 'ctx-lh-G_insular_short' },\n 1114: { color: [23, 60, 180], opacity: 1, label: 'ctx-lh-G_and_S_occipital_inferior' },\n 1115: { color: [180, 60, 180], opacity: 1, label: 'ctx-lh-G_occipital_middle' },\n 1116: { color: [20, 220, 60], opacity: 1, label: 'ctx-lh-G_occipital_superior' },\n 1117: { color: [60, 20, 140], opacity: 1, label: 'ctx-lh-G_occipit-temp_lat-Or_fusiform' },\n 1118: { color: [220, 180, 140], opacity: 1, label: 'ctx-lh-G_occipit-temp_med-Lingual_part' },\n 1119: {\n color: [65, 100, 20],\n opacity: 1,\n label: 'ctx-lh-G_occipit-temp_med-Parahippocampal_part',\n },\n 1120: { color: [220, 60, 20], opacity: 1, label: 'ctx-lh-G_orbital' },\n 1121: { color: [60, 100, 60], opacity: 1, label: 'ctx-lh-G_paracentral' },\n 1122: { color: [20, 60, 220], opacity: 1, label: 'ctx-lh-G_parietal_inferior-Angular_part' },\n 1123: {\n color: [100, 100, 60],\n opacity: 1,\n label: 'ctx-lh-G_parietal_inferior-Supramarginal_part',\n },\n 1124: { color: [220, 180, 220], opacity: 1, label: 'ctx-lh-G_parietal_superior' },\n 1125: { color: [20, 180, 140], opacity: 1, label: 'ctx-lh-G_postcentral' },\n 1126: { color: [60, 140, 180], opacity: 1, label: 'ctx-lh-G_precentral' },\n 1127: { color: [25, 20, 140], opacity: 1, label: 'ctx-lh-G_precuneus' },\n 1128: { color: [20, 60, 100], opacity: 1, label: 'ctx-lh-G_rectus' },\n 1129: { color: [60, 220, 20], opacity: 1, label: 'ctx-lh-G_subcallosal' },\n 1130: { color: [60, 20, 220], opacity: 1, label: 'ctx-lh-G_subcentral' },\n 1131: { color: [220, 220, 100], opacity: 1, label: 'ctx-lh-G_temporal_inferior' },\n 1132: { color: [180, 60, 60], opacity: 1, label: 'ctx-lh-G_temporal_middle' },\n 1133: { color: [60, 60, 220], opacity: 1, label: 'ctx-lh-G_temp_sup-G_temp_transv_and_interm_S' },\n 1134: { color: [220, 60, 220], opacity: 1, label: 'ctx-lh-G_temp_sup-Lateral_aspect' },\n 1135: { color: [65, 220, 60], opacity: 1, label: 'ctx-lh-G_temp_sup-Planum_polare' },\n 1136: { color: [25, 140, 20], opacity: 1, label: 'ctx-lh-G_temp_sup-Planum_tempolare' },\n 1137: { color: [13, 0, 250], opacity: 1, label: 'ctx-lh-G_and_S_transverse_frontopolar' },\n 1138: { color: [61, 20, 220], opacity: 1, label: 'ctx-lh-Lat_Fissure-ant_sgt-ramus_horizontal' },\n 1139: { color: [61, 20, 60], opacity: 1, label: 'ctx-lh-Lat_Fissure-ant_sgt-ramus_vertical' },\n 1140: { color: [61, 60, 100], opacity: 1, label: 'ctx-lh-Lat_Fissure-post_sgt' },\n 1141: { color: [25, 25, 25], opacity: 1, label: 'ctx-lh-Medial_wall' },\n 1142: { color: [140, 20, 60], opacity: 1, label: 'ctx-lh-Pole_occipital' },\n 1143: { color: [220, 180, 20], opacity: 1, label: 'ctx-lh-Pole_temporal' },\n 1144: { color: [63, 180, 180], opacity: 1, label: 'ctx-lh-S_calcarine' },\n 1145: { color: [221, 20, 10], opacity: 1, label: 'ctx-lh-S_central' },\n 1146: { color: [21, 220, 20], opacity: 1, label: 'ctx-lh-S_central_insula' },\n 1147: {\n color: [183, 100, 20],\n opacity: 1,\n label: 'ctx-lh-S_cingulate-Main_part_and_Intracingulate',\n },\n 1148: { color: [221, 20, 100], opacity: 1, label: 'ctx-lh-S_cingulate-Marginalis_part' },\n 1149: { color: [221, 60, 140], opacity: 1, label: 'ctx-lh-S_circular_insula_anterior' },\n 1150: { color: [221, 20, 220], opacity: 1, label: 'ctx-lh-S_circular_insula_inferior' },\n 1151: { color: [61, 220, 220], opacity: 1, label: 'ctx-lh-S_circular_insula_superior' },\n 1152: { color: [100, 200, 200], opacity: 1, label: 'ctx-lh-S_collateral_transverse_ant' },\n 1153: { color: [10, 200, 200], opacity: 1, label: 'ctx-lh-S_collateral_transverse_post' },\n 1154: { color: [221, 220, 20], opacity: 1, label: 'ctx-lh-S_frontal_inferior' },\n 1155: { color: [141, 20, 100], opacity: 1, label: 'ctx-lh-S_frontal_middle' },\n 1156: { color: [61, 220, 100], opacity: 1, label: 'ctx-lh-S_frontal_superior' },\n 1157: { color: [21, 220, 60], opacity: 1, label: 'ctx-lh-S_frontomarginal' },\n 1158: { color: [141, 60, 20], opacity: 1, label: 'ctx-lh-S_intermedius_primus-Jensen' },\n 1159: {\n color: [143, 20, 220],\n opacity: 1,\n label: 'ctx-lh-S_intraparietal-and_Parietal_transverse',\n },\n 1160: { color: [61, 20, 180], opacity: 1, label: 'ctx-lh-S_occipital_anterior' },\n 1161: { color: [101, 60, 220], opacity: 1, label: 'ctx-lh-S_occipital_middle_and_Lunatus' },\n 1162: {\n color: [21, 20, 140],\n opacity: 1,\n label: 'ctx-lh-S_occipital_superior_and_transversalis',\n },\n 1163: { color: [221, 140, 20], opacity: 1, label: 'ctx-lh-S_occipito-temporal_lateral' },\n 1164: {\n color: [141, 100, 220],\n opacity: 1,\n label: 'ctx-lh-S_occipito-temporal_medial_and_S_Lingual',\n },\n 1165: { color: [101, 20, 20], opacity: 1, label: 'ctx-lh-S_orbital-H_shapped' },\n 1166: { color: [221, 100, 20], opacity: 1, label: 'ctx-lh-S_orbital_lateral' },\n 1167: { color: [181, 200, 20], opacity: 1, label: 'ctx-lh-S_orbital_medial-Or_olfactory' },\n 1168: { color: [21, 180, 140], opacity: 1, label: 'ctx-lh-S_paracentral' },\n 1169: { color: [101, 100, 180], opacity: 1, label: 'ctx-lh-S_parieto_occipital' },\n 1170: { color: [181, 220, 20], opacity: 1, label: 'ctx-lh-S_pericallosal' },\n 1171: { color: [21, 140, 200], opacity: 1, label: 'ctx-lh-S_postcentral' },\n 1172: { color: [21, 20, 240], opacity: 1, label: 'ctx-lh-S_precentral-Inferior-part' },\n 1173: { color: [21, 20, 200], opacity: 1, label: 'ctx-lh-S_precentral-Superior-part' },\n 1174: { color: [61, 180, 60], opacity: 1, label: 'ctx-lh-S_subcentral_ant' },\n 1175: { color: [61, 180, 250], opacity: 1, label: 'ctx-lh-S_subcentral_post' },\n 1176: { color: [21, 20, 60], opacity: 1, label: 'ctx-lh-S_suborbital' },\n 1177: { color: [101, 60, 60], opacity: 1, label: 'ctx-lh-S_subparietal' },\n 1178: { color: [21, 220, 220], opacity: 1, label: 'ctx-lh-S_supracingulate' },\n 1179: { color: [21, 180, 180], opacity: 1, label: 'ctx-lh-S_temporal_inferior' },\n 1180: { color: [223, 220, 60], opacity: 1, label: 'ctx-lh-S_temporal_superior' },\n 1181: { color: [221, 60, 60], opacity: 1, label: 'ctx-lh-S_temporal_transverse' },\n 2100: { color: [0, 0, 0], opacity: 1, label: 'ctx-rh-Unknown' },\n 2101: { color: [50, 50, 50], opacity: 1, label: 'ctx-rh-Corpus_callosum' },\n 2102: { color: [180, 20, 30], opacity: 1, label: 'ctx-rh-G_and_S_Insula_ONLY_AVERAGE' },\n 2103: { color: [60, 25, 25], opacity: 1, label: 'ctx-rh-G_cingulate-Isthmus' },\n 2104: { color: [25, 60, 60], opacity: 1, label: 'ctx-rh-G_cingulate-Main_part' },\n 2105: { color: [180, 20, 20], opacity: 1, label: 'ctx-rh-G_cuneus' },\n 2106: { color: [220, 20, 100], opacity: 1, label: 'ctx-rh-G_frontal_inf-Opercular_part' },\n 2107: { color: [140, 60, 60], opacity: 1, label: 'ctx-rh-G_frontal_inf-Orbital_part' },\n 2108: { color: [180, 220, 140], opacity: 1, label: 'ctx-rh-G_frontal_inf-Triangular_part' },\n 2109: { color: [140, 100, 180], opacity: 1, label: 'ctx-rh-G_frontal_middle' },\n 2110: { color: [180, 20, 140], opacity: 1, label: 'ctx-rh-G_frontal_superior' },\n 2111: { color: [140, 20, 140], opacity: 1, label: 'ctx-rh-G_frontomarginal' },\n 2112: { color: [21, 10, 10], opacity: 1, label: 'ctx-rh-G_insular_long' },\n 2113: { color: [225, 140, 140], opacity: 1, label: 'ctx-rh-G_insular_short' },\n 2114: { color: [23, 60, 180], opacity: 1, label: 'ctx-rh-G_and_S_occipital_inferior' },\n 2115: { color: [180, 60, 180], opacity: 1, label: 'ctx-rh-G_occipital_middle' },\n 2116: { color: [20, 220, 60], opacity: 1, label: 'ctx-rh-G_occipital_superior' },\n 2117: { color: [60, 20, 140], opacity: 1, label: 'ctx-rh-G_occipit-temp_lat-Or_fusiform' },\n 2118: { color: [220, 180, 140], opacity: 1, label: 'ctx-rh-G_occipit-temp_med-Lingual_part' },\n 2119: {\n color: [65, 100, 20],\n opacity: 1,\n label: 'ctx-rh-G_occipit-temp_med-Parahippocampal_part',\n },\n 2120: { color: [220, 60, 20], opacity: 1, label: 'ctx-rh-G_orbital' },\n 2121: { color: [60, 100, 60], opacity: 1, label: 'ctx-rh-G_paracentral' },\n 2122: { color: [20, 60, 220], opacity: 1, label: 'ctx-rh-G_parietal_inferior-Angular_part' },\n 2123: {\n color: [100, 100, 60],\n opacity: 1,\n label: 'ctx-rh-G_parietal_inferior-Supramarginal_part',\n },\n 2124: { color: [220, 180, 220], opacity: 1, label: 'ctx-rh-G_parietal_superior' },\n 2125: { color: [20, 180, 140], opacity: 1, label: 'ctx-rh-G_postcentral' },\n 2126: { color: [60, 140, 180], opacity: 1, label: 'ctx-rh-G_precentral' },\n 2127: { color: [25, 20, 140], opacity: 1, label: 'ctx-rh-G_precuneus' },\n 2128: { color: [20, 60, 100], opacity: 1, label: 'ctx-rh-G_rectus' },\n 2129: { color: [60, 220, 20], opacity: 1, label: 'ctx-rh-G_subcallosal' },\n 2130: { color: [60, 20, 220], opacity: 1, label: 'ctx-rh-G_subcentral' },\n 2131: { color: [220, 220, 100], opacity: 1, label: 'ctx-rh-G_temporal_inferior' },\n 2132: { color: [180, 60, 60], opacity: 1, label: 'ctx-rh-G_temporal_middle' },\n 2133: { color: [60, 60, 220], opacity: 1, label: 'ctx-rh-G_temp_sup-G_temp_transv_and_interm_S' },\n 2134: { color: [220, 60, 220], opacity: 1, label: 'ctx-rh-G_temp_sup-Lateral_aspect' },\n 2135: { color: [65, 220, 60], opacity: 1, label: 'ctx-rh-G_temp_sup-Planum_polare' },\n 2136: { color: [25, 140, 20], opacity: 1, label: 'ctx-rh-G_temp_sup-Planum_tempolare' },\n 2137: { color: [13, 0, 250], opacity: 1, label: 'ctx-rh-G_and_S_transverse_frontopolar' },\n 2138: { color: [61, 20, 220], opacity: 1, label: 'ctx-rh-Lat_Fissure-ant_sgt-ramus_horizontal' },\n 2139: { color: [61, 20, 60], opacity: 1, label: 'ctx-rh-Lat_Fissure-ant_sgt-ramus_vertical' },\n 2140: { color: [61, 60, 100], opacity: 1, label: 'ctx-rh-Lat_Fissure-post_sgt' },\n 2141: { color: [25, 25, 25], opacity: 1, label: 'ctx-rh-Medial_wall' },\n 2142: { color: [140, 20, 60], opacity: 1, label: 'ctx-rh-Pole_occipital' },\n 2143: { color: [220, 180, 20], opacity: 1, label: 'ctx-rh-Pole_temporal' },\n 2144: { color: [63, 180, 180], opacity: 1, label: 'ctx-rh-S_calcarine' },\n 2145: { color: [221, 20, 10], opacity: 1, label: 'ctx-rh-S_central' },\n 2146: { color: [21, 220, 20], opacity: 1, label: 'ctx-rh-S_central_insula' },\n 2147: {\n color: [183, 100, 20],\n opacity: 1,\n label: 'ctx-rh-S_cingulate-Main_part_and_Intracingulate',\n },\n 2148: { color: [221, 20, 100], opacity: 1, label: 'ctx-rh-S_cingulate-Marginalis_part' },\n 2149: { color: [221, 60, 140], opacity: 1, label: 'ctx-rh-S_circular_insula_anterior' },\n 2150: { color: [221, 20, 220], opacity: 1, label: 'ctx-rh-S_circular_insula_inferior' },\n 2151: { color: [61, 220, 220], opacity: 1, label: 'ctx-rh-S_circular_insula_superior' },\n 2152: { color: [100, 200, 200], opacity: 1, label: 'ctx-rh-S_collateral_transverse_ant' },\n 2153: { color: [10, 200, 200], opacity: 1, label: 'ctx-rh-S_collateral_transverse_post' },\n 2154: { color: [221, 220, 20], opacity: 1, label: 'ctx-rh-S_frontal_inferior' },\n 2155: { color: [141, 20, 100], opacity: 1, label: 'ctx-rh-S_frontal_middle' },\n 2156: { color: [61, 220, 100], opacity: 1, label: 'ctx-rh-S_frontal_superior' },\n 2157: { color: [21, 220, 60], opacity: 1, label: 'ctx-rh-S_frontomarginal' },\n 2158: { color: [141, 60, 20], opacity: 1, label: 'ctx-rh-S_intermedius_primus-Jensen' },\n 2159: {\n color: [143, 20, 220],\n opacity: 1,\n label: 'ctx-rh-S_intraparietal-and_Parietal_transverse',\n },\n 2160: { color: [61, 20, 180], opacity: 1, label: 'ctx-rh-S_occipital_anterior' },\n 2161: { color: [101, 60, 220], opacity: 1, label: 'ctx-rh-S_occipital_middle_and_Lunatus' },\n 2162: {\n color: [21, 20, 140],\n opacity: 1,\n label: 'ctx-rh-S_occipital_superior_and_transversalis',\n },\n 2163: { color: [221, 140, 20], opacity: 1, label: 'ctx-rh-S_occipito-temporal_lateral' },\n 2164: {\n color: [141, 100, 220],\n opacity: 1,\n label: 'ctx-rh-S_occipito-temporal_medial_and_S_Lingual',\n },\n 2165: { color: [101, 20, 20], opacity: 1, label: 'ctx-rh-S_orbital-H_shapped' },\n 2166: { color: [221, 100, 20], opacity: 1, label: 'ctx-rh-S_orbital_lateral' },\n 2167: { color: [181, 200, 20], opacity: 1, label: 'ctx-rh-S_orbital_medial-Or_olfactory' },\n 2168: { color: [21, 180, 140], opacity: 1, label: 'ctx-rh-S_paracentral' },\n 2169: { color: [101, 100, 180], opacity: 1, label: 'ctx-rh-S_parieto_occipital' },\n 2170: { color: [181, 220, 20], opacity: 1, label: 'ctx-rh-S_pericallosal' },\n 2171: { color: [21, 140, 200], opacity: 1, label: 'ctx-rh-S_postcentral' },\n 2172: { color: [21, 20, 240], opacity: 1, label: 'ctx-rh-S_precentral-Inferior-part' },\n 2173: { color: [21, 20, 200], opacity: 1, label: 'ctx-rh-S_precentral-Superior-part' },\n 2174: { color: [61, 180, 60], opacity: 1, label: 'ctx-rh-S_subcentral_ant' },\n 2175: { color: [61, 180, 250], opacity: 1, label: 'ctx-rh-S_subcentral_post' },\n 2176: { color: [21, 20, 60], opacity: 1, label: 'ctx-rh-S_suborbital' },\n 2177: { color: [101, 60, 60], opacity: 1, label: 'ctx-rh-S_subparietal' },\n 2178: { color: [21, 220, 220], opacity: 1, label: 'ctx-rh-S_supracingulate' },\n 2179: { color: [21, 180, 180], opacity: 1, label: 'ctx-rh-S_temporal_inferior' },\n 2180: { color: [223, 220, 60], opacity: 1, label: 'ctx-rh-S_temporal_superior' },\n 2181: { color: [221, 60, 60], opacity: 1, label: 'ctx-rh-S_temporal_transverse' },\n 2200: { color: [25, 60, 61], opacity: 1, label: 'ctx-rh-G_cingulate-caudal_ACC' },\n 2201: { color: [25, 90, 60], opacity: 1, label: 'ctx-rh-G_cingulate-rostral_ACC' },\n 2202: { color: [25, 120, 60], opacity: 1, label: 'ctx-rh-G_cingulate-posterior' },\n 2205: { color: [25, 150, 60], opacity: 1, label: 'ctx-rh-S_cingulate-caudal_ACC' },\n 2206: { color: [25, 180, 60], opacity: 1, label: 'ctx-rh-S_cingulate-rostral_ACC' },\n 2207: { color: [25, 210, 60], opacity: 1, label: 'ctx-rh-S_cingulate-posterior' },\n 2210: { color: [25, 150, 90], opacity: 1, label: 'ctx-rh-S_pericallosal-caudal' },\n 2211: { color: [25, 180, 90], opacity: 1, label: 'ctx-rh-S_pericallosal-rostral' },\n 2212: { color: [25, 210, 90], opacity: 1, label: 'ctx-rh-S_pericallosal-posterior' },\n 3100: { color: [0, 0, 0], opacity: 1, label: 'wm-lh-Unknown' },\n 3101: { color: [50, 50, 50], opacity: 1, label: 'wm-lh-Corpus_callosum' },\n 3102: { color: [180, 20, 30], opacity: 1, label: 'wm-lh-G_and_S_Insula_ONLY_AVERAGE' },\n 3103: { color: [60, 25, 25], opacity: 1, label: 'wm-lh-G_cingulate-Isthmus' },\n 3104: { color: [25, 60, 60], opacity: 1, label: 'wm-lh-G_cingulate-Main_part' },\n 3105: { color: [180, 20, 20], opacity: 1, label: 'wm-lh-G_cuneus' },\n 3106: { color: [220, 20, 100], opacity: 1, label: 'wm-lh-G_frontal_inf-Opercular_part' },\n 3107: { color: [140, 60, 60], opacity: 1, label: 'wm-lh-G_frontal_inf-Orbital_part' },\n 3108: { color: [180, 220, 140], opacity: 1, label: 'wm-lh-G_frontal_inf-Triangular_part' },\n 3109: { color: [140, 100, 180], opacity: 1, label: 'wm-lh-G_frontal_middle' },\n 3110: { color: [180, 20, 140], opacity: 1, label: 'wm-lh-G_frontal_superior' },\n 3111: { color: [140, 20, 140], opacity: 1, label: 'wm-lh-G_frontomarginal' },\n 3112: { color: [21, 10, 10], opacity: 1, label: 'wm-lh-G_insular_long' },\n 3113: { color: [225, 140, 140], opacity: 1, label: 'wm-lh-G_insular_short' },\n 3114: { color: [23, 60, 180], opacity: 1, label: 'wm-lh-G_and_S_occipital_inferior' },\n 3115: { color: [180, 60, 180], opacity: 1, label: 'wm-lh-G_occipital_middle' },\n 3116: { color: [20, 220, 60], opacity: 1, label: 'wm-lh-G_occipital_superior' },\n 3117: { color: [60, 20, 140], opacity: 1, label: 'wm-lh-G_occipit-temp_lat-Or_fusiform' },\n 3118: { color: [220, 180, 140], opacity: 1, label: 'wm-lh-G_occipit-temp_med-Lingual_part' },\n 3119: {\n color: [65, 100, 20],\n opacity: 1,\n label: 'wm-lh-G_occipit-temp_med-Parahippocampal_part',\n },\n 3120: { color: [220, 60, 20], opacity: 1, label: 'wm-lh-G_orbital' },\n 3121: { color: [60, 100, 60], opacity: 1, label: 'wm-lh-G_paracentral' },\n 3122: { color: [20, 60, 220], opacity: 1, label: 'wm-lh-G_parietal_inferior-Angular_part' },\n 3123: {\n color: [100, 100, 60],\n opacity: 1,\n label: 'wm-lh-G_parietal_inferior-Supramarginal_part',\n },\n 3124: { color: [220, 180, 220], opacity: 1, label: 'wm-lh-G_parietal_superior' },\n 3125: { color: [20, 180, 140], opacity: 1, label: 'wm-lh-G_postcentral' },\n 3126: { color: [60, 140, 180], opacity: 1, label: 'wm-lh-G_precentral' },\n 3127: { color: [25, 20, 140], opacity: 1, label: 'wm-lh-G_precuneus' },\n 3128: { color: [20, 60, 100], opacity: 1, label: 'wm-lh-G_rectus' },\n 3129: { color: [60, 220, 20], opacity: 1, label: 'wm-lh-G_subcallosal' },\n 3130: { color: [60, 20, 220], opacity: 1, label: 'wm-lh-G_subcentral' },\n 3131: { color: [220, 220, 100], opacity: 1, label: 'wm-lh-G_temporal_inferior' },\n 3132: { color: [180, 60, 60], opacity: 1, label: 'wm-lh-G_temporal_middle' },\n 3133: { color: [60, 60, 220], opacity: 1, label: 'wm-lh-G_temp_sup-G_temp_transv_and_interm_S' },\n 3134: { color: [220, 60, 220], opacity: 1, label: 'wm-lh-G_temp_sup-Lateral_aspect' },\n 3135: { color: [65, 220, 60], opacity: 1, label: 'wm-lh-G_temp_sup-Planum_polare' },\n 3136: { color: [25, 140, 20], opacity: 1, label: 'wm-lh-G_temp_sup-Planum_tempolare' },\n 3137: { color: [13, 0, 250], opacity: 1, label: 'wm-lh-G_and_S_transverse_frontopolar' },\n 3138: { color: [61, 20, 220], opacity: 1, label: 'wm-lh-Lat_Fissure-ant_sgt-ramus_horizontal' },\n 3139: { color: [61, 20, 60], opacity: 1, label: 'wm-lh-Lat_Fissure-ant_sgt-ramus_vertical' },\n 3140: { color: [61, 60, 100], opacity: 1, label: 'wm-lh-Lat_Fissure-post_sgt' },\n 3141: { color: [25, 25, 25], opacity: 1, label: 'wm-lh-Medial_wall' },\n 3142: { color: [140, 20, 60], opacity: 1, label: 'wm-lh-Pole_occipital' },\n 3143: { color: [220, 180, 20], opacity: 1, label: 'wm-lh-Pole_temporal' },\n 3144: { color: [63, 180, 180], opacity: 1, label: 'wm-lh-S_calcarine' },\n 3145: { color: [221, 20, 10], opacity: 1, label: 'wm-lh-S_central' },\n 3146: { color: [21, 220, 20], opacity: 1, label: 'wm-lh-S_central_insula' },\n 3147: {\n color: [183, 100, 20],\n opacity: 1,\n label: 'wm-lh-S_cingulate-Main_part_and_Intracingulate',\n },\n 3148: { color: [221, 20, 100], opacity: 1, label: 'wm-lh-S_cingulate-Marginalis_part' },\n 3149: { color: [221, 60, 140], opacity: 1, label: 'wm-lh-S_circular_insula_anterior' },\n 3150: { color: [221, 20, 220], opacity: 1, label: 'wm-lh-S_circular_insula_inferior' },\n 3151: { color: [61, 220, 220], opacity: 1, label: 'wm-lh-S_circular_insula_superior' },\n 3152: { color: [100, 200, 200], opacity: 1, label: 'wm-lh-S_collateral_transverse_ant' },\n 3153: { color: [10, 200, 200], opacity: 1, label: 'wm-lh-S_collateral_transverse_post' },\n 3154: { color: [221, 220, 20], opacity: 1, label: 'wm-lh-S_frontal_inferior' },\n 3155: { color: [141, 20, 100], opacity: 1, label: 'wm-lh-S_frontal_middle' },\n 3156: { color: [61, 220, 100], opacity: 1, label: 'wm-lh-S_frontal_superior' },\n 3157: { color: [21, 220, 60], opacity: 1, label: 'wm-lh-S_frontomarginal' },\n 3158: { color: [141, 60, 20], opacity: 1, label: 'wm-lh-S_intermedius_primus-Jensen' },\n 3159: {\n color: [143, 20, 220],\n opacity: 1,\n label: 'wm-lh-S_intraparietal-and_Parietal_transverse',\n },\n 3160: { color: [61, 20, 180], opacity: 1, label: 'wm-lh-S_occipital_anterior' },\n 3161: { color: [101, 60, 220], opacity: 1, label: 'wm-lh-S_occipital_middle_and_Lunatus' },\n 3162: { color: [21, 20, 140], opacity: 1, label: 'wm-lh-S_occipital_superior_and_transversalis' },\n 3163: { color: [221, 140, 20], opacity: 1, label: 'wm-lh-S_occipito-temporal_lateral' },\n 3164: {\n color: [141, 100, 220],\n opacity: 1,\n label: 'wm-lh-S_occipito-temporal_medial_and_S_Lingual',\n },\n 3165: { color: [101, 20, 20], opacity: 1, label: 'wm-lh-S_orbital-H_shapped' },\n 3166: { color: [221, 100, 20], opacity: 1, label: 'wm-lh-S_orbital_lateral' },\n 3167: { color: [181, 200, 20], opacity: 1, label: 'wm-lh-S_orbital_medial-Or_olfactory' },\n 3168: { color: [21, 180, 140], opacity: 1, label: 'wm-lh-S_paracentral' },\n 3169: { color: [101, 100, 180], opacity: 1, label: 'wm-lh-S_parieto_occipital' },\n 3170: { color: [181, 220, 20], opacity: 1, label: 'wm-lh-S_pericallosal' },\n 3171: { color: [21, 140, 200], opacity: 1, label: 'wm-lh-S_postcentral' },\n 3172: { color: [21, 20, 240], opacity: 1, label: 'wm-lh-S_precentral-Inferior-part' },\n 3173: { color: [21, 20, 200], opacity: 1, label: 'wm-lh-S_precentral-Superior-part' },\n 3174: { color: [61, 180, 60], opacity: 1, label: 'wm-lh-S_subcentral_ant' },\n 3175: { color: [61, 180, 250], opacity: 1, label: 'wm-lh-S_subcentral_post' },\n 3176: { color: [21, 20, 60], opacity: 1, label: 'wm-lh-S_suborbital' },\n 3177: { color: [101, 60, 60], opacity: 1, label: 'wm-lh-S_subparietal' },\n 3178: { color: [21, 220, 220], opacity: 1, label: 'wm-lh-S_supracingulate' },\n 3179: { color: [21, 180, 180], opacity: 1, label: 'wm-lh-S_temporal_inferior' },\n 3180: { color: [223, 220, 60], opacity: 1, label: 'wm-lh-S_temporal_superior' },\n 3181: { color: [221, 60, 60], opacity: 1, label: 'wm-lh-S_temporal_transverse' },\n 4100: { color: [0, 0, 0], opacity: 1, label: 'wm-rh-Unknown' },\n 4101: { color: [50, 50, 50], opacity: 1, label: 'wm-rh-Corpus_callosum' },\n 4102: { color: [180, 20, 30], opacity: 1, label: 'wm-rh-G_and_S_Insula_ONLY_AVERAGE' },\n 4103: { color: [60, 25, 25], opacity: 1, label: 'wm-rh-G_cingulate-Isthmus' },\n 4104: { color: [25, 60, 60], opacity: 1, label: 'wm-rh-G_cingulate-Main_part' },\n 4105: { color: [180, 20, 20], opacity: 1, label: 'wm-rh-G_cuneus' },\n 4106: { color: [220, 20, 100], opacity: 1, label: 'wm-rh-G_frontal_inf-Opercular_part' },\n 4107: { color: [140, 60, 60], opacity: 1, label: 'wm-rh-G_frontal_inf-Orbital_part' },\n 4108: { color: [180, 220, 140], opacity: 1, label: 'wm-rh-G_frontal_inf-Triangular_part' },\n 4109: { color: [140, 100, 180], opacity: 1, label: 'wm-rh-G_frontal_middle' },\n 4110: { color: [180, 20, 140], opacity: 1, label: 'wm-rh-G_frontal_superior' },\n 4111: { color: [140, 20, 140], opacity: 1, label: 'wm-rh-G_frontomarginal' },\n 4112: { color: [21, 10, 10], opacity: 1, label: 'wm-rh-G_insular_long' },\n 4113: { color: [225, 140, 140], opacity: 1, label: 'wm-rh-G_insular_short' },\n 4114: { color: [23, 60, 180], opacity: 1, label: 'wm-rh-G_and_S_occipital_inferior' },\n 4115: { color: [180, 60, 180], opacity: 1, label: 'wm-rh-G_occipital_middle' },\n 4116: { color: [20, 220, 60], opacity: 1, label: 'wm-rh-G_occipital_superior' },\n 4117: { color: [60, 20, 140], opacity: 1, label: 'wm-rh-G_occipit-temp_lat-Or_fusiform' },\n 4118: { color: [220, 180, 140], opacity: 1, label: 'wm-rh-G_occipit-temp_med-Lingual_part' },\n 4119: {\n color: [65, 100, 20],\n opacity: 1,\n label: 'wm-rh-G_occipit-temp_med-Parahippocampal_part',\n },\n 4120: { color: [220, 60, 20], opacity: 1, label: 'wm-rh-G_orbital' },\n 4121: { color: [60, 100, 60], opacity: 1, label: 'wm-rh-G_paracentral' },\n 4122: { color: [20, 60, 220], opacity: 1, label: 'wm-rh-G_parietal_inferior-Angular_part' },\n 4123: {\n color: [100, 100, 60],\n opacity: 1,\n label: 'wm-rh-G_parietal_inferior-Supramarginal_part',\n },\n 4124: { color: [220, 180, 220], opacity: 1, label: 'wm-rh-G_parietal_superior' },\n 4125: { color: [20, 180, 140], opacity: 1, label: 'wm-rh-G_postcentral' },\n 4126: { color: [60, 140, 180], opacity: 1, label: 'wm-rh-G_precentral' },\n 4127: { color: [25, 20, 140], opacity: 1, label: 'wm-rh-G_precuneus' },\n 4128: { color: [20, 60, 100], opacity: 1, label: 'wm-rh-G_rectus' },\n 4129: { color: [60, 220, 20], opacity: 1, label: 'wm-rh-G_subcallosal' },\n 4130: { color: [60, 20, 220], opacity: 1, label: 'wm-rh-G_subcentral' },\n 4131: { color: [220, 220, 100], opacity: 1, label: 'wm-rh-G_temporal_inferior' },\n 4132: { color: [180, 60, 60], opacity: 1, label: 'wm-rh-G_temporal_middle' },\n 4133: { color: [60, 60, 220], opacity: 1, label: 'wm-rh-G_temp_sup-G_temp_transv_and_interm_S' },\n 4134: { color: [220, 60, 220], opacity: 1, label: 'wm-rh-G_temp_sup-Lateral_aspect' },\n 4135: { color: [65, 220, 60], opacity: 1, label: 'wm-rh-G_temp_sup-Planum_polare' },\n 4136: { color: [25, 140, 20], opacity: 1, label: 'wm-rh-G_temp_sup-Planum_tempolare' },\n 4137: { color: [13, 0, 250], opacity: 1, label: 'wm-rh-G_and_S_transverse_frontopolar' },\n 4138: { color: [61, 20, 220], opacity: 1, label: 'wm-rh-Lat_Fissure-ant_sgt-ramus_horizontal' },\n 4139: { color: [61, 20, 60], opacity: 1, label: 'wm-rh-Lat_Fissure-ant_sgt-ramus_vertical' },\n 4140: { color: [61, 60, 100], opacity: 1, label: 'wm-rh-Lat_Fissure-post_sgt' },\n 4141: { color: [25, 25, 25], opacity: 1, label: 'wm-rh-Medial_wall' },\n 4142: { color: [140, 20, 60], opacity: 1, label: 'wm-rh-Pole_occipital' },\n 4143: { color: [220, 180, 20], opacity: 1, label: 'wm-rh-Pole_temporal' },\n 4144: { color: [63, 180, 180], opacity: 1, label: 'wm-rh-S_calcarine' },\n 4145: { color: [221, 20, 10], opacity: 1, label: 'wm-rh-S_central' },\n 4146: { color: [21, 220, 20], opacity: 1, label: 'wm-rh-S_central_insula' },\n 4147: {\n color: [183, 100, 20],\n opacity: 1,\n label: 'wm-rh-S_cingulate-Main_part_and_Intracingulate',\n },\n 4148: { color: [221, 20, 100], opacity: 1, label: 'wm-rh-S_cingulate-Marginalis_part' },\n 4149: { color: [221, 60, 140], opacity: 1, label: 'wm-rh-S_circular_insula_anterior' },\n 4150: { color: [221, 20, 220], opacity: 1, label: 'wm-rh-S_circular_insula_inferior' },\n 4151: { color: [61, 220, 220], opacity: 1, label: 'wm-rh-S_circular_insula_superior' },\n 4152: { color: [100, 200, 200], opacity: 1, label: 'wm-rh-S_collateral_transverse_ant' },\n 4153: { color: [10, 200, 200], opacity: 1, label: 'wm-rh-S_collateral_transverse_post' },\n 4154: { color: [221, 220, 20], opacity: 1, label: 'wm-rh-S_frontal_inferior' },\n 4155: { color: [141, 20, 100], opacity: 1, label: 'wm-rh-S_frontal_middle' },\n 4156: { color: [61, 220, 100], opacity: 1, label: 'wm-rh-S_frontal_superior' },\n 4157: { color: [21, 220, 60], opacity: 1, label: 'wm-rh-S_frontomarginal' },\n 4158: { color: [141, 60, 20], opacity: 1, label: 'wm-rh-S_intermedius_primus-Jensen' },\n 4159: {\n color: [143, 20, 220],\n opacity: 1,\n label: 'wm-rh-S_intraparietal-and_Parietal_transverse',\n },\n 4160: { color: [61, 20, 180], opacity: 1, label: 'wm-rh-S_occipital_anterior' },\n 4161: { color: [101, 60, 220], opacity: 1, label: 'wm-rh-S_occipital_middle_and_Lunatus' },\n 4162: { color: [21, 20, 140], opacity: 1, label: 'wm-rh-S_occipital_superior_and_transversalis' },\n 4163: { color: [221, 140, 20], opacity: 1, label: 'wm-rh-S_occipito-temporal_lateral' },\n 4164: {\n color: [141, 100, 220],\n opacity: 1,\n label: 'wm-rh-S_occipito-temporal_medial_and_S_Lingual',\n },\n 4165: { color: [101, 20, 20], opacity: 1, label: 'wm-rh-S_orbital-H_shapped' },\n 4166: { color: [221, 100, 20], opacity: 1, label: 'wm-rh-S_orbital_lateral' },\n 4167: { color: [181, 200, 20], opacity: 1, label: 'wm-rh-S_orbital_medial-Or_olfactory' },\n 4168: { color: [21, 180, 140], opacity: 1, label: 'wm-rh-S_paracentral' },\n 4169: { color: [101, 100, 180], opacity: 1, label: 'wm-rh-S_parieto_occipital' },\n 4170: { color: [181, 220, 20], opacity: 1, label: 'wm-rh-S_pericallosal' },\n 4171: { color: [21, 140, 200], opacity: 1, label: 'wm-rh-S_postcentral' },\n 4172: { color: [21, 20, 240], opacity: 1, label: 'wm-rh-S_precentral-Inferior-part' },\n 4173: { color: [21, 20, 200], opacity: 1, label: 'wm-rh-S_precentral-Superior-part' },\n 4174: { color: [61, 180, 60], opacity: 1, label: 'wm-rh-S_subcentral_ant' },\n 4175: { color: [61, 180, 250], opacity: 1, label: 'wm-rh-S_subcentral_post' },\n 4176: { color: [21, 20, 60], opacity: 1, label: 'wm-rh-S_suborbital' },\n 4177: { color: [101, 60, 60], opacity: 1, label: 'wm-rh-S_subparietal' },\n 4178: { color: [21, 220, 220], opacity: 1, label: 'wm-rh-S_supracingulate' },\n 4179: { color: [21, 180, 180], opacity: 1, label: 'wm-rh-S_temporal_inferior' },\n 4180: { color: [223, 220, 60], opacity: 1, label: 'wm-rh-S_temporal_superior' },\n 4181: { color: [221, 60, 60], opacity: 1, label: 'wm-rh-S_temporal_transverse' },\n 5001: { color: [20, 30, 40], opacity: 1, label: 'Left-UnsegmentedWhiteMatter' },\n 5002: { color: [20, 30, 40], opacity: 1, label: 'Right-UnsegmentedWhiteMatter' },\n 5100: { color: [204, 102, 102], opacity: 1, label: 'fmajor' },\n 5101: { color: [204, 102, 102], opacity: 1, label: 'fminor' },\n 5102: { color: [255, 255, 102], opacity: 1, label: 'lh.atr' },\n 5103: { color: [153, 204, 0], opacity: 1, label: 'lh.cab' },\n 5104: { color: [0, 153, 153], opacity: 1, label: 'lh.ccg' },\n 5105: { color: [204, 153, 255], opacity: 1, label: 'lh.cst' },\n 5106: { color: [255, 153, 51], opacity: 1, label: 'lh.ilf' },\n 5107: { color: [204, 204, 204], opacity: 1, label: 'lh.slfp' },\n 5108: { color: [153, 255, 255], opacity: 1, label: 'lh.slft' },\n 5109: { color: [102, 153, 255], opacity: 1, label: 'lh.unc' },\n 5110: { color: [255, 255, 102], opacity: 1, label: 'rh.atr' },\n 5111: { color: [153, 204, 0], opacity: 1, label: 'rh.cab' },\n 5112: { color: [0, 153, 153], opacity: 1, label: 'rh.ccg' },\n 5113: { color: [204, 153, 255], opacity: 1, label: 'rh.cst' },\n 5114: { color: [255, 153, 51], opacity: 1, label: 'rh.ilf' },\n 5115: { color: [204, 204, 204], opacity: 1, label: 'rh.slfp' },\n 5116: { color: [153, 255, 255], opacity: 1, label: 'rh.slft' },\n 5117: { color: [102, 153, 255], opacity: 1, label: 'rh.unc' },\n 5200: { color: [204, 102, 102], opacity: 1, label: 'CC-ForcepsMajor' },\n 5201: { color: [204, 102, 102], opacity: 1, label: 'CC-ForcepsMinor' },\n 5202: { color: [255, 255, 102], opacity: 1, label: 'LAntThalRadiation' },\n 5203: { color: [153, 204, 0], opacity: 1, label: 'LCingulumAngBundle' },\n 5204: { color: [0, 153, 153], opacity: 1, label: 'LCingulumCingGyrus' },\n 5205: { color: [204, 153, 255], opacity: 1, label: 'LCorticospinalTract' },\n 5206: { color: [255, 153, 51], opacity: 1, label: 'LInfLongFas' },\n 5207: { color: [204, 204, 204], opacity: 1, label: 'LSupLongFasParietal' },\n 5208: { color: [153, 255, 255], opacity: 1, label: 'LSupLongFasTemporal' },\n 5209: { color: [102, 153, 255], opacity: 1, label: 'LUncinateFas' },\n 5210: { color: [255, 255, 102], opacity: 1, label: 'RAntThalRadiation' },\n 5211: { color: [153, 204, 0], opacity: 1, label: 'RCingulumAngBundle' },\n 5212: { color: [0, 153, 153], opacity: 1, label: 'RCingulumCingGyrus' },\n 5213: { color: [204, 153, 255], opacity: 1, label: 'RCorticospinalTract' },\n 5214: { color: [255, 153, 51], opacity: 1, label: 'RInfLongFas' },\n 5215: { color: [204, 204, 204], opacity: 1, label: 'RSupLongFasParietal' },\n 5216: { color: [153, 255, 255], opacity: 1, label: 'RSupLongFasTemporal' },\n 5217: { color: [102, 153, 255], opacity: 1, label: 'RUncinateFas' },\n 6000: { color: [0, 255, 0], opacity: 1, label: 'CST-orig' },\n 6001: { color: [255, 255, 0], opacity: 1, label: 'CST-hammer' },\n 6002: { color: [0, 255, 255], opacity: 1, label: 'CST-CVS' },\n 6003: { color: [0, 0, 255], opacity: 1, label: 'CST-flirt' },\n 6010: { color: [236, 16, 231], opacity: 1, label: 'Left-SLF1' },\n 6020: { color: [237, 18, 232], opacity: 1, label: 'Right-SLF1' },\n 6030: { color: [236, 13, 227], opacity: 1, label: 'Left-SLF3' },\n 6040: { color: [236, 17, 228], opacity: 1, label: 'Right-SLF3' },\n 6050: { color: [1, 255, 1], opacity: 1, label: 'Left-CST' },\n 6060: { color: [2, 255, 1], opacity: 1, label: 'Right-CST' },\n 6070: { color: [236, 14, 230], opacity: 1, label: 'Left-SLF2' },\n 6080: { color: [237, 14, 230], opacity: 1, label: 'Right-SLF2' },\n 7001: { color: [72, 132, 181], opacity: 1, label: 'Lateral-nucleus' },\n 7002: { color: [243, 243, 243], opacity: 1, label: 'Basolateral-nucleus' },\n 7003: { color: [207, 63, 79], opacity: 1, label: 'Basal-nucleus' },\n 7004: { color: [121, 20, 135], opacity: 1, label: 'Centromedial-nucleus' },\n 7005: { color: [197, 60, 248], opacity: 1, label: 'Central-nucleus' },\n 7006: { color: [2, 149, 2], opacity: 1, label: 'Medial-nucleus' },\n 7007: { color: [221, 249, 166], opacity: 1, label: 'Cortical-nucleus' },\n 7008: { color: [232, 146, 35], opacity: 1, label: 'Accessory-Basal-nucleus' },\n 7009: { color: [20, 60, 120], opacity: 1, label: 'Corticoamygdaloid-transitio' },\n 7010: { color: [250, 250, 0], opacity: 1, label: 'Anterior-amygdaloid-area-AAA' },\n 7011: { color: [122, 187, 222], opacity: 1, label: 'Fusion-amygdala-HP-FAH' },\n 7012: { color: [237, 12, 177], opacity: 1, label: 'Hippocampal-amygdala-transition-HATA' },\n 7013: { color: [10, 49, 255], opacity: 1, label: 'Endopiriform-nucleus' },\n 7014: { color: [205, 184, 144], opacity: 1, label: 'Lateral-nucleus-olfactory-tract' },\n 7015: { color: [45, 205, 165], opacity: 1, label: 'Paralaminar-nucleus' },\n 7016: { color: [117, 160, 175], opacity: 1, label: 'Intercalated-nucleus' },\n 7017: { color: [221, 217, 21], opacity: 1, label: 'Prepiriform-cortex' },\n 7018: { color: [20, 60, 120], opacity: 1, label: 'Periamygdaloid-cortex' },\n 7019: { color: [141, 21, 100], opacity: 1, label: 'Envelope-Amygdala' },\n 7020: { color: [225, 140, 141], opacity: 1, label: 'Extranuclear-Amydala' },\n 7100: { color: [42, 201, 168], opacity: 1, label: 'Brainstem-inferior-colliculus' },\n 7101: { color: [168, 104, 162], opacity: 1, label: 'Brainstem-cochlear-nucleus' },\n 8001: { color: [74, 130, 181], opacity: 1, label: 'Thalamus-Anterior' },\n 8002: { color: [242, 241, 240], opacity: 1, label: 'Thalamus-Ventral-anterior' },\n 8003: { color: [206, 65, 78], opacity: 1, label: 'Thalamus-Lateral-dorsal' },\n 8004: { color: [120, 21, 133], opacity: 1, label: 'Thalamus-Lateral-posterior' },\n 8005: { color: [195, 61, 246], opacity: 1, label: 'Thalamus-Ventral-lateral' },\n 8006: { color: [3, 147, 6], opacity: 1, label: 'Thalamus-Ventral-posterior-medial' },\n 8007: { color: [220, 251, 163], opacity: 1, label: 'Thalamus-Ventral-posterior-lateral' },\n 8008: { color: [232, 146, 33], opacity: 1, label: 'Thalamus-intralaminar' },\n 8009: { color: [4, 114, 14], opacity: 1, label: 'Thalamus-centromedian' },\n 8010: { color: [121, 184, 220], opacity: 1, label: 'Thalamus-mediodorsal' },\n 8011: { color: [235, 11, 175], opacity: 1, label: 'Thalamus-medial' },\n 8012: { color: [12, 46, 250], opacity: 1, label: 'Thalamus-pulvinar' },\n 8013: { color: [203, 182, 143], opacity: 1, label: 'Thalamus-lateral-geniculate' },\n 8014: { color: [42, 204, 167], opacity: 1, label: 'Thalamus-medial-geniculate' },\n 9000: { color: [50, 100, 30], opacity: 1, label: 'ctx-lh-prefrontal' },\n 9001: { color: [30, 100, 45], opacity: 1, label: 'ctx-lh-primary-motor' },\n 9002: { color: [130, 100, 165], opacity: 1, label: 'ctx-lh-premotor' },\n 9003: { color: [105, 25, 5], opacity: 1, label: 'ctx-lh-temporal' },\n 9004: { color: [125, 70, 55], opacity: 1, label: 'ctx-lh-posterior-parietal' },\n 9005: { color: [225, 20, 105], opacity: 1, label: 'ctx-lh-prim-sec-somatosensory' },\n 9006: { color: [225, 20, 15], opacity: 1, label: 'ctx-lh-occipital' },\n 9500: { color: [50, 200, 30], opacity: 1, label: 'ctx-rh-prefrontal' },\n 9501: { color: [30, 150, 45], opacity: 1, label: 'ctx-rh-primary-motor' },\n 9502: { color: [130, 150, 165], opacity: 1, label: 'ctx-rh-premotor' },\n 9503: { color: [105, 75, 5], opacity: 1, label: 'ctx-rh-temporal' },\n 9504: { color: [125, 120, 55], opacity: 1, label: 'ctx-rh-posterior-parietal' },\n 9505: { color: [225, 70, 105], opacity: 1, label: 'ctx-rh-prim-sec-somatosensory' },\n 9506: { color: [225, 70, 15], opacity: 1, label: 'ctx-rh-occipital' },\n 11100: { color: [0, 0, 0], opacity: 1, label: 'ctx_lh_Unknown' },\n 11101: { color: [23, 220, 60], opacity: 1, label: 'ctx_lh_G_and_S_frontomargin' },\n 11102: { color: [23, 60, 180], opacity: 1, label: 'ctx_lh_G_and_S_occipital_inf' },\n 11103: { color: [63, 100, 60], opacity: 1, label: 'ctx_lh_G_and_S_paracentral' },\n 11104: { color: [63, 20, 220], opacity: 1, label: 'ctx_lh_G_and_S_subcentral' },\n 11105: { color: [13, 0, 250], opacity: 1, label: 'ctx_lh_G_and_S_transv_frontopol' },\n 11106: { color: [26, 60, 0], opacity: 1, label: 'ctx_lh_G_and_S_cingul-Ant' },\n 11107: { color: [26, 60, 75], opacity: 1, label: 'ctx_lh_G_and_S_cingul-Mid-Ant' },\n 11108: { color: [26, 60, 150], opacity: 1, label: 'ctx_lh_G_and_S_cingul-Mid-Post' },\n 11109: { color: [25, 60, 250], opacity: 1, label: 'ctx_lh_G_cingul-Post-dorsal' },\n 11110: { color: [60, 25, 25], opacity: 1, label: 'ctx_lh_G_cingul-Post-ventral' },\n 11111: { color: [180, 20, 20], opacity: 1, label: 'ctx_lh_G_cuneus' },\n 11112: { color: [220, 20, 100], opacity: 1, label: 'ctx_lh_G_front_inf-Opercular' },\n 11113: { color: [140, 60, 60], opacity: 1, label: 'ctx_lh_G_front_inf-Orbital' },\n 11114: { color: [180, 220, 140], opacity: 1, label: 'ctx_lh_G_front_inf-Triangul' },\n 11115: { color: [140, 100, 180], opacity: 1, label: 'ctx_lh_G_front_middle' },\n 11116: { color: [180, 20, 140], opacity: 1, label: 'ctx_lh_G_front_sup' },\n 11117: { color: [23, 10, 10], opacity: 1, label: 'ctx_lh_G_Ins_lg_and_S_cent_ins' },\n 11118: { color: [225, 140, 140], opacity: 1, label: 'ctx_lh_G_insular_short' },\n 11119: { color: [180, 60, 180], opacity: 1, label: 'ctx_lh_G_occipital_middle' },\n 11120: { color: [20, 220, 60], opacity: 1, label: 'ctx_lh_G_occipital_sup' },\n 11121: { color: [60, 20, 140], opacity: 1, label: 'ctx_lh_G_oc-temp_lat-fusifor' },\n 11122: { color: [220, 180, 140], opacity: 1, label: 'ctx_lh_G_oc-temp_med-Lingual' },\n 11123: { color: [65, 100, 20], opacity: 1, label: 'ctx_lh_G_oc-temp_med-Parahip' },\n 11124: { color: [220, 60, 20], opacity: 1, label: 'ctx_lh_G_orbital' },\n 11125: { color: [20, 60, 220], opacity: 1, label: 'ctx_lh_G_pariet_inf-Angular' },\n 11126: { color: [100, 100, 60], opacity: 1, label: 'ctx_lh_G_pariet_inf-Supramar' },\n 11127: { color: [220, 180, 220], opacity: 1, label: 'ctx_lh_G_parietal_sup' },\n 11128: { color: [20, 180, 140], opacity: 1, label: 'ctx_lh_G_postcentral' },\n 11129: { color: [60, 140, 180], opacity: 1, label: 'ctx_lh_G_precentral' },\n 11130: { color: [25, 20, 140], opacity: 1, label: 'ctx_lh_G_precuneus' },\n 11131: { color: [20, 60, 100], opacity: 1, label: 'ctx_lh_G_rectus' },\n 11132: { color: [60, 220, 20], opacity: 1, label: 'ctx_lh_G_subcallosal' },\n 11133: { color: [60, 60, 220], opacity: 1, label: 'ctx_lh_G_temp_sup-G_T_transv' },\n 11134: { color: [220, 60, 220], opacity: 1, label: 'ctx_lh_G_temp_sup-Lateral' },\n 11135: { color: [65, 220, 60], opacity: 1, label: 'ctx_lh_G_temp_sup-Plan_polar' },\n 11136: { color: [25, 140, 20], opacity: 1, label: 'ctx_lh_G_temp_sup-Plan_tempo' },\n 11137: { color: [220, 220, 100], opacity: 1, label: 'ctx_lh_G_temporal_inf' },\n 11138: { color: [180, 60, 60], opacity: 1, label: 'ctx_lh_G_temporal_middle' },\n 11139: { color: [61, 20, 220], opacity: 1, label: 'ctx_lh_Lat_Fis-ant-Horizont' },\n 11140: { color: [61, 20, 60], opacity: 1, label: 'ctx_lh_Lat_Fis-ant-Vertical' },\n 11141: { color: [61, 60, 100], opacity: 1, label: 'ctx_lh_Lat_Fis-post' },\n 11142: { color: [25, 25, 25], opacity: 1, label: 'ctx_lh_Medial_wall' },\n 11143: { color: [140, 20, 60], opacity: 1, label: 'ctx_lh_Pole_occipital' },\n 11144: { color: [220, 180, 20], opacity: 1, label: 'ctx_lh_Pole_temporal' },\n 11145: { color: [63, 180, 180], opacity: 1, label: 'ctx_lh_S_calcarine' },\n 11146: { color: [221, 20, 10], opacity: 1, label: 'ctx_lh_S_central' },\n 11147: { color: [221, 20, 100], opacity: 1, label: 'ctx_lh_S_cingul-Marginalis' },\n 11148: { color: [221, 60, 140], opacity: 1, label: 'ctx_lh_S_circular_insula_ant' },\n 11149: { color: [221, 20, 220], opacity: 1, label: 'ctx_lh_S_circular_insula_inf' },\n 11150: { color: [61, 220, 220], opacity: 1, label: 'ctx_lh_S_circular_insula_sup' },\n 11151: { color: [100, 200, 200], opacity: 1, label: 'ctx_lh_S_collat_transv_ant' },\n 11152: { color: [10, 200, 200], opacity: 1, label: 'ctx_lh_S_collat_transv_post' },\n 11153: { color: [221, 220, 20], opacity: 1, label: 'ctx_lh_S_front_inf' },\n 11154: { color: [141, 20, 100], opacity: 1, label: 'ctx_lh_S_front_middle' },\n 11155: { color: [61, 220, 100], opacity: 1, label: 'ctx_lh_S_front_sup' },\n 11156: { color: [141, 60, 20], opacity: 1, label: 'ctx_lh_S_interm_prim-Jensen' },\n 11157: { color: [143, 20, 220], opacity: 1, label: 'ctx_lh_S_intrapariet_and_P_trans' },\n 11158: { color: [101, 60, 220], opacity: 1, label: 'ctx_lh_S_oc_middle_and_Lunatus' },\n 11159: { color: [21, 20, 140], opacity: 1, label: 'ctx_lh_S_oc_sup_and_transversal' },\n 11160: { color: [61, 20, 180], opacity: 1, label: 'ctx_lh_S_occipital_ant' },\n 11161: { color: [221, 140, 20], opacity: 1, label: 'ctx_lh_S_oc-temp_lat' },\n 11162: { color: [141, 100, 220], opacity: 1, label: 'ctx_lh_S_oc-temp_med_and_Lingual' },\n 11163: { color: [221, 100, 20], opacity: 1, label: 'ctx_lh_S_orbital_lateral' },\n 11164: { color: [181, 200, 20], opacity: 1, label: 'ctx_lh_S_orbital_med-olfact' },\n 11165: { color: [101, 20, 20], opacity: 1, label: 'ctx_lh_S_orbital-H_Shaped' },\n 11166: { color: [101, 100, 180], opacity: 1, label: 'ctx_lh_S_parieto_occipital' },\n 11167: { color: [181, 220, 20], opacity: 1, label: 'ctx_lh_S_pericallosal' },\n 11168: { color: [21, 140, 200], opacity: 1, label: 'ctx_lh_S_postcentral' },\n 11169: { color: [21, 20, 240], opacity: 1, label: 'ctx_lh_S_precentral-inf-part' },\n 11170: { color: [21, 20, 200], opacity: 1, label: 'ctx_lh_S_precentral-sup-part' },\n 11171: { color: [21, 20, 60], opacity: 1, label: 'ctx_lh_S_suborbital' },\n 11172: { color: [101, 60, 60], opacity: 1, label: 'ctx_lh_S_subparietal' },\n 11173: { color: [21, 180, 180], opacity: 1, label: 'ctx_lh_S_temporal_inf' },\n 11174: { color: [223, 220, 60], opacity: 1, label: 'ctx_lh_S_temporal_sup' },\n 11175: { color: [221, 60, 60], opacity: 1, label: 'ctx_lh_S_temporal_transverse' },\n 12100: { color: [0, 0, 0], opacity: 1, label: 'ctx_rh_Unknown' },\n 12101: { color: [23, 220, 60], opacity: 1, label: 'ctx_rh_G_and_S_frontomargin' },\n 12102: { color: [23, 60, 180], opacity: 1, label: 'ctx_rh_G_and_S_occipital_inf' },\n 12103: { color: [63, 100, 60], opacity: 1, label: 'ctx_rh_G_and_S_paracentral' },\n 12104: { color: [63, 20, 220], opacity: 1, label: 'ctx_rh_G_and_S_subcentral' },\n 12105: { color: [13, 0, 250], opacity: 1, label: 'ctx_rh_G_and_S_transv_frontopol' },\n 12106: { color: [26, 60, 0], opacity: 1, label: 'ctx_rh_G_and_S_cingul-Ant' },\n 12107: { color: [26, 60, 75], opacity: 1, label: 'ctx_rh_G_and_S_cingul-Mid-Ant' },\n 12108: { color: [26, 60, 150], opacity: 1, label: 'ctx_rh_G_and_S_cingul-Mid-Post' },\n 12109: { color: [25, 60, 250], opacity: 1, label: 'ctx_rh_G_cingul-Post-dorsal' },\n 12110: { color: [60, 25, 25], opacity: 1, label: 'ctx_rh_G_cingul-Post-ventral' },\n 12111: { color: [180, 20, 20], opacity: 1, label: 'ctx_rh_G_cuneus' },\n 12112: { color: [220, 20, 100], opacity: 1, label: 'ctx_rh_G_front_inf-Opercular' },\n 12113: { color: [140, 60, 60], opacity: 1, label: 'ctx_rh_G_front_inf-Orbital' },\n 12114: { color: [180, 220, 140], opacity: 1, label: 'ctx_rh_G_front_inf-Triangul' },\n 12115: { color: [140, 100, 180], opacity: 1, label: 'ctx_rh_G_front_middle' },\n 12116: { color: [180, 20, 140], opacity: 1, label: 'ctx_rh_G_front_sup' },\n 12117: { color: [23, 10, 10], opacity: 1, label: 'ctx_rh_G_Ins_lg_and_S_cent_ins' },\n 12118: { color: [225, 140, 140], opacity: 1, label: 'ctx_rh_G_insular_short' },\n 12119: { color: [180, 60, 180], opacity: 1, label: 'ctx_rh_G_occipital_middle' },\n 12120: { color: [20, 220, 60], opacity: 1, label: 'ctx_rh_G_occipital_sup' },\n 12121: { color: [60, 20, 140], opacity: 1, label: 'ctx_rh_G_oc-temp_lat-fusifor' },\n 12122: { color: [220, 180, 140], opacity: 1, label: 'ctx_rh_G_oc-temp_med-Lingual' },\n 12123: { color: [65, 100, 20], opacity: 1, label: 'ctx_rh_G_oc-temp_med-Parahip' },\n 12124: { color: [220, 60, 20], opacity: 1, label: 'ctx_rh_G_orbital' },\n 12125: { color: [20, 60, 220], opacity: 1, label: 'ctx_rh_G_pariet_inf-Angular' },\n 12126: { color: [100, 100, 60], opacity: 1, label: 'ctx_rh_G_pariet_inf-Supramar' },\n 12127: { color: [220, 180, 220], opacity: 1, label: 'ctx_rh_G_parietal_sup' },\n 12128: { color: [20, 180, 140], opacity: 1, label: 'ctx_rh_G_postcentral' },\n 12129: { color: [60, 140, 180], opacity: 1, label: 'ctx_rh_G_precentral' },\n 12130: { color: [25, 20, 140], opacity: 1, label: 'ctx_rh_G_precuneus' },\n 12131: { color: [20, 60, 100], opacity: 1, label: 'ctx_rh_G_rectus' },\n 12132: { color: [60, 220, 20], opacity: 1, label: 'ctx_rh_G_subcallosal' },\n 12133: { color: [60, 60, 220], opacity: 1, label: 'ctx_rh_G_temp_sup-G_T_transv' },\n 12134: { color: [220, 60, 220], opacity: 1, label: 'ctx_rh_G_temp_sup-Lateral' },\n 12135: { color: [65, 220, 60], opacity: 1, label: 'ctx_rh_G_temp_sup-Plan_polar' },\n 12136: { color: [25, 140, 20], opacity: 1, label: 'ctx_rh_G_temp_sup-Plan_tempo' },\n 12137: { color: [220, 220, 100], opacity: 1, label: 'ctx_rh_G_temporal_inf' },\n 12138: { color: [180, 60, 60], opacity: 1, label: 'ctx_rh_G_temporal_middle' },\n 12139: { color: [61, 20, 220], opacity: 1, label: 'ctx_rh_Lat_Fis-ant-Horizont' },\n 12140: { color: [61, 20, 60], opacity: 1, label: 'ctx_rh_Lat_Fis-ant-Vertical' },\n 12141: { color: [61, 60, 100], opacity: 1, label: 'ctx_rh_Lat_Fis-post' },\n 12142: { color: [25, 25, 25], opacity: 1, label: 'ctx_rh_Medial_wall' },\n 12143: { color: [140, 20, 60], opacity: 1, label: 'ctx_rh_Pole_occipital' },\n 12144: { color: [220, 180, 20], opacity: 1, label: 'ctx_rh_Pole_temporal' },\n 12145: { color: [63, 180, 180], opacity: 1, label: 'ctx_rh_S_calcarine' },\n 12146: { color: [221, 20, 10], opacity: 1, label: 'ctx_rh_S_central' },\n 12147: { color: [221, 20, 100], opacity: 1, label: 'ctx_rh_S_cingul-Marginalis' },\n 12148: { color: [221, 60, 140], opacity: 1, label: 'ctx_rh_S_circular_insula_ant' },\n 12149: { color: [221, 20, 220], opacity: 1, label: 'ctx_rh_S_circular_insula_inf' },\n 12150: { color: [61, 220, 220], opacity: 1, label: 'ctx_rh_S_circular_insula_sup' },\n 12151: { color: [100, 200, 200], opacity: 1, label: 'ctx_rh_S_collat_transv_ant' },\n 12152: { color: [10, 200, 200], opacity: 1, label: 'ctx_rh_S_collat_transv_post' },\n 12153: { color: [221, 220, 20], opacity: 1, label: 'ctx_rh_S_front_inf' },\n 12154: { color: [141, 20, 100], opacity: 1, label: 'ctx_rh_S_front_middle' },\n 12155: { color: [61, 220, 100], opacity: 1, label: 'ctx_rh_S_front_sup' },\n 12156: { color: [141, 60, 20], opacity: 1, label: 'ctx_rh_S_interm_prim-Jensen' },\n 12157: { color: [143, 20, 220], opacity: 1, label: 'ctx_rh_S_intrapariet_and_P_trans' },\n 12158: { color: [101, 60, 220], opacity: 1, label: 'ctx_rh_S_oc_middle_and_Lunatus' },\n 12159: { color: [21, 20, 140], opacity: 1, label: 'ctx_rh_S_oc_sup_and_transversal' },\n 12160: { color: [61, 20, 180], opacity: 1, label: 'ctx_rh_S_occipital_ant' },\n 12161: { color: [221, 140, 20], opacity: 1, label: 'ctx_rh_S_oc-temp_lat' },\n 12162: { color: [141, 100, 220], opacity: 1, label: 'ctx_rh_S_oc-temp_med_and_Lingual' },\n 12163: { color: [221, 100, 20], opacity: 1, label: 'ctx_rh_S_orbital_lateral' },\n 12164: { color: [181, 200, 20], opacity: 1, label: 'ctx_rh_S_orbital_med-olfact' },\n 12165: { color: [101, 20, 20], opacity: 1, label: 'ctx_rh_S_orbital-H_Shaped' },\n 12166: { color: [101, 100, 180], opacity: 1, label: 'ctx_rh_S_parieto_occipital' },\n 12167: { color: [181, 220, 20], opacity: 1, label: 'ctx_rh_S_pericallosal' },\n 12168: { color: [21, 140, 200], opacity: 1, label: 'ctx_rh_S_postcentral' },\n 12169: { color: [21, 20, 240], opacity: 1, label: 'ctx_rh_S_precentral-inf-part' },\n 12170: { color: [21, 20, 200], opacity: 1, label: 'ctx_rh_S_precentral-sup-part' },\n 12171: { color: [21, 20, 60], opacity: 1, label: 'ctx_rh_S_suborbital' },\n 12172: { color: [101, 60, 60], opacity: 1, label: 'ctx_rh_S_subparietal' },\n 12173: { color: [21, 180, 180], opacity: 1, label: 'ctx_rh_S_temporal_inf' },\n 12174: { color: [223, 220, 60], opacity: 1, label: 'ctx_rh_S_temporal_sup' },\n 12175: { color: [221, 60, 60], opacity: 1, label: 'ctx_rh_S_temporal_transverse' },\n 13100: { color: [0, 0, 0], opacity: 1, label: 'wm_lh_Unknown' },\n 13101: { color: [23, 220, 60], opacity: 1, label: 'wm_lh_G_and_S_frontomargin' },\n 13102: { color: [23, 60, 180], opacity: 1, label: 'wm_lh_G_and_S_occipital_inf' },\n 13103: { color: [63, 100, 60], opacity: 1, label: 'wm_lh_G_and_S_paracentral' },\n 13104: { color: [63, 20, 220], opacity: 1, label: 'wm_lh_G_and_S_subcentral' },\n 13105: { color: [13, 0, 250], opacity: 1, label: 'wm_lh_G_and_S_transv_frontopol' },\n 13106: { color: [26, 60, 0], opacity: 1, label: 'wm_lh_G_and_S_cingul-Ant' },\n 13107: { color: [26, 60, 75], opacity: 1, label: 'wm_lh_G_and_S_cingul-Mid-Ant' },\n 13108: { color: [26, 60, 150], opacity: 1, label: 'wm_lh_G_and_S_cingul-Mid-Post' },\n 13109: { color: [25, 60, 250], opacity: 1, label: 'wm_lh_G_cingul-Post-dorsal' },\n 13110: { color: [60, 25, 25], opacity: 1, label: 'wm_lh_G_cingul-Post-ventral' },\n 13111: { color: [180, 20, 20], opacity: 1, label: 'wm_lh_G_cuneus' },\n 13112: { color: [220, 20, 100], opacity: 1, label: 'wm_lh_G_front_inf-Opercular' },\n 13113: { color: [140, 60, 60], opacity: 1, label: 'wm_lh_G_front_inf-Orbital' },\n 13114: { color: [180, 220, 140], opacity: 1, label: 'wm_lh_G_front_inf-Triangul' },\n 13115: { color: [140, 100, 180], opacity: 1, label: 'wm_lh_G_front_middle' },\n 13116: { color: [180, 20, 140], opacity: 1, label: 'wm_lh_G_front_sup' },\n 13117: { color: [23, 10, 10], opacity: 1, label: 'wm_lh_G_Ins_lg_and_S_cent_ins' },\n 13118: { color: [225, 140, 140], opacity: 1, label: 'wm_lh_G_insular_short' },\n 13119: { color: [180, 60, 180], opacity: 1, label: 'wm_lh_G_occipital_middle' },\n 13120: { color: [20, 220, 60], opacity: 1, label: 'wm_lh_G_occipital_sup' },\n 13121: { color: [60, 20, 140], opacity: 1, label: 'wm_lh_G_oc-temp_lat-fusifor' },\n 13122: { color: [220, 180, 140], opacity: 1, label: 'wm_lh_G_oc-temp_med-Lingual' },\n 13123: { color: [65, 100, 20], opacity: 1, label: 'wm_lh_G_oc-temp_med-Parahip' },\n 13124: { color: [220, 60, 20], opacity: 1, label: 'wm_lh_G_orbital' },\n 13125: { color: [20, 60, 220], opacity: 1, label: 'wm_lh_G_pariet_inf-Angular' },\n 13126: { color: [100, 100, 60], opacity: 1, label: 'wm_lh_G_pariet_inf-Supramar' },\n 13127: { color: [220, 180, 220], opacity: 1, label: 'wm_lh_G_parietal_sup' },\n 13128: { color: [20, 180, 140], opacity: 1, label: 'wm_lh_G_postcentral' },\n 13129: { color: [60, 140, 180], opacity: 1, label: 'wm_lh_G_precentral' },\n 13130: { color: [25, 20, 140], opacity: 1, label: 'wm_lh_G_precuneus' },\n 13131: { color: [20, 60, 100], opacity: 1, label: 'wm_lh_G_rectus' },\n 13132: { color: [60, 220, 20], opacity: 1, label: 'wm_lh_G_subcallosal' },\n 13133: { color: [60, 60, 220], opacity: 1, label: 'wm_lh_G_temp_sup-G_T_transv' },\n 13134: { color: [220, 60, 220], opacity: 1, label: 'wm_lh_G_temp_sup-Lateral' },\n 13135: { color: [65, 220, 60], opacity: 1, label: 'wm_lh_G_temp_sup-Plan_polar' },\n 13136: { color: [25, 140, 20], opacity: 1, label: 'wm_lh_G_temp_sup-Plan_tempo' },\n 13137: { color: [220, 220, 100], opacity: 1, label: 'wm_lh_G_temporal_inf' },\n 13138: { color: [180, 60, 60], opacity: 1, label: 'wm_lh_G_temporal_middle' },\n 13139: { color: [61, 20, 220], opacity: 1, label: 'wm_lh_Lat_Fis-ant-Horizont' },\n 13140: { color: [61, 20, 60], opacity: 1, label: 'wm_lh_Lat_Fis-ant-Vertical' },\n 13141: { color: [61, 60, 100], opacity: 1, label: 'wm_lh_Lat_Fis-post' },\n 13142: { color: [25, 25, 25], opacity: 1, label: 'wm_lh_Medial_wall' },\n 13143: { color: [140, 20, 60], opacity: 1, label: 'wm_lh_Pole_occipital' },\n 13144: { color: [220, 180, 20], opacity: 1, label: 'wm_lh_Pole_temporal' },\n 13145: { color: [63, 180, 180], opacity: 1, label: 'wm_lh_S_calcarine' },\n 13146: { color: [221, 20, 10], opacity: 1, label: 'wm_lh_S_central' },\n 13147: { color: [221, 20, 100], opacity: 1, label: 'wm_lh_S_cingul-Marginalis' },\n 13148: { color: [221, 60, 140], opacity: 1, label: 'wm_lh_S_circular_insula_ant' },\n 13149: { color: [221, 20, 220], opacity: 1, label: 'wm_lh_S_circular_insula_inf' },\n 13150: { color: [61, 220, 220], opacity: 1, label: 'wm_lh_S_circular_insula_sup' },\n 13151: { color: [100, 200, 200], opacity: 1, label: 'wm_lh_S_collat_transv_ant' },\n 13152: { color: [10, 200, 200], opacity: 1, label: 'wm_lh_S_collat_transv_post' },\n 13153: { color: [221, 220, 20], opacity: 1, label: 'wm_lh_S_front_inf' },\n 13154: { color: [141, 20, 100], opacity: 1, label: 'wm_lh_S_front_middle' },\n 13155: { color: [61, 220, 100], opacity: 1, label: 'wm_lh_S_front_sup' },\n 13156: { color: [141, 60, 20], opacity: 1, label: 'wm_lh_S_interm_prim-Jensen' },\n 13157: { color: [143, 20, 220], opacity: 1, label: 'wm_lh_S_intrapariet_and_P_trans' },\n 13158: { color: [101, 60, 220], opacity: 1, label: 'wm_lh_S_oc_middle_and_Lunatus' },\n 13159: { color: [21, 20, 140], opacity: 1, label: 'wm_lh_S_oc_sup_and_transversal' },\n 13160: { color: [61, 20, 180], opacity: 1, label: 'wm_lh_S_occipital_ant' },\n 13161: { color: [221, 140, 20], opacity: 1, label: 'wm_lh_S_oc-temp_lat' },\n 13162: { color: [141, 100, 220], opacity: 1, label: 'wm_lh_S_oc-temp_med_and_Lingual' },\n 13163: { color: [221, 100, 20], opacity: 1, label: 'wm_lh_S_orbital_lateral' },\n 13164: { color: [181, 200, 20], opacity: 1, label: 'wm_lh_S_orbital_med-olfact' },\n 13165: { color: [101, 20, 20], opacity: 1, label: 'wm_lh_S_orbital-H_Shaped' },\n 13166: { color: [101, 100, 180], opacity: 1, label: 'wm_lh_S_parieto_occipital' },\n 13167: { color: [181, 220, 20], opacity: 1, label: 'wm_lh_S_pericallosal' },\n 13168: { color: [21, 140, 200], opacity: 1, label: 'wm_lh_S_postcentral' },\n 13169: { color: [21, 20, 240], opacity: 1, label: 'wm_lh_S_precentral-inf-part' },\n 13170: { color: [21, 20, 200], opacity: 1, label: 'wm_lh_S_precentral-sup-part' },\n 13171: { color: [21, 20, 60], opacity: 1, label: 'wm_lh_S_suborbital' },\n 13172: { color: [101, 60, 60], opacity: 1, label: 'wm_lh_S_subparietal' },\n 13173: { color: [21, 180, 180], opacity: 1, label: 'wm_lh_S_temporal_inf' },\n 13174: { color: [223, 220, 60], opacity: 1, label: 'wm_lh_S_temporal_sup' },\n 13175: { color: [221, 60, 60], opacity: 1, label: 'wm_lh_S_temporal_transverse' },\n 14100: { color: [0, 0, 0], opacity: 1, label: 'wm_rh_Unknown' },\n 14101: { color: [23, 220, 60], opacity: 1, label: 'wm_rh_G_and_S_frontomargin' },\n 14102: { color: [23, 60, 180], opacity: 1, label: 'wm_rh_G_and_S_occipital_inf' },\n 14103: { color: [63, 100, 60], opacity: 1, label: 'wm_rh_G_and_S_paracentral' },\n 14104: { color: [63, 20, 220], opacity: 1, label: 'wm_rh_G_and_S_subcentral' },\n 14105: { color: [13, 0, 250], opacity: 1, label: 'wm_rh_G_and_S_transv_frontopol' },\n 14106: { color: [26, 60, 0], opacity: 1, label: 'wm_rh_G_and_S_cingul-Ant' },\n 14107: { color: [26, 60, 75], opacity: 1, label: 'wm_rh_G_and_S_cingul-Mid-Ant' },\n 14108: { color: [26, 60, 150], opacity: 1, label: 'wm_rh_G_and_S_cingul-Mid-Post' },\n 14109: { color: [25, 60, 250], opacity: 1, label: 'wm_rh_G_cingul-Post-dorsal' },\n 14110: { color: [60, 25, 25], opacity: 1, label: 'wm_rh_G_cingul-Post-ventral' },\n 14111: { color: [180, 20, 20], opacity: 1, label: 'wm_rh_G_cuneus' },\n 14112: { color: [220, 20, 100], opacity: 1, label: 'wm_rh_G_front_inf-Opercular' },\n 14113: { color: [140, 60, 60], opacity: 1, label: 'wm_rh_G_front_inf-Orbital' },\n 14114: { color: [180, 220, 140], opacity: 1, label: 'wm_rh_G_front_inf-Triangul' },\n 14115: { color: [140, 100, 180], opacity: 1, label: 'wm_rh_G_front_middle' },\n 14116: { color: [180, 20, 140], opacity: 1, label: 'wm_rh_G_front_sup' },\n 14117: { color: [23, 10, 10], opacity: 1, label: 'wm_rh_G_Ins_lg_and_S_cent_ins' },\n 14118: { color: [225, 140, 140], opacity: 1, label: 'wm_rh_G_insular_short' },\n 14119: { color: [180, 60, 180], opacity: 1, label: 'wm_rh_G_occipital_middle' },\n 14120: { color: [20, 220, 60], opacity: 1, label: 'wm_rh_G_occipital_sup' },\n 14121: { color: [60, 20, 140], opacity: 1, label: 'wm_rh_G_oc-temp_lat-fusifor' },\n 14122: { color: [220, 180, 140], opacity: 1, label: 'wm_rh_G_oc-temp_med-Lingual' },\n 14123: { color: [65, 100, 20], opacity: 1, label: 'wm_rh_G_oc-temp_med-Parahip' },\n 14124: { color: [220, 60, 20], opacity: 1, label: 'wm_rh_G_orbital' },\n 14125: { color: [20, 60, 220], opacity: 1, label: 'wm_rh_G_pariet_inf-Angular' },\n 14126: { color: [100, 100, 60], opacity: 1, label: 'wm_rh_G_pariet_inf-Supramar' },\n 14127: { color: [220, 180, 220], opacity: 1, label: 'wm_rh_G_parietal_sup' },\n 14128: { color: [20, 180, 140], opacity: 1, label: 'wm_rh_G_postcentral' },\n 14129: { color: [60, 140, 180], opacity: 1, label: 'wm_rh_G_precentral' },\n 14130: { color: [25, 20, 140], opacity: 1, label: 'wm_rh_G_precuneus' },\n 14131: { color: [20, 60, 100], opacity: 1, label: 'wm_rh_G_rectus' },\n 14132: { color: [60, 220, 20], opacity: 1, label: 'wm_rh_G_subcallosal' },\n 14133: { color: [60, 60, 220], opacity: 1, label: 'wm_rh_G_temp_sup-G_T_transv' },\n 14134: { color: [220, 60, 220], opacity: 1, label: 'wm_rh_G_temp_sup-Lateral' },\n 14135: { color: [65, 220, 60], opacity: 1, label: 'wm_rh_G_temp_sup-Plan_polar' },\n 14136: { color: [25, 140, 20], opacity: 1, label: 'wm_rh_G_temp_sup-Plan_tempo' },\n 14137: { color: [220, 220, 100], opacity: 1, label: 'wm_rh_G_temporal_inf' },\n 14138: { color: [180, 60, 60], opacity: 1, label: 'wm_rh_G_temporal_middle' },\n 14139: { color: [61, 20, 220], opacity: 1, label: 'wm_rh_Lat_Fis-ant-Horizont' },\n 14140: { color: [61, 20, 60], opacity: 1, label: 'wm_rh_Lat_Fis-ant-Vertical' },\n 14141: { color: [61, 60, 100], opacity: 1, label: 'wm_rh_Lat_Fis-post' },\n 14142: { color: [25, 25, 25], opacity: 1, label: 'wm_rh_Medial_wall' },\n 14143: { color: [140, 20, 60], opacity: 1, label: 'wm_rh_Pole_occipital' },\n 14144: { color: [220, 180, 20], opacity: 1, label: 'wm_rh_Pole_temporal' },\n 14145: { color: [63, 180, 180], opacity: 1, label: 'wm_rh_S_calcarine' },\n 14146: { color: [221, 20, 10], opacity: 1, label: 'wm_rh_S_central' },\n 14147: { color: [221, 20, 100], opacity: 1, label: 'wm_rh_S_cingul-Marginalis' },\n 14148: { color: [221, 60, 140], opacity: 1, label: 'wm_rh_S_circular_insula_ant' },\n 14149: { color: [221, 20, 220], opacity: 1, label: 'wm_rh_S_circular_insula_inf' },\n 14150: { color: [61, 220, 220], opacity: 1, label: 'wm_rh_S_circular_insula_sup' },\n 14151: { color: [100, 200, 200], opacity: 1, label: 'wm_rh_S_collat_transv_ant' },\n 14152: { color: [10, 200, 200], opacity: 1, label: 'wm_rh_S_collat_transv_post' },\n 14153: { color: [221, 220, 20], opacity: 1, label: 'wm_rh_S_front_inf' },\n 14154: { color: [141, 20, 100], opacity: 1, label: 'wm_rh_S_front_middle' },\n 14155: { color: [61, 220, 100], opacity: 1, label: 'wm_rh_S_front_sup' },\n 14156: { color: [141, 60, 20], opacity: 1, label: 'wm_rh_S_interm_prim-Jensen' },\n 14157: { color: [143, 20, 220], opacity: 1, label: 'wm_rh_S_intrapariet_and_P_trans' },\n 14158: { color: [101, 60, 220], opacity: 1, label: 'wm_rh_S_oc_middle_and_Lunatus' },\n 14159: { color: [21, 20, 140], opacity: 1, label: 'wm_rh_S_oc_sup_and_transversal' },\n 14160: { color: [61, 20, 180], opacity: 1, label: 'wm_rh_S_occipital_ant' },\n 14161: { color: [221, 140, 20], opacity: 1, label: 'wm_rh_S_oc-temp_lat' },\n 14162: { color: [141, 100, 220], opacity: 1, label: 'wm_rh_S_oc-temp_med_and_Lingual' },\n 14163: { color: [221, 100, 20], opacity: 1, label: 'wm_rh_S_orbital_lateral' },\n 14164: { color: [181, 200, 20], opacity: 1, label: 'wm_rh_S_orbital_med-olfact' },\n 14165: { color: [101, 20, 20], opacity: 1, label: 'wm_rh_S_orbital-H_Shaped' },\n 14166: { color: [101, 100, 180], opacity: 1, label: 'wm_rh_S_parieto_occipital' },\n 14167: { color: [181, 220, 20], opacity: 1, label: 'wm_rh_S_pericallosal' },\n 14168: { color: [21, 140, 200], opacity: 1, label: 'wm_rh_S_postcentral' },\n 14169: { color: [21, 20, 240], opacity: 1, label: 'wm_rh_S_precentral-inf-part' },\n 14170: { color: [21, 20, 200], opacity: 1, label: 'wm_rh_S_precentral-sup-part' },\n 14171: { color: [21, 20, 60], opacity: 1, label: 'wm_rh_S_suborbital' },\n 14172: { color: [101, 60, 60], opacity: 1, label: 'wm_rh_S_subparietal' },\n 14173: { color: [21, 180, 180], opacity: 1, label: 'wm_rh_S_temporal_inf' },\n 14174: { color: [223, 220, 60], opacity: 1, label: 'wm_rh_S_temporal_sup' },\n 14175: { color: [221, 60, 60], opacity: 1, label: 'wm_rh_S_temporal_transverse' },\n};\n\nexport default segmentationFs;\n","/**\n * @module presets/segmentation\n */\n\nimport freesurferSegmentation from './presets.segmentation.freesurfer';\n\nexport default class PresetsSegmentation {\n constructor(presetID = 'Freesurfer') {\n this._presetID = presetID;\n this._presets = this.presetSegs();\n }\n\n set preset(targetPreset) {\n this._presetID = targetPreset;\n }\n\n get preset() {\n return this.fetchPreset(this._presetID);\n }\n\n fetchPreset(presetID) {\n let presets = this._presets;\n return presets[presetID];\n }\n\n addPreset(presetObj) {\n this._presets.push(presetObj);\n }\n\n presetsAvailable(type = 'segmentation') {\n let available = [];\n let presets = this._presets;\n\n for (let i in presets) {\n available.push(i);\n }\n\n return available;\n }\n\n presetSegs() {\n return {\n Freesurfer: freesurferSegmentation,\n };\n }\n}\n","import ShadersBase from '../shaders.base';\n\nclass IntersectBox extends ShadersBase {\n constructor() {\n super();\n this.name = 'intersectBox';\n\n // default properties names\n this._rayOrigin = 'rayOrigin';\n this._rayDirection = 'rayDirection';\n this._aabbMin = 'aabbMin';\n this._aabbMax = 'aabbMax';\n this._tNear = 'tNear';\n this._tFar = 'tFar';\n this._intersect = 'intersect';\n }\n\n api(\n baseFragment = this._base,\n rayOrigin = this._rayOrigin,\n rayDirection = this._rayDirection,\n aabbMin = this._aabbMin,\n aabbMax = this._aabbMax,\n tNear = this._tNear,\n tFar = this._tFar,\n intersect = this._intersect\n ) {\n this._base = baseFragment;\n return this.compute(rayOrigin, rayDirection, aabbMin, aabbMax, tNear, tFar, intersect);\n }\n\n compute(rayOrigin, rayDirection, aabbMin, aabbMax, tNear, tFar, intersect) {\n this.computeDefinition();\n this._base._functions[this._name] = this._definition;\n return `${\n this._name\n }(${rayOrigin}, ${rayDirection}, ${aabbMin}, ${aabbMax}, ${tNear}, ${tFar}, ${intersect});`;\n }\n\n computeDefinition() {\n this._definition = `\nvoid ${\n this._name\n }(vec3 rayOrigin, vec3 rayDirection, vec3 boxMin, vec3 boxMax, out float tNear, out float tFar, out bool intersect){\n // compute intersection of ray with all six bbox planes\n vec3 invRay = vec3(1.) / rayDirection;\n vec3 tBot = invRay * (boxMin - rayOrigin);\n vec3 tTop = invRay * (boxMax - rayOrigin);\n // re-order intersections to find smallest and largest on each axis\n vec3 tMin = min(tTop, tBot);\n vec3 tMax = max(tTop, tBot);\n // find the largest tMin and the smallest tMax\n float largest_tMin = max(max(tMin.x, tMin.y), max(tMin.x, tMin.z));\n float smallest_tMax = min(min(tMax.x, tMax.y), min(tMax.x, tMax.z));\n tNear = largest_tMin;\n tFar = smallest_tMax;\n intersect = smallest_tMax > largest_tMin;\n}\n\n `;\n }\n}\n\nexport default new IntersectBox();\n","import ShadersBase from '../shaders.base';\n\nclass Texture3d extends ShadersBase {\n constructor() {\n super();\n this.name = 'texture3d';\n\n // default properties names\n this._dataCoordinates = 'dataCoordinates';\n this._dataValue = 'dataValue';\n this._offset = 'offset';\n }\n\n api(\n baseFragment = this._base,\n dataCoordinates = this._dataCoordinates,\n dataValue = this._dataValue,\n offset = this._offset\n ) {\n this._base = baseFragment;\n return this.compute(dataCoordinates, dataValue, offset);\n }\n\n compute(dataCoordinates, dataValue, offset) {\n this.computeDefinition();\n this._base._functions[this._name] = this._definition;\n return `${this._name}(${dataCoordinates}, ${dataValue}, ${offset});`;\n }\n\n computeDefinition() {\n let content = `\n step( abs( textureIndexF - 0.0 ), 0.0 ) * texture2D(uTextureContainer[0], uv) +\n step( abs( textureIndexF - 1.0 ), 0.0 ) * texture2D(uTextureContainer[1], uv) +\n step( abs( textureIndexF - 2.0 ), 0.0 ) * texture2D(uTextureContainer[2], uv) +\n step( abs( textureIndexF - 3.0 ), 0.0 ) * texture2D(uTextureContainer[3], uv) +\n step( abs( textureIndexF - 4.0 ), 0.0 ) * texture2D(uTextureContainer[4], uv) +\n step( abs( textureIndexF - 5.0 ), 0.0 ) * texture2D(uTextureContainer[5], uv) +\n step( abs( textureIndexF - 6.0 ), 0.0 ) * texture2D(uTextureContainer[6], uv)`;\n\n if (this._base._uniforms.uTextureContainer.length === 14) {\n content += ` +\n step( abs( textureIndexF - 7.0 ), 0.0 ) * texture2D(uTextureContainer[7], uv) +\n step( abs( textureIndexF - 8.0 ), 0.0 ) * texture2D(uTextureContainer[8], uv) +\n step( abs( textureIndexF - 9.0 ), 0.0 ) * texture2D(uTextureContainer[9], uv) +\n step( abs( textureIndexF - 10.0 ), 0.0 ) * texture2D(uTextureContainer[10], uv) +\n step( abs( textureIndexF - 11.0 ), 0.0 ) * texture2D(uTextureContainer[11], uv) +\n step( abs( textureIndexF - 12.0 ), 0.0 ) * texture2D(uTextureContainer[12], uv) +\n step( abs( textureIndexF - 13.0 ), 0.0 ) * texture2D(uTextureContainer[13], uv)`;\n }\n\n this._definition = `\nvoid ${this._name}(in ivec3 dataCoordinates, out vec4 dataValue, out int offset){\n float textureSizeF = float(uTextureSize);\n int voxelsPerTexture = uTextureSize*uTextureSize;\n\n int index = dataCoordinates.x\n + dataCoordinates.y * uDataDimensions.x\n + dataCoordinates.z * uDataDimensions.y * uDataDimensions.x;\n \n // dividing an integer by an integer will give you an integer result, rounded down\n // can not get float numbers to work :(\n int packedIndex = index/uPackedPerPixel;\n offset = index - uPackedPerPixel*packedIndex;\n\n // Map data index to right sampler2D texture\n int textureIndex = packedIndex/voxelsPerTexture;\n int inTextureIndex = packedIndex - voxelsPerTexture*textureIndex;\n\n // Get row and column in the texture\n int rowIndex = inTextureIndex/uTextureSize;\n float rowIndexF = float(rowIndex);\n float colIndex = float(inTextureIndex - uTextureSize * rowIndex);\n\n // Map row and column to uv\n vec2 uv = vec2(0,0);\n uv.x = (0.5 + colIndex) / textureSizeF;\n uv.y = 1. - (0.5 + rowIndexF) / textureSizeF;\n\n float textureIndexF = float(textureIndex);\n dataValue = vec4(0.) + ${content};\n}\n `;\n }\n}\n\nexport default new Texture3d();\n","import ShadersBase from '../shaders.base';\n\n/**\n * Set of methods to unpack values from [r][b][g][a] -> float\n */\nclass Unpack extends ShadersBase {\n /**\n * Constructor\n */\n constructor() {\n super();\n this.name = 'unpack';\n\n // default properties names\n this._packedData = 'packedData';\n this._offset = 'offset';\n this._unpackedData = 'unpackedData';\n\n this._base._uniforms = {\n uNumberOfChannels: {\n value: 1,\n },\n uBitsAllocated: {\n value: 16,\n },\n uPixelType: {\n value: 0,\n },\n };\n }\n\n api(\n baseFragment = this._base,\n packedData = this._packedData,\n offset = this._offset,\n unpackedData = this._unpackedData\n ) {\n this._base = baseFragment;\n return this.compute(packedData, offset, unpackedData);\n }\n\n compute(packedData, offset, unpackedData) {\n this.computeDefinition();\n this._base._functions[this._name] = this._definition;\n return `${this._name}(${packedData}, ${offset}, ${unpackedData});`;\n }\n\n computeDefinition() {\n // fun stuff\n let content = '';\n if (this._base._uniforms.uNumberOfChannels.value === 1) {\n switch (this._base._uniforms.uBitsAllocated.value) {\n case 1:\n case 8:\n content = this.upack8();\n break;\n\n case 16:\n content = this.upack16();\n break;\n\n case 32:\n content = this.upack32();\n break;\n\n default:\n content = this.upackIdentity();\n break;\n }\n } else {\n content = this.upackIdentity();\n }\n\n this._definition = `\nvoid ${this._name}(in vec4 packedData, in int offset, out vec4 unpackedData){\n\n${content}\n\n} \n `;\n }\n\n upack8() {\n this._base._functions['uInt8'] = this.uInt8();\n\n return `\nfloat floatedOffset = float(offset);\nfloat floatedOffsetSquared = floatedOffset * floatedOffset;\nuInt8(\n step( floatedOffsetSquared , 0.0 ) * packedData.r +\n step( floatedOffsetSquared - 2. * floatedOffset + 1., 0.0 ) * packedData.g +\n step( floatedOffsetSquared - 2. * 2. * floatedOffset + 4., 0.0 ) * packedData.b +\n step( floatedOffsetSquared - 2. * 3. * floatedOffset + 9., 0.0 ) * packedData.a\n ,\n unpackedData.x);\n `;\n }\n\n upack16() {\n this._base._functions['uInt16'] = this.uInt16();\n\n return `\nfloat floatedOffset = float(offset);\nuInt16(\n packedData.r * (1. - floatedOffset) + packedData.b * floatedOffset,\n packedData.g * (1. - floatedOffset) + packedData.a * floatedOffset,\n unpackedData.x);\n `;\n }\n\n upack32() {\n if (this._base._uniforms.uPixelType.value === 0) {\n this._base._functions['uInt32'] = this.uInt32();\n\n return `\nuInt32(\n packedData.r,\n packedData.g,\n packedData.b,\n packedData.a,\n unpackedData.x);\n `;\n } else {\n this._base._functions['uFloat32'] = this.uFloat32();\n\n return `\nuFloat32(\n packedData.r,\n packedData.g,\n packedData.b,\n packedData.a,\n unpackedData.x);\n `;\n }\n }\n\n upackIdentity() {\n return `\nunpackedData = packedData;\n `;\n }\n\n uInt8() {\n return `\nvoid uInt8(in float r, out float value){\n value = r * 255.;\n}\n `;\n }\n\n uInt16() {\n return `\nvoid uInt16(in float r, in float a, out float value){\n value = r * 255. + a * 255. * 256.;\n}\n `;\n }\n\n uInt32() {\n return `\nvoid uInt32(in float r, in float g, in float b, in float a, out float value){\n value = r * 255. + g * 255. * 256. + b * 255. * 256. * 256. + a * 255. * 256. * 256. * 256.;\n // value = r * 255. + g * 65025. + b * 16581375. + a * 4228250625.;\n}\n `;\n }\n\n uFloat32() {\n return `\nvoid uFloat32(in float r, in float g, in float b, in float a, out float value){\n\n // create arrays containing bits for rgba values\n // value between 0 and 255\n value = r * 255.;\n int bytemeR[8];\n bytemeR[0] = int(floor(value / 128.));\n value -= float(bytemeR[0] * 128);\n bytemeR[1] = int(floor(value / 64.));\n value -= float(bytemeR[1] * 64);\n bytemeR[2] = int(floor(value / 32.));\n value -= float(bytemeR[2] * 32);\n bytemeR[3] = int(floor(value / 16.));\n value -= float(bytemeR[3] * 16);\n bytemeR[4] = int(floor(value / 8.));\n value -= float(bytemeR[4] * 8);\n bytemeR[5] = int(floor(value / 4.));\n value -= float(bytemeR[5] * 4);\n bytemeR[6] = int(floor(value / 2.));\n value -= float(bytemeR[6] * 2);\n bytemeR[7] = int(floor(value));\n\n value = g * 255.;\n int bytemeG[8];\n bytemeG[0] = int(floor(value / 128.));\n value -= float(bytemeG[0] * 128);\n bytemeG[1] = int(floor(value / 64.));\n value -= float(bytemeG[1] * 64);\n bytemeG[2] = int(floor(value / 32.));\n value -= float(bytemeG[2] * 32);\n bytemeG[3] = int(floor(value / 16.));\n value -= float(bytemeG[3] * 16);\n bytemeG[4] = int(floor(value / 8.));\n value -= float(bytemeG[4] * 8);\n bytemeG[5] = int(floor(value / 4.));\n value -= float(bytemeG[5] * 4);\n bytemeG[6] = int(floor(value / 2.));\n value -= float(bytemeG[6] * 2);\n bytemeG[7] = int(floor(value));\n\n value = b * 255.;\n int bytemeB[8];\n bytemeB[0] = int(floor(value / 128.));\n value -= float(bytemeB[0] * 128);\n bytemeB[1] = int(floor(value / 64.));\n value -= float(bytemeB[1] * 64);\n bytemeB[2] = int(floor(value / 32.));\n value -= float(bytemeB[2] * 32);\n bytemeB[3] = int(floor(value / 16.));\n value -= float(bytemeB[3] * 16);\n bytemeB[4] = int(floor(value / 8.));\n value -= float(bytemeB[4] * 8);\n bytemeB[5] = int(floor(value / 4.));\n value -= float(bytemeB[5] * 4);\n bytemeB[6] = int(floor(value / 2.));\n value -= float(bytemeB[6] * 2);\n bytemeB[7] = int(floor(value));\n\n value = a * 255.;\n int bytemeA[8];\n bytemeA[0] = int(floor(value / 128.));\n value -= float(bytemeA[0] * 128);\n bytemeA[1] = int(floor(value / 64.));\n value -= float(bytemeA[1] * 64);\n bytemeA[2] = int(floor(value / 32.));\n value -= float(bytemeA[2] * 32);\n bytemeA[3] = int(floor(value / 16.));\n value -= float(bytemeA[3] * 16);\n bytemeA[4] = int(floor(value / 8.));\n value -= float(bytemeA[4] * 8);\n bytemeA[5] = int(floor(value / 4.));\n value -= float(bytemeA[5] * 4);\n bytemeA[6] = int(floor(value / 2.));\n value -= float(bytemeA[6] * 2);\n bytemeA[7] = int(floor(value));\n\n // compute float32 value from bit arrays\n\n // sign\n int issigned = 1 - 2 * bytemeR[0];\n // issigned = int(pow(-1., float(bytemeR[0])));\n\n // exponent\n int exponent = 0;\n\n exponent += bytemeR[1] * int(pow(2., 7.));\n exponent += bytemeR[2] * int(pow(2., 6.));\n exponent += bytemeR[3] * int(pow(2., 5.));\n exponent += bytemeR[4] * int(pow(2., 4.));\n exponent += bytemeR[5] * int(pow(2., 3.));\n exponent += bytemeR[6] * int(pow(2., 2.));\n exponent += bytemeR[7] * int(pow(2., 1.));\n\n exponent += bytemeG[0];\n\n\n // fraction\n float fraction = 0.;\n\n fraction = float(bytemeG[1]) * pow(2., -1.);\n fraction += float(bytemeG[2]) * pow(2., -2.);\n fraction += float(bytemeG[3]) * pow(2., -3.);\n fraction += float(bytemeG[4]) * pow(2., -4.);\n fraction += float(bytemeG[5]) * pow(2., -5.);\n fraction += float(bytemeG[6]) * pow(2., -6.);\n fraction += float(bytemeG[7]) * pow(2., -7.);\n\n fraction += float(bytemeB[0]) * pow(2., -8.);\n fraction += float(bytemeB[1]) * pow(2., -9.);\n fraction += float(bytemeB[2]) * pow(2., -10.);\n fraction += float(bytemeB[3]) * pow(2., -11.);\n fraction += float(bytemeB[4]) * pow(2., -12.);\n fraction += float(bytemeB[5]) * pow(2., -13.);\n fraction += float(bytemeB[6]) * pow(2., -14.);\n fraction += float(bytemeB[7]) * pow(2., -15.);\n\n fraction += float(bytemeA[0]) * pow(2., -16.);\n fraction += float(bytemeA[1]) * pow(2., -17.);\n fraction += float(bytemeA[2]) * pow(2., -18.);\n fraction += float(bytemeA[3]) * pow(2., -19.);\n fraction += float(bytemeA[4]) * pow(2., -20.);\n fraction += float(bytemeA[5]) * pow(2., -21.);\n fraction += float(bytemeA[6]) * pow(2., -22.);\n fraction += float(bytemeA[7]) * pow(2., -23.);\n\n value = float(issigned) * pow( 2., float(exponent - 127)) * (1. + fraction);\n}\n `;\n }\n}\n\nexport default new Unpack();\n","import ShadersBase from '../shaders.base';\nimport Unpack from '../helpers/shaders.helpers.unpack';\nimport Texture3d from '../helpers/shaders.helpers.texture3d';\n\nclass InterpolationIdentity extends ShadersBase {\n constructor() {\n super();\n this.name = 'interpolationIdentity';\n\n // default properties names\n this._currentVoxel = 'currentVoxel';\n this._dataValue = 'dataValue';\n }\n\n api(baseFragment = this._base, currentVoxel = this._currentVoxel, dataValue = this._dataValue) {\n this._base = baseFragment;\n return this.compute(currentVoxel, dataValue);\n }\n\n compute(currentVoxel, dataValue) {\n this.computeDefinition();\n this._base._functions[this._name] = this._definition;\n return `${this._name}(${currentVoxel}, ${dataValue});`;\n }\n\n computeDefinition() {\n this._definition = `\nvoid ${this._name}(in vec3 currentVoxel, out vec4 dataValue){\n // lower bound\n vec3 rcurrentVoxel = vec3(floor(currentVoxel.x + 0.5 ), floor(currentVoxel.y + 0.5 ), floor(currentVoxel.z + 0.5 ));\n ivec3 voxel = ivec3(int(rcurrentVoxel.x), int(rcurrentVoxel.y), int(rcurrentVoxel.z));\n\n vec4 tmp = vec4(0., 0., 0., 0.);\n int offset = 0;\n\n ${Texture3d.api(this._base, 'voxel', 'tmp', 'offset')}\n ${Unpack.api(this._base, 'tmp', 'offset', 'dataValue')}\n}\n `;\n }\n}\n\nexport default new InterpolationIdentity();\n","import InterpolationIdentity from './shaders.interpolation.identity';\nimport InterpolationTrilinear from './shaders.interpolation.trilinear';\n\nfunction shadersInterpolation(baseFragment, currentVoxel, dataValue, gradient) {\n switch (baseFragment._uniforms.uInterpolation.value) {\n case 0:\n // no interpolation\n return InterpolationIdentity.api(baseFragment, currentVoxel, dataValue);\n\n case 1:\n // trilinear interpolation\n return InterpolationTrilinear.api(baseFragment, currentVoxel, dataValue, gradient);\n\n default:\n return InterpolationIdentity.api(baseFragment, currentVoxel, dataValue);\n }\n}\n\nexport default shadersInterpolation;\n","import ShadersBase from '../shaders.base';\nimport InterpolationIdentity from './shaders.interpolation.identity';\n\nclass InterpolationTrilinear extends ShadersBase {\n constructor() {\n super();\n this.name = 'interpolationTrilinear';\n\n // default properties names\n this._currentVoxel = 'currentVoxel';\n this._dataValue = 'dataValue';\n this._gradient = 'gradient';\n }\n\n api(\n baseFragment = this._base,\n currentVoxel = this._currentVoxel,\n dataValue = this._dataValue,\n gradient = this._gradient\n ) {\n this._base = baseFragment;\n return this.compute(currentVoxel, dataValue, gradient);\n }\n\n compute(currentVoxel, dataValue, gradient) {\n this.computeDefinition();\n this._base._functions[this._name] = this._definition;\n return `${this._name}(${currentVoxel}, ${dataValue}, ${gradient});`;\n }\n\n computeDefinition() {\n this._definition = `\nvoid trilinearInterpolation(\n in vec3 normalizedPosition,\n out vec4 interpolatedValue,\n in vec4 v000, in vec4 v100,\n in vec4 v001, in vec4 v101,\n in vec4 v010, in vec4 v110,\n in vec4 v011, in vec4 v111) {\n // https://en.wikipedia.org/wiki/Trilinear_interpolation\n vec4 c00 = v000 * ( 1.0 - normalizedPosition.x ) + v100 * normalizedPosition.x;\n vec4 c01 = v001 * ( 1.0 - normalizedPosition.x ) + v101 * normalizedPosition.x;\n vec4 c10 = v010 * ( 1.0 - normalizedPosition.x ) + v110 * normalizedPosition.x;\n vec4 c11 = v011 * ( 1.0 - normalizedPosition.x ) + v111 * normalizedPosition.x;\n\n // c0 and c1\n vec4 c0 = c00 * ( 1.0 - normalizedPosition.y) + c10 * normalizedPosition.y;\n vec4 c1 = c01 * ( 1.0 - normalizedPosition.y) + c11 * normalizedPosition.y;\n\n // c\n vec4 c = c0 * ( 1.0 - normalizedPosition.z) + c1 * normalizedPosition.z;\n interpolatedValue = c;\n}\n\nvoid ${this._name}(in vec3 currentVoxel, out vec4 dataValue, out vec3 gradient){\n\n vec3 lower_bound = floor(currentVoxel);\n lower_bound = max(vec3(0.), lower_bound);\n \n vec3 higher_bound = lower_bound + vec3(1.);\n\n vec3 normalizedPosition = (currentVoxel - lower_bound);\n normalizedPosition = max(vec3(0.), normalizedPosition);\n\n vec4 interpolatedValue = vec4(0.);\n\n //\n // fetch values required for interpolation\n //\n vec4 v000 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c000 = vec3(lower_bound.x, lower_bound.y, lower_bound.z);\n ${InterpolationIdentity.api(this._base, 'c000', 'v000')}\n\n //\n vec4 v100 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c100 = vec3(higher_bound.x, lower_bound.y, lower_bound.z);\n ${InterpolationIdentity.api(this._base, 'c100', 'v100')}\n\n //\n vec4 v001 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c001 = vec3(lower_bound.x, lower_bound.y, higher_bound.z);\n ${InterpolationIdentity.api(this._base, 'c001', 'v001')}\n\n //\n vec4 v101 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c101 = vec3(higher_bound.x, lower_bound.y, higher_bound.z);\n ${InterpolationIdentity.api(this._base, 'c101', 'v101')}\n \n //\n vec4 v010 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c010 = vec3(lower_bound.x, higher_bound.y, lower_bound.z);\n ${InterpolationIdentity.api(this._base, 'c010', 'v010')}\n\n vec4 v110 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c110 = vec3(higher_bound.x, higher_bound.y, lower_bound.z);\n ${InterpolationIdentity.api(this._base, 'c110', 'v110')}\n\n //\n vec4 v011 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c011 = vec3(lower_bound.x, higher_bound.y, higher_bound.z);\n ${InterpolationIdentity.api(this._base, 'c011', 'v011')}\n\n vec4 v111 = vec4(0.0, 0.0, 0.0, 0.0);\n vec3 c111 = vec3(higher_bound.x, higher_bound.y, higher_bound.z);\n ${InterpolationIdentity.api(this._base, 'c111', 'v111')}\n\n // compute interpolation at position\n trilinearInterpolation(normalizedPosition, interpolatedValue ,v000, v100, v001, v101, v010,v110, v011,v111);\n dataValue = interpolatedValue;\n\n // That breaks shading in volume rendering\n // if (gradient.x == 1.) { // skip gradient calculation for slice helper\n // return;\n // }\n\n // compute gradient\n float gradientStep = 0.005;\n\n // x axis\n vec3 g100 = vec3(1., 0., 0.);\n vec3 ng100 = normalizedPosition + g100 * gradientStep;\n ng100.x = min(1., ng100.x);\n\n vec4 vg100 = vec4(0.);\n trilinearInterpolation(ng100, vg100 ,v000, v100, v001, v101, v010,v110, v011,v111);\n\n vec3 go100 = -g100;\n vec3 ngo100 = normalizedPosition + go100 * gradientStep;\n ngo100.x = max(0., ngo100.x);\n\n vec4 vgo100 = vec4(0.);\n trilinearInterpolation(ngo100, vgo100 ,v000, v100, v001, v101, v010,v110, v011,v111);\n\n gradient.x = (g100.x * vg100.x + go100.x * vgo100.x);\n\n // y axis\n vec3 g010 = vec3(0., 1., 0.);\n vec3 ng010 = normalizedPosition + g010 * gradientStep;\n ng010.y = min(1., ng010.y);\n\n vec4 vg010 = vec4(0.);\n trilinearInterpolation(ng010, vg010 ,v000, v100, v001, v101, v010,v110, v011,v111);\n\n vec3 go010 = -g010;\n vec3 ngo010 = normalizedPosition + go010 * gradientStep;\n ngo010.y = max(0., ngo010.y);\n\n vec4 vgo010 = vec4(0.);\n trilinearInterpolation(ngo010, vgo010 ,v000, v100, v001, v101, v010,v110, v011,v111);\n\n gradient.y = (g010.y * vg010.x + go010.y * vgo010.x);\n\n // z axis\n vec3 g001 = vec3(0., 0., 1.);\n vec3 ng001 = normalizedPosition + g001 * gradientStep;\n ng001.z = min(1., ng001.z);\n\n vec4 vg001 = vec4(0.);\n trilinearInterpolation(ng001, vg001 ,v000, v100, v001, v101, v010,v110, v011,v111);\n\n vec3 go001 = -g001;\n vec3 ngo001 = normalizedPosition + go001 * gradientStep;\n ngo001.z = max(0., ngo001.z);\n\n vec4 vgo001 = vec4(0.);\n trilinearInterpolation(ngo001, vgo001 ,v000, v100, v001, v101, v010,v110, v011,v111);\n\n gradient.z = (g001.z * vg001.x + go001.z * vgo001.x);\n\n // normalize gradient\n // +0.0001 instead of if?\n float gradientMagnitude = length(gradient);\n if (gradientMagnitude > 0.0) {\n gradient = -(1. / gradientMagnitude) * gradient;\n }\n}\n `;\n }\n}\n\nexport default new InterpolationTrilinear();\n","export default class ShadersBase {\n constructor() {\n this._name = 'shadersBase';\n this._base = {\n _functions: {},\n _uniforms: {},\n };\n this._definition = '';\n }\n\n get name() {\n return this._name;\n }\n\n set name(name) {\n this._name = name;\n }\n}\n","export default class ShadersFragment {\n // pass uniforms object\n constructor(uniforms) {\n this._uniforms = uniforms;\n this._functions = {};\n this._main = '';\n }\n\n functions() {\n if (this._main === '') {\n // if main is empty, functions can not have been computed\n this.main();\n }\n\n let content = '';\n for (let property in this._functions) {\n content += this._functions[property] + '\\n';\n }\n\n return content;\n }\n\n uniforms() {\n let content = '';\n for (let property in this._uniforms) {\n let uniform = this._uniforms[property];\n content += `uniform ${uniform.typeGLSL} ${property}`;\n\n if (uniform && uniform.length) {\n content += `[${uniform.length}]`;\n }\n\n content += ';\\n';\n }\n\n return content;\n }\n\n main() {\n // need to pre-call main to fill up the functions list\n this._main = `\n\nfloat luma (vec3 rgb) {\n return (rgb.r + rgb.g + rgb.b)/3.0;\n}\n\nconst float T = 0.04;\nconst float M = 1.0;\nconst float L = 0.002;\n\nvoid main(void) {\n\n vec2 texCoord = vec2(((vProjectedCoords.x / vProjectedCoords.w) + 1.0 ) / 2.0,\n ((vProjectedCoords.y / vProjectedCoords.w) + 1.0 ) / 2.0 );\n\n float borderWidth = uWidth; // in px\n float step_u = borderWidth * 1.0 / uCanvasWidth;\n float step_v = borderWidth * 1.0 / uCanvasHeight;\n vec4 centerPixel = texture2D(uTextureFilled, texCoord);\n\n vec4 rightPixel = texture2D(uTextureFilled, texCoord + vec2(step_u, 0.0));\n vec4 bottomPixel = texture2D(uTextureFilled, texCoord + vec2(0.0, step_v));\n\n // now manually compute the derivatives\n float _dFdX = length(rightPixel - centerPixel) / step_u;\n float _dFdY = length(bottomPixel - centerPixel) / step_v;\n\n // gl_FragColor.r = _dFdX;\n // gl_FragColor.g = _dFdY;\n gl_FragColor.r = max(max(centerPixel.r, rightPixel.r), bottomPixel.r);\n gl_FragColor.g = max(max(centerPixel.g, rightPixel.g), bottomPixel.g);\n gl_FragColor.b = max(max(centerPixel.b, rightPixel.b), bottomPixel.b);\n float maxDerivative = max(_dFdX, _dFdY);\n float clampedDerivative = clamp(maxDerivative, 0., 1.);\n gl_FragColor.a = uOpacity * clampedDerivative;\n\n return;\n // float h = 1./uCanvasHeight;\n // float w = 1./uCanvasWidth;\n // vec4 n[9];\n // n[0] = texture2D(uTextureFilled, vProjectedTextCoords + vec2( -w, -h));\n // n[1] = texture2D(uTextureFilled, vProjectedTextCoords + vec2(0.0, -h));\n // n[2] = texture2D(uTextureFilled, vProjectedTextCoords + vec2( w, -h));\n // n[3] = texture2D(uTextureFilled, vProjectedTextCoords + vec2( -w, 0.0));\n // n[4] = texture2D(uTextureFilled, vProjectedTextCoords);\n // n[5] = texture2D(uTextureFilled, texCoord + vec2( w, 0.0));\n // n[6] = texture2D(uTextureFilled, texCoord + vec2( -w, h));\n // n[7] = texture2D(uTextureFilled, texCoord + vec2(0.0, h));\n // n[8] = texture2D(uTextureFilled, texCoord + vec2( w, h));\n // vec4 sobel_horizEdge = n[2] + (2.0*n[5]) + n[8] - (n[0] + (2.0*n[3]) + n[6]);\n // vec4 sobel_vertEdge = n[0] + (2.0*n[1]) + n[2] - (n[6] + (2.0*n[7]) + n[8]);\n // vec3 sobel = sqrt((sobel_horizEdge.rgb * sobel_horizEdge.rgb) + (sobel_vertEdge.rgb * sobel_vertEdge.rgb));\n // gl_FragColor = vec4( sobel, max(max(sobel.r, sobel.g), sobel.b) );\n\n // return;\n}\n `;\n }\n\n compute() {\n let shaderInterpolation = '';\n // shaderInterpolation.inline(args) //true/false\n // shaderInterpolation.functions(args)\n\n return `\n// uniforms\n${this.uniforms()}\n\n// varying (should fetch it from vertex directly)\nvarying vec4 vProjectedCoords;\n\n// tailored functions\n${this.functions()}\n\n// main loop\n${this._main}\n `;\n }\n}\n","/**\n * @module shaders/data\n */\nexport default class ShadersUniform {\n static uniforms() {\n return {\n uCanvasWidth: {\n type: 'f',\n value: 0,\n typeGLSL: 'float',\n },\n uCanvasHeight: {\n type: 'f',\n value: 0,\n typeGLSL: 'float',\n },\n uWidth: {\n type: 'f',\n value: 1,\n typeGLSL: 'float',\n },\n uOpacity: {\n type: 'f',\n value: 1,\n typeGLSL: 'float',\n },\n uTextureFilled: {\n type: 't',\n value: [],\n typeGLSL: 'sampler2D',\n },\n };\n }\n}\n","export default class ShadersVertex {\n compute() {\n return `\nvarying vec4 vProjectedCoords;\n\n//\n// main\n//\nvoid main() {\n\n vec4 vPos = modelMatrix * vec4(position, 1.0 );\n mat4 vProjectionViewMatrix = projectionMatrix * viewMatrix;\n vProjectedCoords = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\n\n}\n `;\n }\n}\n","import shadersInterpolation from './interpolation/shaders.interpolation';\n\nexport default class ShadersFragment {\n // pass uniforms object\n constructor(uniforms) {\n this._uniforms = uniforms;\n this._functions = {};\n this._main = '';\n }\n\n functions() {\n if (this._main === '') {\n // if main is empty, functions can not have been computed\n this.main();\n }\n\n let content = '';\n for (let property in this._functions) {\n content += this._functions[property] + '\\n';\n }\n\n return content;\n }\n\n uniforms() {\n let content = '';\n for (let property in this._uniforms) {\n let uniform = this._uniforms[property];\n content += `uniform ${uniform.typeGLSL} ${property}`;\n\n if (uniform && uniform.length) {\n content += `[${uniform.length}]`;\n }\n\n content += ';\\n';\n }\n\n return content;\n }\n\n main() {\n // need to pre-call main to fill up the functions list\n this._main = `\nvoid main(void) {\n\n // draw border if slice is cropped\n // float uBorderDashLength = 10.;\n\n if( uCanvasWidth > 0. &&\n ((gl_FragCoord.x > uBorderMargin && (gl_FragCoord.x - uBorderMargin) < uBorderWidth) ||\n (gl_FragCoord.x < (uCanvasWidth - uBorderMargin) && (gl_FragCoord.x + uBorderMargin) > (uCanvasWidth - uBorderWidth) ))){\n float valueY = mod(gl_FragCoord.y, 2. * uBorderDashLength);\n if( valueY < uBorderDashLength && gl_FragCoord.y > uBorderMargin && gl_FragCoord.y < (uCanvasHeight - uBorderMargin) ){\n gl_FragColor = vec4(uBorderColor, 1.);\n return;\n }\n }\n\n if( uCanvasHeight > 0. &&\n ((gl_FragCoord.y > uBorderMargin && (gl_FragCoord.y - uBorderMargin) < uBorderWidth) ||\n (gl_FragCoord.y < (uCanvasHeight - uBorderMargin) && (gl_FragCoord.y + uBorderMargin) > (uCanvasHeight - uBorderWidth) ))){\n float valueX = mod(gl_FragCoord.x, 2. * uBorderDashLength);\n if( valueX < uBorderDashLength && gl_FragCoord.x > uBorderMargin && gl_FragCoord.x < (uCanvasWidth - uBorderMargin) ){\n gl_FragColor = vec4(uBorderColor, 1.);\n return;\n }\n }\n\n // get texture coordinates of current pixel\n vec4 dataValue = vec4(0.);\n vec3 gradient = vec3(1.); // gradient calculations will be skipped if it is equal to vec3(1.) \n float steps = floor(uThickness / uSpacing + 0.5);\n\n if (steps > 1.) {\n vec3 origin = vPos - uThickness * 0.5 * vNormal;\n vec4 dataValueAcc = vec4(0.);\n for (float step = 0.; step < 128.; step++) {\n if (step >= steps) {\n break;\n }\n\n vec4 dataCoordinates = uWorldToData * vec4(origin + step * uSpacing * vNormal, 1.);\n vec3 currentVoxel = dataCoordinates.xyz;\n ${shadersInterpolation(this, 'currentVoxel', 'dataValueAcc', 'gradient')};\n\n if (step == 0.) {\n dataValue.r = dataValueAcc.r;\n continue;\n }\n\n if (uThicknessMethod == 0) {\n dataValue.r = max(dataValueAcc.r, dataValue.r);\n }\n if (uThicknessMethod == 1) {\n dataValue.r += dataValueAcc.r;\n }\n if (uThicknessMethod == 2) {\n dataValue.r = min(dataValueAcc.r, dataValue.r);\n }\n }\n\n if (uThicknessMethod == 1) {\n dataValue.r /= steps;\n }\n } else {\n vec4 dataCoordinates = uWorldToData * vec4(vPos, 1.);\n vec3 currentVoxel = dataCoordinates.xyz;\n ${shadersInterpolation(this, 'currentVoxel', 'dataValue', 'gradient')}\n }\n\n if(uNumberOfChannels == 1){\n // rescale/slope\n float realIntensity = dataValue.r * uRescaleSlopeIntercept[0] + uRescaleSlopeIntercept[1];\n \n // threshold\n if (realIntensity < uLowerUpperThreshold[0] || realIntensity > uLowerUpperThreshold[1]) {\n discard;\n }\n \n // normalize\n float windowMin = uWindowCenterWidth[0] - uWindowCenterWidth[1] * 0.5;\n float normalizedIntensity =\n ( realIntensity - windowMin ) / uWindowCenterWidth[1];\n dataValue.r = dataValue.g = dataValue.b = normalizedIntensity;\n dataValue.a = 1.;\n\n // apply LUT\n if(uLut == 1){\n // should opacity be grabbed there?\n dataValue = texture2D( uTextureLUT, vec2( normalizedIntensity , 1.0) );\n }\n \n // apply segmentation\n if(uLutSegmentation == 1){\n // should opacity be grabbed there?\n //\n float textureWidth = 256.;\n float textureHeight = 128.;\n float min = 0.;\n // start at 0!\n int adjustedIntensity = int(floor(realIntensity + 0.5));\n \n // Get row and column in the texture\n int colIndex = int(mod(float(adjustedIntensity), textureWidth));\n int rowIndex = int(floor(float(adjustedIntensity)/textureWidth));\n \n float texWidth = 1./textureWidth;\n float texHeight = 1./textureHeight;\n \n // Map row and column to uv\n vec2 uv = vec2(0,0);\n uv.x = 0.5 * texWidth + (texWidth * float(colIndex));\n uv.y = 1. - (0.5 * texHeight + float(rowIndex) * texHeight);\n \n dataValue = texture2D( uTextureLUTSegmentation, uv );\n }\n }\n\n if(uInvert == 1){\n dataValue.xyz = vec3(1.) - dataValue.xyz;\n }\n\n dataValue.a = dataValue.a*uOpacity;\n\n gl_FragColor = dataValue;\n}\n `;\n }\n\n compute() {\n return `\n// uniforms\n${this.uniforms()}\n\n// varying (should fetch it from vertex directly)\nvarying vec3 vPos;\nvarying vec3 vNormal;\n\n// tailored functions\n${this.functions()}\n\n// main loop\n${this._main}\n `;\n }\n}\n","import { Matrix4 } from 'three/src/math/Matrix4';\n\n/**\n * @module shaders/data\n */\nexport default class ShadersUniform {\n /**\n * Shaders data uniforms\n */\n static uniforms() {\n return {\n uTextureSize: {\n type: 'i',\n value: 0,\n typeGLSL: 'int',\n },\n uTextureContainer: {\n type: 'tv',\n value: [],\n typeGLSL: 'sampler2D',\n length: 7,\n },\n uDataDimensions: {\n type: 'iv',\n value: [0, 0, 0],\n typeGLSL: 'ivec3',\n },\n uWorldToData: {\n type: 'm4',\n value: new Matrix4(),\n typeGLSL: 'mat4',\n },\n uWindowCenterWidth: {\n type: 'fv1',\n value: [0.0, 0.0],\n typeGLSL: 'float',\n length: 2,\n },\n uLowerUpperThreshold: {\n type: 'fv1',\n value: [0.0, 0.0],\n typeGLSL: 'float',\n length: 2,\n },\n uRescaleSlopeIntercept: {\n type: 'fv1',\n value: [0.0, 0.0],\n typeGLSL: 'float',\n length: 2,\n },\n uNumberOfChannels: {\n type: 'i',\n value: 1,\n typeGLSL: 'int',\n },\n uBitsAllocated: {\n type: 'i',\n value: 8,\n typeGLSL: 'int',\n },\n uInvert: {\n type: 'i',\n value: 0,\n typeGLSL: 'int',\n },\n uLut: {\n type: 'i',\n value: 0,\n typeGLSL: 'int',\n },\n uTextureLUT: {\n type: 't',\n value: [],\n typeGLSL: 'sampler2D',\n },\n uLutSegmentation: {\n type: 'i',\n value: 0,\n typeGLSL: 'int',\n },\n uTextureLUTSegmentation: {\n type: 't',\n value: [],\n typeGLSL: 'sampler2D',\n },\n uPixelType: {\n type: 'i',\n value: 0,\n typeGLSL: 'int',\n },\n uPackedPerPixel: {\n type: 'i',\n value: 1,\n typeGLSL: 'int',\n },\n uInterpolation: {\n type: 'i',\n value: 1,\n typeGLSL: 'int',\n },\n uCanvasWidth: {\n type: 'f',\n value: 0,\n typeGLSL: 'float',\n },\n uCanvasHeight: {\n type: 'f',\n value: 0,\n typeGLSL: 'float',\n },\n uBorderColor: {\n type: 'v3',\n value: [1.0, 0.0, 0.5],\n typeGLSL: 'vec3',\n },\n uBorderWidth: {\n type: 'f',\n value: 2,\n typeGLSL: 'float',\n },\n uBorderMargin: {\n type: 'f',\n value: 2,\n typeGLSL: 'float',\n },\n uBorderDashLength: {\n type: 'f',\n value: 10,\n typeGLSL: 'float',\n },\n uOpacity: {\n type: 'f',\n value: 1.0,\n typeGLSL: 'float',\n },\n uSpacing: {\n type: 'f',\n value: 0,\n typeGLSL: 'float',\n },\n uThickness: {\n type: 'f',\n value: 0,\n typeGLSL: 'float',\n },\n uThicknessMethod: {\n type: 'i',\n value: 0,\n typeGLSL: 'int',\n },\n };\n }\n}\n","export default class ShadersVertex {\n compute() {\n return `\nvarying vec3 vPos;\nvarying vec3 vNormal;\n\nvoid main() {\n vNormal = normal;\n vPos = (modelMatrix * vec4(position, 1.0 )).xyz;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\n\n}\n `;\n }\n}\n","import ContourUniform from './shaders.contour.uniform';\nimport ContourFragment from './shaders.contour.fragment';\nimport ContourVertex from './shaders.contour.vertex';\n\nimport DataUniform from './shaders.data.uniform';\nimport DataFragment from './shaders.data.fragment';\nimport DataVertex from './shaders.data.vertex';\n\nimport VRUniform from './shaders.vr.uniform';\nimport VRFragment from './shaders.vr.fragment';\nimport VRVertex from './shaders.vr.vertex';\n\nimport LayerUniform from './shaders.layer.uniform';\nimport LayerFragment from './shaders.layer.fragment';\nimport LayerVertex from './shaders.layer.vertex';\n\nimport LocalizerUniform from './shaders.localizer.uniform';\nimport LocalizerFragment from './shaders.localizer.fragment';\nimport LocalizerVertex from './shaders.localizer.vertex';\n\nexport {\n ContourUniform as ContourUniformShader,\n ContourFragment as ContourFragmentShader,\n ContourVertex as ContourVertexShader,\n DataUniform as DataUniformShader,\n DataFragment as DataFragmentShader,\n DataVertex as DataVertexShader,\n VRUniform as VRUniformShader,\n VRFragment as VRFragmentShader,\n VRVertex as VRVertexShader,\n LayerUniform as LayerUniformShader,\n LayerFragment as LayerFragmentShader,\n LayerVertex as LayerVertexShader,\n LocalizerUniform as LocalizerUniformShader,\n LocalizerFragment as LocalizerFragmentShader,\n LocalizerVertex as LocalizerVertexShader,\n};\n","export default class ShadersFragment {\n // pass uniforms object\n constructor(uniforms) {\n this._uniforms = uniforms;\n this._functions = {};\n this._main = '';\n }\n\n functions() {\n if (this._main === '') {\n // if main is empty, functions can not have been computed\n this.main();\n }\n\n let content = '';\n for (let property in this._functions) {\n content += this._functions[property] + '\\n';\n }\n\n return content;\n }\n\n uniforms() {\n let content = '';\n for (let property in this._uniforms) {\n let uniform = this._uniforms[property];\n content += `uniform ${uniform.typeGLSL} ${property}`;\n\n if (uniform && uniform.length) {\n content += `[${uniform.length}]`;\n }\n\n content += ';\\n';\n }\n\n return content;\n }\n\n main() {\n // need to pre-call main to fill up the functions list\n this._main = `\nvoid main(void) {\n\n vec2 texc = vec2(((vProjectedCoords.x / vProjectedCoords.w) + 1.0 ) / 2.0,\n ((vProjectedCoords.y / vProjectedCoords.w) + 1.0 ) / 2.0 );\n\n // just silence warning for\n // vec4 dummy = vPos;\n\n //The back position is the world space position stored in the texture.\n vec4 baseColor0 = texture2D(uTextureBackTest0, texc);\n vec4 baseColor1 = texture2D(uTextureBackTest1, texc);\n\n if( uTrackMouse == 1 ){\n\n if( vProjectedCoords.x < uMouse.x ){\n\n gl_FragColor = baseColor0;\n\n }\n else{\n\n gl_FragColor = mix( baseColor0, baseColor1, uOpacity1 );\n\n }\n\n }\n else{\n\n if( uType1 == 0 ){\n\n //merge an image into\n gl_FragColor = mix( baseColor0, baseColor1, uOpacity1 );\n\n }\n else{\n\n float opacity = baseColor1.a;\n gl_FragColor = mix( baseColor0, baseColor1, opacity * uOpacity1 );\n\n }\n\n }\n\n return;\n}\n `;\n }\n\n compute() {\n let shaderInterpolation = '';\n // shaderInterpolation.inline(args) //true/false\n // shaderInterpolation.functions(args)\n\n return `\n// uniforms\n${this.uniforms()}\n\n// varying (should fetch it from vertex directly)\n// varying vec4 vPos;\nvarying vec4 vProjectedCoords;\n\n// tailored functions\n${this.functions()}\n\n// main loop\n${this._main}\n `;\n }\n}\n","import { Vector2 } from 'three/src/math/Vector2';\n\n/**\n * @module shaders/data\n */\nexport default class ShadersUniform {\n static uniforms() {\n return {\n uTextureBackTest0: {\n type: 't',\n value: [],\n typeGLSL: 'sampler2D',\n },\n uTextureBackTest1: {\n type: 't',\n value: [],\n typeGLSL: 'sampler2D',\n },\n uOpacity0: {\n type: 'f',\n value: 1.0,\n typeGLSL: 'float',\n },\n uOpacity1: {\n type: 'f',\n value: 1.0,\n typeGLSL: 'float',\n },\n uType0: {\n type: 'i',\n value: 0,\n typeGLSL: 'int',\n },\n uType1: {\n type: 'i',\n value: 1,\n typeGLSL: 'int',\n },\n uTrackMouse: {\n type: 'i',\n value: 0,\n typeGLSL: 'int',\n },\n uMouse: {\n type: 'v2',\n value: new Vector2(),\n typeGLSL: 'vec2',\n },\n };\n }\n}\n","export default class ShadersVertex {\n compute() {\n return `\n// varying vec4 vPos;\nvarying vec4 vProjectedCoords;\n\n//\n// main\n//\nvoid main() {\n\n vec4 vPos = modelMatrix * vec4(position, 1.0 );\n vProjectedCoords = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\n\n}\n `;\n }\n}\n","/**\n * Localizer fragment shader\n */\nexport default class {\n /**\n *\n */\n constructor(uniforms) {\n this._uniforms = uniforms;\n this._functions = {};\n this._main = '';\n }\n\n /**\n *\n */\n functions() {\n if (this._main === '') {\n // if main is empty, functions can not have been computed\n this.main();\n }\n\n let content = '';\n for (let property in this._functions) {\n content += this._functions[property] + '\\n';\n }\n\n return content;\n }\n\n /**\n *\n */\n uniforms() {\n let content = '';\n for (let property in this._uniforms) {\n let uniform = this._uniforms[property];\n content += `uniform ${uniform.typeGLSL} ${property}`;\n\n if (uniform && uniform.length) {\n content += `[${uniform.length}]`;\n }\n\n content += ';\\n';\n }\n\n return content;\n }\n\n /**\n *\n */\n main() {\n // need to pre-call main to fill up the functions list\n this._main = `\nvoid intersectionProjection(\n in vec4 plane,\n in vec4 slice,\n out vec3 intersectionProjection){\n\n vec3 intersectionDirection = normalize(cross(plane.xyz, slice.xyz));\n vec3 intersectionPoint = \n cross(intersectionDirection,slice.xyz) * plane.w +\n cross(plane.xyz, intersectionDirection) * slice.w;\n\n intersectionProjection =\n intersectionPoint.xyz +\n (dot(vPos.xyz - intersectionPoint, intersectionDirection)\n * intersectionDirection);\n\n}\n\nvoid main(void) {\n vec4 c1 = vec4(0., 0., 0., 0.);\n vec4 c2 = vec4(0., 0., 0., 0.);\n vec4 c3 = vec4(0., 0., 0., 0.);\n\n // localizer #1\n // must be normalized!\n if(length(uPlane1.xyz) > 0.5) {\n vec3 projection1 = vec3(1.);\n intersectionProjection(\n uPlane1,\n uSlice,\n projection1\n );\n\n vec4 projInter1 = (vProjectionViewMatrix * vec4(projection1, 1.));\n vec3 ndc1 = projInter1.xyz / projInter1.w;\n vec2 screenSpace1 = (ndc1.xy * .5 + .5) * vec2(uCanvasWidth, uCanvasHeight);\n\n float d1 = distance(gl_FragCoord.xy, screenSpace1.xy);\n c1 = vec4(uPlaneColor1, 1. - smoothstep(.5, .7, d1));\n }\n\n // localizer #2\n if(length(uPlane2.xyz) > 0.5) {\n vec3 projection2 = vec3(1.);\n intersectionProjection(\n uPlane2,\n uSlice,\n projection2\n );\n\n vec4 projInter2 = (vProjectionViewMatrix * vec4(projection2, 1.));\n vec3 ndc2 = projInter2.xyz / projInter2.w;\n vec2 screenSpace2 = (ndc2.xy * .5 + .5) * vec2(uCanvasWidth, uCanvasHeight);\n\n float d2 = distance(gl_FragCoord.xy, screenSpace2.xy);\n c2 = vec4(uPlaneColor2, 1. - smoothstep(.5, .7, d2));\n }\n\n // localizer #3\n if(length(uPlane3.xyz) > 0.5) {\n vec3 projection3 = vec3(1.);\n intersectionProjection(\n uPlane3,\n uSlice,\n projection3\n );\n\n vec4 projInter3 = (vProjectionViewMatrix * vec4(projection3, 1.));\n vec3 ndc3 = projInter3.xyz / projInter3.w;\n vec2 screenSpace3 = (ndc3.xy * .5 + .5) * vec2(uCanvasWidth, uCanvasHeight);\n\n float d3 = distance(gl_FragCoord.xy, screenSpace3.xy);\n c3 = vec4(uPlaneColor3, 1. - smoothstep(.5, .7, d3));\n }\n\n // float uBorderDashLength = 10.0;\n // float uBorderWidth = 2.0;\n // float valueX = mod(gl_FragCoord.x, 2. * uBorderDashLength);\n // float valueY = mod(gl_FragCoord.y, 2. * uBorderDashLength);\n // if( valueX < uBorderDashLength || valueY < uBorderDashLength ){\n vec3 colorMix = c1.xyz*c1.w + c2.xyz*c2.w + c3.xyz*c3.w;\n gl_FragColor = vec4(colorMix, max(max(c1.w, c2.w),c3.w)*0.5);\n return;\n // }\n \n // gl_FragColor = vec4(0., 0., 0., 0.);\n // return;\n}\n `;\n }\n\n /**\n *\n */\n compute() {\n return `\n// uniforms\n${this.uniforms()}\n\n// varying (should fetch it from vertex directly)\nvarying vec4 vPos;\nvarying mat4 vProjectionViewMatrix;\n\n// tailored functions\n${this.functions()}\n\n// main loop\n${this._main}\n `;\n }\n}\n","/**\n * @module shaders/localizer/uniforms\n */\n\nexport default class {\n /**\n * Shaders data uniforms\n */\n static uniforms() {\n return {\n uCanvasWidth: {\n type: 'f',\n value: 0,\n typeGLSL: 'float',\n },\n uCanvasHeight: {\n type: 'f',\n value: 0,\n typeGLSL: 'float',\n },\n uSlice: {\n type: 'v4',\n value: [0.0, 0.0, 0.0, 0.0],\n typeGLSL: 'vec4',\n },\n uPlane1: {\n type: 'v4',\n value: [0.0, 0.0, 0.0, 0.0],\n typeGLSL: 'vec4',\n },\n uPlaneColor1: {\n type: 'v3',\n value: [1.0, 1.0, 0.0],\n typeGLSL: 'vec3',\n },\n uPlane2: {\n type: 'v4',\n value: [0.0, 0.0, 0.0, 0.0],\n typeGLSL: 'vec4',\n },\n uPlaneColor2: {\n type: 'v3',\n value: [1.0, 1.0, 0.0],\n typeGLSL: 'vec3',\n },\n uPlane3: {\n type: 'v4',\n value: [0.0, 0.0, 0.0, 0.0],\n typeGLSL: 'vec4',\n },\n uPlaneColor3: {\n type: 'v3',\n value: [1.0, 1.0, 0.0],\n typeGLSL: 'vec3',\n },\n };\n }\n}\n","/**\n *\n */\nexport default class {\n /**\n *\n */\n compute() {\n return `\nvarying vec4 vPos;\nvarying mat4 vProjectionViewMatrix;\n\n//\n// main\n//\nvoid main() {\n\n vPos = modelMatrix * vec4(position, 1.0 );\n vProjectionViewMatrix = projectionMatrix * viewMatrix;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\n\n}\n `;\n }\n}\n","import shadersInterpolation from './interpolation/shaders.interpolation';\nimport shadersIntersectBox from './helpers/shaders.helpers.intersectBox';\n\nexport default class ShadersFragment {\n // pass uniforms object\n constructor(uniforms) {\n this._uniforms = uniforms;\n this._functions = {};\n this._main = '';\n }\n\n functions() {\n if (this._main === '') {\n // if main is empty, functions can not have been computed\n this.main();\n }\n\n let content = '';\n for (let property in this._functions) {\n content += this._functions[property] + '\\n';\n }\n\n return content;\n }\n\n uniforms() {\n let content = '';\n for (let property in this._uniforms) {\n let uniform = this._uniforms[property];\n content += `uniform ${uniform.typeGLSL} ${property}`;\n\n if (uniform && uniform.length) {\n content += `[${uniform.length}]`;\n }\n\n content += ';\\n';\n }\n\n return content;\n }\n\n main() {\n // need to pre-call main to fill up the functions list\n this._main = `\nvoid getIntensity(in vec3 dataCoordinates, out float intensity, out vec3 gradient){\n\n vec4 dataValue = vec4(0., 0., 0., 0.);\n ${shadersInterpolation(this, 'dataCoordinates', 'dataValue', 'gradient')}\n\n intensity = dataValue.r;\n\n // rescale/slope\n intensity = intensity*uRescaleSlopeIntercept[0] + uRescaleSlopeIntercept[1];\n // window level\n float windowMin = uWindowCenterWidth[0] - uWindowCenterWidth[1] * 0.5;\n intensity = ( intensity - windowMin ) / uWindowCenterWidth[1];\n}\n\nmat4 inverse(mat4 m) {\n float\n a00 = m[0][0], a01 = m[0][1], a02 = m[0][2], a03 = m[0][3],\n a10 = m[1][0], a11 = m[1][1], a12 = m[1][2], a13 = m[1][3],\n a20 = m[2][0], a21 = m[2][1], a22 = m[2][2], a23 = m[2][3],\n a30 = m[3][0], a31 = m[3][1], a32 = m[3][2], a33 = m[3][3],\n\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32,\n\n det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n return mat4(\n a11 * b11 - a12 * b10 + a13 * b09,\n a02 * b10 - a01 * b11 - a03 * b09,\n a31 * b05 - a32 * b04 + a33 * b03,\n a22 * b04 - a21 * b05 - a23 * b03,\n a12 * b08 - a10 * b11 - a13 * b07,\n a00 * b11 - a02 * b08 + a03 * b07,\n a32 * b02 - a30 * b05 - a33 * b01,\n a20 * b05 - a22 * b02 + a23 * b01,\n a10 * b10 - a11 * b08 + a13 * b06,\n a01 * b08 - a00 * b10 - a03 * b06,\n a30 * b04 - a31 * b02 + a33 * b00,\n a21 * b02 - a20 * b04 - a23 * b00,\n a11 * b07 - a10 * b09 - a12 * b06,\n a00 * b09 - a01 * b07 + a02 * b06,\n a31 * b01 - a30 * b03 - a32 * b00,\n a20 * b03 - a21 * b01 + a22 * b00) / det;\n}\n\n/**\n * Adapted from original sources\n * \n * Original code: \n * http://jamie-wong.com/2016/07/15/ray-marching-signed-distance-functions/\n * https://www.shadertoy.com/view/lt33z7\n * \n * The vec3 returned is the RGB color of the light's contribution.\n *\n * k_a: Ambient color\n * k_d: Diffuse color\n * k_s: Specular color\n * alpha: Shininess coefficient\n * p: position of point being lit\n * eye: the position of the camera\n * lightPos: the position of the light\n * lightIntensity: color/intensity of the light\n *\n * See https://en.wikipedia.org/wiki/Phong_reflection_model#Description\n */\nvec3 phongShading(vec3 k_a, vec3 k_d, vec3 k_s, float shininess, vec3 p, vec3 eye,\n vec3 lightPos, vec3 lightIntensity, vec3 normal) {\n vec3 N = normal;\n vec3 L = lightPos - p;\n if (length(L) > 0.) {\n L = L / length(L);\n }\n vec3 V = eye - p;\n if (length(V) > 0.) {\n V = V / length(V);\n }\n vec3 R = reflect(-L, N);\n if (length(R) > 0.) {\n R = R / length(R);\n }\n\n // https://en.wikipedia.org/wiki/Blinn%E2%80%93Phong_shading_model\n vec3 h = L + V;\n vec3 H = h;\n if (length(h) > 0.) {\n H = H / length(h);\n }\n\n float dotLN = dot(L, N);\n float dotRV = dot(R, V);\n\n if (dotLN < 0.) {\n // Light not visible from this point on the surface\n return k_a;\n } \n\n if (dotRV < 0.) {\n // Light reflection in opposite direction as viewer, apply only diffuse\n // component\n return k_a + lightIntensity * (k_d * dotLN);\n }\n\n float specAngle = max(dot(H, normal), 0.0);\n float specular = pow(dotRV, shininess); //pow(specAngle, shininess); // \n return k_a + lightIntensity * (k_d * dotLN + k_s * specular);\n}\n\nfloat PI = 3.14159265358979323846264 * 00000.1; // PI\n\n// expects values in the range of [0,1]x[0,1], returns values in the [0,1] range.\n// do not collapse into a single function per: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\nhighp float rand( const in vec2 uv) {\n const highp float a = 12.9898;\n const highp float b = 78.233;\n const highp float c = 43758.5453;\n highp float dt = dot(uv.xy, vec2(a, b)), sn = mod(dt, PI);\n return fract(sin(sn) * c);\n}\n\nvoid main(void) {\n const int maxSteps = 1024;\n\n // the ray\n vec3 rayOrigin = cameraPosition;\n vec3 rayDirection = normalize(vPos.xyz - rayOrigin);\n\n vec3 lightOrigin = uLightPositionInCamera == 1 ? cameraPosition : uLightPosition;\n\n // the Axe-Aligned B-Box\n vec3 AABBMin = vec3(uWorldBBox[0], uWorldBBox[2], uWorldBBox[4]);\n vec3 AABBMax = vec3(uWorldBBox[1], uWorldBBox[3], uWorldBBox[5]);\n\n // Intersection ray/bbox\n float tNear, tFar;\n bool intersect = false;\n ${shadersIntersectBox.api(\n this,\n 'rayOrigin',\n 'rayDirection',\n 'AABBMin',\n 'AABBMax',\n 'tNear',\n 'tFar',\n 'intersect'\n )}\n if (tNear < 0.0) tNear = 0.0;\n\n // x / y should be within o-1\n // should\n float offset = rand(gl_FragCoord.xy);\n\n // init the ray marching\n float tStep = (tFar - tNear) / float(uSteps);\n float tCurrent = tNear + offset * tStep;\n vec4 accumulatedColor = vec4(0.0);\n float accumulatedAlpha = 0.0;\n\n // MIP volume rendering\n float maxIntensity = 0.0;\n\n mat4 dataToWorld = inverse(uWorldToData);\n\n // rayOrigin -= rayDirection * 0.1; // gold_noise(vPos.xz, vPos.y) / 100.; \n\n for(int rayStep = 0; rayStep < maxSteps; rayStep++){\n vec3 currentPosition = rayOrigin + rayDirection * tCurrent;\n // some non-linear FUN\n // some occlusion issue to be fixed\n vec3 transformedPosition = currentPosition; //transformPoint(currentPosition, uAmplitude, uFrequence);\n // world to data coordinates\n // rounding trick\n // first center of first voxel in data space is CENTERED on (0,0,0)\n vec4 dataCoordinatesRaw = uWorldToData * vec4(transformedPosition, 1.0);\n vec3 currentVoxel = vec3(dataCoordinatesRaw.x, dataCoordinatesRaw.y, dataCoordinatesRaw.z);\n float intensity = 0.0;\n vec3 gradient = vec3(0., 0., 0.);\n getIntensity(currentVoxel, intensity, gradient);\n // map gradient to world space and normalize before using\n // we avoid to call \"normalize\" as it may be undefined if vector length == 0.\n gradient = (vec3(dataToWorld * vec4(gradient, 0.)));\n if (length(gradient) > 0.0) {\n gradient = normalize(gradient);\n }\n\n vec4 colorSample;\n float alphaSample;\n if(uLut == 1){\n vec4 colorFromLUT = texture2D( uTextureLUT, vec2( intensity, 1.0) );\n // 256 colors\n colorSample = colorFromLUT;\n alphaSample = colorFromLUT.a;\n }\n else{\n alphaSample = intensity;\n colorSample.r = colorSample.g = colorSample.b = intensity;\n }\n\n // ray marching algorithm\n // shading on\n // interpolation on\n if (uAlgorithm == 0 && uShading == 1 && uInterpolation != 0) {\n // && alphaSample > .3\n vec3 ambientComponent = uSampleColorToAmbient == 1 ? colorSample.xyz : uAmbientColor;\n ambientComponent *= uAmbient;\n vec3 diffuseComponent = uSampleColorToDiffuse == 1 ? colorSample.xyz : uDiffuseColor;\n diffuseComponent *= uDiffuse;\n vec3 specularComponent = uSpecular * uSpecularColor;\n float shininess = uShininess;\n vec3 vIntensity = uIntensity;\n\n colorSample.xyz += phongShading(\n ambientComponent,\n diffuseComponent,\n specularComponent,\n shininess,\n currentPosition.xyz,\n rayOrigin.xyz,\n lightOrigin.xyz,\n vIntensity,\n gradient);\n }\n\n alphaSample = 1.0 - pow((1.0- alphaSample),tStep*uAlphaCorrection);\n alphaSample *= (1.0 - accumulatedAlpha);\n\n accumulatedColor += alphaSample * colorSample;\n accumulatedAlpha += alphaSample;\n\n tCurrent += tStep;\n\n if (tCurrent > tFar || (uAlgorithm == 0 && accumulatedAlpha >= 1.0)) break;\n\n if (uAlgorithm == 1 && (intensity >= maxIntensity)) {\n maxIntensity = intensity;\n accumulatedColor = colorSample;\n accumulatedAlpha = 1.;\n }\n }\n\n gl_FragColor = vec4(accumulatedColor.xyz, accumulatedAlpha);\n}\n `;\n }\n\n compute() {\n let shaderInterpolation = '';\n // shaderInterpolation.inline(args) //true/false\n // shaderInterpolation.functions(args)\n\n return `\n// uniforms\n${this.uniforms()}\n\n// varying (should fetch it from vertex directly)\nvarying vec4 vPos;\n\n// tailored functions\n${this.functions()}\n\n// main loop\n${this._main}\n `;\n }\n}\n","import { Matrix4 } from 'three/src/math/Matrix4';\n\n/**\n * @module shaders/data\n */\nexport default class ShadersUniform {\n static uniforms() {\n return {\n uTextureSize: {\n type: 'i',\n value: 0,\n typeGLSL: 'int',\n },\n uTextureContainer: {\n type: 'tv',\n value: [],\n typeGLSL: 'sampler2D',\n length: 7,\n },\n uDataDimensions: {\n type: 'iv',\n value: [0, 0, 0],\n typeGLSL: 'ivec3',\n },\n uWorldToData: {\n type: 'm4',\n value: new Matrix4(),\n typeGLSL: 'mat4',\n },\n uWindowCenterWidth: {\n type: 'fv1',\n value: [0.0, 0.0],\n typeGLSL: 'float',\n length: 2,\n },\n uRescaleSlopeIntercept: {\n type: 'fv1',\n value: [0.0, 0.0],\n typeGLSL: 'float',\n length: 2,\n },\n uNumberOfChannels: {\n type: 'i',\n value: 1,\n typeGLSL: 'int',\n },\n uBitsAllocated: {\n type: 'i',\n value: 8,\n typeGLSL: 'int',\n },\n uInvert: {\n type: 'i',\n value: 0,\n typeGLSL: 'int',\n },\n uLut: {\n type: 'i',\n value: 0,\n typeGLSL: 'int',\n },\n uTextureLUT: {\n type: 't',\n value: [],\n typeGLSL: 'sampler2D',\n },\n uPixelType: {\n type: 'i',\n value: 0,\n typeGLSL: 'int',\n },\n uPackedPerPixel: {\n type: 'i',\n value: 1,\n typeGLSL: 'int',\n },\n uInterpolation: {\n type: 'i',\n value: 1,\n typeGLSL: 'int',\n },\n uWorldBBox: {\n type: 'fv1',\n value: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],\n typeGLSL: 'float',\n length: 6,\n },\n uSteps: {\n type: 'i',\n value: 256,\n typeGLSL: 'int',\n },\n uAlphaCorrection: {\n type: 'f',\n value: 0.5,\n typeGLSL: 'float',\n },\n uFrequence: {\n type: 'f',\n value: 0,\n typeGLSL: 'float',\n },\n uAmplitude: {\n type: 'f',\n value: 0,\n typeGLSL: 'float',\n },\n uShading: {\n type: 'i',\n value: 1,\n typeGLSL: 'int',\n },\n uAmbient: {\n type: 'f',\n value: 0.1,\n typeGLSL: 'float',\n },\n uAmbientColor: {\n type: 'v3',\n value: [1.0, 1.0, 0.0],\n typeGLSL: 'vec3',\n },\n uSampleColorToAmbient: {\n type: 'i',\n value: 1,\n typeGLSL: 'int',\n },\n uSpecular: {\n type: 'f',\n value: 1,\n typeGLSL: 'float',\n },\n uSpecularColor: {\n type: 'v3',\n value: [1.0, 1.0, 1.0],\n typeGLSL: 'vec3',\n },\n uDiffuse: {\n type: 'f',\n value: 0.3,\n typeGLSL: 'float',\n },\n uDiffuseColor: {\n type: 'v3',\n value: [1.0, 1.0, 0.0],\n typeGLSL: 'vec3',\n },\n uSampleColorToDiffuse: {\n type: 'i',\n value: 1,\n typeGLSL: 'int',\n },\n uShininess: {\n type: 'f',\n value: 5,\n typeGLSL: 'float',\n },\n uLightPosition: {\n type: 'v3',\n value: [0.0, 0.0, 0.0],\n typeGLSL: 'vec3',\n },\n uLightPositionInCamera: {\n type: 'i',\n value: 1,\n typeGLSL: 'int',\n },\n uIntensity: {\n type: 'v3',\n value: [0.8, 0.8, 0.8],\n typeGLSL: 'vec3',\n },\n uAlgorithm: {\n type: 'i',\n value: 0,\n typeGLSL: 'int',\n },\n };\n }\n}\n","export default class ShadersVertex {\n compute() {\n return `\nvarying vec4 vPos;\n\n//\n// main\n//\nvoid main() {\n\n vPos = modelMatrix * vec4(position, 1.0 );\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );\n\n}\n `;\n }\n}\n","import UtilsCore from '../core/core.utils';\nimport * as OpenJPEG from 'OpenJPEG.js/dist/openJPEG-DynamicMemory-browser';\nimport {RLEDecoder} from '../decoders/decoders.rle';\nimport {getNumberString, getNumberValue, getValue} from './index';\nimport getNumberValues from './getNumberValues';\n\nexport default class CornerstoneDataParser {\n constructor(metaData) {\n this.metaData = metaData;\n }\n\n /**\n * Series instance UID (0020,000e)\n *\n * @return {String}\n */\n seriesInstanceUID() {\n return getValue(this.metaData['0020000e']);\n }\n\n /**\n * Study instance UID (0020,000d)\n *\n * @return {String}\n */\n studyInstanceUID() {\n return getValue(this.metaData['0020000d']);\n }\n\n /**\n * Get modality (0008,0060)\n *\n * @return {String}\n */\n modality() {\n return getValue(this.metaData['00080060']);\n }\n\n /**\n * Segmentation type (0062,0001)\n *\n * @return {String}\n */\n segmentationType() {\n return getValue(this.metaData['00620001']);\n }\n\n /**\n * Segmentation segments\n * -> Sequence of segments (0062,0002)\n * -> Recommended Display CIELab\n * -> Segmentation Code\n * -> Segment Number (0062,0004)\n * -> Segment Label (0062,0005)\n * -> Algorithm Type (0062,0008)\n *\n * @return {*}\n */\n segmentationSegments() {\n let segmentationSegments = [];\n let segmentSequence = this.metaData['00620002'];\n console.log('parse segmentSequence', segmentSequence);\n\n if (!segmentSequence) {\n return segmentationSegments;\n }\n try {\n for (let i = 0; i < segmentSequence.items.length; i++) {\n let recommendedDisplayCIELab = this._recommendedDisplayCIELab(segmentSequence.items[i]);\n let segmentationCode = this._segmentationCode(segmentSequence.items[i]);\n let segmentNumber = getNumberValue(segmentSequence.items[i].dataSet['00620004']);\n let segmentLabel = getValue(segmentSequence.items[i].dataSet['00620005']);\n let segmentAlgorithmType = getValue(segmentSequence.items[i].dataSet['00620008']);\n\n segmentationSegments.push({\n recommendedDisplayCIELab,\n segmentationCodeDesignator: segmentationCode['segmentationCodeDesignator'],\n segmentationCodeValue: segmentationCode['segmentationCodeValue'],\n segmentationCodeMeaning: segmentationCode['segmentationCodeMeaning'],\n segmentNumber,\n segmentLabel,\n segmentAlgorithmType,\n });\n }\n } catch (e) {\n console.error(e);\n }\n\n return segmentationSegments;\n }\n\n /**\n * Segmentation code\n * -> Code designator (0008,0102)\n * -> Code value (0008,0200)\n * -> Code Meaning Type (0008,0104)\n *\n * @param {*} segment\n *\n * @return {*}\n */\n _segmentationCode(segment) {\n let segmentationCodeDesignator = 'unknown';\n let segmentationCodeValue = 'unknown';\n let segmentationCodeMeaning = 'unknown';\n let element = segment.dataSet['00082218'];\n\n if (element && element.items && element.items.length > 0) {\n segmentationCodeDesignator = getValue(element.items[0].dataSet['00080102']);\n segmentationCodeValue = getValue(element.items[0].dataSet['00080100']);\n segmentationCodeMeaning = getValue(element.items[0].dataSet['00080104']);\n }\n\n return {\n segmentationCodeDesignator,\n segmentationCodeValue,\n segmentationCodeMeaning,\n };\n }\n\n /**\n * Recommended display CIELab\n *\n * @param {*} segment\n *\n * @return {*}\n */\n _recommendedDisplayCIELab(segment) {\n if (!segment.dataSet['0062000d']) {\n return null;\n }\n\n let offset = segment.dataSet['0062000d'].dataOffset;\n let length = segment.dataSet['0062000d'].length;\n let byteArray = segment.dataSet.byteArray.slice(offset, offset + length);\n\n // https://www.dabsoft.ch/dicom/3/C.10.7.1.1/\n let CIELabScaled = new Uint16Array(length / 2);\n for (let i = 0; i < length / 2; i++) {\n CIELabScaled[i] = (byteArray[2 * i + 1] << 8) + byteArray[2 * i];\n }\n\n let CIELabNormalized = [\n (CIELabScaled[0] / 65535) * 100,\n (CIELabScaled[1] / 65535) * 255 - 128,\n (CIELabScaled[2] / 65535) * 255 - 128,\n ];\n\n return CIELabNormalized;\n }\n\n /**\n * Raw dataset\n *\n * @return {*}\n */\n rawHeader() {\n return this.metaData;\n }\n\n /**\n * SOP Instance UID\n *\n * @param {*} frameIndex\n *\n * @return {*}\n */\n sopInstanceUID(frameIndex = 0) {\n return getValue(this.metaData['00080018']);\n }\n\n /**\n * Transfer syntax UID\n *\n * @return {*}\n */\n transferSyntaxUID() {\n return getValue(this.metaData['00020010']);\n }\n\n /**\n * Study date\n *\n * @return {*}\n */\n studyDate() {\n return getValue(this.metaData['00080020']);\n }\n\n /**\n * Study description\n *\n * @return {*}\n */\n studyDescription() {\n return getValue(this.metaData['00081030']);\n }\n\n /**\n * Series date\n *\n * @return {*}\n */\n seriesDate() {\n return getValue(this.metaData['00080021']);\n }\n\n /**\n * Series description\n *\n * @return {*}\n */\n seriesDescription() {\n return getValue(this.metaData['0008103e']);\n }\n\n /**\n * Patient name\n *\n * @return {*}\n */\n patientName() {\n return getValue(this.metaData['00100010']);\n }\n\n /**\n * Patient ID\n *\n * @return {*}\n */\n patientID() {\n return getValue(this.metaData['00100020']);\n }\n\n /**\n * Patient birthdate\n *\n * @return {*}\n */\n patientBirthdate() {\n return getValue(this.metaData['00100030']);\n }\n\n /**\n * Patient sex\n *\n * @return {*}\n */\n patientSex() {\n return getValue(this.metaData['00100040']);\n }\n\n /**\n * Patient age\n *\n * @return {*}\n */\n patientAge() {\n return getValue(this.metaData['00101010']);\n }\n\n /**\n * Photometric interpretation\n *\n * @return {*}\n */\n photometricInterpretation() {\n return getValue(this.metaData['00280004']);\n }\n\n planarConfiguration() {\n let planarConfiguration = this.metaData.uint16('00280006');\n\n if (typeof planarConfiguration === 'undefined') {\n planarConfiguration = null;\n }\n\n return planarConfiguration;\n }\n\n samplesPerPixel() {\n return this.metaData.uint16('00280002');\n }\n\n numberOfFrames() {\n let numberOfFrames = getNumberValue(this.metaData['00280008']);\n\n // need something smarter!\n if (typeof numberOfFrames === 'undefined') {\n numberOfFrames = null;\n }\n\n return numberOfFrames;\n }\n\n numberOfChannels() {\n let numberOfChannels = 1;\n let photometricInterpretation = this.photometricInterpretation();\n\n if (\n !(\n photometricInterpretation !== 'RGB' &&\n photometricInterpretation !== 'PALETTE COLOR' &&\n photometricInterpretation !== 'YBR_FULL' &&\n photometricInterpretation !== 'YBR_FULL_422' &&\n photometricInterpretation !== 'YBR_PARTIAL_422' &&\n photometricInterpretation !== 'YBR_PARTIAL_420' &&\n photometricInterpretation !== 'YBR_RCT'\n )\n ) {\n numberOfChannels = 3;\n }\n\n // make sure we return a number! (not a string!)\n return numberOfChannels;\n }\n\n invert() {\n let photometricInterpretation = this.photometricInterpretation();\n return photometricInterpretation === 'MONOCHROME1';\n }\n\n imageOrientation(frameIndex = 0) {\n return getNumberValues(this.metaData['00200037'], 6);\n }\n\n referencedSegmentNumber(frameIndex = 0) {\n let referencedSegmentNumber = -1;\n let referencedSegmentNumberElement = this._findInGroupSequence('52009230', '0062000a', frameIndex);\n\n if (referencedSegmentNumberElement !== null) {\n referencedSegmentNumber = getNumberValue(referencedSegmentNumberElement['0062000b']);\n }\n\n return referencedSegmentNumber;\n }\n\n pixelAspectRatio() {\n return getNumberValues(this.metaData['00280034'], 2);\n }\n\n imagePosition(frameIndex = 0) {\n return getNumberValues(this.metaData['00200032'], 3);\n }\n\n instanceNumber(frameIndex = 0) {\n let instanceNumber = null;\n // first look for frame!\n // per frame functionnal group sequence\n let perFrameFunctionnalGroupSequence = this.metaData['52009230'];\n\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\n if (perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['2005140f']) {\n let planeOrientationSequence =\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['2005140f'].items[0]\n .dataSet;\n instanceNumber = getNumberValue(planeOrientationSequence['00200013']);\n } else {\n instanceNumber = getNumberValue(this.metaData['00200013']);\n\n if (typeof instanceNumber === 'undefined') {\n instanceNumber = null;\n }\n }\n } else {\n // should we default to undefined??\n // default orientation\n instanceNumber = getNumberValue(this.metaData['00200013']);\n\n if (typeof instanceNumber === 'undefined') {\n instanceNumber = null;\n }\n }\n\n return instanceNumber;\n }\n\n pixelSpacing(frameIndex = 0) {\n return getNumberValues(this.metaData['00280030'], 2);\n }\n\n ultrasoundRegions(frameIndex = 0) {\n const sequence = this.metaData['00186011'];\n\n if (!sequence || !sequence.items) {\n return [];\n }\n\n const ultrasoundRegions = [];\n\n sequence.items.forEach(item => {\n ultrasoundRegions.push({\n x0: item.dataSet.uint32('00186018'),\n y0: item.dataSet.uint32('0018601a'),\n x1: item.dataSet.uint32('0018601c'),\n y1: item.dataSet.uint32('0018601e'),\n axisX: item.dataSet.int32('00186020') || null, // optional\n axisY: item.dataSet.int32('00186022') || null, // optional\n unitsX: this._getUnitsName(item.dataSet.uint16('00186024')),\n unitsY: this._getUnitsName(item.dataSet.uint16('00186026')),\n deltaX: item.dataSet.double('0018602c'),\n deltaY: item.dataSet.double('0018602e'),\n });\n });\n\n return ultrasoundRegions;\n }\n\n frameTime(frameIndex = 0) {\n let frameIncrementPointer = getNumberString(this.metaData['00280009']);\n let frameRate = getNumberString(this.metaData['00082144']);\n let frameTime;\n\n if (typeof frameIncrementPointer === 'number') {\n frameIncrementPointer = frameIncrementPointer.toString(16);\n frameTime = getNumberString(this.metaData['0018' + frameIncrementPointer]);\n }\n\n if (typeof frameTime === 'undefined' && typeof frameRate === 'number') {\n frameTime = 1000 / frameRate;\n }\n\n if (typeof frameTime === 'undefined') {\n frameTime = null;\n }\n\n return frameTime;\n }\n\n rows(frameIndex = 0) {\n let rows = getNumberString(this.metaData['00280010']);\n\n if (typeof rows === 'undefined') {\n rows = null;\n // print warning at least...\n }\n\n return rows;\n }\n\n columns(frameIndex = 0) {\n let columns = getNumberString(this.metaData['00280011']);\n\n if (typeof columns === 'undefined') {\n columns = null;\n // print warning at least...\n }\n\n return columns;\n }\n\n pixelType(frameIndex = 0) {\n // 0 integer, 1 float\n // dicom only support integers\n return 0;\n }\n\n pixelRepresentation(frameIndex = 0) {\n return getNumberValue(this.metaData['00280103']);\n }\n\n pixelPaddingValue(frameIndex = 0) {\n let padding = getNumberValue(this.metaData['00280120']);\n\n if (typeof padding === 'undefined') {\n padding = null;\n }\n\n return padding;\n }\n\n bitsAllocated(frameIndex = 0) {\n // expect frame index to start at 0!\n return getNumberString(this.metaData['00280100']);\n }\n\n highBit(frameIndex = 0) {\n // expect frame index to start at 0!\n return getNumberValue(this.metaData['00280102']);\n }\n\n rescaleIntercept(frameIndex = 0) {\n return getNumberValue(this.metaData['00281052']);\n }\n\n rescaleSlope(frameIndex = 0) {\n return getNumberValue(this.metaData['00281053']);\n }\n\n windowCenter(frameIndex = 0) {\n return this._findFloatStringInFrameGroupSequence('00289132', '00281050', frameIndex);\n }\n\n windowWidth(frameIndex = 0) {\n return this._findFloatStringInFrameGroupSequence('00289132', '00281051', frameIndex);\n }\n\n sliceThickness(frameIndex = 0) {\n return getNumberValue(this.metaData['00180050']);\n }\n\n spacingBetweenSlices(frameIndex = 0) {\n let spacing = getNumberValue(this.metaData['00180088']);\n\n if (typeof spacing === 'undefined') {\n spacing = null;\n }\n\n return spacing;\n }\n\n dimensionIndexValues(frameIndex = 0) {\n let dimensionIndexValues = null;\n\n // try to get it from enhanced MR images\n // per-frame functionnal group sequence\n let perFrameFunctionnalGroupSequence = this.metaData['52009230'];\n\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\n let frameContentSequence =\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['00209111'];\n if (frameContentSequence !== undefined && frameContentSequence !== null) {\n frameContentSequence = frameContentSequence.items[0].dataSet;\n let dimensionIndexValuesElt = frameContentSequence['00209157'];\n if (dimensionIndexValuesElt !== undefined && dimensionIndexValuesElt !== null) {\n // /4 because UL\n let nbValues = dimensionIndexValuesElt.length / 4;\n dimensionIndexValues = [];\n\n for (let i = 0; i < nbValues; i++) {\n dimensionIndexValues.push(getNumberValue(frameContentSequence['00209157'], i));\n }\n }\n }\n }\n\n return dimensionIndexValues;\n }\n\n inStackPositionNumber(frameIndex = 0) {\n let inStackPositionNumber = null;\n\n // try to get it from enhanced MR images\n // per-frame functionnal group sequence\n let perFrameFunctionnalGroupSequence = this.metaData['52009230'];\n\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\n // NOT A PHILIPS TRICK!\n let philipsPrivateSequence =\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['00209111'].items[0]\n .dataSet;\n inStackPositionNumber = getNumberValue(philipsPrivateSequence['00209057']);\n } else {\n inStackPositionNumber = null;\n }\n\n return inStackPositionNumber;\n }\n\n stackID(frameIndex = 0) {\n let stackID = null;\n\n // try to get it from enhanced MR images\n // per-frame functionnal group sequence\n let perFrameFunctionnalGroupSequence = this.metaData['52009230'];\n\n if (typeof perFrameFunctionnalGroupSequence !== 'undefined') {\n // NOT A PHILIPS TRICK!\n let philipsPrivateSequence =\n perFrameFunctionnalGroupSequence.items[frameIndex].dataSet['00209111'].items[0]\n .dataSet;\n stackID = getNumberValue(philipsPrivateSequence['00209056']);\n } else {\n stackID = null;\n }\n\n return stackID;\n }\n\n extractPixelData(frameIndex = 0) {\n // decompress\n let decompressedData = this._decodePixelData(frameIndex);\n\n let numberOfChannels = this.numberOfChannels();\n\n if (numberOfChannels > 1) {\n return this._convertColorSpace(decompressedData);\n } else {\n return decompressedData;\n }\n }\n\n //\n // private methods\n //\n\n _findInGroupSequence(sequence, subsequence, index) {\n let functionalGroupSequence = this.metaData[sequence];\n console.log('_findInGroupSequence', functionalGroupSequence, sequence);\n\n if (typeof functionalGroupSequence !== 'undefined') {\n let inSequence = functionalGroupSequence.items[index].dataSet[subsequence];\n\n if (typeof inSequence !== 'undefined') {\n return inSequence.items[0].dataSet;\n }\n }\n\n return null;\n }\n\n _findStringInGroupSequence(sequence, subsequence, tag, index) {\n // index = 0 if shared!!!\n let dataSet = this._findInGroupSequence(sequence, subsequence, index);\n console.log('_findStringInGroupSequence', dataSet);\n\n if (dataSet !== null) {\n return getValue(dataSet[tag]);\n }\n\n return null;\n }\n\n _findStringInFrameGroupSequence(subsequence, tag, index) {\n return (\n this._findStringInGroupSequence('52009229', subsequence, tag, 0) ||\n this._findStringInGroupSequence('52009230', subsequence, tag, index)\n );\n }\n\n // _findStringEverywhere(subsequence, tag, index) {\n // let targetString = this._findStringInFrameGroupSequence(subsequence, tag, index);\n // // PET MODULE\n // if (targetString === null) {\n // const petModule = '00540022';\n // targetString = this._findStringInSequence(petModule, tag);\n // }\n //\n // if (targetString === null) {\n // targetString = getValue(this.metaData[tag]);\n // }\n //\n // if (typeof targetString === 'undefined') {\n // targetString = null;\n // }\n //\n // return targetString;\n // }\n\n _findStringInSequence(sequenceTag, tag, index) {\n const sequence = this.metaData[sequenceTag];\n\n let targetString;\n if (sequence) {\n targetString = getValue(sequence.items[0].dataSet[tag]);\n }\n\n if (typeof targetString === 'undefined') {\n targetString = null;\n }\n\n return targetString;\n }\n\n _findFloatStringInGroupSequence(sequence, subsequence, tag, index) {\n let dataInGroupSequence = getNumberValue(this.metaData[tag]);\n\n // try to get it from enhanced MR images\n // per-frame functionnal group\n if (typeof dataInGroupSequence === 'undefined') {\n dataInGroupSequence = this._findInGroupSequence(sequence, subsequence, index);\n\n if (dataInGroupSequence !== null) {\n return getNumberValue(dataInGroupSequence[tag]);\n }\n }\n\n return dataInGroupSequence;\n }\n\n _findFloatStringInFrameGroupSequence(subsequence, tag, index) {\n return (\n this._findFloatStringInGroupSequence('52009229', subsequence, tag, 0) ||\n this._findFloatStringInGroupSequence('52009230', subsequence, tag, index)\n );\n }\n\n _decodePixelData(frameIndex = 0) {\n // if compressed..?\n let transferSyntaxUID = this.transferSyntaxUID();\n console.log('transfer syntax uid', transferSyntaxUID);\n // find compression scheme\n if (\n transferSyntaxUID === '1.2.840.10008.1.2.4.90' ||\n // JPEG 2000 Lossless\n transferSyntaxUID === '1.2.840.10008.1.2.4.91'\n ) {\n // JPEG 2000 Lossy\n return this._decodeJ2K(frameIndex);\n } else if (\n transferSyntaxUID === '1.2.840.10008.1.2.5'\n // decodeRLE\n ) {\n return this._decodeRLE(frameIndex);\n } else if (\n transferSyntaxUID === '1.2.840.10008.1.2.4.57' ||\n // JPEG Lossless, Nonhierarchical (Processes 14)\n transferSyntaxUID === '1.2.840.10008.1.2.4.70'\n ) {\n // JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1])\n return this._decodeJPEGLossless(frameIndex);\n } else if (\n transferSyntaxUID === '1.2.840.10008.1.2.4.50' ||\n // JPEG Baseline lossy process 1 (8 bit)\n transferSyntaxUID === '1.2.840.10008.1.2.4.51'\n ) {\n // JPEG Baseline lossy process 2 & 4 (12 bit)\n return this._decodeJPEGBaseline(frameIndex);\n } else if (\n transferSyntaxUID === '1.2.840.10008.1.2' ||\n // Implicit VR Little Endian\n transferSyntaxUID === '1.2.840.10008.1.2.1'\n ) {\n // Explicit VR Little Endian\n return this._decodeUncompressed(frameIndex);\n } else if (transferSyntaxUID === '1.2.840.10008.1.2.2') {\n // Explicit VR Big Endian\n let frame = this._decodeUncompressed(frameIndex);\n // and sawp it!\n return this._swapFrame(frame);\n } else {\n throw {\n error: `no decoder for transfer syntax ${transferSyntaxUID}`,\n };\n }\n }\n\n // github.com/chafey/cornerstoneWADOImageLoader/blob/master/src/imageLoader/wadouri/getEncapsulatedImageFrame.js\n framesAreFragmented() {\n const numberOfFrames = getValue(this.metaData['00280008']);\n const pixelDataElement = this.metaData['7fe00010'];\n\n return numberOfFrames !== pixelDataElement.fragments.length;\n }\n\n getEncapsulatedImageFrame(frameIndex) {\n if (\n this.metaData['7fe00010'] &&\n this.metaData['7fe00010'].basicOffsetTable.length\n ) {\n // Basic Offset Table is not empty\n return DicomParser.readEncapsulatedImageFrame(\n this.metaData,\n this.metaData['7fe00010'],\n frameIndex,\n );\n }\n\n if (this.framesAreFragmented()) {\n // Basic Offset Table is empty\n return DicomParser.readEncapsulatedImageFrame(\n this.metaData,\n this.metaData['7fe00010'],\n frameIndex,\n DicomParser.createJPEGBasicOffsetTable(this.metaData, this.metaData['7fe00010']),\n );\n }\n\n return DicomParser.readEncapsulatedPixelDataFromFragments(\n this.metaData,\n this.metaData['7fe00010'],\n frameIndex,\n );\n }\n\n // used if OpenJPEG library isn't loaded (OHIF/image-JPEG2000 isn't supported and can't parse some images)\n _decodeJpx(frameIndex = 0) {\n const jpxImage = new Jpx();\n // https://github.com/OHIF/image-JPEG2000/issues/6\n // It currently returns either Int16 or Uint16 based on whether the codestream is signed or not.\n jpxImage.parse(this.getEncapsulatedImageFrame(frameIndex));\n\n if (jpxImage.componentsCount !== 1) {\n throw new Error(\n 'JPEG2000 decoder returned a componentCount of ${componentsCount}, when 1 is expected',\n );\n }\n\n if (jpxImage.tiles.length !== 1) {\n throw new Error('JPEG2000 decoder returned a tileCount of ${tileCount}, when 1 is expected');\n }\n\n return jpxImage.tiles[0].items;\n }\n\n _decodeOpenJPEG(frameIndex = 0) {\n const encodedPixelData = this.getEncapsulatedImageFrame(frameIndex);\n const bytesPerPixel = this.bitsAllocated(frameIndex) <= 8 ? 1 : 2;\n const signed = this.pixelRepresentation(frameIndex) === 1;\n const dataPtr = openJPEG._malloc(encodedPixelData.length);\n\n openJPEG.writeArrayToMemory(encodedPixelData, dataPtr);\n\n // create param outpout\n const imagePtrPtr = openJPEG._malloc(4);\n const imageSizePtr = openJPEG._malloc(4);\n const imageSizeXPtr = openJPEG._malloc(4);\n const imageSizeYPtr = openJPEG._malloc(4);\n const imageSizeCompPtr = openJPEG._malloc(4);\n const ret = openJPEG.ccall(\n 'jp2_decode',\n 'number',\n ['number', 'number', 'number', 'number', 'number', 'number', 'number'],\n [\n dataPtr,\n encodedPixelData.length,\n imagePtrPtr,\n imageSizePtr,\n imageSizeXPtr,\n imageSizeYPtr,\n imageSizeCompPtr,\n ],\n );\n const imagePtr = openJPEG.getValue(imagePtrPtr, '*');\n\n if (ret !== 0) {\n console.log('[opj_decode] decoding failed!');\n openJPEG._free(dataPtr);\n openJPEG._free(imagePtr);\n openJPEG._free(imageSizeXPtr);\n openJPEG._free(imageSizeYPtr);\n openJPEG._free(imageSizePtr);\n openJPEG._free(imageSizeCompPtr);\n\n return;\n }\n\n // Copy the data from the EMSCRIPTEN heap into the correct type array\n const length =\n openJPEG.getValue(imageSizeXPtr, 'i32') *\n openJPEG.getValue(imageSizeYPtr, 'i32') *\n openJPEG.getValue(imageSizeCompPtr, 'i32');\n const src32 = new Int32Array(openJPEG.HEAP32.buffer, imagePtr, length);\n let pixelData;\n\n if (bytesPerPixel === 1) {\n if (Uint8Array.from) {\n pixelData = Uint8Array.from(src32);\n } else {\n pixelData = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n pixelData[i] = src32[i];\n }\n }\n } else if (signed) {\n if (Int16Array.from) {\n pixelData = Int16Array.from(src32);\n } else {\n pixelData = new Int16Array(length);\n for (let i = 0; i < length; i++) {\n pixelData[i] = src32[i];\n }\n }\n } else if (Uint16Array.from) {\n pixelData = Uint16Array.from(src32);\n } else {\n pixelData = new Uint16Array(length);\n for (let i = 0; i < length; i++) {\n pixelData[i] = src32[i];\n }\n }\n\n openJPEG._free(dataPtr);\n openJPEG._free(imagePtrPtr);\n openJPEG._free(imagePtr);\n openJPEG._free(imageSizePtr);\n openJPEG._free(imageSizeXPtr);\n openJPEG._free(imageSizeYPtr);\n openJPEG._free(imageSizeCompPtr);\n\n return pixelData;\n }\n\n // from cornerstone\n _decodeJ2K(frameIndex = 0) {\n if (typeof OpenJPEG === 'undefined') {\n // OpenJPEG decoder not loaded\n return this._decodeJpx(frameIndex);\n }\n\n if (!openJPEG) {\n openJPEG = OpenJPEG();\n if (!openJPEG || !openJPEG._jp2_decode) {\n // OpenJPEG failed to initialize\n return this._decodeJpx(frameIndex);\n }\n }\n\n return this._decodeOpenJPEG(frameIndex);\n }\n\n _decodeRLE(frameIndex = 0) {\n const bitsAllocated = this.bitsAllocated(frameIndex);\n const planarConfiguration = this.planarConfiguration();\n const columns = this.columns();\n const rows = this.rows();\n const samplesPerPixel = this.samplesPerPixel(frameIndex);\n const pixelRepresentation = this.pixelRepresentation(frameIndex);\n\n // format data for the RLE decoder\n const imageFrame = {\n pixelRepresentation,\n bitsAllocated,\n planarConfiguration,\n columns,\n rows,\n samplesPerPixel,\n };\n\n const pixelData = DicomParser.readEncapsulatedPixelDataFromFragments(\n this.metaData,\n this.metaData['7fe00010'],\n frameIndex,\n );\n\n const decoded = RLEDecoder(imageFrame, pixelData);\n return decoded.pixelData;\n }\n\n // from cornerstone\n _decodeJPEGLossless(frameIndex = 0) {\n let encodedPixelData = this.getEncapsulatedImageFrame(frameIndex);\n let pixelRepresentation = this.pixelRepresentation(frameIndex);\n let bitsAllocated = this.bitsAllocated(frameIndex);\n let byteOutput = bitsAllocated <= 8 ? 1 : 2;\n let decoder = new Jpeg.lossless.Decoder();\n let decompressedData = decoder.decode(\n encodedPixelData.buffer,\n encodedPixelData.byteOffset,\n encodedPixelData.length,\n byteOutput,\n );\n\n if (pixelRepresentation === 0) {\n if (byteOutput === 2) {\n return new Uint16Array(decompressedData.buffer);\n } else {\n // untested!\n return new Uint8Array(decompressedData.buffer);\n }\n } else {\n return new Int16Array(decompressedData.buffer);\n }\n }\n\n _decodeJPEGBaseline(frameIndex = 0) {\n let encodedPixelData = this.getEncapsulatedImageFrame(frameIndex);\n let rows = this.rows(frameIndex);\n let columns = this.columns(frameIndex);\n let bitsAllocated = this.bitsAllocated(frameIndex);\n let jpegBaseline = new JpegBaseline();\n jpegBaseline.parse(encodedPixelData);\n\n if (bitsAllocated === 8) {\n return jpegBaseline.getData(columns, rows);\n } else if (bitsAllocated === 16) {\n return jpegBaseline.getData16(columns, rows);\n }\n }\n\n _decodeUncompressed(frameIndex = 0) {\n let pixelRepresentation = this.pixelRepresentation(frameIndex);\n let bitsAllocated = this.bitsAllocated(frameIndex);\n let pixelDataElement = this.metaData['7fe00010'];\n let pixelDataOffset = pixelDataElement.dataOffset;\n let numberOfChannels = this.numberOfChannels();\n let numPixels = this.rows(frameIndex) * this.columns(frameIndex) * numberOfChannels;\n let frameOffset = 0;\n let buffer = this.metaData.byteArray.buffer;\n\n if (pixelRepresentation === 0 && bitsAllocated === 8) {\n // unsigned 8 bit\n frameOffset = pixelDataOffset + frameIndex * numPixels;\n return new Uint8Array(buffer, frameOffset, numPixels);\n } else if (pixelRepresentation === 0 && bitsAllocated === 16) {\n // unsigned 16 bit\n frameOffset = pixelDataOffset + frameIndex * numPixels * 2;\n return new Uint16Array(buffer, frameOffset, numPixels);\n } else if (pixelRepresentation === 1 && bitsAllocated === 16) {\n // signed 16 bit\n frameOffset = pixelDataOffset + frameIndex * numPixels * 2;\n return new Int16Array(buffer, frameOffset, numPixels);\n } else if (pixelRepresentation === 0 && bitsAllocated === 32) {\n // unsigned 32 bit\n frameOffset = pixelDataOffset + frameIndex * numPixels * 4;\n return new Uint32Array(buffer, frameOffset, numPixels);\n } else if (pixelRepresentation === 0 && bitsAllocated === 1) {\n let newBuffer = new ArrayBuffer(numPixels);\n let newArray = new Uint8Array(newBuffer);\n\n frameOffset = pixelDataOffset + frameIndex * numPixels;\n let index = 0;\n\n let bitStart = frameIndex * numPixels;\n let bitEnd = frameIndex * numPixels + numPixels;\n\n let byteStart = Math.floor(bitStart / 8);\n let bitStartOffset = bitStart - byteStart * 8;\n let byteEnd = Math.ceil(bitEnd / 8);\n\n let targetBuffer = new Uint8Array(buffer, pixelDataOffset);\n\n for (let i = byteStart; i <= byteEnd; i++) {\n while (bitStartOffset < 8) {\n switch (bitStartOffset) {\n case 0:\n newArray[index] = targetBuffer[i] & 0x0001;\n break;\n case 1:\n newArray[index] = (targetBuffer[i] >>> 1) & 0x0001;\n break;\n case 2:\n newArray[index] = (targetBuffer[i] >>> 2) & 0x0001;\n break;\n case 3:\n newArray[index] = (targetBuffer[i] >>> 3) & 0x0001;\n break;\n case 4:\n newArray[index] = (targetBuffer[i] >>> 4) & 0x0001;\n break;\n case 5:\n newArray[index] = (targetBuffer[i] >>> 5) & 0x0001;\n break;\n case 6:\n newArray[index] = (targetBuffer[i] >>> 6) & 0x0001;\n break;\n case 7:\n newArray[index] = (targetBuffer[i] >>> 7) & 0x0001;\n break;\n default:\n break;\n }\n\n bitStartOffset++;\n index++;\n // if return..\n if (index >= numPixels) {\n return newArray;\n }\n }\n bitStartOffset = 0;\n }\n }\n }\n\n _interpretAsRGB(photometricInterpretation) {\n const rgbLikeTypes = ['RGB', 'YBR_RCT', 'YBR_ICT', 'YBR_FULL_422'];\n\n return rgbLikeTypes.indexOf(photometricInterpretation) !== -1;\n }\n\n _convertColorSpace(uncompressedData) {\n let rgbData = null;\n let photometricInterpretation = this.photometricInterpretation();\n let planarConfiguration = this.planarConfiguration();\n\n const interpretAsRGB = this._interpretAsRGB(photometricInterpretation);\n if (interpretAsRGB && planarConfiguration === 0) {\n // ALL GOOD, ALREADY ORDERED\n // planar or non planar planarConfiguration\n rgbData = uncompressedData;\n } else if (interpretAsRGB && planarConfiguration === 1) {\n if (uncompressedData instanceof Int8Array) {\n rgbData = new Int8Array(uncompressedData.length);\n } else if (uncompressedData instanceof Uint8Array) {\n rgbData = new Uint8Array(uncompressedData.length);\n } else if (uncompressedData instanceof Int16Array) {\n rgbData = new Int16Array(uncompressedData.length);\n } else if (uncompressedData instanceof Uint16Array) {\n rgbData = new Uint16Array(uncompressedData.length);\n } else {\n const error = new Error(`unsuported typed array: ${uncompressedData}`);\n throw error;\n }\n\n let numPixels = uncompressedData.length / 3;\n let rgbaIndex = 0;\n let rIndex = 0;\n let gIndex = numPixels;\n let bIndex = numPixels * 2;\n for (let i = 0; i < numPixels; i++) {\n rgbData[rgbaIndex++] = uncompressedData[rIndex++]; // red\n rgbData[rgbaIndex++] = uncompressedData[gIndex++]; // green\n rgbData[rgbaIndex++] = uncompressedData[bIndex++]; // blue\n }\n } else if (photometricInterpretation === 'YBR_FULL') {\n if (uncompressedData instanceof Int8Array) {\n rgbData = new Int8Array(uncompressedData.length);\n } else if (uncompressedData instanceof Uint8Array) {\n rgbData = new Uint8Array(uncompressedData.length);\n } else if (uncompressedData instanceof Int16Array) {\n rgbData = new Int16Array(uncompressedData.length);\n } else if (uncompressedData instanceof Uint16Array) {\n rgbData = new Uint16Array(uncompressedData.length);\n } else {\n const error = new Error(`unsuported typed array: ${uncompressedData}`);\n throw error;\n }\n\n // https://github.com/chafey/cornerstoneWADOImageLoader/blob/master/src/decodeYBRFull.js\n let nPixels = uncompressedData.length / 3;\n let ybrIndex = 0;\n let rgbaIndex = 0;\n for (let i = 0; i < nPixels; i++) {\n let y = uncompressedData[ybrIndex++];\n let cb = uncompressedData[ybrIndex++];\n let cr = uncompressedData[ybrIndex++];\n rgbData[rgbaIndex++] = y + 1.402 * (cr - 128); // red\n rgbData[rgbaIndex++] = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green\n rgbData[rgbaIndex++] = y + 1.772 * (cb - 128); // blue\n // rgbData[rgbaIndex++] = 255; //alpha\n }\n } else {\n const error = new Error(\n `photometric interpolation not supported: ${photometricInterpretation}`,\n );\n throw error;\n }\n\n return rgbData;\n }\n\n /**\n * Swap bytes in frame.\n */\n _swapFrame(frame) {\n // swap bytes ( if 8bits (1byte), nothing to swap)\n let bitsAllocated = this.bitsAllocated();\n\n if (bitsAllocated === 16) {\n for (let i = 0; i < frame.length; i++) {\n frame[i] = this._swap16(frame[i]);\n }\n } else if (bitsAllocated === 32) {\n for (let i = 0; i < frame.length; i++) {\n frame[i] = this._swap32(frame[i]);\n }\n }\n\n return frame;\n }\n\n _getUnitsName(value) {\n const units = {\n 0: 'none',\n 1: 'percent',\n 2: 'dB',\n 3: 'cm',\n 4: 'seconds',\n 5: 'hertz',\n 6: 'dB/seconds',\n 7: 'cm/sec',\n 8: 'cm2',\n 9: 'cm2/sec',\n 10: 'cm3',\n 11: 'cm3/sec',\n 12: 'degrees',\n };\n\n return units.hasOwnProperty(value) ? units[value] : 'none';\n }\n\n minMaxPixelData(pixelData = []) {\n let minMax = [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY];\n let numPixels = pixelData.length;\n for (let index = 0; index < numPixels; index++) {\n let spv = pixelData[index];\n minMax[0] = Math.min(minMax[0], spv);\n minMax[1] = Math.max(minMax[1], spv);\n }\n\n return minMax;\n }\n}\n","import getValue from './getValue.js';\n\n/**\n * Returns the first string value as a Javascript number\n *\n * @param element - The javascript object for the specified element in the metadata\n * @param [index] - the index of the value in a multi-valued element, default is 0\n * @param [defaultValue] - The default value to return if the element does not exist\n * @returns {*}\n */\nfunction getNumberString (element, index, defaultValue) {\n const value = getValue(element, index, defaultValue);\n\n if (value === undefined) {\n return;\n }\n\n return parseFloat(value);\n}\n\nexport default getNumberString;\n","import getValue from './getValue.js';\n\nfunction getNumberValue (element, index) {\n const value = getValue(element, index);\n\n if (value === undefined) {\n return;\n }\n\n return parseFloat(value);\n}\n\nexport default getNumberValue;\n","\n\n/**\n * Returns the values as an array of javascript numbers\n *\n * @param element - The javascript object for the specified element in the metadata\n * @param [minimumLength] - the minimum number of values\n * @returns {*}\n */\nfunction getNumberValues (element, minimumLength) {\n if (!element) {\n return;\n }\n // Value is not present if the attribute has a zero length value\n if (!element.Value) {\n return;\n }\n // make sure we have the expected length\n if (minimumLength && element.Value.length < minimumLength) {\n return;\n }\n\n const values = [];\n\n for (let i = 0; i < element.Value.length; i++) {\n values.push(parseFloat(element.Value[i]));\n }\n\n return values;\n}\n\nexport default getNumberValues;\n","\n\n/**\n * Returns the raw value\n *\n * @param element - The javascript object for the specified element in the metadata\n * @param [index] - the index of the value in a multi-valued element, default is 0\n * @param [defaultValue] - The default value to return if the element does not exist\n * @returns {*}\n */\nfunction getValue (element, index, defaultValue) {\n index = index || 0;\n if (!element) {\n return defaultValue;\n }\n // Value is not present if the attribute has a zero length value\n if (!element.Value) {\n return defaultValue;\n }\n // make sure we have the specified index\n if (element.Value.length <= index) {\n return defaultValue;\n }\n\n return element.Value[index];\n}\n\nexport default getValue;\n","import _getNumberString from './getNumberString';\nimport _getNumberValue from './getNumberValue';\nimport _getNumberValues from './getNumberValues';\nimport _getValue from './getValue';\nimport _CornerstoneDataParser from './cornerstoneDataParser';\n\nexport {_getNumberString as getNumberString}\nexport {_getNumberValue as getNumberValue}\nexport {_getNumberValues as getNumberValues}\nexport {_getValue as getValue}\nexport {_CornerstoneDataParser as CornerstoneDataParser}\n","import { widgetsBase } from './widgets.base';\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\n\n/**\n * @module widgets/angle\n */\nconst widgetsAngle = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'Angle';\n\n // incoming parameters (optional: worldPosition)\n\n // outgoing values\n this._opangle = null;\n\n this._moving = false;\n this._domHovered = false;\n this._defaultAngle = true;\n\n // mesh stuff\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n\n // dom stuff\n this._line = null;\n this._line2 = null;\n this._label = null;\n\n // add handles\n this._handles = [];\n\n let handle;\n const WidgetsHandle = widgetsHandleFactory(three);\n for (let i = 0; i < 3; i++) {\n handle = new WidgetsHandle(targetMesh, controls, params);\n this.add(handle);\n this._handles.push(handle);\n }\n this._handles[1].active = true;\n this._handles[1].tracking = true;\n this._handles[2].active = true;\n this._handles[2].tracking = true;\n\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\n this.add(this._moveHandle);\n this._handles.push(this._moveHandle);\n this._moveHandle.hide();\n\n this.create();\n\n this.onMove = this.onMove.bind(this);\n this.onHover = this.onHover.bind(this);\n this.addEventListeners();\n }\n\n addEventListeners() {\n this._container.addEventListener('wheel', this.onMove);\n\n this._line.addEventListener('mouseenter', this.onHover);\n this._line.addEventListener('mouseleave', this.onHover);\n this._line2.addEventListener('mouseenter', this.onHover);\n this._line2.addEventListener('mouseleave', this.onHover);\n this._label.addEventListener('mouseenter', this.onHover);\n this._label.addEventListener('mouseleave', this.onHover);\n }\n\n removeEventListeners() {\n this._container.removeEventListener('wheel', this.onMove);\n\n this._line.removeEventListener('mouseenter', this.onHover);\n this._line.removeEventListener('mouseleave', this.onHover);\n this._line2.removeEventListener('mouseenter', this.onHover);\n this._line2.removeEventListener('mouseleave', this.onHover);\n this._label.removeEventListener('mouseenter', this.onHover);\n this._label.removeEventListener('mouseleave', this.onHover);\n }\n\n onHover(evt) {\n if (evt) {\n this.hoverDom(evt);\n }\n\n this.hoverMesh();\n\n this._hovered =\n this._handles[0].hovered ||\n this._handles[1].hovered ||\n this._handles[2].hovered ||\n this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n }\n\n hoverMesh() {\n // check raycast intersection, do we want to hover on mesh or just css?\n }\n\n hoverDom(evt) {\n this._domHovered = evt.type === 'mouseenter';\n }\n\n onStart(evt) {\n this._moveHandle.onMove(evt, true);\n\n this._handles[0].onStart(evt);\n this._handles[1].onStart(evt);\n this._handles[2].onStart(evt);\n\n this._active =\n this._handles[0].active ||\n this._handles[1].active ||\n this._handles[2].active ||\n this._domHovered;\n\n if (this._domHovered && !this._handles[1].tracking && !this._handles[2].tracking) {\n this._moving = true;\n this._controls.enabled = false;\n }\n\n this.update();\n }\n\n onMove(evt) {\n if (this._active) {\n const prevPosition = this._moveHandle.worldPosition.clone();\n\n this._dragged = true;\n this._moveHandle.onMove(evt, true);\n\n if (this._moving) {\n this._handles.slice(0, -1).forEach(handle => {\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\n });\n }\n } else {\n this.onHover(null);\n }\n\n this._handles[0].onMove(evt);\n this._handles[1].onMove(evt);\n this._handles[2].onMove(evt);\n\n this.update();\n }\n\n onEnd() {\n this._handles[0].onEnd(); // First Handle\n\n if (\n (this._handles[1].tracking &&\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10) ||\n (!this._handles[1].tracking &&\n this._handles[2].tracking &&\n this._handles[1].screenPosition.distanceTo(this._handles[2].screenPosition) < 10)\n ) {\n return;\n }\n\n if (!this._dragged && this._active && !this._handles[2].tracking) {\n this._selected = !this._selected; // change state if there was no dragging\n this._handles[0].selected = this._selected;\n }\n\n // Third Handle\n if (this._handles[1].active) {\n this._handles[2].onEnd();\n } else if (this._dragged || !this._handles[2].tracking) {\n this._handles[2].tracking = false;\n this._handles[2].onEnd();\n } else {\n this._handles[2].tracking = false;\n }\n this._handles[2].selected = this._selected;\n\n // Second Handle\n if (this._dragged || !this._handles[1].tracking) {\n this._handles[1].tracking = false;\n this._handles[1].onEnd();\n } else {\n this._handles[1].tracking = false;\n }\n this._handles[1].selected = this._selected;\n\n this._active = this._handles[0].active || this._handles[1].active || this._handles[2].active;\n this._dragged = this._handles[2].tracking;\n this._moving = false;\n this.update();\n }\n\n create() {\n this.createMesh();\n this.createDOM();\n }\n\n createMesh() {\n // geometry\n this._geometry = new three.Geometry();\n this._geometry.vertices = [\n this._handles[0].worldPosition,\n this._handles[1].worldPosition,\n this._handles[1].worldPosition,\n this._handles[2].worldPosition,\n ];\n\n // material\n this._material = new three.LineBasicMaterial();\n\n this.updateMeshColor();\n\n // mesh\n this._mesh = new three.LineSegments(this._geometry, this._material);\n this._mesh.visible = true;\n this.add(this._mesh);\n }\n\n createDOM() {\n this._line = document.createElement('div');\n this._line.className = 'widgets-line';\n this._container.appendChild(this._line);\n\n this._line2 = document.createElement('div');\n this._line2.className = 'widgets-line';\n this._container.appendChild(this._line2);\n\n this._label = document.createElement('div');\n this._label.className = 'widgets-label';\n this._container.appendChild(this._label);\n\n this.updateDOMColor();\n }\n\n hideDOM() {\n this._line.style.display = 'none';\n this._line2.style.display = 'none';\n this._label.style.display = 'none';\n\n this._handles.forEach(elem => elem.hideDOM());\n }\n\n showDOM() {\n this._line.style.display = '';\n this._line2.style.display = '';\n this._label.style.display = '';\n\n this._handles[0].showDOM();\n this._handles[1].showDOM();\n this._handles[2].showDOM();\n }\n\n update() {\n this.updateColor();\n\n this._handles[0].update();\n this._handles[1].update();\n this._handles[2].update();\n\n // calculate values\n this._opangle =\n (this._handles[1].worldPosition\n .clone()\n .sub(this._handles[0].worldPosition)\n .angleTo(this._handles[1].worldPosition.clone().sub(this._handles[2].worldPosition)) *\n 180) /\n Math.PI || 0.0;\n this._opangle = this._defaultAngle ? this._opangle : 360 - this._opangle;\n\n this.updateMeshColor();\n this.updateMeshPosition();\n\n this.updateDOM();\n }\n\n updateMeshColor() {\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n updateMeshPosition() {\n if (this._geometry) {\n this._geometry.verticesNeedUpdate = true;\n }\n }\n\n updateDOM() {\n this.updateDOMColor();\n\n // update first line\n const lineData = this.getLineData(\n this._handles[1].screenPosition,\n this._handles[0].screenPosition\n );\n\n this._line.style.transform = `translate3D(${lineData.transformX}px, ${\n lineData.transformY\n }px, 0)\n rotate(${lineData.transformAngle}rad)`;\n this._line.style.width = lineData.length + 'px';\n\n // update second line\n const line2Data = this.getLineData(\n this._handles[1].screenPosition,\n this._handles[2].screenPosition\n );\n\n this._line2.style.transform = `translate3D(${line2Data.transformX}px, ${\n line2Data.transformY\n }px, 0)\n rotate(${line2Data.transformAngle}rad)`;\n this._line2.style.width = line2Data.length + 'px';\n\n // update angle and label\n this._label.innerHTML = `${this._opangle.toFixed(2)}°`;\n\n let paddingNormVector = lineData.line\n .clone()\n .add(line2Data.line)\n .normalize()\n .negate();\n let normAngle = paddingNormVector.angleTo(new three.Vector3(1, 0, 0));\n\n if (normAngle > Math.PI / 2) {\n normAngle = Math.PI - normAngle;\n }\n\n const labelPadding =\n Math.tan(normAngle) < this._label.offsetHeight / this._label.offsetWidth\n ? this._label.offsetWidth / 2 / Math.cos(normAngle) + 15 // 15px padding\n : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - normAngle) + 15;\n const paddingPoint = this._handles[1].screenPosition\n .clone()\n .add(paddingNormVector.multiplyScalar(labelPadding));\n const transform = this.adjustLabelTransform(this._label, paddingPoint);\n\n this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`;\n }\n\n updateDOMColor() {\n this._line.style.backgroundColor = this._color;\n this._line2.style.backgroundColor = this._color;\n this._label.style.borderColor = this._color;\n }\n\n free() {\n this.removeEventListeners();\n\n this._handles.forEach(h => {\n this.remove(h);\n h.free();\n });\n this._handles = [];\n\n this._container.removeChild(this._line);\n this._container.removeChild(this._line2);\n this._container.removeChild(this._label);\n\n // mesh, geometry, material\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n this._geometry.dispose();\n this._geometry = null;\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n super.free();\n }\n\n toggleDefaultAngle() {\n this._defaultAngle = !this._defaultAngle;\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh) {\n this._targetMesh = targetMesh;\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition) {\n this._handles[0].worldPosition.copy(worldPosition);\n this._handles[1].worldPosition.copy(worldPosition);\n this._handles[2].worldPosition.copy(worldPosition);\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n\n get angle() {\n return this._opangle;\n }\n };\n};\n\nexport { widgetsAngle };\nexport default widgetsAngle();\n","import { widgetsBase } from './widgets.base';\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\n\n/**\n * @module widgets/annotation\n * @todo: add option to show only label (without mesh, dots and lines)\n */\nconst widgetsAnnotation = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'Annotation';\n\n // incoming parameters (optional: worldPosition)\n\n this._initialized = false; // set to true when the name of the label is entered\n this._movinglabel = null; // bool that turns true when the label is moving with the mouse\n this._labelmoved = false; // bool that turns true once the label is moved by the user (at least once)\n this._labelhovered = false;\n this._manuallabeldisplay = false; // Make true to force the label to be displayed\n\n // mesh stuff\n this._material = null;\n this._geometry = null;\n this._meshline = null;\n this._cone = null;\n\n // dom stuff\n this._line = null;\n this._dashline = null;\n this._label = null;\n this._labeltext = null;\n\n // var\n this._labelOffset = new three.Vector3(); // difference between label center and second handle\n this._mouseLabelOffset = new three.Vector3(); // difference between mouse coordinates and label center\n\n // add handles\n this._handles = [];\n\n let handle;\n const WidgetsHandle = widgetsHandleFactory(three);\n for (let i = 0; i < 2; i++) {\n handle = new WidgetsHandle(targetMesh, controls, params);\n this.add(handle);\n this._handles.push(handle);\n }\n this._handles[1].active = true;\n\n this.create();\n this.initOffsets();\n\n this.onResize = this.onResize.bind(this);\n this.onMove = this.onMove.bind(this);\n this.onHoverlabel = this.onHoverlabel.bind(this);\n this.notonHoverlabel = this.notonHoverlabel.bind(this);\n this.changelabeltext = this.changelabeltext.bind(this);\n\n this.addEventListeners();\n }\n\n addEventListeners() {\n window.addEventListener('resize', this.onResize);\n\n this._label.addEventListener('mouseenter', this.onHoverlabel);\n this._label.addEventListener('mouseleave', this.notonHoverlabel);\n this._label.addEventListener('dblclick', this.changelabeltext);\n\n this._container.addEventListener('wheel', this.onMove);\n }\n\n removeEventListeners() {\n window.removeEventListener('resize', this.onResize);\n\n this._label.removeEventListener('mouseenter', this.onHoverlabel);\n this._label.removeEventListener('mouseleave', this.notonHoverlabel);\n this._label.removeEventListener('dblclick', this.changelabeltext);\n\n this._container.removeEventListener('wheel', this.onMove);\n }\n\n onResize() {\n this.initOffsets();\n }\n\n onHoverlabel() {\n // this function is called when mouse enters the label with \"mouseenter\" event\n this._labelhovered = true;\n this._container.style.cursor = 'pointer';\n }\n\n notonHoverlabel() {\n // this function is called when mouse leaves the label with \"mouseleave\" event\n this._labelhovered = false;\n this._container.style.cursor = 'default';\n }\n\n onStart(evt) {\n if (this._labelhovered) {\n // if label hovered then it should be moved\n // save mouse coordinates offset from label center\n const offsets = this.getMouseOffsets(evt, this._container);\n const paddingPoint = this._handles[1].screenPosition.clone().sub(this._labelOffset);\n\n this._mouseLabelOffset = new three.Vector3(\n offsets.screenX - paddingPoint.x,\n offsets.screenY - paddingPoint.y,\n 0\n );\n this._movinglabel = true;\n this._labelmoved = true;\n }\n\n this._handles[0].onStart(evt);\n this._handles[1].onStart(evt);\n\n this._active = this._handles[0].active || this._handles[1].active || this._labelhovered;\n\n this.update();\n }\n\n onMove(evt) {\n if (this._movinglabel) {\n const offsets = this.getMouseOffsets(evt, this._container);\n\n this._labelOffset = new three.Vector3(\n this._handles[1].screenPosition.x - offsets.screenX + this._mouseLabelOffset.x,\n this._handles[1].screenPosition.y - offsets.screenY + this._mouseLabelOffset.y,\n 0\n );\n this._controls.enabled = false;\n }\n\n if (this._active) {\n this._dragged = true;\n }\n\n this._handles[0].onMove(evt);\n this._handles[1].onMove(evt);\n\n this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._labelhovered;\n\n this.update();\n }\n\n onEnd() {\n this._handles[0].onEnd(); // First Handle\n\n // Second Handle\n if (this._dragged || !this._handles[1].tracking) {\n this._handles[1].tracking = false;\n this._handles[1].onEnd();\n } else {\n this._handles[1].tracking = false;\n }\n\n if (!this._dragged && this._active && this._initialized) {\n this._selected = !this._selected; // change state if there was no dragging\n this._handles[0].selected = this._selected;\n this._handles[1].selected = this._selected;\n }\n\n if (!this._initialized) {\n this._labelOffset = this._handles[1].screenPosition\n .clone()\n .sub(this._handles[0].screenPosition)\n .multiplyScalar(0.5);\n this.setlabeltext();\n this._initialized = true;\n }\n\n this._active = this._handles[0].active || this._handles[1].active;\n this._dragged = false;\n this._movinglabel = false;\n this.update();\n }\n\n setlabeltext() {\n // called when the user creates a new arrow\n while (!this._labeltext) {\n this._labeltext = prompt('Please enter the annotation text', '');\n }\n this.displaylabel();\n }\n\n changelabeltext() {\n // called when the user does double click in the label\n this._labeltext = prompt('Please enter a new annotation text', this._label.innerHTML);\n this.displaylabel();\n }\n\n displaylabel() {\n this._label.innerHTML =\n typeof this._labeltext === 'string' && this._labeltext.length > 0 // avoid error\n ? this._labeltext\n : ''; // empty string is passed or Cancel is pressed\n // show the label (in css an empty string is used to revert display=none)\n this._label.style.display = '';\n this._dashline.style.display = '';\n this._label.style.transform = `translate3D(\n ${this._handles[1].screenPosition.x - this._labelOffset.x - this._label.offsetWidth / 2}px,\n ${this._handles[1].screenPosition.y -\n this._labelOffset.y -\n this._label.offsetHeight / 2 -\n this._container.offsetHeight}px, 0)`;\n }\n\n create() {\n this.createMesh();\n this.createDOM();\n }\n\n createMesh() {\n // material\n this._material = new three.LineBasicMaterial();\n\n this.updateMeshColor();\n\n // line geometry\n this._geometry = new three.Geometry();\n this._geometry.vertices.push(this._handles[0].worldPosition);\n this._geometry.vertices.push(this._handles[1].worldPosition);\n\n // line mesh\n this._meshline = new three.Line(this._geometry, this._material);\n this._meshline.visible = true;\n\n this.add(this._meshline);\n\n // cone geometry\n this._conegeometry = new three.CylinderGeometry(0, 2, 10);\n this._conegeometry.translate(0, -5, 0);\n this._conegeometry.rotateX(-Math.PI / 2);\n\n // cone mesh\n this._cone = new three.Mesh(this._conegeometry, this._material);\n this._cone.visible = true;\n\n this.add(this._cone);\n }\n\n createDOM() {\n this._line = document.createElement('div');\n this._line.className = 'widgets-line';\n this._container.appendChild(this._line);\n\n this._dashline = document.createElement('div');\n this._dashline.className = 'widgets-dashline';\n this._dashline.style.display = 'none';\n this._container.appendChild(this._dashline);\n\n this._label = document.createElement('div');\n this._label.className = 'widgets-label';\n this._label.style.display = 'none';\n this._container.appendChild(this._label);\n\n this.updateDOMColor();\n }\n\n update() {\n this.updateColor();\n\n this._handles[0].update();\n this._handles[1].update();\n\n this.updateMeshColor();\n this.updateMeshPosition();\n\n this.updateDOM();\n }\n\n updateMeshColor() {\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n updateMeshPosition() {\n if (this._geometry) {\n this._geometry.verticesNeedUpdate = true;\n }\n\n if (this._cone) {\n this._cone.position.copy(this._handles[1].worldPosition);\n this._cone.lookAt(this._handles[0].worldPosition);\n }\n }\n\n updateDOM() {\n this.updateDOMColor();\n\n // update line\n const lineData = this.getLineData(\n this._handles[0].screenPosition,\n this._handles[1].screenPosition\n );\n\n this._line.style.transform = `translate3D(${lineData.transformX}px, ${\n lineData.transformY\n }px, 0)\n rotate(${lineData.transformAngle}rad)`;\n this._line.style.width = lineData.length + 'px';\n\n // update label\n const paddingVector = lineData.line.multiplyScalar(0.5);\n const paddingPoint = this._handles[1].screenPosition.clone().sub(\n this._labelmoved\n ? this._labelOffset // if the label is moved, then its position is defined by labelOffset\n : paddingVector\n ); // otherwise it's placed in the center of the line\n const labelPosition = this.adjustLabelTransform(this._label, paddingPoint);\n\n this._label.style.transform = `translate3D(${labelPosition.x}px, ${labelPosition.y}px, 0)`;\n\n // create the label without the interaction of the user. Useful when we need to create the label manually\n if (this._manuallabeldisplay) {\n this.displaylabel();\n }\n\n // update dash line\n let minLine = this.getLineData(this._handles[0].screenPosition, paddingPoint);\n let lineCL = this.getLineData(lineData.center, paddingPoint);\n let line1L = this.getLineData(this._handles[1].screenPosition, paddingPoint);\n\n if (minLine.length > lineCL.length) {\n minLine = lineCL;\n }\n if (minLine.length > line1L.length) {\n minLine = line1L;\n }\n\n this._dashline.style.transform = `translate3D(${minLine.transformX}px, ${\n minLine.transformY\n }px, 0)\n rotate(${minLine.transformAngle}rad)`;\n this._dashline.style.width = minLine.length + 'px';\n }\n\n updateDOMColor() {\n this._line.style.backgroundColor = this._color;\n this._dashline.style.borderTop = '1.5px dashed ' + this._color;\n this._label.style.borderColor = this._color;\n }\n\n hideDOM() {\n this._line.style.display = 'none';\n this._dashline.style.display = 'none';\n this._label.style.display = 'none';\n this._handles.forEach(elem => elem.hideDOM());\n }\n\n showDOM() {\n this._line.style.display = '';\n this._dashline.style.display = '';\n this._label.style.display = '';\n this._handles.forEach(elem => elem.showDOM());\n }\n\n free() {\n this.removeEventListeners();\n\n this._handles.forEach(h => {\n this.remove(h);\n h.free();\n });\n this._handles = [];\n\n this._container.removeChild(this._line);\n this._container.removeChild(this._dashline);\n this._container.removeChild(this._label);\n\n // mesh, geometry, material\n this.remove(this._meshline);\n this._meshline.geometry.dispose();\n this._meshline.geometry = null;\n this._meshline.material.dispose();\n this._meshline.material = null;\n this._meshline = null;\n this._geometry.dispose();\n this._geometry = null;\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n this.remove(this._cone);\n this._cone.geometry.dispose();\n this._cone.geometry = null;\n this._cone.material.dispose();\n this._cone.material = null;\n this._cone = null;\n this._conegeometry.dispose();\n this._conegeometry = null;\n\n super.free();\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh) {\n this._targetMesh = targetMesh;\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition) {\n this._handles[0].worldPosition.copy(worldPosition);\n this._handles[1].worldPosition.copy(worldPosition);\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n };\n};\n\nexport { widgetsAnnotation };\nexport default widgetsAnnotation();\n","import WidgetsCss from './widgets.css';\n\nimport {COLORS} from '../core/core.colors';\nimport CoreUtils from '../core/core.utils';\n\ninterface WidgetParameter {\n calibrationFactor: number;\n frameIndex: number;\n hideMesh: boolean;\n hideHandleMesh: boolean;\n ijk2LPS: THREE.Matrix4;\n lps2IJK: THREE.Matrix4;\n pixelSpacing: number;\n stack: {};\n ultrasoundRegions: Array<{}>;\n worldPosition: THREE.Vector3;\n}\n\ninterface USRegion {\n x0: number;\n x1: number;\n y0: number;\n y1: number;\n axisX: number;\n axisY: number;\n deltaX: number;\n deltaY: number;\n}\n\n/**\n * @module Abstract Widget\n */\n// tslint:disable-next-line\nconst widgetsBase = (three = (window as any).THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = three.Object3D;\n return class extends Constructor {\n constructor(targetMesh: THREE.Mesh, controls: THREE.OrbitControls, params: WidgetParameter) {\n super();\n\n this._widgetType = 'Base';\n\n this._params = params;\n if (params.hideMesh === true) {\n this.visible = false;\n }\n\n const elementStyle = document.getElementById('ami-widgets');\n if (elementStyle === null) {\n const styleEl = document.createElement('style');\n styleEl.id = 'ami-widgets';\n styleEl.innerHTML = WidgetsCss.code;\n document.head.appendChild(styleEl);\n }\n\n this._enabled = true;\n this._selected = false;\n this._hovered = true;\n this._active = true;\n\n this._colors = {\n default: COLORS.blue,\n active: COLORS.yellow,\n hover: COLORS.red,\n select: COLORS.green,\n text: COLORS.white,\n error: COLORS.lightRed,\n };\n this._color = this._colors.default;\n\n this._dragged = false;\n // can not call it visible because it conflicts with THREE.Object3D\n this._displayed = true;\n\n this._targetMesh = targetMesh;\n this._controls = controls;\n this._camera = controls.object;\n this._container = controls.domElement;\n\n this._worldPosition = new three.Vector3(); // LPS position\n if (params.worldPosition) {\n this._worldPosition.copy(params.worldPosition);\n } else if (this._targetMesh !== null) {\n this._worldPosition.copy(this._targetMesh.position);\n }\n }\n\n public initOffsets() {\n const box = this._container.getBoundingClientRect();\n\n const body = document.body;\n const docEl = document.documentElement;\n\n const scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\n const scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n\n this._offsets = {\n top: Math.round(box.top + scrollTop - clientTop),\n left: Math.round(box.left + scrollLeft - clientLeft),\n };\n }\n\n public getMouseOffsets(event: MouseEvent, container: HTMLDivElement) {\n return {\n x: ((event.clientX - this._offsets.left) / container.offsetWidth) * 2 - 1,\n y: -((event.clientY - this._offsets.top) / container.offsetHeight) * 2 + 1,\n screenX: event.clientX - this._offsets.left,\n screenY: event.clientY - this._offsets.top,\n };\n }\n\n /**\n * Get area of polygon.\n *\n * @param {Array} points Ordered vertices' coordinates\n *\n * @returns {Number}\n */\n public getArea(points: THREE.Vector3[]) {\n let area = 0;\n let j = points.length - 1; // the last vertex is the 'previous' one to the first\n\n for (let i = 0; i < points.length; i++) {\n area += (points[j].x + points[i].x) * (points[j].y - points[i].y);\n j = i; // j is the previous vertex to i\n }\n\n return Math.abs(area / 2);\n }\n\n /**\n * Get index of ultrasound region by data coordinates.\n *\n * @param {Array} regions US regions\n * @param {Vector3} point Data coordinates\n *\n * @returns {Number|null}\n */\n public getRegionByXY(regions: USRegion[], point: THREE.Vector3) {\n let result = null;\n\n regions.some((region, ind) => {\n if (\n point.x >= region.x0 &&\n point.x <= region.x1 &&\n point.y >= region.y0 &&\n point.y <= region.y1\n ) {\n result = ind;\n\n return true;\n }\n });\n\n return result;\n }\n\n /**\n * Get point inside ultrasound region by data coordinates.\n *\n * @param {Object} region US region data\n * @param {Vector3} point Data coordinates\n *\n * @returns {Vector2|null}\n */\n public getPointInRegion(region: USRegion, point: THREE.Vector3) {\n if (!region) {\n return null;\n }\n\n return new three.Vector2(\n (point.x - region.x0 - (region.axisX || 0)) * region.deltaX,\n (point.y - region.y0 - (region.axisY || 0)) * region.deltaY\n );\n }\n\n /**\n * Get point's ultrasound coordinates by data coordinates.\n *\n * @param {Array} regions US regions\n * @param {Vector3} point Data coordinates\n *\n * @returns {Vector2|null}\n */\n public getUsPoint(regions: USRegion[], point: THREE.Vector3) {\n return this.getPointInRegion(regions[this.getRegionByXY(regions, point)], point);\n }\n\n /**\n * Get distance between points inside ultrasound region.\n *\n * @param {Vector3} pointA Begin data coordinates\n * @param {Vector3} pointB End data coordinates\n *\n * @returns {Number|null}\n */\n public getUsDistance(pointA: THREE.Vector3, pointB: THREE.Vector3) {\n const regions = this._params.ultrasoundRegions || [];\n\n if (regions.length < 1) {\n return null;\n }\n\n const regionA = this.getRegionByXY(regions, pointA);\n const regionB = this.getRegionByXY(regions, pointB);\n\n if (\n regionA === null ||\n regionB === null ||\n regionA !== regionB ||\n regions[regionA].unitsX !== 'cm' ||\n regions[regionA].unitsY !== 'cm'\n ) {\n return null;\n }\n\n return this.getPointInRegion(regions[regionA], pointA).distanceTo(\n this.getPointInRegion(regions[regionA], pointB)\n );\n }\n\n /**\n * Get distance between points\n *\n * @param {Vector3} pointA Begin world coordinates\n * @param {Vector3} pointB End world coordinates\n * @param {number} cf Calibration factor\n *\n * @returns {Object}\n */\n public getDistanceData(pointA: THREE.Vector3, pointB: THREE.Vector3, calibrationFactor: number) {\n let distance = null;\n let units = null;\n\n if (calibrationFactor) {\n distance = pointA.distanceTo(pointB) * calibrationFactor;\n } else if (this._params.ultrasoundRegions && this._params.lps2IJK) {\n const usDistance = this.getUsDistance(\n CoreUtils.worldToData(this._params.lps2IJK, pointA),\n CoreUtils.worldToData(this._params.lps2IJK, pointB)\n );\n\n if (usDistance !== null) {\n distance = usDistance * 10;\n units = 'mm';\n } else {\n distance = pointA.distanceTo(pointB);\n units = this._params.pixelSpacing ? 'mm' : 'units';\n }\n } else {\n distance = pointA.distanceTo(pointB);\n }\n\n return {\n distance,\n units,\n };\n }\n\n public getLineData(pointA: THREE.Vector3, pointB: THREE.Vector3) {\n const line = pointB.clone().sub(pointA);\n const center = pointB\n .clone()\n .add(pointA)\n .multiplyScalar(0.5);\n const length = line.length();\n const angle = line.angleTo(new three.Vector3(1, 0, 0));\n\n return {\n line,\n length,\n transformX: center.x - length / 2,\n transformY: center.y - this._container.offsetHeight,\n transformAngle: pointA.y < pointB.y ? angle : -angle,\n center,\n };\n }\n\n public getRectData(pointA: THREE.Vector3, pointB: THREE.Vector3) {\n const line = pointB.clone().sub(pointA);\n const vertical = line.clone().projectOnVector(new three.Vector3(0, 1, 0));\n const min = pointA.clone().min(pointB); // coordinates of the top left corner\n\n return {\n width: line\n .clone()\n .projectOnVector(new three.Vector3(1, 0, 0))\n .length(),\n height: vertical.length(),\n transformX: min.x,\n transformY: min.y - this._container.offsetHeight,\n paddingVector: vertical.clone().normalize(),\n };\n }\n\n /**\n * @param {HTMLElement} label\n * @param {Vector3} point label's center coordinates (default)\n * @param {Boolean} corner if true, then point is the label's top left corner coordinates\n */\n public adjustLabelTransform(label: HTMLDivElement, point: THREE.Vector3, corner: boolean) {\n let x = Math.round(point.x - (corner ? 0 : label.offsetWidth / 2));\n let y =\n Math.round(point.y - (corner ? 0 : label.offsetHeight / 2)) - this._container.offsetHeight;\n\n if (x < 0) {\n x = x > -label.offsetWidth ? 0 : x + label.offsetWidth;\n } else if (x > this._container.offsetWidth - label.offsetWidth) {\n x =\n x < this._container.offsetWidth\n ? this._container.offsetWidth - label.offsetWidth\n : x - label.offsetWidth;\n }\n\n if (y < -this._container.offsetHeight) {\n y =\n y > -this._container.offsetHeight - label.offsetHeight\n ? -this._container.offsetHeight\n : y + label.offsetHeight;\n } else if (y > -label.offsetHeight) {\n y = y < 0 ? -label.offsetHeight : y - label.offsetHeight;\n }\n\n return new three.Vector2(x, y);\n }\n\n public worldToScreen(worldCoordinate: THREE.Vector3) {\n const screenCoordinates = worldCoordinate.clone();\n screenCoordinates.project(this._camera);\n\n screenCoordinates.x = Math.round(\n ((screenCoordinates.x + 1) * this._container.offsetWidth) / 2\n );\n screenCoordinates.y = Math.round(\n ((-screenCoordinates.y + 1) * this._container.offsetHeight) / 2\n );\n screenCoordinates.z = 0;\n\n return screenCoordinates;\n }\n\n public update() {\n // to be overloaded\n window.console.log('update() should be overloaded!');\n }\n\n public updateColor() {\n if (this._active) {\n this._color = this._colors.active;\n } else if (this._hovered) {\n this._color = this._colors.hover;\n } else if (this._selected) {\n this._color = this._colors.select;\n } else {\n this._color = this._colors.default;\n }\n }\n\n // tslint:disable-next-line\n public setDefaultColor(color: any) {\n this._colors.default = color;\n if (this._handles) {\n this._handles.forEach(elem => (elem._colors.default = color));\n }\n this.update();\n }\n\n public show() {\n this.showDOM();\n this.showMesh();\n this.update();\n this._displayed = true;\n }\n\n public hide() {\n this.hideDOM();\n this.hideMesh();\n this._displayed = false;\n }\n\n public hideDOM() {\n // to be overloaded\n window.console.log('hideDOM() should be overloaded!');\n }\n\n public showDOM() {\n // to be overloaded\n window.console.log('showDOM() should be overloaded!');\n }\n\n public hideMesh() {\n this.visible = false;\n }\n\n public showMesh() {\n if (this._params.hideMesh === true) {\n return;\n }\n\n this.visible = true;\n }\n\n public free() {\n this._camera = null;\n this._container = null;\n this._controls = null;\n this._params = null;\n this._targetMesh = null;\n }\n\n get widgetType() {\n return this._widgetType;\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh: THREE.Mesh) {\n this._targetMesh = targetMesh;\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition: THREE.Vector3) {\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n\n get enabled() {\n return this._enabled;\n }\n\n set enabled(enabled: boolean) {\n this._enabled = enabled;\n this.update();\n }\n\n get selected() {\n return this._selected;\n }\n\n set selected(selected: boolean) {\n this._selected = selected;\n this.update();\n }\n\n get hovered() {\n return this._hovered;\n }\n\n set hovered(hovered: boolean) {\n this._hovered = hovered;\n this.update();\n }\n\n get dragged() {\n return this._dragged;\n }\n\n set dragged(dragged: boolean) {\n this._dragged = dragged;\n this.update();\n }\n\n get displayed() {\n return this._displayed;\n }\n\n set displayed(displayed: boolean) {\n this._displayed = displayed;\n this.update();\n }\n\n get active() {\n return this._active;\n }\n\n set active(active: boolean) {\n this._active = active;\n this.update();\n }\n\n get color() {\n return this._color;\n }\n\n // tslint:disable-next-line\n set color(color: any) {\n this._color = color;\n this.update();\n }\n };\n};\n\nexport { widgetsBase };\nexport default widgetsBase();\n","import { widgetsBase } from './widgets.base';\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\n\n/**\n * @module widgets/biruler\n */\nconst widgetsBiruler = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'BiRuler';\n\n // incoming parameters (optional: lps2IJK, pixelSpacing, ultrasoundRegions, worldPosition)\n this._calibrationFactor = params.calibrationFactor || null;\n\n // outgoing values\n this._distance = null;\n this._distance2 = null;\n this._units = !this._calibrationFactor && !params.pixelSpacing ? 'units' : 'mm';\n\n // mesh stuff\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n\n // dom stuff\n this._line = null;\n this._label = null;\n this._line2 = null;\n this._label2 = null;\n this._dashline = null;\n\n // add handles\n this._handles = [];\n\n let handle;\n const WidgetsHandle = widgetsHandleFactory(three);\n for (let i = 0; i < 4; i++) {\n handle = new WidgetsHandle(targetMesh, controls, params);\n this.add(handle);\n this._handles.push(handle);\n }\n this._handles[1].active = true;\n this._handles[1].tracking = true;\n this._handles[3].active = true;\n this._handles[3].tracking = true;\n\n this.create();\n\n this.onMove = this.onMove.bind(this);\n this.addEventListeners();\n }\n\n addEventListeners() {\n this._container.addEventListener('wheel', this.onMove);\n }\n\n removeEventListeners() {\n this._container.removeEventListener('wheel', this.onMove);\n }\n\n onStart(evt) {\n this._handles.forEach(elem => elem.onStart(evt));\n\n this._active =\n this._handles[0].active ||\n this._handles[1].active ||\n this._handles[2].active ||\n this._handles[3].active;\n\n this.update();\n }\n\n onMove(evt) {\n if (this._active) {\n this._dragged = true;\n } else {\n this._hovered =\n this._handles[0].hovered ||\n this._handles[1].hovered ||\n this._handles[2].hovered ||\n this._handles[3].hovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n }\n\n this._handles.forEach(elem => elem.onMove(evt));\n\n this.update();\n }\n\n onEnd() {\n this._handles[0].onEnd();\n this._handles[2].onEnd();\n\n if (\n this._handles[1].tracking &&\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10\n ) {\n return;\n }\n\n if (!this._dragged && this._active && !this._handles[3].tracking) {\n this._selected = !this._selected; // change state if there was no dragging\n this._handles[0].selected = this._selected;\n this._handles[2].selected = this._selected;\n }\n\n // Fourth Handle\n if (this._handles[1].active) {\n this._handles[3].onEnd();\n } else if (this._dragged || !this._handles[3].tracking) {\n this._handles[3].tracking = false;\n this._handles[3].onEnd();\n } else {\n this._handles[3].tracking = false;\n }\n this._handles[3].selected = this._selected;\n\n // Second Handle\n if (this._dragged || !this._handles[1].tracking) {\n this._handles[1].tracking = false;\n this._handles[1].onEnd();\n } else {\n this._handles[1].tracking = false;\n }\n this._handles[1].selected = this._selected;\n\n this._active =\n this._handles[0].active ||\n this._handles[1].active ||\n this._handles[2].active ||\n this._handles[3].active;\n this._dragged = false;\n this.update();\n }\n\n create() {\n this.createMesh();\n this.createDOM();\n }\n\n createMesh() {\n // geometry\n this._geometry = new three.Geometry();\n this._geometry.vertices = [\n this._handles[0].worldPosition,\n this._handles[1].worldPosition,\n this._handles[2].worldPosition,\n this._handles[3].worldPosition,\n ];\n\n // material\n this._material = new three.LineBasicMaterial();\n\n this.updateMeshColor();\n\n // mesh\n this._mesh = new three.LineSegments(this._geometry, this._material);\n this._mesh.visible = true;\n this.add(this._mesh);\n }\n\n createDOM() {\n this._line = document.createElement('div');\n this._line.className = 'widgets-line';\n this._container.appendChild(this._line);\n\n this._label = document.createElement('div');\n this._label.className = 'widgets-label';\n this._container.appendChild(this._label);\n\n this._line2 = document.createElement('div');\n this._line2.className = 'widgets-line';\n this._container.appendChild(this._line2);\n\n this._label2 = document.createElement('div');\n this._label2.className = 'widgets-label';\n this._container.appendChild(this._label2);\n\n this._dashline = document.createElement('div');\n this._dashline.className = 'widgets-dashline';\n this._container.appendChild(this._dashline);\n\n this.updateDOMColor();\n }\n\n hideDOM() {\n this._line.style.display = 'none';\n this._label.style.display = 'none';\n this._line2.style.display = 'none';\n this._label2.style.display = 'none';\n this._dashline.style.display = 'none';\n\n this._handles.forEach(elem => elem.hideDOM());\n }\n\n showDOM() {\n this._line.style.display = '';\n this._label.style.display = '';\n this._line2.style.display = '';\n this._label2.style.display = '';\n this._dashline.style.display = '';\n\n this._handles.forEach(elem => elem.showDOM());\n }\n\n update() {\n this.updateColor();\n\n this._handles.forEach(elem => elem.update());\n\n this.updateMeshColor();\n this.updateMeshPosition();\n\n this.updateDOM();\n }\n\n updateMeshColor() {\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n updateMeshPosition() {\n if (this._geometry) {\n this._geometry.verticesNeedUpdate = true;\n }\n }\n\n updateDOM() {\n this.updateDOMColor();\n\n // update first line\n const lineData = this.getLineData(\n this._handles[0].screenPosition,\n this._handles[1].screenPosition\n );\n\n this._line.style.transform = `translate3D(${lineData.transformX}px, ${\n lineData.transformY\n }px, 0)\n rotate(${lineData.transformAngle}rad)`;\n this._line.style.width = lineData.length + 'px';\n\n // update second line\n const line2Data = this.getLineData(\n this._handles[2].screenPosition,\n this._handles[3].screenPosition\n );\n\n this._line2.style.transform = `translate3D(${line2Data.transformX}px, ${\n line2Data.transformY\n }px, 0)\n rotate(${line2Data.transformAngle}rad)`;\n this._line2.style.width = line2Data.length + 'px';\n\n // update dash line\n const line1Center = this._handles[0].worldPosition\n .clone()\n .add(this._handles[1].worldPosition)\n .multiplyScalar(0.5);\n const line2Center = this._handles[2].worldPosition\n .clone()\n .add(this._handles[3].worldPosition)\n .multiplyScalar(0.5);\n const dashLineData = this.getLineData(\n this.worldToScreen(line1Center),\n this.worldToScreen(line2Center)\n );\n\n this._dashline.style.transform = `translate3D(${dashLineData.transformX}px, ${\n dashLineData.transformY\n }px, 0)\n rotate(${dashLineData.transformAngle}rad)`;\n this._dashline.style.width = dashLineData.length + 'px';\n\n // update labels\n const distanceData = this.getDistanceData(\n this._handles[0].worldPosition,\n this._handles[1].worldPosition,\n this._calibrationFactor\n );\n const distanceData2 = this.getDistanceData(\n this._handles[2].worldPosition,\n this._handles[3].worldPosition,\n this._calibrationFactor\n );\n const title = 'Calibration is required to display the distance in mm';\n\n this._distance = distanceData.distance;\n this._distance2 = distanceData2.distance;\n if (distanceData.units && distanceData2.units && distanceData.units === distanceData2.units) {\n this._units = distanceData.units;\n } else {\n if (!distanceData.units) {\n distanceData.units = this._units;\n }\n if (!distanceData2.units) {\n distanceData2.units = this._units;\n }\n }\n\n if (distanceData.units === 'units' && !this._label.hasAttribute('title')) {\n this._label.setAttribute('title', title);\n this._label.style.color = this._colors.error;\n } else if (distanceData.units !== 'units' && this._label.hasAttribute('title')) {\n this._label.removeAttribute('title');\n this._label.style.color = this._colors.text;\n }\n if (distanceData2.units === 'units' && !this._label2.hasAttribute('title')) {\n this._label2.setAttribute('title', title);\n this._label2.style.color = this._colors.error;\n } else if (distanceData2.units !== 'units' && this._label2.hasAttribute('title')) {\n this._label2.removeAttribute('title');\n this._label2.style.color = this._colors.text;\n }\n this._label.innerHTML = `${this._distance.toFixed(2)} ${distanceData.units}`;\n this._label2.innerHTML = `${this._distance2.toFixed(2)} ${distanceData2.units}`;\n\n let angle = Math.abs(lineData.transformAngle);\n if (angle > Math.PI / 2) {\n angle = Math.PI - angle;\n }\n\n const labelPadding =\n Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth\n ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding\n : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle) + 15;\n const paddingVector = lineData.line.normalize().multiplyScalar(labelPadding);\n const paddingPoint =\n lineData.length > labelPadding * 2\n ? this._handles[1].screenPosition.clone().sub(paddingVector)\n : this._handles[1].screenPosition.clone().add(paddingVector);\n const transform = this.adjustLabelTransform(this._label, paddingPoint);\n\n this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`;\n\n let angle2 = Math.abs(line2Data.transformAngle);\n if (angle2 > Math.PI / 2) {\n angle2 = Math.PI - angle2;\n }\n\n const label2Padding =\n Math.tan(angle2) < this._label2.offsetHeight / this._label2.offsetWidth\n ? this._label2.offsetWidth / 2 / Math.cos(angle2) + 15 // 5px for each handle + padding\n : this._label2.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle2) + 15;\n const paddingVector2 = line2Data.line.normalize().multiplyScalar(label2Padding);\n const paddingPoint2 =\n line2Data.length > label2Padding * 2\n ? this._handles[3].screenPosition.clone().sub(paddingVector2)\n : this._handles[3].screenPosition.clone().add(paddingVector2);\n const transform2 = this.adjustLabelTransform(this._label2, paddingPoint2);\n\n this._label2.style.transform = `translate3D(${transform2.x}px, ${transform2.y}px, 0)`;\n }\n\n updateDOMColor() {\n this._line.style.backgroundColor = this._color;\n this._label.style.borderColor = this._color;\n\n this._line2.style.backgroundColor = this._color;\n this._label2.style.borderColor = this._color;\n\n this._dashline.style.borderTop = '1.5px dashed ' + this._color;\n }\n\n free() {\n this.removeEventListeners();\n\n this._handles.forEach(h => {\n this.remove(h);\n h.free();\n });\n this._handles = [];\n\n this._container.removeChild(this._line);\n this._container.removeChild(this._label);\n this._container.removeChild(this._line2);\n this._container.removeChild(this._label2);\n this._container.removeChild(this._dashline);\n\n // mesh, geometry, material\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n this._geometry.dispose();\n this._geometry = null;\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n super.free();\n }\n\n /**\n * Get length of rulers\n *\n * @return {Array}\n */\n getDistances() {\n return [this._distance, this._distance2];\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh) {\n this._targetMesh = targetMesh;\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition) {\n this._handles.forEach(elem => elem.worldPosition.copy(worldPosition));\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n\n get calibrationFactor() {\n return this._calibrationFactor;\n }\n\n set calibrationFactor(calibrationFactor) {\n this._calibrationFactor = calibrationFactor;\n this._units = 'mm';\n this.update();\n }\n\n get shotestDistance() {\n return this._distance < this._distance2 ? this._distance : this._distance2;\n }\n\n get longestDistance() {\n return this._distance > this._distance2 ? this._distance : this._distance2;\n }\n };\n};\n\nexport { widgetsBiruler };\nexport default widgetsBiruler();\n","import { widgetsBase } from './widgets.base';\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\n\n/**\n * @module widgets/crossRuler\n */\nconst widgetsCrossRuler = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'CrossRuler';\n\n // incoming parameters (optional: lps2IJK, pixelSpacing, ultrasoundRegions, worldPosition)\n this._calibrationFactor = params.calibrationFactor || null;\n\n this._distances = null; // from intersection point to handles\n this._line01 = null; // vector from 0 to 1st handle\n this._normal = null; // normal vector to line01\n\n // outgoing values\n this._distance = null;\n this._distance2 = null;\n this._units = !this._calibrationFactor && !params.pixelSpacing ? 'units' : 'mm';\n\n this._domHovered = false;\n this._moving = false;\n\n // mesh stuff\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n\n // dom stuff\n this._line = null;\n this._line2 = null;\n this._label = null;\n this._label2 = null;\n\n // add handles\n this._handles = [];\n\n let handle;\n const WidgetsHandle = widgetsHandleFactory(three);\n for (let i = 0; i < 4; i++) {\n handle = new WidgetsHandle(targetMesh, controls, params);\n this.add(handle);\n this._handles.push(handle);\n }\n this._handles[1].active = true;\n this._handles[1].tracking = true;\n\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\n this.add(this._moveHandle);\n this._handles.push(this._moveHandle);\n this._moveHandle.hide();\n\n this.onHover = this.onHover.bind(this);\n this.onMove = this.onMove.bind(this);\n\n this.create();\n\n this.addEventListeners();\n }\n\n addEventListeners() {\n this._line.addEventListener('mouseenter', this.onHover);\n this._line.addEventListener('mouseleave', this.onHover);\n this._line2.addEventListener('mouseenter', this.onHover);\n this._line2.addEventListener('mouseleave', this.onHover);\n\n this._container.addEventListener('wheel', this.onMove);\n }\n\n removeEventListeners() {\n this._line.removeEventListener('mouseenter', this.onHover);\n this._line.removeEventListener('mouseleave', this.onHover);\n this._line2.removeEventListener('mouseenter', this.onHover);\n this._line2.removeEventListener('mouseleave', this.onHover);\n\n this._container.removeEventListener('wheel', this.onMove);\n }\n\n onHover(evt) {\n if (evt) {\n this.hoverDom(evt);\n }\n\n this.hoverMesh();\n\n this._hovered =\n this._handles[0].hovered ||\n this._handles[1].hovered ||\n this._handles[2].hovered ||\n this._handles[3].hovered ||\n this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n }\n\n hoverMesh() {\n // check raycast intersection, do we want to hover on mesh or just css?\n }\n\n hoverDom(evt) {\n this._domHovered = evt.type === 'mouseenter';\n }\n\n onStart(evt) {\n this._moveHandle.onMove(evt, true);\n\n this._handles.slice(0, -1).forEach(elem => elem.onStart(evt));\n\n this._active =\n this._handles[0].active ||\n this._handles[1].active ||\n this._handles[2].active ||\n this._handles[3].active ||\n this._domHovered;\n\n if (this._domHovered && this._distances) {\n this._moving = true;\n this._controls.enabled = false;\n }\n\n this.update();\n }\n\n onMove(evt) {\n if (this._active) {\n const prevPosition = this._moveHandle.worldPosition.clone();\n\n this._dragged = true;\n this._moveHandle.onMove(evt, true);\n\n if (this._moving) {\n this._handles.slice(0, -1).forEach(handle => {\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\n });\n }\n } else {\n this.onHover(null);\n }\n\n this._handles.slice(0, -1).forEach(elem => elem.onMove(evt));\n\n if (this._distances) {\n if (this._handles[0].active || this._handles[1].active) {\n this.repositionOrtho(); // change worldPosition of 2nd and 3rd handle\n } else if (this._handles[2].active || this._handles[3].active) {\n this.recalculateOrtho();\n }\n }\n this.update();\n }\n\n onEnd() {\n this._handles[0].onEnd();\n this._handles[2].onEnd();\n this._handles[3].onEnd();\n\n if (\n this._handles[1].tracking &&\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10\n ) {\n return;\n }\n\n if (!this._dragged && this._active && !this._handles[1].tracking) {\n this._selected = !this._selected; // change state if there was no dragging\n this._handles[0].selected = this._selected;\n this._handles[2].selected = this._selected;\n this._handles[3].selected = this._selected;\n }\n\n // Second Handle\n if (this._dragged || !this._handles[1].tracking) {\n this._handles[1].tracking = false;\n this._handles[1].onEnd();\n } else {\n this._handles[1].tracking = false;\n }\n this._handles[1].selected = this._selected;\n\n this._active =\n this._handles[0].active ||\n this._handles[1].active ||\n this._handles[2].active ||\n this._handles[3].active;\n this._dragged = false;\n this._moving = false;\n\n if (!this._distances) {\n this.initOrtho();\n }\n this.update();\n }\n\n create() {\n this.createMesh();\n this.createDOM();\n }\n\n createMesh() {\n // geometry\n this._geometry = new three.Geometry();\n this._geometry.vertices = [\n this._handles[0].worldPosition,\n this._handles[1].worldPosition,\n this._handles[2].worldPosition,\n this._handles[3].worldPosition,\n ];\n\n // material\n this._material = new three.LineBasicMaterial();\n\n this.updateMeshColor();\n\n // mesh\n this._mesh = new three.LineSegments(this._geometry, this._material);\n this._mesh.visible = true;\n this.add(this._mesh);\n }\n\n createDOM() {\n this._line = document.createElement('div');\n this._line.className = 'widgets-line';\n this._container.appendChild(this._line);\n\n this._line2 = document.createElement('div');\n this._line2.className = 'widgets-line';\n this._container.appendChild(this._line2);\n\n this._label = document.createElement('div');\n this._label.className = 'widgets-label';\n this._container.appendChild(this._label);\n\n this._label2 = document.createElement('div');\n this._label2.className = 'widgets-label';\n this._container.appendChild(this._label2);\n\n this.updateDOMColor();\n }\n\n hideDOM() {\n this._line.style.display = 'none';\n this._line2.style.display = 'none';\n this._label.style.display = 'none';\n this._label2.style.display = 'none';\n\n this._handles.slice(0, -1).forEach(elem => elem.hideDOM());\n }\n\n showDOM() {\n this._line.style.display = '';\n this._line2.style.display = '';\n this._label.style.display = '';\n this._label2.style.display = '';\n\n this._handles.slice(0, -1).forEach(elem => elem.showDOM());\n }\n\n update() {\n this.updateColor();\n\n this._handles.slice(0, -1).forEach(elem => elem.update());\n\n this.updateMeshColor();\n this.updateMeshPosition();\n\n this.updateDOM();\n }\n\n updateMeshColor() {\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n updateMeshPosition() {\n if (this._geometry) {\n this._geometry.verticesNeedUpdate = true;\n }\n }\n\n updateDOM() {\n this.updateDOMColor();\n\n // update first line\n const lineData = this.getLineData(\n this._handles[0].screenPosition,\n this._handles[1].screenPosition\n );\n\n this._line.style.transform = `translate3D(${lineData.transformX}px, ${\n lineData.transformY\n }px, 0)\n rotate(${lineData.transformAngle}rad)`;\n this._line.style.width = lineData.length + 'px';\n\n // update second line\n const line2Data = this.getLineData(\n this._handles[2].screenPosition,\n this._handles[3].screenPosition\n );\n\n this._line2.style.transform = `translate3D(${line2Data.transformX}px, ${\n line2Data.transformY\n }px, 0)\n rotate(${line2Data.transformAngle}rad)`;\n this._line2.style.width = line2Data.length + 'px';\n\n // update labels\n const distanceData = this.getDistanceData(\n this._handles[0].worldPosition,\n this._handles[1].worldPosition,\n this._calibrationFactor\n );\n const distanceData2 = this.getDistanceData(\n this._handles[2].worldPosition,\n this._handles[3].worldPosition,\n this._calibrationFactor\n );\n const title = 'Calibration is required to display the distance in mm';\n\n this._distance = distanceData.distance;\n this._distance2 = distanceData2.distance;\n if (distanceData.units && distanceData2.units && distanceData.units === distanceData2.units) {\n this._units = distanceData.units;\n } else {\n if (!distanceData.units) {\n distanceData.units = this._units;\n }\n if (!distanceData2.units) {\n distanceData2.units = this._units;\n }\n }\n\n if (distanceData.units === 'units' && !this._label.hasAttribute('title')) {\n this._label.setAttribute('title', title);\n this._label.style.color = this._colors.error;\n } else if (distanceData.units !== 'units' && this._label.hasAttribute('title')) {\n this._label.removeAttribute('title');\n this._label.style.color = this._colors.text;\n }\n if (distanceData2.units === 'units' && !this._label2.hasAttribute('title')) {\n this._label2.setAttribute('title', title);\n this._label2.style.color = this._colors.error;\n } else if (distanceData2.units !== 'units' && this._label2.hasAttribute('title')) {\n this._label2.removeAttribute('title');\n this._label2.style.color = this._colors.text;\n }\n this._label.innerHTML = `${this._distance.toFixed(2)} ${distanceData.units}`;\n this._label2.innerHTML = `${this._distance2.toFixed(2)} ${distanceData2.units}`;\n\n let angle = Math.abs(lineData.transformAngle);\n if (angle > Math.PI / 2) {\n angle = Math.PI - angle;\n }\n\n const labelPadding =\n Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth\n ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding\n : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle) + 15,\n paddingVector = lineData.line.normalize().multiplyScalar(labelPadding),\n paddingPoint =\n lineData.length > labelPadding * 4\n ? this._handles[1].screenPosition.clone().sub(paddingVector)\n : this._handles[1].screenPosition.clone().add(paddingVector),\n transform = this.adjustLabelTransform(this._label, paddingPoint);\n\n this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`;\n\n let angle2 = Math.abs(line2Data.transformAngle);\n if (angle2 > Math.PI / 2) {\n angle2 = Math.PI - angle2;\n }\n\n const label2Padding =\n Math.tan(angle2) < this._label2.offsetHeight / this._label2.offsetWidth\n ? this._label2.offsetWidth / 2 / Math.cos(angle2) + 15 // 5px for each handle + padding\n : this._label2.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle2) + 15,\n paddingVector2 = line2Data.line.normalize().multiplyScalar(label2Padding),\n paddingPoint2 =\n line2Data.length > label2Padding * 4\n ? this._handles[3].screenPosition.clone().sub(paddingVector2)\n : this._handles[3].screenPosition.clone().add(paddingVector2),\n transform2 = this.adjustLabelTransform(this._label2, paddingPoint2);\n\n this._label2.style.transform = `translate3D(${transform2.x}px, ${transform2.y}px, 0)`;\n }\n\n updateDOMColor() {\n this._line.style.backgroundColor = this._color;\n this._line2.style.backgroundColor = this._color;\n this._label.style.borderColor = this._color;\n this._label2.style.borderColor = this._color;\n }\n\n free() {\n this.removeEventListeners();\n\n this._handles.forEach(h => {\n this.remove(h);\n h.free();\n });\n this._handles = [];\n\n this._container.removeChild(this._line);\n this._container.removeChild(this._line2);\n this._container.removeChild(this._label);\n this._container.removeChild(this._label2);\n\n // mesh, geometry, material\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n this._geometry.dispose();\n this._geometry = null;\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n super.free();\n }\n\n initLineAndNormal() {\n this._line01 = this._handles[1].worldPosition.clone().sub(this._handles[0].worldPosition);\n this._normal = this._line01\n .clone()\n .cross(this._camera._direction)\n .normalize();\n }\n\n initOrtho() {\n // called onEnd if distances are null\n this.initLineAndNormal();\n\n const center = this._handles[1].worldPosition\n .clone()\n .add(this._handles[0].worldPosition)\n .multiplyScalar(0.5);\n const halfLength = this._line01.length() / 2;\n const normLine = this._normal.clone().multiplyScalar(halfLength * 0.8);\n const normLength = normLine.length();\n\n this._handles[2].worldPosition.copy(center.clone().add(normLine));\n this._handles[3].worldPosition.copy(center.clone().sub(normLine));\n\n this._distances = [halfLength, halfLength, normLength, normLength];\n }\n\n repositionOrtho() {\n // called onMove if 0 or 1st handle is active\n this.initLineAndNormal();\n this._distances[0] *= this._line01.length() / (this._distances[0] + this._distances[1]);\n this._distances[1] = this._line01.length() - this._distances[0];\n\n const intersect = this._handles[0].worldPosition.clone().add(\n this._line01\n .clone()\n .normalize()\n .multiplyScalar(this._distances[0])\n );\n\n this._handles[2].worldPosition.copy(\n intersect.clone().add(this._normal.clone().multiplyScalar(this._distances[2]))\n );\n this._handles[3].worldPosition.copy(\n intersect.clone().sub(this._normal.clone().multiplyScalar(this._distances[3]))\n );\n }\n\n recalculateOrtho() {\n // called onMove if 2nd or 3rd handle is active\n const activeInd = this._handles[2].active ? 2 : 3;\n const lines = [];\n const intersect = new three.Vector3();\n\n lines[2] = this._handles[2].worldPosition.clone().sub(this._handles[0].worldPosition);\n lines[3] = this._handles[3].worldPosition.clone().sub(this._handles[0].worldPosition);\n new three.Ray(\n this._handles[0].worldPosition,\n this._line01.clone().normalize()\n ).closestPointToPoint(this._handles[activeInd].worldPosition, intersect);\n\n const isOutside =\n intersect\n .clone()\n .sub(this._handles[0].worldPosition)\n .length() > this._line01.length();\n // if intersection is outside of the line01 then change worldPosition of active handle\n if (isOutside || intersect.equals(this._handles[0].worldPosition)) {\n if (isOutside) {\n intersect.copy(this._handles[1].worldPosition);\n }\n\n this._handles[activeInd].worldPosition.copy(\n intersect.clone().add(lines[activeInd].clone().projectOnVector(this._normal))\n );\n }\n\n if (lines[2].cross(this._line01).angleTo(this._camera._direction) > 0.01) {\n this._handles[2].worldPosition.copy(intersect); // 2nd handle should always be above line01\n }\n if (lines[3].cross(this._line01).angleTo(this._camera._direction) < Math.PI - 0.01) {\n this._handles[3].worldPosition.copy(intersect); // 3nd handle should always be below line01\n }\n\n lines[0] = this._normal.clone().multiplyScalar(this._distances[5 - activeInd]);\n if (activeInd === 2) {\n lines[0].negate();\n }\n this._handles[5 - activeInd].worldPosition.copy(intersect.clone().add(lines[0]));\n\n this._distances[activeInd] = intersect.distanceTo(this._handles[activeInd].worldPosition);\n this._distances[0] = intersect.distanceTo(this._handles[0].worldPosition);\n this._distances[1] = intersect.distanceTo(this._handles[1].worldPosition);\n }\n\n /**\n * Get length of rulers\n *\n * @return {Array}\n */\n getDimensions() {\n return [this._distance, this._distance2];\n }\n\n /**\n * Get CrossRuler handles position\n *\n * @return {Array.} First begin, first end, second begin, second end\n */\n getCoordinates() {\n return [\n this._handles[0].worldPosition,\n this._handles[1].worldPosition,\n this._handles[2].worldPosition,\n this._handles[3].worldPosition,\n ];\n }\n\n /**\n * Set CrossRuler handles position\n *\n * @param {Vector3} first The beginning of the first line\n * @param {Vector3} second The end of the first line\n * @param {Vector3} third The beginning of the second line (clockwise relative to the first line)\n * @param {Vector3} fourth The end of the second line\n */\n initCoordinates(first, second, third, fourth) {\n const intersectR = new three.Vector3();\n const intersectS = new three.Vector3();\n const ray = new three.Ray(first);\n\n ray.lookAt(second);\n ray.distanceSqToSegment(third, fourth, intersectR, intersectS);\n\n if (\n intersectR.distanceTo(intersectS) > 0.01 &&\n intersectR.distanceTo(first) > second.distanceTo(first) + 0.01\n ) {\n window.console.warn('Lines do not intersect');\n\n return;\n }\n\n this.active = false;\n this.hovered = false;\n this.setDefaultColor('#198');\n this._worldPosition.copy(first);\n this._handles[0].worldPosition.copy(first);\n this._handles[1].worldPosition.copy(second);\n this._handles[1].active = false;\n this._handles[1].tracking = false;\n this._handles[2].worldPosition.copy(third);\n this._handles[3].worldPosition.copy(fourth);\n this._distances = [\n intersectR.distanceTo(first),\n intersectR.distanceTo(second),\n intersectR.distanceTo(third),\n intersectR.distanceTo(fourth),\n ];\n\n this.initLineAndNormal();\n this.update();\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh) {\n this._targetMesh = targetMesh;\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition) {\n this._handles.slice(0, -1).forEach(elem => elem.worldPosition.copy(worldPosition));\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n\n get calibrationFactor() {\n return this._calibrationFactor;\n }\n\n set calibrationFactor(calibrationFactor) {\n this._calibrationFactor = calibrationFactor;\n this._units = 'mm';\n this.update();\n }\n };\n};\n\nexport { widgetsCrossRuler };\nexport default widgetsCrossRuler();\n","/**\n * @module CSS Code for all Widgets\n */\nexport default class WidgetsCss {\n static get code() {\n return `\n .widgets-handle {\n position: absolute;\n border: 1px solid;\n border-radius: 50%;\n width: 10px;\n height: 10px;\n margin: -6px; /* border + width / 2 */\n z-index: 3;\n }\n .widgets-line {\n position: absolute;\n width: 1px;\n height: 1px;\n margin-top: -0.5px; /* height / 2 */\n }\n .widgets-dashline {\n position: absolute;\n border-top: 1px dashed;\n margin-top: -0.5px; /* border / 2 */\n }\n .widgets-line:before,\n .widgets-dashline:before { /* for dragging */\n content: \" \";\n position: absolute;\n height: 12px;\n left: 0;\n right: 0;\n margin-top: -6px;\n }\n .widgets-rectangle {\n position: absolute;\n border: 1px solid;\n margin: -1px; /* border */\n }\n .widgets-rectangle-helper {\n position: absolute;\n border: 1px dashed;\n margin: -1px; /* border */\n }\n .widgets-ellipse {\n position: absolute;\n border: 1px solid;\n border-radius: 50%;\n margin: -1px; /* border */\n z-index: 2;\n }\n .widgets-label {\n position: absolute;\n border: 1px solid;\n background-color: rgba(0, 0, 0, 0.7);\n color: rgb(255, 255, 255);\n padding: 4px;\n z-index: 3;\n }\n `;\n }\n}\n","import { widgetsBase } from './widgets.base';\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\nimport CoreUtils from '../core/core.utils';\n\n/**\n * @module widgets/ellipse\n */\nconst widgetsEllipse = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'Ellipse';\n\n // incoming parameters (optional: frameIndex, worldPosition)\n this._stack = params.stack; // required\n this._calibrationFactor = params.calibrationFactor || null;\n\n // outgoing values\n this._area = null;\n this._units =\n !this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing\n ? 'units'\n : 'cm²';\n\n this._moving = false;\n this._domHovered = false;\n\n // mesh stuff\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n\n // dom stuff\n this._rectangle = null;\n this._ellipse = null;\n this._label = null;\n\n // add handles\n this._handles = [];\n\n let handle;\n const WidgetsHandle = widgetsHandleFactory(three);\n for (let i = 0; i < 2; i++) {\n handle = new WidgetsHandle(targetMesh, controls, params);\n this.add(handle);\n this._handles.push(handle);\n }\n this._handles[1].active = true;\n this._handles[1].tracking = true;\n\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\n this.add(this._moveHandle);\n this._handles.push(this._moveHandle);\n this._moveHandle.hide();\n\n this.create();\n\n this.onMove = this.onMove.bind(this);\n this.onHover = this.onHover.bind(this);\n this.addEventListeners();\n }\n\n addEventListeners() {\n this._container.addEventListener('wheel', this.onMove);\n\n this._rectangle.addEventListener('mouseenter', this.onHover);\n this._rectangle.addEventListener('mouseleave', this.onHover);\n this._ellipse.addEventListener('mouseenter', this.onHover);\n this._ellipse.addEventListener('mouseleave', this.onHover);\n this._label.addEventListener('mouseenter', this.onHover);\n this._label.addEventListener('mouseleave', this.onHover);\n }\n\n removeEventListeners() {\n this._container.removeEventListener('wheel', this.onMove);\n\n this._rectangle.removeEventListener('mouseenter', this.onHover);\n this._rectangle.removeEventListener('mouseleave', this.onHover);\n this._ellipse.removeEventListener('mouseenter', this.onHover);\n this._ellipse.removeEventListener('mouseleave', this.onHover);\n this._label.removeEventListener('mouseenter', this.onHover);\n this._label.removeEventListener('mouseleave', this.onHover);\n }\n\n onHover(evt) {\n if (evt) {\n this.hoverDom(evt);\n }\n\n this.hoverMesh();\n\n this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n }\n\n hoverMesh() {\n // check raycast intersection, if we want to hover on mesh instead of just css\n }\n\n hoverDom(evt) {\n this._domHovered = evt.type === 'mouseenter';\n }\n\n onStart(evt) {\n this._moveHandle.onMove(evt, true);\n\n this._handles[0].onStart(evt);\n this._handles[1].onStart(evt);\n\n this._active = this._handles[0].active || this._handles[1].active || this._domHovered;\n\n if (this._domHovered && !this._handles[1].tracking) {\n this._moving = true;\n this._controls.enabled = false;\n }\n\n this.update();\n }\n\n onMove(evt) {\n if (this._active) {\n const prevPosition = this._moveHandle.worldPosition.clone();\n\n this._dragged = true;\n this._moveHandle.onMove(evt, true);\n\n if (this._moving) {\n this._handles.slice(0, -1).forEach(handle => {\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\n });\n }\n\n this.updateRoI(true);\n } else {\n this.onHover(null);\n }\n\n this._handles[0].onMove(evt);\n this._handles[1].onMove(evt);\n\n this.update();\n }\n\n onEnd() {\n this._handles[0].onEnd(); // First Handle\n\n if (\n this._handles[1].tracking &&\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10\n ) {\n return;\n }\n\n if (!this._dragged && this._active && !this._handles[1].tracking) {\n this._selected = !this._selected; // change state if there was no dragging\n this._handles[0].selected = this._selected;\n }\n\n // Second Handle\n if (this._dragged || !this._handles[1].tracking) {\n this._handles[1].tracking = false;\n this._handles[1].onEnd();\n } else {\n this._handles[1].tracking = false;\n }\n this._handles[1].selected = this._selected;\n\n this._active = this._handles[0].active || this._handles[1].active;\n this._dragged = false;\n this._moving = false;\n\n this.updateRoI(); // TODO: if (this._dragged || !this._initialized)\n this.update();\n }\n\n hideDOM() {\n this._handles.forEach(elem => elem.hideDOM());\n\n this._rectangle.style.display = 'none';\n this._ellipse.style.display = 'none';\n this._label.style.display = 'none';\n }\n\n showDOM() {\n this._handles[0].showDOM();\n this._handles[1].showDOM();\n\n this._rectangle.style.display = '';\n this._ellipse.style.display = '';\n this._label.style.display = '';\n }\n\n create() {\n this.createMaterial();\n this.createDOM();\n }\n\n createMaterial() {\n this._material = new three.MeshBasicMaterial();\n this._material.transparent = true;\n this._material.opacity = 0.2;\n }\n\n createDOM() {\n this._rectangle = document.createElement('div');\n this._rectangle.className = 'widgets-rectangle-helper';\n this._container.appendChild(this._rectangle);\n\n this._ellipse = document.createElement('div');\n this._ellipse.className = 'widgets-ellipse';\n this._container.appendChild(this._ellipse);\n\n this._label = document.createElement('div');\n this._label.className = 'widgets-label';\n\n // measurements\n const measurementsContainer = document.createElement('div');\n // Mean / SD\n let meanSDContainer = document.createElement('div');\n meanSDContainer.className = 'mean-sd';\n measurementsContainer.appendChild(meanSDContainer);\n // Max / Min\n let maxMinContainer = document.createElement('div');\n maxMinContainer.className = 'max-min';\n measurementsContainer.appendChild(maxMinContainer);\n // Area\n let areaContainer = document.createElement('div');\n areaContainer.className = 'area';\n measurementsContainer.appendChild(areaContainer);\n\n this._label.appendChild(measurementsContainer);\n\n this._container.appendChild(this._label);\n\n this.updateDOMColor();\n }\n\n update() {\n this.updateColor();\n\n this._handles[0].update();\n this._handles[1].update();\n\n this.updateMeshColor();\n this.updateMeshPosition();\n\n this.updateDOM();\n }\n\n updateMeshColor() {\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n updateMeshPosition() {\n if (this._mesh) {\n this.remove(this._mesh);\n }\n\n const vec01 = this._handles[1].worldPosition.clone().sub(this._handles[0].worldPosition);\n const height = vec01\n .clone()\n .projectOnVector(this._camera.up)\n .length();\n const width = vec01\n .clone()\n .projectOnVector(this._camera._right)\n .length();\n\n if (width === 0 || height === 0) {\n return;\n }\n\n this._geometry = new three.ShapeGeometry(\n new three.Shape(\n new three.EllipseCurve(0, 0, width / 2, height / 2, 0, 2 * Math.PI, false).getPoints(50)\n )\n );\n\n this._mesh = new three.Mesh(this._geometry, this._material);\n this._mesh.position.copy(\n this._handles[0].worldPosition.clone().add(vec01.multiplyScalar(0.5))\n );\n this._mesh.rotation.copy(this._camera.rotation);\n this._mesh.visible = true;\n this.add(this._mesh);\n }\n\n updateRoI(clear) {\n if (!this._geometry) {\n return;\n }\n\n const meanSDContainer = this._label.querySelector('.mean-sd');\n const maxMinContainer = this._label.querySelector('.max-min');\n\n if (clear) {\n meanSDContainer.innerHTML = '';\n maxMinContainer.innerHTML = '';\n\n return;\n }\n\n const roi = CoreUtils.getRoI(this._mesh, this._camera, this._stack);\n\n if (roi !== null) {\n meanSDContainer.innerHTML = `Mean: ${roi.mean.toFixed(1)} / SD: ${roi.sd.toFixed(1)}`;\n maxMinContainer.innerHTML = `Max: ${roi.max.toFixed()} / Min: ${roi.min.toFixed()}`;\n } else {\n meanSDContainer.innerHTML = '';\n maxMinContainer.innerHTML = '';\n }\n }\n\n updateDOMColor() {\n this._rectangle.style.borderColor = this._color;\n this._ellipse.style.borderColor = this._color;\n this._label.style.borderColor = this._color;\n }\n\n updateDOM() {\n if (!this._geometry) {\n return;\n }\n\n this.updateDOMColor();\n\n const regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || [];\n\n this._area = CoreUtils.getGeometryArea(this._geometry);\n if (this._calibrationFactor) {\n this._area *= Math.pow(this._calibrationFactor, 2);\n } else if (regions && regions.length > 0 && this._stack.lps2IJK) {\n const region0 = this.getRegionByXY(\n regions,\n CoreUtils.worldToData(this._stack.lps2IJK, this._handles[0].worldPosition)\n );\n const region1 = this.getRegionByXY(\n regions,\n CoreUtils.worldToData(this._stack.lps2IJK, this._handles[1].worldPosition)\n );\n\n if (\n region0 !== null &&\n region1 !== null &&\n region0 === region1 &&\n regions[region0].unitsX === 'cm' &&\n regions[region0].unitsY === 'cm'\n ) {\n this._area *= Math.pow(regions[region0].deltaX, 2);\n this._units = 'cm²';\n } else if (this._stack.frame[this._params.frameIndex].pixelSpacing) {\n this._area /= 100;\n this._units = 'cm²';\n } else {\n this._units = 'units';\n }\n } else if (this._units === 'cm²') {\n this._area /= 100;\n }\n\n if (this._units === 'units' && !this._label.hasAttribute('title')) {\n this._label.setAttribute('title', 'Calibration is required to display the area in cm²');\n this._label.style.color = this._colors.error;\n } else if (this._units !== 'units' && this._label.hasAttribute('title')) {\n this._label.removeAttribute('title');\n this._label.style.color = this._colors.text;\n }\n this._label.querySelector('.area').innerHTML = `Area: ${this._area.toFixed(2)} ${\n this._units\n }`;\n\n const rectData = this.getRectData(\n this._handles[0].screenPosition,\n this._handles[1].screenPosition\n );\n const labelTransform = this.adjustLabelTransform(\n this._label,\n this._handles[1].screenPosition\n .clone()\n .add(rectData.paddingVector.multiplyScalar(15 + this._label.offsetHeight / 2))\n );\n\n // update rectangle\n this._rectangle.style.transform = `translate3D(${rectData.transformX}px, ${\n rectData.transformY\n }px, 0)`;\n this._rectangle.style.width = rectData.width + 'px';\n this._rectangle.style.height = rectData.height + 'px';\n\n // update ellipse\n this._ellipse.style.transform = `translate3D(${rectData.transformX}px, ${\n rectData.transformY\n }px, 0)`;\n this._ellipse.style.width = rectData.width + 'px';\n this._ellipse.style.height = rectData.height + 'px';\n\n // update label\n this._label.style.transform =\n 'translate3D(' + labelTransform.x + 'px,' + labelTransform.y + 'px, 0)';\n }\n\n free() {\n this.removeEventListeners();\n\n this._handles.forEach(h => {\n this.remove(h);\n h.free();\n });\n this._handles = [];\n\n this._container.removeChild(this._rectangle);\n this._container.removeChild(this._ellipse);\n this._container.removeChild(this._label);\n\n // mesh, geometry, material\n if (this._mesh) {\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n }\n if (this._geometry) {\n this._geometry.dispose();\n this._geometry = null;\n }\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n this._stack = null;\n\n super.free();\n }\n\n getMeasurements() {\n return {\n area: this._area,\n units: this._units,\n };\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh) {\n this._targetMesh = targetMesh;\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition) {\n this._handles[0].worldPosition.copy(worldPosition);\n this._handles[1].worldPosition.copy(worldPosition);\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n\n get calibrationFactor() {\n return this._calibrationFactor;\n }\n\n set calibrationFactor(calibrationFactor) {\n this._calibrationFactor = calibrationFactor;\n this._units = 'cm²';\n this.update();\n }\n };\n};\n\nexport { widgetsEllipse };\nexport default widgetsEllipse();\n","import { widgetsBase } from './widgets.base';\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\nimport CoreUtils from '../core/core.utils';\n\n/**\n * @module widgets/freehand\n */\nconst widgetsFreehand = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'Freehand';\n\n // incoming parameters (optional: frameIndex, worldPosition)\n this._stack = params.stack; // required\n this._calibrationFactor = params.calibrationFactor || null;\n\n // outgoing values\n this._area = null;\n this._units =\n !this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing\n ? 'units'\n : 'cm²';\n\n this._initialized = false; // set to true onEnd if number of handles > 2\n this._moving = false;\n this._domHovered = false;\n\n // mesh stuff\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n\n // dom stuff\n this._lines = [];\n this._label = null;\n\n // add handles\n this._handles = [];\n const WidgetsHandle = widgetsHandleFactory(three);\n\n let handle = new WidgetsHandle(targetMesh, controls, params);\n this.add(handle);\n this._handles.push(handle);\n\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\n this.add(this._moveHandle);\n this._moveHandle.hide();\n\n this.onMove = this.onMove.bind(this);\n this.onHover = this.onHover.bind(this);\n\n this.create();\n\n this.addEventListeners();\n }\n\n addEventListeners() {\n this._container.addEventListener('wheel', this.onMove);\n\n this._label.addEventListener('mouseenter', this.onHover);\n this._label.addEventListener('mouseleave', this.onHover);\n }\n\n removeEventListeners() {\n this._container.removeEventListener('wheel', this.onMove);\n\n this._label.removeEventListener('mouseenter', this.onHover);\n this._label.removeEventListener('mouseleave', this.onHover);\n }\n\n onHover(evt) {\n if (evt) {\n this.hoverDom(evt);\n }\n\n this.hoverMesh();\n\n let hovered = false;\n\n this._handles.forEach(elem => (hovered = hovered || elem.hovered));\n\n this._hovered = hovered || this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n }\n\n hoverMesh() {\n // check raycast intersection, if we want to hover on mesh instead of just css\n }\n\n hoverDom(evt) {\n this._domHovered = evt.type === 'mouseenter';\n }\n\n onStart(evt) {\n let active = false;\n\n this._moveHandle.onMove(evt, true);\n this._handles.forEach(elem => {\n elem.onStart(evt);\n active = active || elem.active;\n });\n\n this._active = active || this._domHovered;\n\n if (this._domHovered && this._initialized) {\n this._moving = true;\n this._controls.enabled = false;\n }\n\n this.update();\n }\n\n onMove(evt) {\n let hovered = false;\n\n if (this.active) {\n this._dragged = true;\n\n if (!this._initialized) {\n this._handles[this._handles.length - 1].hovered = false;\n this._handles[this._handles.length - 1].active = false;\n this._handles[this._handles.length - 1].tracking = false;\n\n const WidgetsHandle = widgetsHandleFactory(three);\n let handle = new WidgetsHandle(this._targetMesh, this._controls, this._params);\n\n handle.hovered = true;\n handle.active = true;\n handle.tracking = true;\n this.add(handle);\n this._handles.push(handle);\n\n this.createLine();\n } else {\n const prevPosition = this._moveHandle.worldPosition.clone();\n\n this._moveHandle.onMove(evt, true);\n if (this._mesh) {\n this.remove(this._mesh);\n }\n this.updateDOMContent(true);\n if (this._moving) {\n this._handles.forEach(handle => {\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\n });\n }\n }\n }\n\n this._handles.forEach(elem => {\n elem.onMove(evt);\n hovered = hovered || elem.hovered;\n });\n\n this._hovered = hovered || this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n\n if (this.active && this._handles.length > 2) {\n this.pushPopHandle();\n }\n\n this.update();\n }\n\n onEnd() {\n if (this._handles.length < 3) {\n return;\n }\n\n let active = false;\n\n this._handles.slice(0, -1).forEach(elem => {\n elem.onEnd();\n active = active || elem.active;\n });\n\n // Last Handle\n if (this._dragged || !this._handles[this._handles.length - 1].tracking) {\n this._handles[this._handles.length - 1].tracking = false;\n this._handles[this._handles.length - 1].onEnd();\n } else {\n this._handles[this._handles.length - 1].tracking = false;\n }\n\n if (this._lines.length < this._handles.length) {\n this.createLine();\n }\n\n if (this._dragged || !this._initialized) {\n this.updateMesh();\n this.updateDOMContent();\n }\n\n if (!this._dragged && this._active) {\n this._selected = !this._selected; // change state if there was no dragging\n this._handles.forEach(elem => (elem.selected = this._selected));\n }\n this._active = active || this._handles[this._handles.length - 1].active;\n this._dragged = false;\n this._moving = false;\n this._initialized = true;\n\n this.update();\n }\n\n create() {\n this.createMaterial();\n this.createDOM();\n }\n\n createMaterial() {\n this._material = new three.MeshBasicMaterial({ side: three.DoubleSide });\n this._material.transparent = true;\n this._material.opacity = 0.2;\n }\n\n createDOM() {\n this._label = document.createElement('div');\n this._label.className = 'widgets-label';\n\n // measurements\n const measurementsContainer = document.createElement('div');\n // Mean / SD\n let meanSDContainer = document.createElement('div');\n meanSDContainer.className = 'mean-sd';\n measurementsContainer.appendChild(meanSDContainer);\n // Max / Min\n let maxMinContainer = document.createElement('div');\n maxMinContainer.className = 'max-min';\n measurementsContainer.appendChild(maxMinContainer);\n // Area\n let areaContainer = document.createElement('div');\n areaContainer.className = 'area';\n measurementsContainer.appendChild(areaContainer);\n\n this._label.appendChild(measurementsContainer);\n\n this._container.appendChild(this._label);\n\n this.updateDOMColor();\n }\n\n createLine() {\n const line = document.createElement('div');\n\n line.className = 'widgets-line';\n line.addEventListener('mouseenter', this.onHover);\n line.addEventListener('mouseleave', this.onHover);\n this._lines.push(line);\n this._container.appendChild(line);\n }\n\n hideDOM() {\n this._handles.forEach(elem => elem.hideDOM());\n\n this._lines.forEach(elem => (elem.style.display = 'none'));\n this._label.style.display = 'none';\n }\n\n showDOM() {\n this._handles.forEach(elem => elem.showDOM());\n\n this._lines.forEach(elem => (elem.style.display = ''));\n this._label.style.display = '';\n }\n\n update() {\n this.updateColor();\n\n // update handles\n this._handles.forEach(elem => elem.update());\n\n // mesh stuff\n this.updateMeshColor();\n this.updateMeshPosition();\n\n // DOM stuff\n this.updateDOMColor();\n this.updateDOMPosition();\n }\n\n updateMesh() {\n if (this._mesh) {\n this.remove(this._mesh);\n }\n\n let points = [];\n\n this._handles.forEach(elem => points.push(elem.worldPosition));\n\n let center = CoreUtils.centerOfMass(points);\n // direction from first point to center\n let referenceDirection = new three.Vector3().subVectors(points[0], center).normalize();\n let direction = new three.Vector3().crossVectors(\n new three.Vector3().subVectors(points[0], center), // side 1\n new three.Vector3().subVectors(points[1], center) // side 2\n );\n let base = new three.Vector3().crossVectors(referenceDirection, direction).normalize();\n let orderedpoints = [];\n\n // other lines // if inter, return location + angle\n for (let j = 0; j < points.length; j++) {\n let point = new three.Vector3(points[j].x, points[j].y, points[j].z);\n point.direction = new three.Vector3().subVectors(points[j], center).normalize();\n\n let x = referenceDirection.dot(point.direction);\n let y = base.dot(point.direction);\n point.xy = { x, y };\n point.angle = Math.atan2(y, x) * (180 / Math.PI);\n\n orderedpoints.push(point);\n }\n\n // override to catch console.warn \"THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()\"\n this._shapeWarn = false;\n const oldWarn = console.warn;\n console.warn = function(...rest) {\n if (rest[0] === 'three.ShapeUtils: Unable to triangulate polygon! in triangulate()') {\n this._shapeWarn = true;\n }\n return oldWarn.apply(console, rest);\n }.bind(this);\n\n // create the shape\n let shape = new three.Shape();\n // move to first point!\n shape.moveTo(orderedpoints[0].xy.x, orderedpoints[0].xy.y);\n\n // loop through all points!\n for (let l = 1; l < orderedpoints.length; l++) {\n // project each on plane!\n shape.lineTo(orderedpoints[l].xy.x, orderedpoints[l].xy.y);\n }\n\n // close the shape!\n shape.lineTo(orderedpoints[0].xy.x, orderedpoints[0].xy.y);\n\n this._geometry = new three.ShapeGeometry(shape);\n\n console.warn = oldWarn;\n\n this._geometry.vertices = orderedpoints;\n this._geometry.verticesNeedUpdate = true;\n this._geometry.elementsNeedUpdate = true;\n\n this.updateMeshColor();\n\n this._mesh = new three.Mesh(this._geometry, this._material);\n this._mesh.visible = true;\n this.add(this._mesh);\n }\n\n updateMeshColor() {\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n updateMeshPosition() {\n if (this._geometry) {\n this._geometry.verticesNeedUpdate = true;\n }\n }\n\n isPointOnLine(pointA, pointB, pointToCheck) {\n let c = new three.Vector3();\n c.crossVectors(pointA.clone().sub(pointToCheck), pointB.clone().sub(pointToCheck));\n return !c.length();\n }\n\n pushPopHandle() {\n let handle0 = this._handles[this._handles.length - 3];\n let handle1 = this._handles[this._handles.length - 2];\n let newhandle = this._handles[this._handles.length - 1];\n\n let isOnLine = this.isPointOnLine(\n handle0.worldPosition,\n handle1.worldPosition,\n newhandle.worldPosition\n );\n\n if (isOnLine || handle0.screenPosition.distanceTo(newhandle.screenPosition) < 25) {\n this.remove(handle1);\n handle1.free();\n\n this._handles[this._handles.length - 2] = newhandle;\n this._handles.pop();\n\n this._container.removeChild(this._lines.pop());\n }\n\n return isOnLine;\n }\n\n updateDOMColor() {\n if (this._handles.length >= 2) {\n this._lines.forEach(elem => (elem.style.backgroundColor = this._color));\n }\n this._label.style.borderColor = this._color;\n }\n\n updateDOMContent(clear) {\n const meanSDContainer = this._label.querySelector('.mean-sd');\n const maxMinContainer = this._label.querySelector('.max-min');\n const areaContainer = this._label.querySelector('.area');\n\n if (clear) {\n meanSDContainer.innerHTML = '';\n maxMinContainer.innerHTML = '';\n areaContainer.innerHTML = '';\n\n return;\n }\n\n const regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || [];\n\n this._area = CoreUtils.getGeometryArea(this._geometry); // this.getArea result is changed on dragging\n if (this._calibrationFactor) {\n this._area *= Math.pow(this._calibrationFactor, 2);\n } else if (regions && regions.length > 0 && this._stack.lps2IJK) {\n let same = true;\n let cRegion;\n let pRegion;\n\n this._handles.forEach(elem => {\n cRegion = this.getRegionByXY(\n regions,\n CoreUtils.worldToData(this._stack.lps2IJK, elem.worldPosition)\n );\n if (\n cRegion === null ||\n regions[cRegion].unitsX !== 'cm' ||\n (pRegion !== undefined && pRegion !== cRegion)\n ) {\n same = false;\n }\n pRegion = cRegion;\n });\n\n if (same) {\n this._area *= Math.pow(regions[cRegion].deltaX, 2);\n this._units = 'cm²';\n } else if (this._stack.frame[this._params.frameIndex].pixelSpacing) {\n this._area /= 100;\n this._units = 'cm²';\n } else {\n this._units = 'units';\n }\n } else if (this._units === 'cm²') {\n this._area /= 100;\n }\n\n let title =\n this._units === 'units' ? 'Calibration is required to display the area in cm². ' : '';\n\n if (this._shapeWarn) {\n title += 'Values may be incorrect due to triangulation error.';\n }\n if (title !== '' && !this._label.hasAttribute('title')) {\n this._label.setAttribute('title', title);\n this._label.style.color = this._colors.error;\n } else if (title === '' && this._label.hasAttribute('title')) {\n this._label.removeAttribute('title');\n this._label.style.color = this._colors.text;\n }\n\n const roi = CoreUtils.getRoI(this._mesh, this._camera, this._stack);\n\n if (roi !== null) {\n meanSDContainer.innerHTML = `Mean: ${roi.mean.toFixed(1)} / SD: ${roi.sd.toFixed(1)}`;\n maxMinContainer.innerHTML = `Max: ${roi.max.toFixed()} / Min: ${roi.min.toFixed()}`;\n } else {\n meanSDContainer.innerHTML = '';\n maxMinContainer.innerHTML = '';\n }\n areaContainer.innerHTML = `Area: ${this._area.toFixed(2)} ${this._units}`;\n }\n\n updateDOMPosition() {\n if (this._handles.length < 2) {\n return;\n }\n // update lines and get coordinates of lowest handle\n let labelPosition = null;\n\n this._lines.forEach((elem, ind) => {\n const lineData = this.getLineData(\n this._handles[ind].screenPosition,\n this._handles[ind + 1 === this._handles.length ? 0 : ind + 1].screenPosition\n );\n\n elem.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0)\n rotate(${lineData.transformAngle}rad)`;\n elem.style.width = lineData.length + 'px';\n\n if (labelPosition === null || labelPosition.y < this._handles[ind].screenPosition.y) {\n labelPosition = this._handles[ind].screenPosition.clone();\n }\n });\n\n if (!this._initialized) {\n return;\n }\n\n // update label\n labelPosition.y += 15 + this._label.offsetHeight / 2;\n labelPosition = this.adjustLabelTransform(this._label, labelPosition);\n\n this._label.style.transform = `translate3D(${labelPosition.x}px, ${labelPosition.y}px, 0)`;\n }\n\n free() {\n this.removeEventListeners();\n\n this._handles.forEach(h => {\n this.remove(h);\n h.free();\n });\n this._handles = [];\n\n this.remove(this._moveHandle);\n this._moveHandle.free();\n this._moveHandle = null;\n\n this._lines.forEach(elem => {\n elem.removeEventListener('mouseenter', this.onHover);\n elem.removeEventListener('mouseleave', this.onHover);\n this._container.removeChild(elem);\n });\n this._lines = [];\n this._container.removeChild(this._label);\n\n // mesh, geometry, material\n if (this._mesh) {\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n }\n if (this._geometry) {\n this._geometry.dispose();\n this._geometry = null;\n }\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n this._stack = null;\n\n super.free();\n }\n\n getMeasurements() {\n return {\n area: this._area,\n units: this._units,\n };\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh) {\n this._targetMesh = targetMesh;\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\n this._moveHandle.targetMesh = targetMesh;\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition) {\n this._handles.forEach(elem => elem._worldPosition.copy(worldPosition));\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n\n get calibrationFactor() {\n return this._calibrationFactor;\n }\n\n set calibrationFactor(calibrationFactor) {\n this._calibrationFactor = calibrationFactor;\n this._units = 'cm²';\n this.update();\n }\n };\n};\n\nexport { widgetsFreehand };\nexport default widgetsFreehand();\n","import { widgetsBase } from './widgets.base';\nimport CoreIntersections from '../core/core.intersections';\n\n/**\n * @module widgets/handle\n */\nconst widgetsHandle = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'Handle';\n\n // incoming parameters (optional: worldPosition)\n if (params.hideHandleMesh === true) {\n this.visible = false;\n }\n\n // if no target mesh, use plane for FREE dragging.\n this._plane = {\n position: new three.Vector3(),\n direction: new three.Vector3(),\n };\n this._offset = new three.Vector3();\n this._raycaster = new three.Raycaster();\n\n this._active = false;\n this._hovered = false;\n this._tracking = false;\n\n this._mouse = new three.Vector2();\n\n this._initialized = false;\n\n // mesh stuff\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n this._meshHovered = false;\n\n // dom stuff\n this._dom = null;\n this._domHovered = false;\n\n this._screenPosition = this.worldToScreen(this._worldPosition);\n\n this.create();\n this.initOffsets();\n\n // event listeners\n this.onResize = this.onResize.bind(this);\n this.onMove = this.onMove.bind(this);\n this.onHover = this.onHover.bind(this);\n this.addEventListeners();\n }\n\n addEventListeners() {\n window.addEventListener('resize', this.onResize);\n\n this._dom.addEventListener('mouseenter', this.onHover);\n this._dom.addEventListener('mouseleave', this.onHover);\n\n this._container.addEventListener('wheel', this.onMove);\n }\n\n removeEventListeners() {\n window.removeEventListener('resize', this.onResize);\n\n this._dom.removeEventListener('mouseenter', this.onHover);\n this._dom.removeEventListener('mouseleave', this.onHover);\n\n this._container.removeEventListener('wheel', this.onMove);\n }\n\n onResize() {\n this.initOffsets();\n }\n\n onHover(evt) {\n if (evt) {\n this.hoverDom(evt);\n }\n\n this.hoverMesh();\n\n this._hovered = this._meshHovered || this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n }\n\n hoverMesh() {\n // check raycast intersection, do we want to hover on mesh or just css?\n let intersectsHandle = this._raycaster.intersectObject(this._mesh);\n this._meshHovered = intersectsHandle.length > 0;\n }\n\n hoverDom(evt) {\n this._domHovered = evt.type === 'mouseenter';\n }\n\n onStart(evt) {\n const offsets = this.getMouseOffsets(evt, this._container);\n this._mouse.set(offsets.x, offsets.y);\n\n // update raycaster\n this._raycaster.setFromCamera(this._mouse, this._camera);\n this._raycaster.ray.position = this._raycaster.ray.origin;\n\n if (this._hovered) {\n this._active = true;\n this._controls.enabled = false;\n\n if (this._targetMesh) {\n let intersectsTarget = this._raycaster.intersectObject(this._targetMesh);\n if (intersectsTarget.length > 0) {\n this._offset.copy(intersectsTarget[0].point).sub(this._worldPosition);\n }\n } else {\n this._plane.position.copy(this._worldPosition);\n this._plane.direction.copy(this._camera.getWorldDirection());\n let intersection = CoreIntersections.rayPlane(this._raycaster.ray, this._plane);\n if (intersection !== null) {\n this._offset.copy(intersection).sub(this._plane.position);\n }\n }\n\n this.update();\n }\n }\n\n /**\n * @param {Object} evt - Browser event\n * @param {Boolean} forced - true to move inactive handles\n */\n onMove(evt, forced) {\n const offsets = this.getMouseOffsets(evt, this._container);\n this._mouse.set(offsets.x, offsets.y);\n\n // update raycaster\n // set ray.position to satisfy CoreIntersections::rayPlane API\n this._raycaster.setFromCamera(this._mouse, this._camera);\n this._raycaster.ray.position = this._raycaster.ray.origin;\n\n if (this._active || forced) {\n this._dragged = true;\n\n if (this._targetMesh !== null) {\n let intersectsTarget = this._raycaster.intersectObject(this._targetMesh);\n if (intersectsTarget.length > 0) {\n this._worldPosition.copy(intersectsTarget[0].point.sub(this._offset));\n }\n } else {\n if (this._plane.direction.length() === 0) {\n // free mode!this._targetMesh\n this._plane.position.copy(this._worldPosition);\n this._plane.direction.copy(this._camera.getWorldDirection());\n }\n\n let intersection = CoreIntersections.rayPlane(this._raycaster.ray, this._plane);\n if (intersection !== null) {\n this._worldPosition.copy(intersection.sub(this._offset));\n }\n }\n } else {\n this.onHover(null);\n }\n\n this.update();\n }\n\n onEnd() {\n if (this._tracking === true) {\n // stay active and keep controls disabled\n return;\n }\n\n if (!this._dragged && this._active && this._initialized) {\n this._selected = !this._selected; // change state if there was no dragging\n }\n\n this._initialized = true;\n this._active = false;\n this._dragged = false;\n this._controls.enabled = true;\n\n this.update();\n }\n\n create() {\n this.createMesh();\n this.createDOM();\n }\n\n createMesh() {\n // geometry\n this._geometry = new three.SphereGeometry(1, 16, 16);\n\n // material\n this._material = new three.MeshBasicMaterial({\n wireframe: true,\n wireframeLinewidth: 2,\n });\n\n this.updateMeshColor();\n\n // mesh\n this._mesh = new three.Mesh(this._geometry, this._material);\n this._mesh.position.copy(this._worldPosition);\n this._mesh.visible = true;\n\n this.add(this._mesh);\n }\n\n createDOM() {\n this._dom = document.createElement('div');\n this._dom.className = 'widgets-handle';\n\n this._dom.style.transform = `translate3D(\n ${this._screenPosition.x}px,\n ${this._screenPosition.y - this._container.offsetHeight}px, 0)`;\n\n this.updateDOMColor();\n\n this._container.appendChild(this._dom);\n }\n\n update() {\n // general update\n this.updateColor();\n\n // update screen position of handle\n this._screenPosition = this.worldToScreen(this._worldPosition);\n\n // mesh stuff\n this.updateMeshColor();\n this.updateMeshPosition();\n\n // DOM stuff\n this.updateDOMColor();\n this.updateDOMPosition();\n }\n\n updateMeshColor() {\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n updateMeshPosition() {\n if (this._mesh) {\n this._mesh.position.copy(this._worldPosition);\n }\n }\n\n updateDOMPosition() {\n if (this._dom) {\n this._dom.style.transform = `translate3D(${this._screenPosition.x}px,\n ${this._screenPosition.y - this._container.offsetHeight}px, 0)`;\n }\n }\n\n updateDOMColor() {\n this._dom.style.borderColor = this._color;\n }\n\n showMesh() {\n if (this._params.hideMesh === true || this._params.hideHandleMesh === true) {\n return;\n }\n\n this.visible = true;\n }\n\n free() {\n // events\n this.removeEventListeners();\n // dom\n this._container.removeChild(this._dom);\n // mesh, geometry, material\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n this._geometry.dispose();\n this._geometry = null;\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n super.free();\n }\n\n hideDOM() {\n this._dom.style.display = 'none';\n }\n\n showDOM() {\n this._dom.style.display = '';\n }\n\n get screenPosition() {\n return this._screenPosition;\n }\n\n set screenPosition(screenPosition) {\n this._screenPosition = screenPosition;\n }\n\n get active() {\n return this._active;\n }\n\n set active(active) {\n this._active = active;\n // this._tracking = this._active;\n this._controls.enabled = !this._active;\n\n this.update();\n }\n\n get tracking() {\n return this._tracking;\n }\n\n set tracking(tracking) {\n this._tracking = tracking;\n this.update();\n }\n };\n};\n\nexport { widgetsHandle };\nexport default widgetsHandle();\n","import Css from './widgets.css';\n\nimport Angle, { widgetsAngle } from './widgets.angle';\nimport Annotation, { widgetsAnnotation } from './widgets.annotation';\nimport BiRuler, { widgetsBiruler } from './widgets.biruler';\nimport CrossRuler, { widgetsCrossRuler } from './widgets.crossRuler';\nimport Ellipse, { widgetsEllipse } from './widgets.ellipse';\nimport Freehand, { widgetsFreehand } from './widgets.freehand';\nimport Handle, { widgetsHandle } from './widgets.handle';\nimport PeakVelocity, { widgetsPeakVelocity } from './widgets.peakVelocity';\nimport PressureHalfTime, { widgetsPressureHalfTime } from './widgets.pressureHalfTime';\nimport Polygon, { widgetsPolygon } from './widgets.polygon';\nimport Rectangle, { widgetsRectangle } from './widgets.rectangle';\nimport Ruler, { widgetsRuler } from './widgets.ruler';\nimport VelocityTimeIntegral, { widgetsVelocityTimeIntegral } from './widgets.velocityTimeIntegral';\nimport VoxelProbe, { widgetsVoxelprobe } from './widgets.voxelProbe';\n\nexport {\n Css as WidgetsCss,\n Angle as AngleWidget,\n widgetsAngle as angleWidgetFactory,\n Annotation as AnnotationWidget,\n widgetsAnnotation as annotationWidgetFactory,\n BiRuler as BiRulerWidget,\n widgetsBiruler as birulerWidgetFactory,\n CrossRuler as CrossRulerWidget,\n widgetsCrossRuler as crossrulerWidgetFactory,\n Ellipse as EllipseWidget,\n widgetsEllipse as ellipseWidgetFactory,\n Freehand as FreehandWidget,\n widgetsFreehand as freehandWidgetFactory,\n Handle as HandleWidget,\n widgetsHandle as handleWidgetFactory,\n PeakVelocity as PeakVelocityWidget,\n widgetsPeakVelocity as peakVelocityWidgetFactory,\n PressureHalfTime as PressureHalfTimeWidget,\n widgetsPressureHalfTime as pressureHalfTimeWidgetFactory,\n Polygon as PolygonWidget,\n widgetsPolygon as polygonWidgetFactory,\n Rectangle as RectangleWidget,\n widgetsRectangle as rectangleWidgetFactory,\n Ruler as RulerWidget,\n widgetsRuler as rulerWidgetFactory,\n VelocityTimeIntegral as VelocityTimeIntegralWidget,\n widgetsVelocityTimeIntegral as velocityTimeIntegralWidgetFactory,\n VoxelProbe as VoxelProbeWidget,\n widgetsVoxelprobe as voxelprobeWidgetFactory,\n};\n","import { widgetsBase } from './widgets.base';\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\nimport CoreUtils from '../core/core.utils';\n\n/**\n * @module widgets/peakVelocity (Gradient)\n */\nconst widgetsPeakVelocity = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'PeakVelocity';\n\n // incoming parameters (required: lps2IJK, worldPosition)\n this._regions = params.ultrasoundRegions || []; // required\n if (this._regions.length < 1) {\n throw new Error('Ultrasound regions should not be empty!');\n }\n\n // outgoing values\n this._velocity = null;\n this._gradient = null;\n\n this._container.style.cursor = 'pointer';\n this._controls.enabled = false; // controls should be disabled for widgets with a single handle\n this._initialized = false; // set to true onEnd\n this._active = true;\n this._domHovered = false;\n this._initialRegion = this.getRegionByXY(\n this._regions,\n CoreUtils.worldToData(params.lps2IJK, params.worldPosition)\n );\n if (this._initialRegion === null) {\n throw new Error('Invalid initial UltraSound region!');\n }\n\n // dom stuff\n this._line = null;\n this._label = null;\n\n // handle (represent line)\n const WidgetsHandle = widgetsHandleFactory(three);\n this._handle = new WidgetsHandle(targetMesh, controls, params);\n this.add(this._handle);\n\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\n this.add(this._moveHandle);\n this._moveHandle.hide();\n\n this.create();\n\n // event listeners\n this.onMove = this.onMove.bind(this);\n this.onHover = this.onHover.bind(this);\n this.addEventListeners();\n }\n\n addEventListeners() {\n this._container.addEventListener('wheel', this.onMove);\n\n this._line.addEventListener('mouseenter', this.onHover);\n this._line.addEventListener('mouseleave', this.onHover);\n this._label.addEventListener('mouseenter', this.onHover);\n this._label.addEventListener('mouseleave', this.onHover);\n }\n\n removeEventListeners() {\n this._container.removeEventListener('wheel', this.onMove);\n\n this._line.removeEventListener('mouseenter', this.onHover);\n this._line.removeEventListener('mouseleave', this.onHover);\n this._label.removeEventListener('mouseenter', this.onHover);\n this._label.removeEventListener('mouseleave', this.onHover);\n }\n\n onHover(evt) {\n if (evt) {\n this.hoverDom(evt);\n }\n\n this._hovered = this._handle.hovered || this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n }\n\n hoverDom(evt) {\n this._domHovered = evt.type === 'mouseenter';\n }\n\n onStart(evt) {\n this._moveHandle.onMove(evt, true);\n this._handle.onStart(evt);\n\n this._active = this._handle.active || this._domHovered;\n\n if (this._domHovered) {\n this._controls.enabled = false;\n }\n\n this.update();\n }\n\n onMove(evt) {\n if (this._active) {\n const prevPosition = this._moveHandle.worldPosition.clone();\n\n this._moveHandle.onMove(evt, true);\n\n const shift = this._moveHandle.worldPosition.clone().sub(prevPosition);\n\n if (!this.isCorrectRegion(shift)) {\n this._moveHandle.worldPosition.copy(prevPosition);\n\n return;\n }\n\n if (!this._handle.active) {\n this._handle.worldPosition.add(shift);\n }\n this._dragged = true;\n } else {\n this.onHover(null);\n }\n\n this._handle.onMove(evt);\n this.update();\n }\n\n onEnd() {\n this._handle.onEnd();\n\n if (!this._dragged && this._active && this._initialized) {\n this._selected = !this._selected; // change state if there was no dragging\n this._handle.selected = this._selected;\n }\n\n this._initialized = true;\n this._active = false;\n this._dragged = false;\n\n this.update();\n }\n\n isCorrectRegion(shift) {\n const region = this.getRegionByXY(\n this._regions,\n CoreUtils.worldToData(this._params.lps2IJK, this._handle.worldPosition.clone().add(shift))\n );\n\n return (\n region !== null &&\n region === this._initialRegion &&\n this._regions[region].unitsY === 'cm/sec'\n );\n }\n\n create() {\n this.createDOM();\n }\n\n createDOM() {\n this._line = document.createElement('div');\n this._line.className = 'widgets-dashline';\n this._container.appendChild(this._line);\n\n this._label = document.createElement('div');\n this._label.className = 'widgets-label';\n\n // Measurements\n let measurementsContainer = document.createElement('div');\n // Peak Velocity\n let pvContainer = document.createElement('div');\n pvContainer.className = 'peakVelocity';\n measurementsContainer.appendChild(pvContainer);\n // Gradient\n let gradientContainer = document.createElement('div');\n gradientContainer.className = 'gradient';\n measurementsContainer.appendChild(gradientContainer);\n\n this._label.appendChild(measurementsContainer);\n this._container.appendChild(this._label);\n\n this.updateDOMColor();\n }\n\n update() {\n this.updateColor();\n\n this._handle.update();\n this._worldPosition.copy(this._handle.worldPosition);\n\n this.updateDOM();\n }\n\n updateDOM() {\n this.updateDOMColor();\n\n const point = CoreUtils.worldToData(this._params.lps2IJK, this._worldPosition);\n const region = this._regions[this.getRegionByXY(this._regions, point)];\n const usPosition = this.getPointInRegion(region, point);\n\n this._velocity = Math.abs(usPosition.y / 100);\n this._gradient = 4 * Math.pow(this._velocity, 2);\n\n // content\n this._label.querySelector('.peakVelocity').innerHTML = `${this._velocity.toFixed(2)} m/s`;\n this._label.querySelector('.gradient').innerHTML = `${this._gradient.toFixed(2)} mmhg`;\n\n // position\n const transform = this.adjustLabelTransform(this._label, this._handle.screenPosition, true);\n\n this._line.style.transform = `translate3D(${transform.x -\n (point.x - region.x0) * this._camera.zoom}px, ${transform.y}px, 0)`;\n this._line.style.width = (region.x1 - region.x0) * this._camera.zoom + 'px';\n this._label.style.transform = `translate3D(${transform.x + 10}px, ${transform.y + 10}px, 0)`;\n }\n\n updateDOMColor() {\n this._line.style.backgroundColor = this._color;\n this._label.style.borderColor = this._color;\n }\n\n hideDOM() {\n this._line.style.display = 'none';\n this._label.style.display = 'none';\n this._handle.hideDOM();\n }\n\n showDOM() {\n this._line.style.display = '';\n this._label.style.display = '';\n this._handle.showDOM();\n }\n\n free() {\n this.removeEventListeners();\n\n this.remove(this._handle);\n this._handle.free();\n this._handle = null;\n this.remove(this._moveHandle);\n this._moveHandle.free();\n this._moveHandle = null;\n\n this._container.removeChild(this._line);\n this._container.removeChild(this._label);\n\n super.free();\n }\n\n getMeasurements() {\n return {\n velocity: this._velocity,\n gradient: this._gradient,\n };\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh) {\n this._targetMesh = targetMesh;\n this._handle.targetMesh = targetMesh;\n this._moveHandle.targetMesh = targetMesh;\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition) {\n this._handle.worldPosition.copy(worldPosition);\n this._moveHandle.worldPosition.copy(worldPosition);\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n\n get active() {\n return this._active;\n }\n\n set active(active) {\n this._active = active;\n this._controls.enabled = !this._active;\n\n this.update();\n }\n };\n};\n\nexport { widgetsPeakVelocity };\nexport default widgetsPeakVelocity();\n","import { widgetsBase } from './widgets.base';\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\nimport CoreUtils from '../core/core.utils';\n\n/**\n * @module widgets/polygon\n */\nconst widgetsPolygon = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'Polygon';\n\n // incoming parameters (optional: frameIndex, worldPosition)\n this._stack = params.stack; // required\n this._calibrationFactor = params.calibrationFactor || null;\n\n // outgoing values\n this._area = null;\n this._units =\n !this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing\n ? 'units'\n : 'cm²';\n\n this._initialized = false; // set to true onDblClick if number of handles > 2\n this._newHandleRequired = true; // should handle be created onMove?\n this._moving = false;\n this._domHovered = false;\n\n // mesh stuff\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n\n // dom stuff\n this._lines = [];\n this._label = null;\n\n // add handles\n this._handles = [];\n const WidgetsHandle = widgetsHandleFactory(three);\n\n let handle = new WidgetsHandle(targetMesh, controls, params);\n this.add(handle);\n this._handles.push(handle);\n\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\n this.add(this._moveHandle);\n this._moveHandle.hide();\n\n this.onDoubleClick = this.onDoubleClick.bind(this);\n this.onMove = this.onMove.bind(this);\n this.onHover = this.onHover.bind(this);\n\n this.create();\n\n this.addEventListeners();\n }\n\n addEventListeners() {\n this._container.addEventListener('dblclick', this.onDoubleClick);\n this._container.addEventListener('wheel', this.onMove);\n\n this._label.addEventListener('mouseenter', this.onHover);\n this._label.addEventListener('mouseleave', this.onHover);\n }\n\n removeEventListeners() {\n this._container.removeEventListener('dblclick', this.onDoubleClick);\n this._container.removeEventListener('wheel', this.onMove);\n\n this._label.removeEventListener('mouseenter', this.onHover);\n this._label.removeEventListener('mouseleave', this.onHover);\n }\n\n onHover(evt) {\n if (evt) {\n this.hoverDom(evt);\n }\n\n this.hoverMesh();\n\n let hovered = false;\n\n this._handles.forEach(elem => (hovered = hovered || elem.hovered));\n\n this._hovered = hovered || this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n }\n\n hoverMesh() {\n // check raycast intersection, if we want to hover on mesh instead of just css\n }\n\n hoverDom(evt) {\n this._domHovered = evt.type === 'mouseenter';\n }\n\n onStart(evt) {\n let active = false;\n\n this._handles.forEach(elem => {\n elem.onStart(evt);\n active = active || elem.active;\n });\n\n if (!this._initialized) {\n return;\n }\n\n this._moveHandle.onMove(evt, true);\n this._active = active || this._domHovered;\n\n if (this._domHovered && this._initialized) {\n this._moving = true;\n this._controls.enabled = false;\n }\n\n this.update();\n }\n\n onMove(evt) {\n let hovered = false;\n\n if (this.active) {\n this._dragged = true;\n\n if (this._newHandleRequired && !this._initialized) {\n this._handles[this._handles.length - 1].hovered = false;\n this._handles[this._handles.length - 1].active = false;\n this._handles[this._handles.length - 1].tracking = false;\n\n const WidgetsHandle = widgetsHandleFactory(three);\n let handle = new WidgetsHandle(this._targetMesh, this._controls, this._params);\n\n handle.hovered = true;\n handle.active = true;\n handle.tracking = true;\n this.add(handle);\n this._handles.push(handle);\n\n this.createLine();\n this._newHandleRequired = false;\n } else {\n const prevPosition = this._moveHandle.worldPosition.clone();\n\n this._moveHandle.onMove(evt, true);\n if (this._mesh) {\n this.remove(this._mesh);\n }\n this.updateDOMContent(true);\n if (this._moving) {\n this._handles.forEach(handle => {\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\n });\n }\n }\n }\n\n this._handles.forEach(elem => {\n elem.onMove(evt);\n hovered = hovered || elem.hovered;\n });\n\n this._hovered = hovered || this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n\n this.update();\n }\n\n onEnd() {\n let numHandles = this._handles.length;\n let active = false;\n\n if (\n !this._initialized &&\n numHandles > 1 &&\n this._handles[numHandles - 2].screenPosition.distanceTo(\n this._handles[numHandles - 1].screenPosition\n ) < 10\n ) {\n return;\n }\n\n this._handles.forEach(elem => {\n elem.onEnd();\n active = active || elem.active;\n });\n\n if (!this._initialized) {\n this._newHandleRequired = true;\n\n return;\n }\n\n if (this._dragged) {\n this.updateMesh();\n this.updateDOMContent();\n }\n\n if (!this._dragged && this._active) {\n this._selected = !this._selected; // change state if there was no dragging\n this._handles.forEach(elem => (elem.selected = this._selected));\n }\n this._active = active || this._handles[numHandles - 1].active;\n this._dragged = false;\n this._moving = false;\n\n this.update();\n }\n\n onDoubleClick() {\n let numHandles = this._handles.length;\n\n if (\n numHandles < 3 ||\n this._initialized ||\n (numHandles > 1 &&\n this._handles[numHandles - 2].screenPosition.distanceTo(\n this._handles[numHandles - 1].screenPosition\n ) < 10)\n ) {\n return;\n }\n\n this._handles[numHandles - 1].tracking = false;\n this._handles.forEach(elem => elem.onEnd());\n\n this._active = false;\n this._dragged = false;\n this._moving = false;\n this._initialized = true;\n\n this.updateMesh();\n this.updateDOMContent();\n this.update();\n }\n\n create() {\n this.createMaterial();\n this.createDOM();\n }\n\n createMaterial() {\n this._material = new three.MeshBasicMaterial({ side: THREE.DoubleSide });\n this._material.transparent = true;\n this._material.opacity = 0.2;\n }\n\n createDOM() {\n this.createLine();\n\n this._label = document.createElement('div');\n this._label.className = 'widgets-label';\n\n // measurements\n const measurementsContainer = document.createElement('div');\n // Mean / SD\n let meanSDContainer = document.createElement('div');\n meanSDContainer.className = 'mean-sd';\n measurementsContainer.appendChild(meanSDContainer);\n // Max / Min\n let maxMinContainer = document.createElement('div');\n maxMinContainer.className = 'max-min';\n measurementsContainer.appendChild(maxMinContainer);\n // Area\n let areaContainer = document.createElement('div');\n areaContainer.className = 'area';\n measurementsContainer.appendChild(areaContainer);\n\n this._label.appendChild(measurementsContainer);\n\n this._container.appendChild(this._label);\n\n this.updateDOMColor();\n }\n\n createLine() {\n const line = document.createElement('div');\n\n line.className = 'widgets-line';\n line.addEventListener('mouseenter', this.onHover);\n line.addEventListener('mouseleave', this.onHover);\n this._lines.push(line);\n this._container.appendChild(line);\n }\n\n hideDOM() {\n this._handles.forEach(elem => elem.hideDOM());\n\n this._lines.forEach(elem => (elem.style.display = 'none'));\n this._label.style.display = 'none';\n }\n\n showDOM() {\n this._handles.forEach(elem => elem.showDOM());\n\n this._lines.forEach(elem => (elem.style.display = ''));\n this._label.style.display = '';\n }\n\n update() {\n this.updateColor();\n\n // update handles\n this._handles.forEach(elem => elem.update());\n\n // mesh stuff\n this.updateMeshColor();\n this.updateMeshPosition();\n\n // DOM stuff\n this.updateDOMColor();\n this.updateDOMPosition();\n }\n\n updateMesh() {\n if (this._mesh) {\n this.remove(this._mesh);\n }\n\n let points = [];\n\n this._handles.forEach(elem => points.push(elem.worldPosition));\n\n let center = CoreUtils.centerOfMass(points);\n // direction from first point to center\n let referenceDirection = new three.Vector3().subVectors(points[0], center).normalize();\n let direction = new three.Vector3().crossVectors(\n new three.Vector3().subVectors(points[0], center), // side 1\n new three.Vector3().subVectors(points[1], center) // side 2\n );\n let base = new three.Vector3().crossVectors(referenceDirection, direction).normalize();\n let orderedpoints = [];\n\n // other lines // if inter, return location + angle\n for (let j = 0; j < points.length; j++) {\n let point = new three.Vector3(points[j].x, points[j].y, points[j].z);\n\n point.direction = new three.Vector3().subVectors(points[j], center).normalize();\n\n let x = referenceDirection.dot(point.direction);\n let y = base.dot(point.direction);\n\n point.xy = { x, y };\n point.angle = Math.atan2(y, x) * (180 / Math.PI);\n\n orderedpoints.push(point);\n }\n\n // override to catch console.warn \"THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()\"\n this._shapeWarn = false;\n const oldWarn = console.warn;\n console.warn = function(...rest) {\n if (rest[0] === 'THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()') {\n this._shapeWarn = true;\n }\n return oldWarn.apply(console, rest);\n }.bind(this);\n\n // create the shape\n let shape = new three.Shape();\n // move to first point!\n shape.moveTo(orderedpoints[0].xy.x, orderedpoints[0].xy.y);\n\n // loop through all points!\n for (let l = 1; l < orderedpoints.length; l++) {\n // project each on plane!\n shape.lineTo(orderedpoints[l].xy.x, orderedpoints[l].xy.y);\n }\n\n // close the shape!\n shape.lineTo(orderedpoints[0].xy.x, orderedpoints[0].xy.y);\n\n this._geometry = new three.ShapeGeometry(shape);\n\n console.warn = oldWarn;\n\n this._geometry.vertices = orderedpoints;\n this._geometry.verticesNeedUpdate = true;\n this._geometry.elementsNeedUpdate = true;\n\n this.updateMeshColor();\n\n this._mesh = new three.Mesh(this._geometry, this._material);\n this._mesh.visible = true;\n this.add(this._mesh);\n }\n\n updateMeshColor() {\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n updateMeshPosition() {\n if (this._geometry) {\n this._geometry.verticesNeedUpdate = true;\n }\n }\n\n updateDOMColor() {\n this._lines.forEach(elem => (elem.style.backgroundColor = this._color));\n this._label.style.borderColor = this._color;\n }\n\n updateDOMContent(clear) {\n const meanSDContainer = this._label.querySelector('.mean-sd');\n const maxMinContainer = this._label.querySelector('.max-min');\n const areaContainer = this._label.querySelector('.area');\n\n if (clear) {\n meanSDContainer.innerHTML = '';\n maxMinContainer.innerHTML = '';\n areaContainer.innerHTML = '';\n\n return;\n }\n\n const regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || [];\n\n this._area = CoreUtils.getGeometryArea(this._geometry); // this.getArea result is changed on dragging\n if (this._calibrationFactor) {\n this._area *= Math.pow(this._calibrationFactor, 2);\n } else if (regions && regions.length > 0 && this._stack.lps2IJK) {\n let same = true;\n let cRegion;\n let pRegion;\n\n this._handles.forEach(elem => {\n cRegion = this.getRegionByXY(\n regions,\n CoreUtils.worldToData(this._stack.lps2IJK, elem.worldPosition)\n );\n if (\n cRegion === null ||\n regions[cRegion].unitsX !== 'cm' ||\n (pRegion !== undefined && pRegion !== cRegion)\n ) {\n same = false;\n }\n pRegion = cRegion;\n });\n\n if (same) {\n this._area *= Math.pow(regions[cRegion].deltaX, 2);\n this._units = 'cm²';\n } else if (this._stack.frame[this._params.frameIndex].pixelSpacing) {\n this._area /= 100;\n this._units = 'cm²';\n } else {\n this._units = 'units';\n }\n } else if (this._units === 'cm²') {\n this._area /= 100;\n }\n\n let title =\n this._units === 'units' ? 'Calibration is required to display the area in cm². ' : '';\n\n if (this._shapeWarn) {\n title += 'Values may be incorrect due to triangulation error.';\n }\n if (title !== '' && !this._label.hasAttribute('title')) {\n this._label.setAttribute('title', title);\n this._label.style.color = this._colors.error;\n } else if (title === '' && this._label.hasAttribute('title')) {\n this._label.removeAttribute('title');\n this._label.style.color = this._colors.text;\n }\n\n const roi = CoreUtils.getRoI(this._mesh, this._camera, this._stack);\n\n if (roi !== null) {\n meanSDContainer.innerHTML = `Mean: ${roi.mean.toFixed(1)} / SD: ${roi.sd.toFixed(1)}`;\n maxMinContainer.innerHTML = `Max: ${roi.max.toFixed()} / Min: ${roi.min.toFixed()}`;\n } else {\n meanSDContainer.innerHTML = '';\n maxMinContainer.innerHTML = '';\n }\n areaContainer.innerHTML = `Area: ${this._area.toFixed(2)} ${this._units}`;\n }\n\n updateDOMPosition() {\n // update lines and get coordinates of lowest handle\n let labelPosition = null;\n\n this._lines.forEach((elem, ind) => {\n const lineData = this.getLineData(\n this._handles[ind].screenPosition,\n this._handles[ind + 1 === this._handles.length ? 0 : ind + 1].screenPosition\n );\n\n elem.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0)\n rotate(${lineData.transformAngle}rad)`;\n elem.style.width = lineData.length + 'px';\n\n if (labelPosition === null || labelPosition.y < this._handles[ind].screenPosition.y) {\n labelPosition = this._handles[ind].screenPosition.clone();\n }\n });\n\n if (!this._initialized) {\n return;\n }\n\n // update label\n labelPosition.y += 15 + this._label.offsetHeight / 2;\n labelPosition = this.adjustLabelTransform(this._label, labelPosition);\n\n this._label.style.transform = `translate3D(${labelPosition.x}px, ${labelPosition.y}px, 0)`;\n }\n\n free() {\n this.removeEventListeners();\n\n this._handles.forEach(h => {\n this.remove(h);\n h.free();\n });\n this._handles = [];\n\n this.remove(this._moveHandle);\n this._moveHandle.free();\n this._moveHandle = null;\n\n this._lines.forEach(elem => {\n elem.removeEventListener('mouseenter', this.onHover);\n elem.removeEventListener('mouseleave', this.onHover);\n this._container.removeChild(elem);\n });\n this._lines = [];\n this._container.removeChild(this._label);\n\n // mesh, geometry, material\n if (this._mesh) {\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n }\n if (this._geometry) {\n this._geometry.dispose();\n this._geometry = null;\n }\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n this._stack = null;\n\n super.free();\n }\n\n getMeasurements() {\n return {\n area: this._area,\n units: this._units,\n };\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh) {\n this._targetMesh = targetMesh;\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\n this._moveHandle.targetMesh = targetMesh;\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition) {\n this._handles.forEach(elem => elem.worldPosition.copy(worldPosition));\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n\n get calibrationFactor() {\n return this._calibrationFactor;\n }\n\n set calibrationFactor(calibrationFactor) {\n this._calibrationFactor = calibrationFactor;\n this._units = 'cm²';\n this.update();\n }\n };\n};\n\nexport { widgetsPolygon };\nexport default widgetsPolygon();\n","import { widgetsBase } from './widgets.base';\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\nimport CoreUtils from '../core/core.utils';\n\n/**\n * @module widgets/pressureHalfTime\n */\nconst widgetsPressureHalfTime = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'PressureHalfTime';\n\n // incoming parameters (required: lps2IJK, worldPosition)\n this._regions = params.ultrasoundRegions || []; // required\n if (this._regions.length < 1) {\n throw new Error('Ultrasound regions should not be empty!');\n }\n\n // outgoing values\n this._vMax = null; // Maximum Velocity (Vmax)\n this._gMax = null; // Maximum Gradient (Gmax)\n this._pht = null; // Pressure Half Time (PHT)\n this._mva = null; // Mitral Valve Area (MVA)\n this._dt = null; // Deceleration Time (DT)\n this._ds = null; // Deceleration Slope (DS)\n\n this._domHovered = false;\n this._initialRegion = this.getRegionByXY(\n this._regions,\n CoreUtils.worldToData(params.lps2IJK, params.worldPosition)\n );\n if (this._initialRegion === null) {\n throw new Error('Invalid initial UltraSound region!');\n }\n\n // mesh stuff\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n\n // dom stuff\n this._line = null;\n this._label = null;\n\n // add handles\n this._handles = [];\n const WidgetsHandle = widgetsHandleFactory(three);\n\n let handle;\n for (let i = 0; i < 2; i++) {\n handle = new WidgetsHandle(targetMesh, controls, params);\n this.add(handle);\n this._handles.push(handle);\n }\n this._handles[1].active = true;\n this._handles[1].tracking = true;\n\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\n this.add(this._moveHandle);\n this._handles.push(this._moveHandle);\n this._moveHandle.hide();\n\n this.create();\n\n this.onMove = this.onMove.bind(this);\n this.onHover = this.onHover.bind(this);\n this.addEventListeners();\n }\n\n addEventListeners() {\n this._container.addEventListener('wheel', this.onMove);\n\n this._line.addEventListener('mouseenter', this.onHover);\n this._line.addEventListener('mouseleave', this.onHover);\n this._label.addEventListener('mouseenter', this.onHover);\n this._label.addEventListener('mouseleave', this.onHover);\n }\n\n removeEventListeners() {\n this._container.removeEventListener('wheel', this.onMove);\n\n this._line.removeEventListener('mouseenter', this.onHover);\n this._line.removeEventListener('mouseleave', this.onHover);\n this._label.removeEventListener('mouseenter', this.onHover);\n this._label.removeEventListener('mouseleave', this.onHover);\n }\n\n onHover(evt) {\n if (evt) {\n this.hoverDom(evt);\n }\n\n this.hoverMesh();\n\n this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n }\n\n hoverMesh() {\n // check raycast intersection, do we want to hover on mesh or just css?\n }\n\n hoverDom(evt) {\n this._domHovered = evt.type === 'mouseenter';\n }\n\n onStart(evt) {\n this._moveHandle.onMove(evt, true);\n\n this._handles[0].onStart(evt);\n this._handles[1].onStart(evt);\n\n this._active = this._handles[0].active || this._handles[1].active || this._domHovered;\n\n if (this._domHovered) {\n this._controls.enabled = false;\n }\n\n this.update();\n }\n\n onMove(evt) {\n if (this._active) {\n const prevPosition = this._moveHandle.worldPosition.clone();\n\n this._moveHandle.onMove(evt, true);\n\n const shift = this._moveHandle.worldPosition.clone().sub(prevPosition);\n\n if (!this.isCorrectRegion(shift)) {\n this._moveHandle.worldPosition.copy(prevPosition);\n\n return;\n }\n\n if (!this._handles[0].active && !this._handles[1].active) {\n this._handles.slice(0, -1).forEach(handle => {\n handle.worldPosition.add(shift);\n });\n }\n this._dragged = true;\n } else {\n this.onHover(null);\n }\n\n this._handles[0].onMove(evt);\n this._handles[1].onMove(evt);\n this.update();\n }\n\n onEnd() {\n this._handles[0].onEnd(); // First Handle\n\n if (\n this._handles[1].tracking &&\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10\n ) {\n return;\n }\n\n if (!this._dragged && this._active && !this._handles[1].tracking) {\n this._selected = !this._selected; // change state if there was no dragging\n this._handles[0].selected = this._selected;\n }\n\n // Second Handle\n if (this._dragged || !this._handles[1].tracking) {\n this._handles[1].tracking = false;\n this._handles[1].onEnd();\n } else {\n this._handles[1].tracking = false;\n }\n this._handles[1].selected = this._selected;\n\n this._active = this._handles[0].active || this._handles[1].active;\n this._dragged = false;\n\n this.update();\n }\n\n isCorrectRegion(shift) {\n const inActive = !(this._handles[0].active || this._handles[1].active);\n let isCorrect = true;\n\n if (this._handles[0].active || inActive) {\n isCorrect = isCorrect && this.checkHandle(0, shift);\n }\n if (this._handles[1].active || inActive) {\n isCorrect = isCorrect && this.checkHandle(1, shift);\n }\n\n return isCorrect;\n }\n\n checkHandle(index, shift) {\n const region = this.getRegionByXY(\n this._regions,\n CoreUtils.worldToData(\n this._params.lps2IJK,\n this._handles[index].worldPosition.clone().add(shift)\n )\n );\n\n return (\n region !== null &&\n region === this._initialRegion &&\n this._regions[region].unitsY === 'cm/sec'\n );\n }\n\n create() {\n this.createMesh();\n this.createDOM();\n }\n\n createMesh() {\n // geometry\n this._geometry = new three.Geometry();\n this._geometry.vertices = [this._handles[0].worldPosition, this._handles[1].worldPosition];\n\n // material\n this._material = new three.LineBasicMaterial();\n\n this.updateMeshColor();\n\n // mesh\n this._mesh = new three.Line(this._geometry, this._material);\n this._mesh.visible = true;\n\n this.add(this._mesh);\n }\n\n createDOM() {\n this._line = document.createElement('div');\n this._line.className = 'widgets-line';\n this._container.appendChild(this._line);\n\n this._label = document.createElement('div');\n this._label.className = 'widgets-label';\n\n const measurementsContainer = document.createElement('div');\n\n ['vmax', 'gmax', 'pht', 'mva', 'dt', 'ds'].forEach(name => {\n const div = document.createElement('div');\n\n div.className = name;\n measurementsContainer.appendChild(div);\n });\n this._label.appendChild(measurementsContainer);\n\n this._container.appendChild(this._label);\n\n this.updateDOMColor();\n }\n\n hideDOM() {\n this._line.style.display = 'none';\n this._label.style.display = 'none';\n this._handles.forEach(elem => elem.hideDOM());\n }\n\n showDOM() {\n this._line.style.display = '';\n this._label.style.display = '';\n this._handles[0].showDOM();\n this._handles[1].showDOM();\n }\n\n update() {\n this.updateColor();\n\n this._handles[0].update();\n this._handles[1].update();\n\n this.updateValues();\n\n this.updateMeshColor();\n this.updateMeshPosition();\n\n this.updateDOM();\n }\n\n updateValues() {\n const usPosition0 = this.getUsPoint(\n this._regions,\n CoreUtils.worldToData(this._params.lps2IJK, this._handles[0].worldPosition)\n );\n const usPosition1 = this.getUsPoint(\n this._regions,\n CoreUtils.worldToData(this._params.lps2IJK, this._handles[1].worldPosition)\n );\n const velocity0 = Math.abs(usPosition0.y / 100);\n const velocity1 = Math.abs(usPosition1.y / 100);\n const time0 = Math.abs(usPosition0.x);\n const time1 = Math.abs(usPosition1.x);\n const vMaxTime = this._vMax === velocity0 ? time0 : time1;\n\n this._vMax = Math.max(velocity0, velocity1);\n this._gMax = 4 * Math.pow(this._vMax, 2);\n\n const phtVelocity = this._vMax / Math.sqrt(2);\n const phtKoeff = (velocity0 - phtVelocity) / (velocity1 - phtVelocity);\n const dtKoeff = velocity0 / velocity1;\n\n this._pht =\n phtKoeff === 1\n ? Number.POSITIVE_INFINITY\n : Math.abs(vMaxTime - (time0 - phtKoeff * time1) / (1 - phtKoeff)) * 1000;\n this._mva = 220 / this._pht;\n this._dt =\n dtKoeff === 1\n ? Number.POSITIVE_INFINITY\n : Math.abs(vMaxTime - (time0 - dtKoeff * time1) / (1 - dtKoeff)) * 1000;\n this._ds = this._dt === 0 ? Number.POSITIVE_INFINITY : (this._vMax / this._dt) * 1000;\n }\n\n updateMeshColor() {\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n updateMeshPosition() {\n if (this._geometry) {\n this._geometry.verticesNeedUpdate = true;\n }\n }\n\n updateDOM() {\n this.updateDOMColor();\n\n // update line\n const lineData = this.getLineData(\n this._handles[0].screenPosition,\n this._handles[1].screenPosition\n );\n\n this._line.style.transform = `translate3D(${lineData.transformX}px, ${\n lineData.transformY\n }px, 0)\n rotate(${lineData.transformAngle}rad)`;\n this._line.style.width = lineData.length + 'px';\n\n // update label\n this._label.querySelector('.vmax').innerHTML = `Vmax: ${this._vMax.toFixed(2)} m/s`;\n this._label.querySelector('.gmax').innerHTML = `Gmax: ${this._gMax.toFixed(2)} mmhg`;\n this._label.querySelector('.pht').innerHTML = `PHT: ${this._pht.toFixed(1)} ms`;\n this._label.querySelector('.mva').innerHTML = `MVA: ${this._mva.toFixed(2)} cm²`;\n this._label.querySelector('.dt').innerHTML = `DT: ${this._dt.toFixed(1)} ms`;\n this._label.querySelector('.ds').innerHTML = `DS: ${this._ds.toFixed(2)} m/s²`;\n\n let angle = Math.abs(lineData.transformAngle);\n\n if (angle > Math.PI / 2) {\n angle = Math.PI - angle;\n }\n\n const labelPadding =\n Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth\n ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding\n : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle) + 15;\n const paddingVector = lineData.line.normalize().multiplyScalar(labelPadding);\n const paddingPoint =\n lineData.length > labelPadding * 2\n ? this._handles[1].screenPosition.clone().sub(paddingVector)\n : this._handles[1].screenPosition.clone().add(paddingVector);\n const transform = this.adjustLabelTransform(this._label, paddingPoint);\n\n this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`;\n }\n\n updateDOMColor() {\n this._line.style.backgroundColor = this._color;\n this._label.style.borderColor = this._color;\n }\n\n free() {\n this.removeEventListeners();\n\n this._handles.forEach(h => {\n this.remove(h);\n h.free();\n });\n this._handles = [];\n\n this._container.removeChild(this._line);\n this._container.removeChild(this._label);\n\n // mesh, geometry, material\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n this._geometry.dispose();\n this._geometry = null;\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n super.free();\n }\n\n getMeasurements() {\n return {\n vMax: this._vMax,\n gMax: this._gMax,\n pht: this._pht,\n mva: this._mva,\n dt: this._dt,\n ds: this._ds,\n };\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh) {\n this._targetMesh = targetMesh;\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition) {\n this._handles[0].worldPosition.copy(worldPosition);\n this._handles[1].worldPosition.copy(worldPosition);\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n };\n};\n\nexport { widgetsPressureHalfTime };\nexport default widgetsPressureHalfTime();\n","import { widgetsBase } from './widgets.base';\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\nimport CoreUtils from '../core/core.utils';\n\n/**\n * @module widgets/rectangle\n */\nconst widgetsRectangle = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'Rectangle';\n\n // incoming parameters (optional: frameIndex, worldPosition)\n this._stack = params.stack; // required\n this._calibrationFactor = params.calibrationFactor || null;\n\n // outgoing values\n this._area = null;\n this._units =\n !this._calibrationFactor && !params.stack.frame[params.frameIndex].pixelSpacing\n ? 'units'\n : 'cm²';\n\n this._moving = false;\n this._domHovered = false;\n\n // mesh stuff\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n\n // dom stuff\n this._rectangle = null;\n this._label = null;\n\n // add handles\n this._handles = [];\n const WidgetsHandle = widgetsHandleFactory(three);\n\n let handle;\n for (let i = 0; i < 2; i++) {\n handle = new WidgetsHandle(targetMesh, controls, params);\n this.add(handle);\n this._handles.push(handle);\n }\n this._handles[1].active = true;\n this._handles[1].tracking = true;\n\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\n this.add(this._moveHandle);\n this._handles.push(this._moveHandle);\n this._moveHandle.hide();\n\n this.create();\n\n this.onMove = this.onMove.bind(this);\n this.onHover = this.onHover.bind(this);\n this.addEventListeners();\n }\n\n addEventListeners() {\n this._container.addEventListener('wheel', this.onMove);\n\n this._rectangle.addEventListener('mouseenter', this.onHover);\n this._rectangle.addEventListener('mouseleave', this.onHover);\n this._label.addEventListener('mouseenter', this.onHover);\n this._label.addEventListener('mouseleave', this.onHover);\n }\n\n removeEventListeners() {\n this._container.removeEventListener('wheel', this.onMove);\n\n this._rectangle.removeEventListener('mouseenter', this.onHover);\n this._rectangle.removeEventListener('mouseleave', this.onHover);\n this._label.removeEventListener('mouseenter', this.onHover);\n this._label.removeEventListener('mouseleave', this.onHover);\n }\n\n onHover(evt) {\n if (evt) {\n this.hoverDom(evt);\n }\n\n this.hoverMesh();\n\n this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n }\n\n hoverMesh() {\n // check raycast intersection, if we want to hover on mesh instead of just css\n }\n\n hoverDom(evt) {\n this._domHovered = evt.type === 'mouseenter';\n }\n\n onStart(evt) {\n this._moveHandle.onMove(evt, true);\n\n this._handles[0].onStart(evt);\n this._handles[1].onStart(evt);\n\n this._active = this._handles[0].active || this._handles[1].active || this._domHovered;\n\n if (this._domHovered && !this._handles[1].tracking) {\n this._moving = true;\n this._controls.enabled = false;\n }\n\n this.update();\n }\n\n onMove(evt) {\n if (this._active) {\n const prevPosition = this._moveHandle.worldPosition.clone();\n\n this._dragged = true;\n this._moveHandle.onMove(evt, true);\n\n if (this._moving) {\n this._handles.slice(0, -1).forEach(handle => {\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\n });\n }\n\n this.updateRoI(true);\n } else {\n this.onHover(null);\n }\n\n this._handles[0].onMove(evt);\n this._handles[1].onMove(evt);\n\n this.update();\n }\n\n onEnd() {\n this._handles[0].onEnd(); // First Handle\n\n if (\n this._handles[1].tracking &&\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10\n ) {\n return;\n }\n\n if (!this._dragged && this._active && !this._handles[1].tracking) {\n this._selected = !this._selected; // change state if there was no dragging\n this._handles[0].selected = this._selected;\n }\n\n // Second Handle\n if (this._dragged || !this._handles[1].tracking) {\n this._handles[1].tracking = false;\n this._handles[1].onEnd();\n } else {\n this._handles[1].tracking = false;\n }\n this._handles[1].selected = this._selected;\n\n this._active = this._handles[0].active || this._handles[1].active;\n this._dragged = false;\n this._moving = false;\n\n this.updateRoI(); // TODO: if (this._dragged || !this._initialized)\n this.update();\n }\n\n hideDOM() {\n this._handles.forEach(elem => elem.hideDOM());\n\n this._rectangle.style.display = 'none';\n this._label.style.display = 'none';\n }\n\n showDOM() {\n this._handles[0].showDOM();\n this._handles[1].showDOM();\n\n this._rectangle.style.display = '';\n this._label.style.display = '';\n }\n\n create() {\n this.createMesh();\n this.createDOM();\n }\n\n createMesh() {\n this._geometry = new three.PlaneGeometry(1, 1);\n\n this._material = new three.MeshBasicMaterial({ side: three.DoubleSide });\n this._material.transparent = true;\n this._material.opacity = 0.2;\n\n this.updateMeshColor();\n\n this._mesh = new three.Mesh(this._geometry, this._material);\n this._mesh.visible = true;\n\n this.add(this._mesh);\n }\n\n createDOM() {\n this._rectangle = document.createElement('div');\n this._rectangle.className = 'widgets-rectangle';\n this._container.appendChild(this._rectangle);\n\n this._label = document.createElement('div');\n this._label.className = 'widgets-label';\n\n // measurements\n const measurementsContainer = document.createElement('div');\n // Mean / SD\n let meanSDContainer = document.createElement('div');\n meanSDContainer.className = 'mean-sd';\n measurementsContainer.appendChild(meanSDContainer);\n // Max / Min\n let maxMinContainer = document.createElement('div');\n maxMinContainer.className = 'max-min';\n measurementsContainer.appendChild(maxMinContainer);\n // Area\n let areaContainer = document.createElement('div');\n areaContainer.className = 'area';\n measurementsContainer.appendChild(areaContainer);\n\n this._label.appendChild(measurementsContainer);\n\n this._container.appendChild(this._label);\n\n this.updateDOMColor();\n }\n\n update() {\n this.updateColor();\n\n this._handles[0].update();\n this._handles[1].update();\n\n this.updateMeshColor();\n this.updateMeshPosition();\n\n this.updateDOM();\n }\n\n updateMeshColor() {\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n updateMeshPosition() {\n if (this._geometry) {\n const progection = new three.Vector3()\n .subVectors(this._handles[1].worldPosition, this._handles[0].worldPosition)\n .projectOnVector(this._camera.up);\n\n this._geometry.vertices[0].copy(this._handles[0].worldPosition);\n this._geometry.vertices[1].copy(\n new three.Vector3().addVectors(this._handles[0].worldPosition, progection)\n );\n this._geometry.vertices[2].copy(\n new three.Vector3().subVectors(this._handles[1].worldPosition, progection)\n );\n this._geometry.vertices[3].copy(this._handles[1].worldPosition);\n\n this._geometry.verticesNeedUpdate = true;\n this._geometry.computeBoundingSphere();\n }\n }\n\n updateRoI(clear) {\n const meanSDContainer = this._label.querySelector('.mean-sd');\n const maxMinContainer = this._label.querySelector('.max-min');\n\n if (clear) {\n meanSDContainer.innerHTML = '';\n maxMinContainer.innerHTML = '';\n\n return;\n }\n\n const roi = CoreUtils.getRoI(this._mesh, this._camera, this._stack);\n\n if (roi !== null) {\n meanSDContainer.innerHTML = `Mean: ${roi.mean.toFixed(1)} / SD: ${roi.sd.toFixed(1)}`;\n maxMinContainer.innerHTML = `Max: ${roi.max.toFixed()} / Min: ${roi.min.toFixed()}`;\n } else {\n meanSDContainer.innerHTML = '';\n maxMinContainer.innerHTML = '';\n }\n }\n\n updateDOMColor() {\n this._rectangle.style.borderColor = this._color;\n this._label.style.borderColor = this._color;\n }\n\n updateDOM() {\n this.updateDOMColor();\n\n const regions = this._stack.frame[this._params.frameIndex].ultrasoundRegions || [];\n\n this._area = CoreUtils.getGeometryArea(this._geometry);\n if (this._calibrationFactor) {\n this._area *= Math.pow(this._calibrationFactor, 2);\n } else if (regions && regions.length > 0 && this._stack.lps2IJK) {\n const region0 = this.getRegionByXY(\n regions,\n CoreUtils.worldToData(this._stack.lps2IJK, this._handles[0].worldPosition)\n );\n const region1 = this.getRegionByXY(\n regions,\n CoreUtils.worldToData(this._stack.lps2IJK, this._handles[1].worldPosition)\n );\n\n if (\n region0 !== null &&\n region1 !== null &&\n region0 === region1 &&\n regions[region0].unitsX === 'cm' &&\n regions[region0].unitsY === 'cm'\n ) {\n this._area *= Math.pow(regions[region0].deltaX, 2);\n this._units = 'cm²';\n } else if (this._stack.frame[this._params.frameIndex].pixelSpacing) {\n this._area /= 100;\n this._units = 'cm²';\n } else {\n this._units = 'units';\n }\n } else if (this._units === 'cm²') {\n this._area /= 100;\n }\n\n if (this._units === 'units' && !this._label.hasAttribute('title')) {\n this._label.setAttribute('title', 'Calibration is required to display the area in cm²');\n this._label.style.color = this._colors.error;\n } else if (this._units !== 'units' && this._label.hasAttribute('title')) {\n this._label.removeAttribute('title');\n this._label.style.color = this._colors.text;\n }\n this._label.querySelector('.area').innerHTML = `Area: ${this._area.toFixed(2)} ${\n this._units\n }`;\n\n const rectData = this.getRectData(\n this._handles[0].screenPosition,\n this._handles[1].screenPosition\n );\n const labelTransform = this.adjustLabelTransform(\n this._label,\n this._handles[1].screenPosition\n .clone()\n .add(rectData.paddingVector.multiplyScalar(15 + this._label.offsetHeight / 2))\n );\n\n // update rectangle\n this._rectangle.style.transform = `translate3D(${rectData.transformX}px, ${\n rectData.transformY\n }px, 0)`;\n this._rectangle.style.width = rectData.width + 'px';\n this._rectangle.style.height = rectData.height + 'px';\n\n // update label\n this._label.style.transform =\n 'translate3D(' + labelTransform.x + 'px,' + labelTransform.y + 'px, 0)';\n }\n\n free() {\n this.removeEventListeners();\n\n this._handles.forEach(h => {\n this.remove(h);\n h.free();\n });\n this._handles = [];\n\n this._container.removeChild(this._rectangle);\n this._container.removeChild(this._label);\n\n // mesh, geometry, material\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n this._geometry.dispose();\n this._geometry = null;\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n this._stack = null;\n\n super.free();\n }\n\n getMeasurements() {\n return {\n area: this._area,\n units: this._units,\n };\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh) {\n this._targetMesh = targetMesh;\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition) {\n this._handles[0].worldPosition.copy(worldPosition);\n this._handles[1].worldPosition.copy(worldPosition);\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n\n get calibrationFactor() {\n return this._calibrationFactor;\n }\n\n set calibrationFactor(calibrationFactor) {\n this._calibrationFactor = calibrationFactor;\n this._units = 'cm²';\n this.update();\n }\n };\n};\n\nexport { widgetsRectangle };\nexport default widgetsRectangle();\n","import { widgetsBase } from './widgets.base';\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\n\n/**\n * @module widgets/ruler\n */\nconst widgetsRuler = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'Ruler';\n\n // incoming parameters (optional: lps2IJK, pixelSpacing, ultrasoundRegions, worldPosition)\n this._calibrationFactor = params.calibrationFactor || null;\n\n // outgoing values\n this._distance = null;\n this._units = !this._calibrationFactor && !params.pixelSpacing ? 'units' : 'mm';\n\n this._moving = false;\n this._domHovered = false;\n\n // mesh stuff\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n\n // dom stuff\n this._line = null;\n this._label = null;\n\n // add handles\n this._handles = [];\n const WidgetsHandle = widgetsHandleFactory(three);\n\n let handle;\n for (let i = 0; i < 2; i++) {\n handle = new WidgetsHandle(targetMesh, controls, params);\n this.add(handle);\n this._handles.push(handle);\n }\n this._handles[1].active = true;\n this._handles[1].tracking = true;\n\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\n this.add(this._moveHandle);\n this._handles.push(this._moveHandle);\n this._moveHandle.hide();\n\n this.create();\n\n this.onMove = this.onMove.bind(this);\n this.onHover = this.onHover.bind(this);\n this.addEventListeners();\n }\n\n addEventListeners() {\n this._container.addEventListener('wheel', this.onMove);\n\n this._line.addEventListener('mouseenter', this.onHover);\n this._line.addEventListener('mouseleave', this.onHover);\n this._label.addEventListener('mouseenter', this.onHover);\n this._label.addEventListener('mouseleave', this.onHover);\n }\n\n removeEventListeners() {\n this._container.removeEventListener('wheel', this.onMove);\n\n this._line.removeEventListener('mouseenter', this.onHover);\n this._line.removeEventListener('mouseleave', this.onHover);\n this._label.removeEventListener('mouseenter', this.onHover);\n this._label.removeEventListener('mouseleave', this.onHover);\n }\n\n onHover(evt) {\n if (evt) {\n this.hoverDom(evt);\n }\n\n this.hoverMesh();\n\n this._hovered = this._handles[0].hovered || this._handles[1].hovered || this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n }\n\n hoverMesh() {\n // check raycast intersection, do we want to hover on mesh or just css?\n }\n\n hoverDom(evt) {\n this._domHovered = evt.type === 'mouseenter';\n }\n\n onStart(evt) {\n this._moveHandle.onMove(evt, true);\n\n this._handles[0].onStart(evt);\n this._handles[1].onStart(evt);\n\n this._active = this._handles[0].active || this._handles[1].active || this._domHovered;\n\n if (this._domHovered && !this._handles[1].tracking) {\n this._moving = true;\n this._controls.enabled = false;\n }\n\n this.update();\n }\n\n onMove(evt) {\n if (this._active) {\n const prevPosition = this._moveHandle.worldPosition.clone();\n\n this._dragged = true;\n this._moveHandle.onMove(evt, true);\n\n if (this._moving) {\n this._handles.slice(0, -1).forEach(handle => {\n handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\n });\n }\n } else {\n this.onHover(null);\n }\n\n this._handles[0].onMove(evt);\n this._handles[1].onMove(evt);\n\n this.update();\n }\n\n onEnd() {\n this._handles[0].onEnd(); // First Handle\n\n if (\n this._handles[1].tracking &&\n this._handles[0].screenPosition.distanceTo(this._handles[1].screenPosition) < 10\n ) {\n return;\n }\n\n if (!this._dragged && this._active && !this._handles[1].tracking) {\n this._selected = !this._selected; // change state if there was no dragging\n this._handles[0].selected = this._selected;\n }\n\n // Second Handle\n if (this._dragged || !this._handles[1].tracking) {\n this._handles[1].tracking = false;\n this._handles[1].onEnd();\n } else {\n this._handles[1].tracking = false;\n }\n this._handles[1].selected = this._selected;\n\n this._active = this._handles[0].active || this._handles[1].active;\n this._dragged = false;\n this._moving = false;\n\n this.update();\n }\n\n create() {\n this.createMesh();\n this.createDOM();\n }\n\n createMesh() {\n // geometry\n this._geometry = new three.Geometry();\n this._geometry.vertices.push(this._handles[0].worldPosition);\n this._geometry.vertices.push(this._handles[1].worldPosition);\n\n // material\n this._material = new three.LineBasicMaterial();\n\n this.updateMeshColor();\n\n // mesh\n this._mesh = new three.Line(this._geometry, this._material);\n this._mesh.visible = true;\n\n this.add(this._mesh);\n }\n\n createDOM() {\n this._line = document.createElement('div');\n this._line.className = 'widgets-line';\n this._container.appendChild(this._line);\n\n this._label = document.createElement('div');\n this._label.className = 'widgets-label';\n this._container.appendChild(this._label);\n\n this.updateDOMColor();\n }\n\n hideDOM() {\n this._line.style.display = 'none';\n this._label.style.display = 'none';\n this._handles.forEach(elem => elem.hideDOM());\n }\n\n showDOM() {\n this._line.style.display = '';\n this._label.style.display = '';\n this._handles[0].showDOM();\n this._handles[1].showDOM();\n }\n\n update() {\n this.updateColor();\n\n this._handles[0].update();\n this._handles[1].update();\n\n // calculate values\n const distanceData = this.getDistanceData(\n this._handles[0].worldPosition,\n this._handles[1].worldPosition,\n this._calibrationFactor\n );\n\n this._distance = distanceData.distance;\n if (distanceData.units) {\n this._units = distanceData.units;\n }\n\n this.updateMeshColor();\n this.updateMeshPosition();\n\n this.updateDOM();\n }\n\n updateMeshColor() {\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n updateMeshPosition() {\n if (this._geometry) {\n this._geometry.verticesNeedUpdate = true;\n }\n }\n\n updateDOM() {\n this.updateDOMColor();\n\n // update line\n const lineData = this.getLineData(\n this._handles[0].screenPosition,\n this._handles[1].screenPosition\n );\n\n this._line.style.transform = `translate3D(${lineData.transformX}px, ${\n lineData.transformY\n }px, 0)\n rotate(${lineData.transformAngle}rad)`;\n this._line.style.width = lineData.length + 'px';\n\n // update label\n if (this._units === 'units' && !this._label.hasAttribute('title')) {\n this._label.setAttribute('title', 'Calibration is required to display the distance in mm');\n this._label.style.color = this._colors.error;\n } else if (this._units !== 'units' && this._label.hasAttribute('title')) {\n this._label.removeAttribute('title');\n this._label.style.color = this._colors.text;\n }\n this._label.innerHTML = `${this._distance.toFixed(2)} ${this._units}`;\n\n let angle = Math.abs(lineData.transformAngle);\n if (angle > Math.PI / 2) {\n angle = Math.PI - angle;\n }\n\n const labelPadding =\n Math.tan(angle) < this._label.offsetHeight / this._label.offsetWidth\n ? this._label.offsetWidth / 2 / Math.cos(angle) + 15 // 5px for each handle + padding\n : this._label.offsetHeight / 2 / Math.cos(Math.PI / 2 - angle) + 15;\n const paddingVector = lineData.line.normalize().multiplyScalar(labelPadding);\n const paddingPoint =\n lineData.length > labelPadding * 2\n ? this._handles[1].screenPosition.clone().sub(paddingVector)\n : this._handles[1].screenPosition.clone().add(paddingVector);\n const transform = this.adjustLabelTransform(this._label, paddingPoint);\n\n this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`;\n }\n\n updateDOMColor() {\n this._line.style.backgroundColor = this._color;\n this._label.style.borderColor = this._color;\n }\n\n free() {\n this.removeEventListeners();\n\n this._handles.forEach(h => {\n this.remove(h);\n h.free();\n });\n this._handles = [];\n\n this._container.removeChild(this._line);\n this._container.removeChild(this._label);\n\n // mesh, geometry, material\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n this._geometry.dispose();\n this._geometry = null;\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n super.free();\n }\n\n getMeasurements() {\n return {\n distance: this._distance,\n units: this._units,\n };\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh) {\n this._targetMesh = targetMesh;\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition) {\n this._handles[0].worldPosition.copy(worldPosition);\n this._handles[1].worldPosition.copy(worldPosition);\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n\n get calibrationFactor() {\n return this._calibrationFactor;\n }\n\n set calibrationFactor(calibrationFactor) {\n this._calibrationFactor = calibrationFactor;\n this._units = 'mm';\n this.update();\n }\n };\n};\n\nexport { widgetsRuler };\nexport default widgetsRuler();\n","import { widgetsBase } from './widgets.base';\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\nimport CoreUtils from '../core/core.utils';\n\n/**\n * @module widgets/velocityTimeIntegral\n */\nconst widgetsVelocityTimeIntegral = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'VelocityTimeIntegral';\n\n // incoming parameters (+ ijk2LPS, lps2IJK, worldPosition)\n this._regions = params.ultrasoundRegions || []; // required\n if (this._regions.length < 1) {\n throw new Error('Ultrasound regions should not be empty!');\n }\n\n // outgoing values\n this._vMax = null; // Maximum Velocity (Vmax)\n this._vMean = null; // Mean Velocity (Vmean)\n this._gMax = null; // Maximum Gradient (Gmax)\n this._gMean = null; // Mean Gradient (Gmean)\n this._envTi = null; // Envelope Duration (Env.Ti)\n this._vti = null; // Velocity Time Integral (VTI)\n this._extraInfo = null; // extra information which is added to label\n\n this._initialized = false; // set to true onEnd if number of handles > 2\n this._isHandleActive = true;\n this._domHovered = false;\n this._initialRegion = this.getRegionByXY(\n this._regions,\n CoreUtils.worldToData(params.lps2IJK, params.worldPosition)\n );\n if (this._initialRegion === null) {\n throw new Error('Invalid initial UltraSound region!');\n }\n this._usPoints = [];\n\n // mesh stuff\n this._material = null;\n this._geometry = null;\n this._mesh = null;\n\n // dom stuff\n this._lines = [];\n this._label = null;\n\n // add handles\n this._handles = [];\n const WidgetsHandle = widgetsHandleFactory(three);\n\n let handle = new WidgetsHandle(targetMesh, controls, params);\n this.add(handle);\n this._handles.push(handle);\n\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\n this.add(this._moveHandle);\n this._moveHandle.hide();\n\n this.onMove = this.onMove.bind(this);\n this.onHover = this.onHover.bind(this);\n\n this.create();\n\n this.addEventListeners();\n }\n\n addEventListeners() {\n this._container.addEventListener('wheel', this.onMove);\n\n this._label.addEventListener('mouseenter', this.onHover);\n this._label.addEventListener('mouseleave', this.onHover);\n }\n\n removeEventListeners() {\n this._container.removeEventListener('wheel', this.onMove);\n\n this._label.removeEventListener('mouseenter', this.onHover);\n this._label.removeEventListener('mouseleave', this.onHover);\n }\n\n onHover(evt) {\n if (evt) {\n this.hoverDom(evt);\n }\n\n this.hoverMesh();\n\n let hovered = false;\n\n this._handles.forEach(elem => (hovered = hovered || elem.hovered));\n\n this._hovered = hovered || this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n }\n\n hoverMesh() {\n // check raycast intersection, if we want to hover on mesh instead of just css\n }\n\n hoverDom(evt) {\n this._domHovered = evt.type === 'mouseenter';\n }\n\n onStart(evt) {\n let active = false;\n\n this._moveHandle.onMove(evt, true);\n this._handles.forEach(elem => {\n elem.onStart(evt);\n active = active || elem.active;\n });\n\n this._active = active || this._domHovered;\n this._isHandleActive = active;\n\n if (this._domHovered) {\n this._controls.enabled = false;\n }\n\n this.update();\n }\n\n onMove(evt) {\n if (this.active) {\n const prevPosition = this._moveHandle.worldPosition.clone();\n\n this._moveHandle.onMove(evt, true);\n\n const shift = this._moveHandle.worldPosition.clone().sub(prevPosition);\n\n if (!this.isCorrectRegion(shift)) {\n this._moveHandle.worldPosition.copy(prevPosition);\n\n return;\n }\n\n if (!this._initialized) {\n this._handles[this._handles.length - 1].hovered = false;\n this._handles[this._handles.length - 1].active = false;\n this._handles[this._handles.length - 1].tracking = false;\n\n const WidgetsHandle = widgetsHandleFactory(three);\n let handle = new WidgetsHandle(this._targetMesh, this._controls, this._params);\n\n handle.hovered = true;\n handle.active = true;\n handle.tracking = true;\n this.add(handle);\n this._handles.push(handle);\n\n this.createLine();\n } else {\n this.updateDOMContent(true);\n\n if (\n !this._isHandleActive ||\n this._handles[this._handles.length - 2].active ||\n this._handles[this._handles.length - 1].active\n ) {\n this._handles.forEach(handle => {\n handle.worldPosition.add(shift);\n });\n this._isHandleActive = false;\n this._handles[this._handles.length - 2].active = false;\n this._handles[this._handles.length - 1].active = false;\n this._controls.enabled = false;\n }\n }\n this._dragged = true;\n } else {\n this.onHover(null);\n }\n\n this._handles.forEach(elem => {\n elem.onMove(evt);\n });\n if (this.active && this._handles.length > 2) {\n this.pushPopHandle();\n }\n this.update();\n }\n\n onEnd() {\n if (this._handles.length < 3) {\n return;\n }\n\n let active = false;\n\n this._handles.slice(0, -1).forEach(elem => {\n elem.onEnd();\n active = active || elem.active;\n });\n\n // Last Handle\n if (this._dragged || !this._handles[this._handles.length - 1].tracking) {\n this._handles[this._handles.length - 1].tracking = false;\n this._handles[this._handles.length - 1].onEnd();\n } else {\n this._handles[this._handles.length - 1].tracking = false;\n }\n\n if (this._dragged || !this._initialized) {\n this.finalize();\n this.updateDOMContent();\n }\n\n if (!this._dragged && this._active) {\n this._selected = !this._selected; // change state if there was no dragging\n this._handles.forEach(elem => (elem.selected = this._selected));\n }\n this._active = active || this._handles[this._handles.length - 1].active;\n this._isHandleActive = active;\n this._dragged = false;\n this._initialized = true;\n\n this.update();\n }\n\n isCorrectRegion(shift) {\n let isCorrect = true;\n\n this._handles.forEach((handle, index) => {\n if (handle.active || !this._isHandleActive) {\n isCorrect = isCorrect && this.checkHandle(index, shift);\n }\n });\n\n return isCorrect;\n }\n\n checkHandle(index, shift) {\n const region = this.getRegionByXY(\n this._regions,\n CoreUtils.worldToData(\n this._params.lps2IJK,\n this._handles[index].worldPosition.clone().add(shift)\n )\n );\n\n return (\n region !== null &&\n region === this._initialRegion &&\n this._regions[region].unitsY === 'cm/sec'\n );\n }\n\n create() {\n this.createMaterial();\n this.createDOM();\n }\n\n createMaterial() {\n this._material = new three.LineBasicMaterial();\n }\n\n createDOM() {\n this._label = document.createElement('div');\n this._label.className = 'widgets-label';\n\n const measurementsContainer = document.createElement('div');\n\n ['vmax', 'vmean', 'gmax', 'gmean', 'envti', 'vti', 'info'].forEach(name => {\n const div = document.createElement('div');\n\n div.className = name;\n measurementsContainer.appendChild(div);\n });\n this._label.appendChild(measurementsContainer);\n\n this._container.appendChild(this._label);\n\n this.updateDOMColor();\n }\n\n createLine() {\n const line = document.createElement('div');\n\n line.className = 'widgets-line';\n line.addEventListener('mouseenter', this.onHover);\n line.addEventListener('mouseleave', this.onHover);\n this._lines.push(line);\n this._container.appendChild(line);\n }\n\n pushPopHandle() {\n let handle0 = this._handles[this._handles.length - 3];\n let handle1 = this._handles[this._handles.length - 2];\n let newhandle = this._handles[this._handles.length - 1];\n let isOnLine = this.isPointOnLine(\n handle0.worldPosition,\n handle1.worldPosition,\n newhandle.worldPosition\n );\n\n if (isOnLine || handle0.screenPosition.distanceTo(newhandle.screenPosition) < 25) {\n this.remove(handle1);\n handle1.free();\n\n this._handles[this._handles.length - 2] = newhandle;\n this._handles.pop();\n\n this._container.removeChild(this._lines.pop());\n }\n\n return isOnLine;\n }\n\n isPointOnLine(pointA, pointB, pointToCheck) {\n return !new three.Vector3()\n .crossVectors(pointA.clone().sub(pointToCheck), pointB.clone().sub(pointToCheck))\n .length();\n }\n\n finalize() {\n if (this._initialized) {\n // remove old axis handles\n this._handles.splice(-2).forEach(elem => {\n this.remove(elem);\n elem.free();\n });\n }\n\n const pointF = CoreUtils.worldToData(this._params.lps2IJK, this._handles[0]._worldPosition);\n const pointL = CoreUtils.worldToData(\n this._params.lps2IJK,\n this._handles[this._handles.length - 1]._worldPosition\n );\n const region = this._regions[this.getRegionByXY(this._regions, pointF)];\n const axisY = region.y0 + (region.axisY || 0); // data coordinate equal to US region's zero Y coordinate\n\n const WidgetsHandle = widgetsHandleFactory(three);\n const params = { hideHandleMesh: this._params.hideHandleMesh || false };\n\n pointF.y = axisY;\n pointL.y = axisY;\n this._usPoints = [\n this.getPointInRegion(region, pointL),\n this.getPointInRegion(region, pointF),\n ];\n\n params.worldPosition = pointL.applyMatrix4(this._params.ijk2LPS); // projection of last point on Y axis\n this._handles.push(new WidgetsHandle(this._targetMesh, this._controls, params));\n this.add(this._handles[this._handles.length - 1]);\n\n params.worldPosition = pointF.applyMatrix4(this._params.ijk2LPS); // projection of first point on Y axis\n this._handles.push(new WidgetsHandle(this._targetMesh, this._controls, params));\n this.add(this._handles[this._handles.length - 1]);\n\n while (this._lines.length < this._handles.length) {\n this.createLine();\n }\n }\n\n update() {\n this.updateColor();\n\n // update handles\n this._handles.forEach(elem => elem.update());\n\n // mesh stuff\n this.updateMesh();\n\n // DOM stuff\n this.updateDOMColor();\n this.updateDOMPosition();\n }\n\n updateValues() {\n const region = this._regions[\n this.getRegionByXY(\n this._regions,\n CoreUtils.worldToData(this._params.lps2IJK, this._handles[0]._worldPosition)\n )\n ];\n const boundaries = {\n xMin: Number.POSITIVE_INFINITY,\n xMax: Number.NEGATIVE_INFINITY,\n yMin: Number.POSITIVE_INFINITY,\n yMax: Number.NEGATIVE_INFINITY,\n };\n let pVelocity;\n let pGradient;\n let pTime;\n let totalTime = 0;\n\n this._vMax = 0;\n this._vMean = 0;\n this._gMean = 0;\n this._usPoints.splice(2);\n this._handles.slice(0, -2).forEach(elem => {\n const usPosition = this.getPointInRegion(\n region,\n CoreUtils.worldToData(this._params.lps2IJK, elem._worldPosition)\n );\n const velocity = Math.abs(usPosition.y / 100);\n const gradient = 4 * Math.pow(velocity, 2);\n\n if (this._vMax === null || velocity > this._vMax) {\n this._vMax = velocity;\n }\n boundaries.xMin = Math.min(usPosition.x, boundaries.xMin);\n boundaries.xMax = Math.max(usPosition.x, boundaries.xMax);\n boundaries.yMin = Math.min(usPosition.y, boundaries.yMin);\n boundaries.yMax = Math.max(usPosition.y, boundaries.yMax);\n\n if (pTime) {\n const length = Math.abs(usPosition.x - pTime);\n\n totalTime += length;\n this._vMean += (length * (pVelocity + velocity)) / 2;\n this._gMean += (length * (pGradient + gradient)) / 2;\n }\n\n pVelocity = velocity;\n pGradient = gradient;\n pTime = usPosition.x;\n this._usPoints.push(usPosition);\n });\n\n this._gMax = 4 * Math.pow(this._vMax, 2);\n this._vMean /= totalTime;\n this._gMean /= totalTime;\n this._envTi = totalTime * 1000;\n this._vti = this.getArea(this._usPoints);\n\n this._shapeWarn =\n boundaries.xMax - boundaries.xMin !== totalTime ||\n boundaries.yMin < 0 !== boundaries.yMax < 0;\n }\n\n updateMesh() {\n if (this._mesh) {\n this.remove(this._mesh);\n }\n\n this._geometry = new three.Geometry();\n this._handles.forEach(elem => this._geometry.vertices.push(elem.worldPosition));\n this._geometry.vertices.push(this._handles[0].worldPosition);\n this._geometry.verticesNeedUpdate = true;\n\n this.updateMeshColor();\n\n this._mesh = new three.Line(this._geometry, this._material);\n this._mesh.visible = true;\n this.add(this._mesh);\n }\n\n updateMeshColor() {\n if (this._material) {\n this._material.color.set(this._color);\n }\n }\n\n updateDOMColor() {\n if (this._handles.length >= 2) {\n this._lines.forEach(elem => (elem.style.backgroundColor = this._color));\n }\n this._label.style.borderColor = this._color;\n }\n\n updateDOMContent(clear) {\n const vMaxContainer = this._label.querySelector('.vmax');\n const vMeanContainer = this._label.querySelector('.vmean');\n const gMaxContainer = this._label.querySelector('.gmax');\n const gMeanContainer = this._label.querySelector('.gmean');\n const envTiContainer = this._label.querySelector('.envti');\n const vtiContainer = this._label.querySelector('.vti');\n const infoContainer = this._label.querySelector('.info');\n\n if (clear) {\n vMaxContainer.innerHTML = '';\n vMeanContainer.innerHTML = '';\n gMaxContainer.innerHTML = '';\n gMeanContainer.innerHTML = '';\n envTiContainer.innerHTML = '';\n vtiContainer.innerHTML = '';\n infoContainer.innerHTML = '';\n\n return;\n }\n\n this.updateValues();\n\n if (this._shapeWarn && !this._label.hasAttribute('title')) {\n this._label.setAttribute('title', 'Values may be incorrect due to invalid curve.');\n this._label.style.color = this._colors.error;\n } else if (!this._shapeWarn && this._label.hasAttribute('title')) {\n this._label.removeAttribute('title');\n this._label.style.color = this._colors.text;\n }\n\n vMaxContainer.innerHTML = `Vmax: ${this._vMax.toFixed(2)} m/s`;\n vMeanContainer.innerHTML = `Vmean: ${this._vMean.toFixed(2)} m/s`;\n gMaxContainer.innerHTML = `Gmax: ${this._gMax.toFixed(2)} mmhg`;\n gMeanContainer.innerHTML = `Gmean: ${this._gMean.toFixed(2)} mmhg`;\n envTiContainer.innerHTML = `Env.Ti: ${this._envTi.toFixed(1)} ms`;\n vtiContainer.innerHTML = `VTI: ${this._vti.toFixed(2)} cm`;\n infoContainer.innerHTML = this._extraInfo;\n }\n\n updateDOMPosition() {\n if (this._handles.length < 2) {\n return;\n }\n // update lines and get coordinates of lowest handle\n let labelPosition = null;\n\n this._lines.forEach((elem, ind) => {\n const lineData = this.getLineData(\n this._handles[ind].screenPosition,\n this._handles[ind + 1 === this._handles.length ? 0 : ind + 1].screenPosition\n );\n\n elem.style.transform = `translate3D(${lineData.transformX}px, ${lineData.transformY}px, 0)\n rotate(${lineData.transformAngle}rad)`;\n elem.style.width = lineData.length + 'px';\n\n if (labelPosition === null || labelPosition.y < this._handles[ind].screenPosition.y) {\n labelPosition = this._handles[ind].screenPosition.clone();\n }\n });\n\n if (!this._initialized) {\n return;\n }\n\n // update label\n labelPosition.y += 15 + this._label.offsetHeight / 2;\n labelPosition = this.adjustLabelTransform(this._label, labelPosition);\n\n this._label.style.transform = `translate3D(${labelPosition.x}px, ${labelPosition.y}px, 0)`;\n }\n\n hideDOM() {\n this._handles.forEach(elem => elem.hideDOM());\n\n this._lines.forEach(elem => (elem.style.display = 'none'));\n this._label.style.display = 'none';\n }\n\n showDOM() {\n this._handles.forEach(elem => elem.showDOM());\n\n this._lines.forEach(elem => (elem.style.display = ''));\n this._label.style.display = '';\n }\n\n free() {\n this.removeEventListeners();\n\n this._handles.forEach(elem => {\n this.remove(elem);\n elem.free();\n });\n this._handles = [];\n this._usPoints = [];\n\n this.remove(this._moveHandle);\n this._moveHandle.free();\n this._moveHandle = null;\n\n this._lines.forEach(elem => {\n elem.removeEventListener('mouseenter', this.onHover);\n elem.removeEventListener('mouseleave', this.onHover);\n this._container.removeChild(elem);\n });\n this._lines = [];\n this._container.removeChild(this._label);\n\n // mesh, geometry, material\n if (this._mesh) {\n this.remove(this._mesh);\n this._mesh.geometry.dispose();\n this._mesh.geometry = null;\n this._mesh.material.dispose();\n this._mesh.material = null;\n this._mesh = null;\n }\n if (this._geometry) {\n this._geometry.dispose();\n this._geometry = null;\n }\n this._material.vertexShader = null;\n this._material.fragmentShader = null;\n this._material.uniforms = null;\n this._material.dispose();\n this._material = null;\n\n super.free();\n }\n\n getMeasurements() {\n return {\n vMax: this._vMax,\n vMean: this._vMean,\n gMax: this._gMax,\n gMean: this._gMean,\n envTi: this._envTi,\n vti: this._vti,\n };\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh) {\n this._targetMesh = targetMesh;\n this._handles.forEach(elem => (elem.targetMesh = targetMesh));\n this._moveHandle.targetMesh = targetMesh;\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition) {\n this._handles.forEach(elem => elem._worldPosition.copy(worldPosition));\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n\n get extraInfo() {\n return this._extraInfo;\n }\n\n set extraInfo(info) {\n this._extraInfo = info;\n this._label.querySelector('.info').innerHTML = info;\n }\n };\n};\n\nexport { widgetsVelocityTimeIntegral };\nexport default widgetsVelocityTimeIntegral();\n","import { widgetsBase } from './widgets.base';\nimport { widgetsHandle as widgetsHandleFactory } from './widgets.handle';\nimport ModelsVoxel from '../models/models.voxel';\nimport CoreUtils from '../core/core.utils';\n\n/**\n * @module widgets/voxelProbe\n */\nconst widgetsVoxelprobe = (three = window.THREE) => {\n if (three === undefined || three.Object3D === undefined) {\n return null;\n }\n\n const Constructor = widgetsBase(three);\n return class extends Constructor {\n constructor(targetMesh, controls, params = {}) {\n super(targetMesh, controls, params);\n\n this._widgetType = 'VoxelProbe';\n\n // incoming parameters (optional: worldPosition)\n this._stack = params.stack; // required\n\n this._container.style.cursor = 'pointer';\n this._controls.enabled = false; // controls should be disabled for widgets with a single handle\n this._initialized = false; // set to true onEnd\n this._active = true;\n this._moving = true;\n this._domHovered = false;\n\n // dom stuff\n this._label = null;\n\n // handle (represent voxel)\n const WidgetsHandle = widgetsHandleFactory(three);\n this._handle = new WidgetsHandle(targetMesh, controls, params);\n this.add(this._handle);\n\n this._moveHandle = new WidgetsHandle(targetMesh, controls, params);\n this.add(this._moveHandle);\n this._moveHandle.hide();\n\n this.create();\n\n // event listeners\n this.onMove = this.onMove.bind(this);\n this.onHover = this.onHover.bind(this);\n this.addEventListeners();\n }\n\n addEventListeners() {\n this._label.addEventListener('mouseenter', this.onHover);\n this._label.addEventListener('mouseleave', this.onHover);\n\n this._container.addEventListener('wheel', this.onMove);\n }\n\n removeEventListeners() {\n this._label.removeEventListener('mouseenter', this.onHover);\n this._label.removeEventListener('mouseleave', this.onHover);\n\n this._container.removeEventListener('wheel', this.onMove);\n }\n\n onStart(evt) {\n this._moveHandle.onMove(evt, true);\n this._handle.onStart(evt);\n\n this._active = this._handle.active || this._domHovered;\n\n if (this._domHovered) {\n this._moving = true;\n this._controls.enabled = false;\n }\n\n this.update();\n }\n\n onMove(evt) {\n if (this._active) {\n const prevPosition = this._moveHandle.worldPosition.clone();\n\n this._dragged = true;\n this._moveHandle.onMove(evt, true);\n\n if (this._moving) {\n this._handle.worldPosition.add(this._moveHandle.worldPosition.clone().sub(prevPosition));\n }\n } else {\n this.onHover(null);\n }\n\n this._handle.onMove(evt);\n\n this.update();\n }\n\n onEnd() {\n this._handle.onEnd();\n\n if (!this._dragged && this._active && this._initialized) {\n this._selected = !this._selected; // change state if there was no dragging\n this._handle.selected = this._selected;\n }\n\n this._initialized = true;\n this._active = this._handle.active;\n this._dragged = false;\n this._moving = false;\n\n this.update();\n }\n\n onHover(evt) {\n if (evt) {\n this.hoverDom(evt);\n }\n\n this._hovered = this._handle.hovered || this._domHovered;\n this._container.style.cursor = this._hovered ? 'pointer' : 'default';\n }\n\n hoverDom(evt) {\n this._domHovered = evt.type === 'mouseenter';\n }\n\n create() {\n this.createVoxel();\n this.createDOM();\n }\n\n createVoxel() {\n this._voxel = new ModelsVoxel();\n this._voxel.id = this.id;\n }\n\n createDOM() {\n this._label = document.createElement('div');\n this._label.className = 'widgets-label';\n\n // measurements\n let measurementsContainer = document.createElement('div');\n // LPS\n let lpsContainer = document.createElement('div');\n lpsContainer.className = 'lpsPosition';\n measurementsContainer.appendChild(lpsContainer);\n // IJK\n let ijkContainer = document.createElement('div');\n ijkContainer.className = 'ijkPosition';\n measurementsContainer.appendChild(ijkContainer);\n // Value\n let valueContainer = document.createElement('div');\n valueContainer.className = 'value';\n measurementsContainer.appendChild(valueContainer);\n\n this._label.appendChild(measurementsContainer);\n\n this._container.appendChild(this._label);\n\n this.updateDOMColor();\n }\n\n update() {\n this.updateColor();\n\n this._handle.update();\n this._worldPosition.copy(this._handle.worldPosition);\n\n this.updateVoxel(); // set data coordinates && value\n\n this.updateDOM();\n }\n\n updateVoxel() {\n this._voxel.worldCoordinates = this._worldPosition;\n this._voxel.dataCoordinates = CoreUtils.worldToData(this._stack.lps2IJK, this._worldPosition);\n\n // update value\n let value = CoreUtils.getPixelData(this._stack, this._voxel.dataCoordinates);\n\n this._voxel.value =\n value === null || this._stack.numberOfChannels > 1\n ? 'NA' // coordinates outside the image or RGB\n : CoreUtils.rescaleSlopeIntercept(\n value,\n this._stack.rescaleSlope,\n this._stack.rescaleIntercept\n ).toFixed();\n }\n\n updateDOM() {\n const rasContainer = this._label.querySelector('.lpsPosition');\n const ijkContainer = this._label.querySelector('.ijkPosition');\n const valueContainer = this._label.querySelector('.value');\n\n rasContainer.innerHTML = `LPS: \n ${this._voxel.worldCoordinates.x.toFixed(2)} :\n ${this._voxel.worldCoordinates.y.toFixed(2)} :\n ${this._voxel.worldCoordinates.z.toFixed(2)}`;\n ijkContainer.innerHTML = `IJK: \n ${this._voxel.dataCoordinates.x} :\n ${this._voxel.dataCoordinates.y} :\n ${this._voxel.dataCoordinates.z}`;\n valueContainer.innerHTML = `Value: ${this._voxel.value}`;\n\n this.updateDOMColor();\n\n const transform = this.adjustLabelTransform(this._label, this._handle.screenPosition, true);\n\n this._label.style.transform = `translate3D(${transform.x}px, ${transform.y}px, 0)`;\n }\n\n updateDOMColor() {\n this._label.style.borderColor = this._color;\n }\n\n free() {\n this.removeEventListeners();\n\n this.remove(this._handle);\n this._handle.free();\n this._handle = null;\n this.remove(this._moveHandle);\n this._moveHandle.free();\n this._moveHandle = null;\n\n this._container.removeChild(this._label);\n\n this._stack = null;\n this._voxel = null;\n\n super.free();\n }\n\n hideDOM() {\n this._label.style.display = 'none';\n this._handle.hideDOM();\n }\n\n showDOM() {\n this._label.style.display = '';\n this._handle.showDOM();\n }\n\n get targetMesh() {\n return this._targetMesh;\n }\n\n set targetMesh(targetMesh) {\n this._targetMesh = targetMesh;\n this._handle.targetMesh = targetMesh;\n this._moveHandle.targetMesh = targetMesh;\n this.update();\n }\n\n get worldPosition() {\n return this._worldPosition;\n }\n\n set worldPosition(worldPosition) {\n this._handle.worldPosition.copy(worldPosition);\n this._moveHandle.worldPosition.copy(worldPosition);\n this._worldPosition.copy(worldPosition);\n this.update();\n }\n\n get active() {\n return this._active;\n }\n\n set active(active) {\n this._active = active;\n this._controls.enabled = !this._active;\n\n this.update();\n }\n };\n};\n\nexport { widgetsVoxelprobe };\nexport default widgetsVoxelprobe();\n"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index eedebb3..aafbd40 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ami.js", - "version": "0.32.1", + "version": "0.32.2", "main": "build/ami.js", "keywords": [ "ami",