f7cloud_client/apps/whiteboard/js/image-blob-reduce.esm-D7YfjmiK.chunk.mjs.map
root 8b6a0139db f7cloud_client
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 22:59:26 +00:00

1 line
172 KiB
Plaintext

{"version":3,"file":"image-blob-reduce.esm-D7YfjmiK.chunk.mjs","sources":["../node_modules/image-blob-reduce/dist/image-blob-reduce.esm.mjs"],"sourcesContent":["\n/*! image-blob-reduce 3.0.1 https://github.com/nodeca/image-blob-reduce @license MIT */\nvar assign$1 = function assign(to) {\n var from;\n\n for (var s = 1; s < arguments.length; s++) {\n from = Object(arguments[s]);\n\n for (var key in from) {\n if (Object.prototype.hasOwnProperty.call(from, key)) to[key] = from[key];\n }\n }\n\n return to;\n};\n\n\nfunction pick(from, props) {\n var to = {};\n\n props.forEach(function (key) {\n if (Object.prototype.hasOwnProperty.call(from, key)) to[key] = from[key];\n });\n\n return to;\n}\n\n\nfunction pick_pica_resize_options(from) {\n return pick(from, [\n 'alpha',\n 'unsharpAmount',\n 'unsharpRadius',\n 'unsharpThreshold',\n 'cancelToken'\n ]);\n}\n\n\nvar pick_1 = pick;\nvar pick_pica_resize_options_1 = pick_pica_resize_options;\n\nvar utils = {\n\tassign: assign$1,\n\tpick: pick_1,\n\tpick_pica_resize_options: pick_pica_resize_options_1\n};\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nfunction commonjsRequire (target) {\n\tthrow new Error('Could not dynamically require \"' + target + '\". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');\n}\n\n/*!\n\npica\nhttps://github.com/nodeca/pica\n\n*/\n\nvar pica = createCommonjsModule(function (module, exports) {\n(function(f){{module.exports=f();}})(function(){return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof commonjsRequire&&commonjsRequire;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t);}return n[i].exports}for(var u=\"function\"==typeof commonjsRequire&&commonjsRequire,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(_dereq_,module,exports){\n\nvar inherits = _dereq_('inherits');\n\nvar Multimath = _dereq_('multimath');\n\nvar mm_unsharp_mask = _dereq_('./mm_unsharp_mask');\n\nvar mm_resize = _dereq_('./mm_resize');\n\nfunction MathLib(requested_features) {\n var __requested_features = requested_features || [];\n\n var features = {\n js: __requested_features.indexOf('js') >= 0,\n wasm: __requested_features.indexOf('wasm') >= 0\n };\n Multimath.call(this, features);\n this.features = {\n js: features.js,\n wasm: features.wasm && this.has_wasm()\n };\n this.use(mm_unsharp_mask);\n this.use(mm_resize);\n}\n\ninherits(MathLib, Multimath);\n\nMathLib.prototype.resizeAndUnsharp = function resizeAndUnsharp(options, cache) {\n var result = this.resize(options, cache);\n\n if (options.unsharpAmount) {\n this.unsharp_mask(result, options.toWidth, options.toHeight, options.unsharpAmount, options.unsharpRadius, options.unsharpThreshold);\n }\n\n return result;\n};\n\nmodule.exports = MathLib;\n\n},{\"./mm_resize\":4,\"./mm_unsharp_mask\":9,\"inherits\":19,\"multimath\":20}],2:[function(_dereq_,module,exports){\n//var FIXED_FRAC_BITS = 14;\n\nfunction clampTo8(i) {\n return i < 0 ? 0 : i > 255 ? 255 : i;\n} // Convolve image in horizontal directions and transpose output. In theory,\n// transpose allow:\n//\n// - use the same convolver for both passes (this fails due different\n// types of input array and temporary buffer)\n// - making vertical pass by horisonltal lines inprove CPU cache use.\n//\n// But in real life this doesn't work :)\n//\n\n\nfunction convolveHorizontally(src, dest, srcW, srcH, destW, filters) {\n var r, g, b, a;\n var filterPtr, filterShift, filterSize;\n var srcPtr, srcY, destX, filterVal;\n var srcOffset = 0,\n destOffset = 0; // For each row\n\n for (srcY = 0; srcY < srcH; srcY++) {\n filterPtr = 0; // Apply precomputed filters to each destination row point\n\n for (destX = 0; destX < destW; destX++) {\n // Get the filter that determines the current output pixel.\n filterShift = filters[filterPtr++];\n filterSize = filters[filterPtr++];\n srcPtr = srcOffset + filterShift * 4 | 0;\n r = g = b = a = 0; // Apply the filter to the row to get the destination pixel r, g, b, a\n\n for (; filterSize > 0; filterSize--) {\n filterVal = filters[filterPtr++]; // Use reverse order to workaround deopts in old v8 (node v.10)\n // Big thanks to @mraleph (Vyacheslav Egorov) for the tip.\n\n a = a + filterVal * src[srcPtr + 3] | 0;\n b = b + filterVal * src[srcPtr + 2] | 0;\n g = g + filterVal * src[srcPtr + 1] | 0;\n r = r + filterVal * src[srcPtr] | 0;\n srcPtr = srcPtr + 4 | 0;\n } // Bring this value back in range. All of the filter scaling factors\n // are in fixed point with FIXED_FRAC_BITS bits of fractional part.\n //\n // (!) Add 1/2 of value before clamping to get proper rounding. In other\n // case brightness loss will be noticeable if you resize image with white\n // border and place it on white background.\n //\n\n\n dest[destOffset + 3] = clampTo8(a + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 2] = clampTo8(b + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 1] = clampTo8(g + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset] = clampTo8(r + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n destOffset = destOffset + srcH * 4 | 0;\n }\n\n destOffset = (srcY + 1) * 4 | 0;\n srcOffset = (srcY + 1) * srcW * 4 | 0;\n }\n} // Technically, convolvers are the same. But input array and temporary\n// buffer can be of different type (especially, in old browsers). So,\n// keep code in separate functions to avoid deoptimizations & speed loss.\n\n\nfunction convolveVertically(src, dest, srcW, srcH, destW, filters) {\n var r, g, b, a;\n var filterPtr, filterShift, filterSize;\n var srcPtr, srcY, destX, filterVal;\n var srcOffset = 0,\n destOffset = 0; // For each row\n\n for (srcY = 0; srcY < srcH; srcY++) {\n filterPtr = 0; // Apply precomputed filters to each destination row point\n\n for (destX = 0; destX < destW; destX++) {\n // Get the filter that determines the current output pixel.\n filterShift = filters[filterPtr++];\n filterSize = filters[filterPtr++];\n srcPtr = srcOffset + filterShift * 4 | 0;\n r = g = b = a = 0; // Apply the filter to the row to get the destination pixel r, g, b, a\n\n for (; filterSize > 0; filterSize--) {\n filterVal = filters[filterPtr++]; // Use reverse order to workaround deopts in old v8 (node v.10)\n // Big thanks to @mraleph (Vyacheslav Egorov) for the tip.\n\n a = a + filterVal * src[srcPtr + 3] | 0;\n b = b + filterVal * src[srcPtr + 2] | 0;\n g = g + filterVal * src[srcPtr + 1] | 0;\n r = r + filterVal * src[srcPtr] | 0;\n srcPtr = srcPtr + 4 | 0;\n } // Bring this value back in range. All of the filter scaling factors\n // are in fixed point with FIXED_FRAC_BITS bits of fractional part.\n //\n // (!) Add 1/2 of value before clamping to get proper rounding. In other\n // case brightness loss will be noticeable if you resize image with white\n // border and place it on white background.\n //\n\n\n dest[destOffset + 3] = clampTo8(a + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 2] = clampTo8(b + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset + 1] = clampTo8(g + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n dest[destOffset] = clampTo8(r + (1 << 13) >> 14\n /*FIXED_FRAC_BITS*/\n );\n destOffset = destOffset + srcH * 4 | 0;\n }\n\n destOffset = (srcY + 1) * 4 | 0;\n srcOffset = (srcY + 1) * srcW * 4 | 0;\n }\n}\n\nmodule.exports = {\n convolveHorizontally: convolveHorizontally,\n convolveVertically: convolveVertically\n};\n\n},{}],3:[function(_dereq_,module,exports){\n/* eslint-disable max-len */\n\nmodule.exports = 'AGFzbQEAAAAADAZkeWxpbmsAAAAAAAEXA2AAAGAGf39/f39/AGAHf39/f39/fwACDwEDZW52Bm1lbW9yeQIAAAMEAwABAgYGAX8AQQALB1cFEV9fd2FzbV9jYWxsX2N0b3JzAAAIY29udm9sdmUAAQpjb252b2x2ZUhWAAIMX19kc29faGFuZGxlAwAYX193YXNtX2FwcGx5X2RhdGFfcmVsb2NzAAAK7AMDAwABC8YDAQ9/AkAgA0UNACAERQ0AA0AgDCENQQAhE0EAIQcDQCAHQQJqIQYCfyAHQQF0IAVqIgcuAQIiFEUEQEGAwAAhCEGAwAAhCUGAwAAhCkGAwAAhCyAGDAELIBIgBy4BAGohCEEAIQsgFCEHQQAhDiAGIQlBACEPQQAhEANAIAUgCUEBdGouAQAiESAAIAhBAnRqKAIAIgpBGHZsIBBqIRAgCkH/AXEgEWwgC2ohCyAKQRB2Qf8BcSARbCAPaiEPIApBCHZB/wFxIBFsIA5qIQ4gCEEBaiEIIAlBAWohCSAHQQFrIgcNAAsgC0GAQGshCCAOQYBAayEJIA9BgEBrIQogEEGAQGshCyAGIBRqCyEHIAEgDUECdGogCUEOdSIGQf8BIAZB/wFIGyIGQQAgBkEAShtBCHRBgP4DcSAKQQ51IgZB/wEgBkH/AUgbIgZBACAGQQBKG0EQdEGAgPwHcSALQQ51IgZB/wEgBkH/AUgbIgZBACAGQQBKG0EYdHJyIAhBDnUiBkH/ASAGQf8BSBsiBkEAIAZBAEobcjYCACADIA1qIQ0gE0EBaiITIARHDQALIAxBAWoiDCACbCESIAMgDEcNAAsLCx4AQQAgAiADIAQgBSAAEAEgAkEAIAQgBSAGIAEQAQs=';\n\n},{}],4:[function(_dereq_,module,exports){\n\nmodule.exports = {\n name: 'resize',\n fn: _dereq_('./resize'),\n wasm_fn: _dereq_('./resize_wasm'),\n wasm_src: _dereq_('./convolve_wasm_base64')\n};\n\n},{\"./convolve_wasm_base64\":3,\"./resize\":5,\"./resize_wasm\":8}],5:[function(_dereq_,module,exports){\n\nvar createFilters = _dereq_('./resize_filter_gen');\n\nvar convolveHorizontally = _dereq_('./convolve').convolveHorizontally;\n\nvar convolveVertically = _dereq_('./convolve').convolveVertically;\n\nfunction resetAlpha(dst, width, height) {\n var ptr = 3,\n len = width * height * 4 | 0;\n\n while (ptr < len) {\n dst[ptr] = 0xFF;\n ptr = ptr + 4 | 0;\n }\n}\n\nmodule.exports = function resize(options) {\n var src = options.src;\n var srcW = options.width;\n var srcH = options.height;\n var destW = options.toWidth;\n var destH = options.toHeight;\n var scaleX = options.scaleX || options.toWidth / options.width;\n var scaleY = options.scaleY || options.toHeight / options.height;\n var offsetX = options.offsetX || 0;\n var offsetY = options.offsetY || 0;\n var dest = options.dest || new Uint8Array(destW * destH * 4);\n var quality = typeof options.quality === 'undefined' ? 3 : options.quality;\n var alpha = options.alpha || false;\n var filtersX = createFilters(quality, srcW, destW, scaleX, offsetX),\n filtersY = createFilters(quality, srcH, destH, scaleY, offsetY);\n var tmp = new Uint8Array(destW * srcH * 4); // To use single function we need src & tmp of the same type.\n // But src can be CanvasPixelArray, and tmp - Uint8Array. So, keep\n // vertical and horizontal passes separately to avoid deoptimization.\n\n convolveHorizontally(src, tmp, srcW, srcH, destW, filtersX);\n convolveVertically(tmp, dest, srcH, destW, destH, filtersY); // That's faster than doing checks in convolver.\n // !!! Note, canvas data is not premultipled. We don't need other\n // alpha corrections.\n\n if (!alpha) resetAlpha(dest, destW, destH);\n return dest;\n};\n\n},{\"./convolve\":2,\"./resize_filter_gen\":6}],6:[function(_dereq_,module,exports){\n\nvar FILTER_INFO = _dereq_('./resize_filter_info'); // Precision of fixed FP values\n\n\nvar FIXED_FRAC_BITS = 14;\n\nfunction toFixedPoint(num) {\n return Math.round(num * ((1 << FIXED_FRAC_BITS) - 1));\n}\n\nmodule.exports = function resizeFilterGen(quality, srcSize, destSize, scale, offset) {\n var filterFunction = FILTER_INFO[quality].filter;\n var scaleInverted = 1.0 / scale;\n var scaleClamped = Math.min(1.0, scale); // For upscale\n // Filter window (averaging interval), scaled to src image\n\n var srcWindow = FILTER_INFO[quality].win / scaleClamped;\n var destPixel, srcPixel, srcFirst, srcLast, filterElementSize, floatFilter, fxpFilter, total, pxl, idx, floatVal, filterTotal, filterVal;\n var leftNotEmpty, rightNotEmpty, filterShift, filterSize;\n var maxFilterElementSize = Math.floor((srcWindow + 1) * 2);\n var packedFilter = new Int16Array((maxFilterElementSize + 2) * destSize);\n var packedFilterPtr = 0;\n var slowCopy = !packedFilter.subarray || !packedFilter.set; // For each destination pixel calculate source range and built filter values\n\n for (destPixel = 0; destPixel < destSize; destPixel++) {\n // Scaling should be done relative to central pixel point\n srcPixel = (destPixel + 0.5) * scaleInverted + offset;\n srcFirst = Math.max(0, Math.floor(srcPixel - srcWindow));\n srcLast = Math.min(srcSize - 1, Math.ceil(srcPixel + srcWindow));\n filterElementSize = srcLast - srcFirst + 1;\n floatFilter = new Float32Array(filterElementSize);\n fxpFilter = new Int16Array(filterElementSize);\n total = 0.0; // Fill filter values for calculated range\n\n for (pxl = srcFirst, idx = 0; pxl <= srcLast; pxl++, idx++) {\n floatVal = filterFunction((pxl + 0.5 - srcPixel) * scaleClamped);\n total += floatVal;\n floatFilter[idx] = floatVal;\n } // Normalize filter, convert to fixed point and accumulate conversion error\n\n\n filterTotal = 0;\n\n for (idx = 0; idx < floatFilter.length; idx++) {\n filterVal = floatFilter[idx] / total;\n filterTotal += filterVal;\n fxpFilter[idx] = toFixedPoint(filterVal);\n } // Compensate normalization error, to minimize brightness drift\n\n\n fxpFilter[destSize >> 1] += toFixedPoint(1.0 - filterTotal); //\n // Now pack filter to useable form\n //\n // 1. Trim heading and tailing zero values, and compensate shitf/length\n // 2. Put all to single array in this format:\n //\n // [ pos shift, data length, value1, value2, value3, ... ]\n //\n\n leftNotEmpty = 0;\n\n while (leftNotEmpty < fxpFilter.length && fxpFilter[leftNotEmpty] === 0) {\n leftNotEmpty++;\n }\n\n if (leftNotEmpty < fxpFilter.length) {\n rightNotEmpty = fxpFilter.length - 1;\n\n while (rightNotEmpty > 0 && fxpFilter[rightNotEmpty] === 0) {\n rightNotEmpty--;\n }\n\n filterShift = srcFirst + leftNotEmpty;\n filterSize = rightNotEmpty - leftNotEmpty + 1;\n packedFilter[packedFilterPtr++] = filterShift; // shift\n\n packedFilter[packedFilterPtr++] = filterSize; // size\n\n if (!slowCopy) {\n packedFilter.set(fxpFilter.subarray(leftNotEmpty, rightNotEmpty + 1), packedFilterPtr);\n packedFilterPtr += filterSize;\n } else {\n // fallback for old IE < 11, without subarray/set methods\n for (idx = leftNotEmpty; idx <= rightNotEmpty; idx++) {\n packedFilter[packedFilterPtr++] = fxpFilter[idx];\n }\n }\n } else {\n // zero data, write header only\n packedFilter[packedFilterPtr++] = 0; // shift\n\n packedFilter[packedFilterPtr++] = 0; // size\n }\n }\n\n return packedFilter;\n};\n\n},{\"./resize_filter_info\":7}],7:[function(_dereq_,module,exports){\n\nmodule.exports = [{\n // Nearest neibor (Box)\n win: 0.5,\n filter: function filter(x) {\n return x >= -0.5 && x < 0.5 ? 1.0 : 0.0;\n }\n}, {\n // Hamming\n win: 1.0,\n filter: function filter(x) {\n if (x <= -1.0 || x >= 1.0) {\n return 0.0;\n }\n\n if (x > -1.19209290E-07 && x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * (0.54 + 0.46 * Math.cos(xpi / 1.0));\n }\n}, {\n // Lanczos, win = 2\n win: 2.0,\n filter: function filter(x) {\n if (x <= -2.0 || x >= 2.0) {\n return 0.0;\n }\n\n if (x > -1.19209290E-07 && x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * Math.sin(xpi / 2.0) / (xpi / 2.0);\n }\n}, {\n // Lanczos, win = 3\n win: 3.0,\n filter: function filter(x) {\n if (x <= -3.0 || x >= 3.0) {\n return 0.0;\n }\n\n if (x > -1.19209290E-07 && x < 1.19209290E-07) {\n return 1.0;\n }\n\n var xpi = x * Math.PI;\n return Math.sin(xpi) / xpi * Math.sin(xpi / 3.0) / (xpi / 3.0);\n }\n}];\n\n},{}],8:[function(_dereq_,module,exports){\n\nvar createFilters = _dereq_('./resize_filter_gen');\n\nfunction resetAlpha(dst, width, height) {\n var ptr = 3,\n len = width * height * 4 | 0;\n\n while (ptr < len) {\n dst[ptr] = 0xFF;\n ptr = ptr + 4 | 0;\n }\n}\n\nfunction asUint8Array(src) {\n return new Uint8Array(src.buffer, 0, src.byteLength);\n}\n\nvar IS_LE = true; // should not crash everything on module load in old browsers\n\ntry {\n IS_LE = new Uint32Array(new Uint8Array([1, 0, 0, 0]).buffer)[0] === 1;\n} catch (__) {}\n\nfunction copyInt16asLE(src, target, target_offset) {\n if (IS_LE) {\n target.set(asUint8Array(src), target_offset);\n return;\n }\n\n for (var ptr = target_offset, i = 0; i < src.length; i++) {\n var data = src[i];\n target[ptr++] = data & 0xFF;\n target[ptr++] = data >> 8 & 0xFF;\n }\n}\n\nmodule.exports = function resize_wasm(options) {\n var src = options.src;\n var srcW = options.width;\n var srcH = options.height;\n var destW = options.toWidth;\n var destH = options.toHeight;\n var scaleX = options.scaleX || options.toWidth / options.width;\n var scaleY = options.scaleY || options.toHeight / options.height;\n var offsetX = options.offsetX || 0.0;\n var offsetY = options.offsetY || 0.0;\n var dest = options.dest || new Uint8Array(destW * destH * 4);\n var quality = typeof options.quality === 'undefined' ? 3 : options.quality;\n var alpha = options.alpha || false;\n var filtersX = createFilters(quality, srcW, destW, scaleX, offsetX),\n filtersY = createFilters(quality, srcH, destH, scaleY, offsetY); // destination is 0 too.\n\n var src_offset = 0; // buffer between convolve passes\n\n var tmp_offset = this.__align(src_offset + Math.max(src.byteLength, dest.byteLength));\n\n var filtersX_offset = this.__align(tmp_offset + srcH * destW * 4);\n\n var filtersY_offset = this.__align(filtersX_offset + filtersX.byteLength);\n\n var alloc_bytes = filtersY_offset + filtersY.byteLength;\n\n var instance = this.__instance('resize', alloc_bytes); //\n // Fill memory block with data to process\n //\n\n\n var mem = new Uint8Array(this.__memory.buffer);\n var mem32 = new Uint32Array(this.__memory.buffer); // 32-bit copy is much faster in chrome\n\n var src32 = new Uint32Array(src.buffer);\n mem32.set(src32); // We should guarantee LE bytes order. Filters are not big, so\n // speed difference is not significant vs direct .set()\n\n copyInt16asLE(filtersX, mem, filtersX_offset);\n copyInt16asLE(filtersY, mem, filtersY_offset); //\n // Now call webassembly method\n // emsdk does method names with '_'\n\n var fn = instance.exports.convolveHV || instance.exports._convolveHV;\n fn(filtersX_offset, filtersY_offset, tmp_offset, srcW, srcH, destW, destH); //\n // Copy data back to typed array\n //\n // 32-bit copy is much faster in chrome\n\n var dest32 = new Uint32Array(dest.buffer);\n dest32.set(new Uint32Array(this.__memory.buffer, 0, destH * destW)); // That's faster than doing checks in convolver.\n // !!! Note, canvas data is not premultipled. We don't need other\n // alpha corrections.\n\n if (!alpha) resetAlpha(dest, destW, destH);\n return dest;\n};\n\n},{\"./resize_filter_gen\":6}],9:[function(_dereq_,module,exports){\n\nmodule.exports = {\n name: 'unsharp_mask',\n fn: _dereq_('./unsharp_mask'),\n wasm_fn: _dereq_('./unsharp_mask_wasm'),\n wasm_src: _dereq_('./unsharp_mask_wasm_base64')\n};\n\n},{\"./unsharp_mask\":10,\"./unsharp_mask_wasm\":11,\"./unsharp_mask_wasm_base64\":12}],10:[function(_dereq_,module,exports){\n\nvar glur_mono16 = _dereq_('glur/mono16');\n\nfunction hsv_v16(img, width, height) {\n var size = width * height;\n var out = new Uint16Array(size);\n var r, g, b, max;\n\n for (var i = 0; i < size; i++) {\n r = img[4 * i];\n g = img[4 * i + 1];\n b = img[4 * i + 2];\n max = r >= g && r >= b ? r : g >= b && g >= r ? g : b;\n out[i] = max << 8;\n }\n\n return out;\n}\n\nmodule.exports = function unsharp(img, width, height, amount, radius, threshold) {\n var v1, v2, vmul;\n var diff, iTimes4;\n\n if (amount === 0 || radius < 0.5) {\n return;\n }\n\n if (radius > 2.0) {\n radius = 2.0;\n }\n\n var brightness = hsv_v16(img, width, height);\n var blured = new Uint16Array(brightness); // copy, because blur modify src\n\n glur_mono16(blured, width, height, radius);\n var amountFp = amount / 100 * 0x1000 + 0.5 | 0;\n var thresholdFp = threshold << 8;\n var size = width * height;\n /* eslint-disable indent */\n\n for (var i = 0; i < size; i++) {\n v1 = brightness[i];\n diff = v1 - blured[i];\n\n if (Math.abs(diff) >= thresholdFp) {\n // add unsharp mask to the brightness channel\n v2 = v1 + (amountFp * diff + 0x800 >> 12); // Both v1 and v2 are within [0.0 .. 255.0] (0000-FF00) range, never going into\n // [255.003 .. 255.996] (FF01-FFFF). This allows to round this value as (x+.5)|0\n // later without overflowing.\n\n v2 = v2 > 0xff00 ? 0xff00 : v2;\n v2 = v2 < 0x0000 ? 0x0000 : v2; // Avoid division by 0. V=0 means rgb(0,0,0), unsharp with unsharpAmount>0 cannot\n // change this value (because diff between colors gets inflated), so no need to verify correctness.\n\n v1 = v1 !== 0 ? v1 : 1; // Multiplying V in HSV model by a constant is equivalent to multiplying each component\n // in RGB by the same constant (same for HSL), see also:\n // https://beesbuzz.biz/code/16-hsv-color-transforms\n\n vmul = (v2 << 12) / v1 | 0; // Result will be in [0..255] range because:\n // - all numbers are positive\n // - r,g,b <= (v1/256)\n // - r,g,b,(v1/256),(v2/256) <= 255\n // So highest this number can get is X*255/X+0.5=255.5 which is < 256 and rounds down.\n\n iTimes4 = i * 4;\n img[iTimes4] = img[iTimes4] * vmul + 0x800 >> 12; // R\n\n img[iTimes4 + 1] = img[iTimes4 + 1] * vmul + 0x800 >> 12; // G\n\n img[iTimes4 + 2] = img[iTimes4 + 2] * vmul + 0x800 >> 12; // B\n }\n }\n};\n\n},{\"glur/mono16\":18}],11:[function(_dereq_,module,exports){\n\nmodule.exports = function unsharp(img, width, height, amount, radius, threshold) {\n if (amount === 0 || radius < 0.5) {\n return;\n }\n\n if (radius > 2.0) {\n radius = 2.0;\n }\n\n var pixels = width * height;\n var img_bytes_cnt = pixels * 4;\n var hsv_bytes_cnt = pixels * 2;\n var blur_bytes_cnt = pixels * 2;\n var blur_line_byte_cnt = Math.max(width, height) * 4; // float32 array\n\n var blur_coeffs_byte_cnt = 8 * 4; // float32 array\n\n var img_offset = 0;\n var hsv_offset = img_bytes_cnt;\n var blur_offset = hsv_offset + hsv_bytes_cnt;\n var blur_tmp_offset = blur_offset + blur_bytes_cnt;\n var blur_line_offset = blur_tmp_offset + blur_bytes_cnt;\n var blur_coeffs_offset = blur_line_offset + blur_line_byte_cnt;\n\n var instance = this.__instance('unsharp_mask', img_bytes_cnt + hsv_bytes_cnt + blur_bytes_cnt * 2 + blur_line_byte_cnt + blur_coeffs_byte_cnt, {\n exp: Math.exp\n }); // 32-bit copy is much faster in chrome\n\n\n var img32 = new Uint32Array(img.buffer);\n var mem32 = new Uint32Array(this.__memory.buffer);\n mem32.set(img32); // HSL\n\n var fn = instance.exports.hsv_v16 || instance.exports._hsv_v16;\n fn(img_offset, hsv_offset, width, height); // BLUR\n\n fn = instance.exports.blurMono16 || instance.exports._blurMono16;\n fn(hsv_offset, blur_offset, blur_tmp_offset, blur_line_offset, blur_coeffs_offset, width, height, radius); // UNSHARP\n\n fn = instance.exports.unsharp || instance.exports._unsharp;\n fn(img_offset, img_offset, hsv_offset, blur_offset, width, height, amount, threshold); // 32-bit copy is much faster in chrome\n\n img32.set(new Uint32Array(this.__memory.buffer, 0, pixels));\n};\n\n},{}],12:[function(_dereq_,module,exports){\n/* eslint-disable max-len */\n\nmodule.exports = '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';\n\n},{}],13:[function(_dereq_,module,exports){\n\nvar GC_INTERVAL = 100;\n\nfunction Pool(create, idle) {\n this.create = create;\n this.available = [];\n this.acquired = {};\n this.lastId = 1;\n this.timeoutId = 0;\n this.idle = idle || 2000;\n}\n\nPool.prototype.acquire = function () {\n var _this = this;\n\n var resource;\n\n if (this.available.length !== 0) {\n resource = this.available.pop();\n } else {\n resource = this.create();\n resource.id = this.lastId++;\n\n resource.release = function () {\n return _this.release(resource);\n };\n }\n\n this.acquired[resource.id] = resource;\n return resource;\n};\n\nPool.prototype.release = function (resource) {\n var _this2 = this;\n\n delete this.acquired[resource.id];\n resource.lastUsed = Date.now();\n this.available.push(resource);\n\n if (this.timeoutId === 0) {\n this.timeoutId = setTimeout(function () {\n return _this2.gc();\n }, GC_INTERVAL);\n }\n};\n\nPool.prototype.gc = function () {\n var _this3 = this;\n\n var now = Date.now();\n this.available = this.available.filter(function (resource) {\n if (now - resource.lastUsed > _this3.idle) {\n resource.destroy();\n return false;\n }\n\n return true;\n });\n\n if (this.available.length !== 0) {\n this.timeoutId = setTimeout(function () {\n return _this3.gc();\n }, GC_INTERVAL);\n } else {\n this.timeoutId = 0;\n }\n};\n\nmodule.exports = Pool;\n\n},{}],14:[function(_dereq_,module,exports){\n// min size = 1 can consume large amount of memory\n\nvar MIN_INNER_TILE_SIZE = 2;\n\nmodule.exports = function createStages(fromWidth, fromHeight, toWidth, toHeight, srcTileSize, destTileBorder) {\n var scaleX = toWidth / fromWidth;\n var scaleY = toHeight / fromHeight; // derived from createRegions equation:\n // innerTileWidth = pixelFloor(srcTileSize * scaleX) - 2 * destTileBorder;\n\n var minScale = (2 * destTileBorder + MIN_INNER_TILE_SIZE + 1) / srcTileSize; // refuse to scale image multiple times by less than twice each time,\n // it could only happen because of invalid options\n\n if (minScale > 0.5) return [[toWidth, toHeight]];\n var stageCount = Math.ceil(Math.log(Math.min(scaleX, scaleY)) / Math.log(minScale)); // no additional resizes are necessary,\n // stageCount can be zero or be negative when enlarging the image\n\n if (stageCount <= 1) return [[toWidth, toHeight]];\n var result = [];\n\n for (var i = 0; i < stageCount; i++) {\n var width = Math.round(Math.pow(Math.pow(fromWidth, stageCount - i - 1) * Math.pow(toWidth, i + 1), 1 / stageCount));\n var height = Math.round(Math.pow(Math.pow(fromHeight, stageCount - i - 1) * Math.pow(toHeight, i + 1), 1 / stageCount));\n result.push([width, height]);\n }\n\n return result;\n};\n\n},{}],15:[function(_dereq_,module,exports){\n/*\n * pixelFloor and pixelCeil are modified versions of Math.floor and Math.ceil\n * functions which take into account floating point arithmetic errors.\n * Those errors can cause undesired increments/decrements of sizes and offsets:\n * Math.ceil(36 / (36 / 500)) = 501\n * pixelCeil(36 / (36 / 500)) = 500\n */\n\nvar PIXEL_EPSILON = 1e-5;\n\nfunction pixelFloor(x) {\n var nearest = Math.round(x);\n\n if (Math.abs(x - nearest) < PIXEL_EPSILON) {\n return nearest;\n }\n\n return Math.floor(x);\n}\n\nfunction pixelCeil(x) {\n var nearest = Math.round(x);\n\n if (Math.abs(x - nearest) < PIXEL_EPSILON) {\n return nearest;\n }\n\n return Math.ceil(x);\n}\n\nmodule.exports = function createRegions(options) {\n var scaleX = options.toWidth / options.width;\n var scaleY = options.toHeight / options.height;\n var innerTileWidth = pixelFloor(options.srcTileSize * scaleX) - 2 * options.destTileBorder;\n var innerTileHeight = pixelFloor(options.srcTileSize * scaleY) - 2 * options.destTileBorder; // prevent infinite loop, this should never happen\n\n if (innerTileWidth < 1 || innerTileHeight < 1) {\n throw new Error('Internal error in pica: target tile width/height is too small.');\n }\n\n var x, y;\n var innerX, innerY, toTileWidth, toTileHeight;\n var tiles = [];\n var tile; // we go top-to-down instead of left-to-right to make image displayed from top to\n // doesn in the browser\n\n for (innerY = 0; innerY < options.toHeight; innerY += innerTileHeight) {\n for (innerX = 0; innerX < options.toWidth; innerX += innerTileWidth) {\n x = innerX - options.destTileBorder;\n\n if (x < 0) {\n x = 0;\n }\n\n toTileWidth = innerX + innerTileWidth + options.destTileBorder - x;\n\n if (x + toTileWidth >= options.toWidth) {\n toTileWidth = options.toWidth - x;\n }\n\n y = innerY - options.destTileBorder;\n\n if (y < 0) {\n y = 0;\n }\n\n toTileHeight = innerY + innerTileHeight + options.destTileBorder - y;\n\n if (y + toTileHeight >= options.toHeight) {\n toTileHeight = options.toHeight - y;\n }\n\n tile = {\n toX: x,\n toY: y,\n toWidth: toTileWidth,\n toHeight: toTileHeight,\n toInnerX: innerX,\n toInnerY: innerY,\n toInnerWidth: innerTileWidth,\n toInnerHeight: innerTileHeight,\n offsetX: x / scaleX - pixelFloor(x / scaleX),\n offsetY: y / scaleY - pixelFloor(y / scaleY),\n scaleX: scaleX,\n scaleY: scaleY,\n x: pixelFloor(x / scaleX),\n y: pixelFloor(y / scaleY),\n width: pixelCeil(toTileWidth / scaleX),\n height: pixelCeil(toTileHeight / scaleY)\n };\n tiles.push(tile);\n }\n }\n\n return tiles;\n};\n\n},{}],16:[function(_dereq_,module,exports){\n\nfunction objClass(obj) {\n return Object.prototype.toString.call(obj);\n}\n\nmodule.exports.isCanvas = function isCanvas(element) {\n var cname = objClass(element);\n return cname === '[object HTMLCanvasElement]'\n /* browser */\n || cname === '[object OffscreenCanvas]' || cname === '[object Canvas]'\n /* node-canvas */\n ;\n};\n\nmodule.exports.isImage = function isImage(element) {\n return objClass(element) === '[object HTMLImageElement]';\n};\n\nmodule.exports.isImageBitmap = function isImageBitmap(element) {\n return objClass(element) === '[object ImageBitmap]';\n};\n\nmodule.exports.limiter = function limiter(concurrency) {\n var active = 0,\n queue = [];\n\n function roll() {\n if (active < concurrency && queue.length) {\n active++;\n queue.shift()();\n }\n }\n\n return function limit(fn) {\n return new Promise(function (resolve, reject) {\n queue.push(function () {\n fn().then(function (result) {\n resolve(result);\n active--;\n roll();\n }, function (err) {\n reject(err);\n active--;\n roll();\n });\n });\n roll();\n });\n };\n};\n\nmodule.exports.cib_quality_name = function cib_quality_name(num) {\n switch (num) {\n case 0:\n return 'pixelated';\n\n case 1:\n return 'low';\n\n case 2:\n return 'medium';\n }\n\n return 'high';\n};\n\nmodule.exports.cib_support = function cib_support(createCanvas) {\n return Promise.resolve().then(function () {\n if (typeof createImageBitmap === 'undefined') {\n return false;\n }\n\n var c = createCanvas(100, 100);\n return createImageBitmap(c, 0, 0, 100, 100, {\n resizeWidth: 10,\n resizeHeight: 10,\n resizeQuality: 'high'\n }).then(function (bitmap) {\n var status = bitmap.width === 10; // Branch below is filtered on upper level. We do not call resize\n // detection for basic ImageBitmap.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap\n // old Crome 51 has ImageBitmap without .close(). Then this code\n // will throw and return 'false' as expected.\n //\n\n bitmap.close();\n c = null;\n return status;\n });\n })[\"catch\"](function () {\n return false;\n });\n};\n\nmodule.exports.worker_offscreen_canvas_support = function worker_offscreen_canvas_support() {\n return new Promise(function (resolve, reject) {\n if (typeof OffscreenCanvas === 'undefined') {\n // if OffscreenCanvas is present, we assume browser supports Worker and built-in Promise as well\n resolve(false);\n return;\n }\n\n function workerPayload(self) {\n if (typeof createImageBitmap === 'undefined') {\n self.postMessage(false);\n return;\n }\n\n Promise.resolve().then(function () {\n var canvas = new OffscreenCanvas(10, 10); // test that 2d context can be used in worker\n\n var ctx = canvas.getContext('2d');\n ctx.rect(0, 0, 1, 1); // test that cib can be used to return image bitmap from worker\n\n return createImageBitmap(canvas, 0, 0, 1, 1);\n }).then(function () {\n return self.postMessage(true);\n }, function () {\n return self.postMessage(false);\n });\n }\n\n var code = btoa(\"(\".concat(workerPayload.toString(), \")(self);\"));\n var w = new Worker(\"data:text/javascript;base64,\".concat(code));\n\n w.onmessage = function (ev) {\n return resolve(ev.data);\n };\n\n w.onerror = reject;\n }).then(function (result) {\n return result;\n }, function () {\n return false;\n });\n}; // Check if canvas.getContext('2d').getImageData can be used,\n// FireFox randomizes the output of that function in `privacy.resistFingerprinting` mode\n\n\nmodule.exports.can_use_canvas = function can_use_canvas(createCanvas) {\n var usable = false;\n\n try {\n var canvas = createCanvas(2, 1);\n var ctx = canvas.getContext('2d');\n var d = ctx.createImageData(2, 1);\n d.data[0] = 12;\n d.data[1] = 23;\n d.data[2] = 34;\n d.data[3] = 255;\n d.data[4] = 45;\n d.data[5] = 56;\n d.data[6] = 67;\n d.data[7] = 255;\n ctx.putImageData(d, 0, 0);\n d = null;\n d = ctx.getImageData(0, 0, 2, 1);\n\n if (d.data[0] === 12 && d.data[1] === 23 && d.data[2] === 34 && d.data[3] === 255 && d.data[4] === 45 && d.data[5] === 56 && d.data[6] === 67 && d.data[7] === 255) {\n usable = true;\n }\n } catch (err) {}\n\n return usable;\n}; // Check if createImageBitmap(img, sx, sy, sw, sh) signature works correctly\n// with JPEG images oriented with Exif;\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n// TODO: remove after it's fixed in chrome for at least 2 releases\n\n\nmodule.exports.cib_can_use_region = function cib_can_use_region() {\n return new Promise(function (resolve) {\n if (typeof createImageBitmap === 'undefined') {\n resolve(false);\n return;\n }\n\n var image = new Image();\n image.src = 'data:image/jpeg;base64,' + '/9j/4QBiRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAYAAAEaAAUAAAABAAAASgEbAAUAA' + 'AABAAAAUgEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAAAAABIAAAAAQAAAEgAAAAB/9' + 'sAQwAEAwMEAwMEBAMEBQQEBQYKBwYGBgYNCQoICg8NEBAPDQ8OERMYFBESFxIODxUcFRc' + 'ZGRsbGxAUHR8dGh8YGhsa/9sAQwEEBQUGBQYMBwcMGhEPERoaGhoaGhoaGhoaGhoaGhoa' + 'GhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoa/8IAEQgAAQACAwERAAIRAQMRA' + 'f/EABQAAQAAAAAAAAAAAAAAAAAAAAf/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAA' + 'IQAxAAAAF/P//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAQUCf//EABQRAQAAAAA' + 'AAAAAAAAAAAAAAAD/2gAIAQMBAT8Bf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIB' + 'AT8Bf//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEABj8Cf//EABQQAQAAAAAAAAAAA' + 'AAAAAAAAAD/2gAIAQEAAT8hf//aAAwDAQACAAMAAAAQH//EABQRAQAAAAAAAAAAAAAAAA' + 'AAAAD/2gAIAQMBAT8Qf//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQIBAT8Qf//EABQ' + 'QAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAT8Qf//Z';\n\n image.onload = function () {\n createImageBitmap(image, 0, 0, image.width, image.height).then(function (bitmap) {\n if (bitmap.width === image.width && bitmap.height === image.height) {\n resolve(true);\n } else {\n resolve(false);\n }\n }, function () {\n return resolve(false);\n });\n };\n\n image.onerror = function () {\n return resolve(false);\n };\n });\n};\n\n},{}],17:[function(_dereq_,module,exports){\n\nmodule.exports = function () {\n var MathLib = _dereq_('./mathlib');\n\n var mathLib;\n /* eslint-disable no-undef */\n\n onmessage = function onmessage(ev) {\n var tileOpts = ev.data.opts;\n var returnBitmap = false;\n\n if (!tileOpts.src && tileOpts.srcBitmap) {\n var canvas = new OffscreenCanvas(tileOpts.width, tileOpts.height);\n var ctx = canvas.getContext('2d', {\n alpha: Boolean(tileOpts.alpha)\n });\n ctx.drawImage(tileOpts.srcBitmap, 0, 0);\n tileOpts.src = ctx.getImageData(0, 0, tileOpts.width, tileOpts.height).data;\n canvas.width = canvas.height = 0;\n canvas = null;\n tileOpts.srcBitmap.close();\n tileOpts.srcBitmap = null;\n returnBitmap = true;\n }\n\n if (!mathLib) mathLib = new MathLib(ev.data.features); // Use multimath's sync auto-init. Avoid Promise use in old browsers,\n // because polyfills are not propagated to webworker.\n\n var data = mathLib.resizeAndUnsharp(tileOpts);\n\n if (returnBitmap) {\n var toImageData = new ImageData(new Uint8ClampedArray(data), tileOpts.toWidth, tileOpts.toHeight);\n\n var _canvas = new OffscreenCanvas(tileOpts.toWidth, tileOpts.toHeight);\n\n var _ctx = _canvas.getContext('2d', {\n alpha: Boolean(tileOpts.alpha)\n });\n\n _ctx.putImageData(toImageData, 0, 0);\n\n createImageBitmap(_canvas).then(function (bitmap) {\n postMessage({\n bitmap: bitmap\n }, [bitmap]);\n });\n } else {\n postMessage({\n data: data\n }, [data.buffer]);\n }\n };\n};\n\n},{\"./mathlib\":1}],18:[function(_dereq_,module,exports){\n// Calculate Gaussian blur of an image using IIR filter\n// The method is taken from Intel's white paper and code example attached to it:\n// https://software.intel.com/en-us/articles/iir-gaussian-blur-filter\n// -implementation-using-intel-advanced-vector-extensions\n\nvar a0, a1, a2, a3, b1, b2, left_corner, right_corner;\n\nfunction gaussCoef(sigma) {\n if (sigma < 0.5) {\n sigma = 0.5;\n }\n\n var a = Math.exp(0.726 * 0.726) / sigma,\n g1 = Math.exp(-a),\n g2 = Math.exp(-2 * a),\n k = (1 - g1) * (1 - g1) / (1 + 2 * a * g1 - g2);\n\n a0 = k;\n a1 = k * (a - 1) * g1;\n a2 = k * (a + 1) * g1;\n a3 = -k * g2;\n b1 = 2 * g1;\n b2 = -g2;\n left_corner = (a0 + a1) / (1 - b1 - b2);\n right_corner = (a2 + a3) / (1 - b1 - b2);\n\n // Attempt to force type to FP32.\n return new Float32Array([ a0, a1, a2, a3, b1, b2, left_corner, right_corner ]);\n}\n\nfunction convolveMono16(src, out, line, coeff, width, height) {\n // takes src image and writes the blurred and transposed result into out\n\n var prev_src, curr_src, curr_out, prev_out, prev_prev_out;\n var src_index, out_index, line_index;\n var i, j;\n var coeff_a0, coeff_a1, coeff_b1, coeff_b2;\n\n for (i = 0; i < height; i++) {\n src_index = i * width;\n out_index = i;\n line_index = 0;\n\n // left to right\n prev_src = src[src_index];\n prev_prev_out = prev_src * coeff[6];\n prev_out = prev_prev_out;\n\n coeff_a0 = coeff[0];\n coeff_a1 = coeff[1];\n coeff_b1 = coeff[4];\n coeff_b2 = coeff[5];\n\n for (j = 0; j < width; j++) {\n curr_src = src[src_index];\n\n curr_out = curr_src * coeff_a0 +\n prev_src * coeff_a1 +\n prev_out * coeff_b1 +\n prev_prev_out * coeff_b2;\n\n prev_prev_out = prev_out;\n prev_out = curr_out;\n prev_src = curr_src;\n\n line[line_index] = prev_out;\n line_index++;\n src_index++;\n }\n\n src_index--;\n line_index--;\n out_index += height * (width - 1);\n\n // right to left\n prev_src = src[src_index];\n prev_prev_out = prev_src * coeff[7];\n prev_out = prev_prev_out;\n curr_src = prev_src;\n\n coeff_a0 = coeff[2];\n coeff_a1 = coeff[3];\n\n for (j = width - 1; j >= 0; j--) {\n curr_out = curr_src * coeff_a0 +\n prev_src * coeff_a1 +\n prev_out * coeff_b1 +\n prev_prev_out * coeff_b2;\n\n prev_prev_out = prev_out;\n prev_out = curr_out;\n\n prev_src = curr_src;\n curr_src = src[src_index];\n\n out[out_index] = line[line_index] + prev_out;\n\n src_index--;\n line_index--;\n out_index -= height;\n }\n }\n}\n\n\nfunction blurMono16(src, width, height, radius) {\n // Quick exit on zero radius\n if (!radius) { return; }\n\n var out = new Uint16Array(src.length),\n tmp_line = new Float32Array(Math.max(width, height));\n\n var coeff = gaussCoef(radius);\n\n convolveMono16(src, out, tmp_line, coeff, width, height);\n convolveMono16(out, src, tmp_line, coeff, height, width);\n}\n\nmodule.exports = blurMono16;\n\n},{}],19:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (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 };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (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}\n\n},{}],20:[function(_dereq_,module,exports){\n\n\nvar assign = _dereq_('object-assign');\nvar base64decode = _dereq_('./lib/base64decode');\nvar hasWebAssembly = _dereq_('./lib/wa_detect');\n\n\nvar DEFAULT_OPTIONS = {\n js: true,\n wasm: true\n};\n\n\nfunction MultiMath(options) {\n if (!(this instanceof MultiMath)) return new MultiMath(options);\n\n var opts = assign({}, DEFAULT_OPTIONS, options || {});\n\n this.options = opts;\n\n this.__cache = {};\n\n this.__init_promise = null;\n this.__modules = opts.modules || {};\n this.__memory = null;\n this.__wasm = {};\n\n this.__isLE = ((new Uint32Array((new Uint8Array([ 1, 0, 0, 0 ])).buffer))[0] === 1);\n\n if (!this.options.js && !this.options.wasm) {\n throw new Error('mathlib: at least \"js\" or \"wasm\" should be enabled');\n }\n}\n\n\nMultiMath.prototype.has_wasm = hasWebAssembly;\n\n\nMultiMath.prototype.use = function (module) {\n this.__modules[module.name] = module;\n\n // Pin the best possible implementation\n if (this.options.wasm && this.has_wasm() && module.wasm_fn) {\n this[module.name] = module.wasm_fn;\n } else {\n this[module.name] = module.fn;\n }\n\n return this;\n};\n\n\nMultiMath.prototype.init = function () {\n if (this.__init_promise) return this.__init_promise;\n\n if (!this.options.js && this.options.wasm && !this.has_wasm()) {\n return Promise.reject(new Error('mathlib: only \"wasm\" was enabled, but it\\'s not supported'));\n }\n\n var self = this;\n\n this.__init_promise = Promise.all(Object.keys(self.__modules).map(function (name) {\n var module = self.__modules[name];\n\n if (!self.options.wasm || !self.has_wasm() || !module.wasm_fn) return null;\n\n // If already compiled - exit\n if (self.__wasm[name]) return null;\n\n // Compile wasm source\n return WebAssembly.compile(self.__base64decode(module.wasm_src))\n .then(function (m) { self.__wasm[name] = m; });\n }))\n .then(function () { return self; });\n\n return this.__init_promise;\n};\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Methods below are for internal use from plugins\n\n\n// Simple decode base64 to typed array. Useful to load embedded webassembly\n// code. You probably don't need to call this method directly.\n//\nMultiMath.prototype.__base64decode = base64decode;\n\n\n// Increase current memory to include specified number of bytes. Do nothing if\n// size is already ok. You probably don't need to call this method directly,\n// because it will be invoked from `.__instance()`.\n//\nMultiMath.prototype.__reallocate = function mem_grow_to(bytes) {\n if (!this.__memory) {\n this.__memory = new WebAssembly.Memory({\n initial: Math.ceil(bytes / (64 * 1024))\n });\n return this.__memory;\n }\n\n var mem_size = this.__memory.buffer.byteLength;\n\n if (mem_size < bytes) {\n this.__memory.grow(Math.ceil((bytes - mem_size) / (64 * 1024)));\n }\n\n return this.__memory;\n};\n\n\n// Returns instantinated webassembly item by name, with specified memory size\n// and environment.\n// - use cache if available\n// - do sync module init, if async init was not called earlier\n// - allocate memory if not enougth\n// - can export functions to webassembly via \"env_extra\",\n// for example, { exp: Math.exp }\n//\nMultiMath.prototype.__instance = function instance(name, memsize, env_extra) {\n if (memsize) this.__reallocate(memsize);\n\n // If .init() was not called, do sync compile\n if (!this.__wasm[name]) {\n var module = this.__modules[name];\n this.__wasm[name] = new WebAssembly.Module(this.__base64decode(module.wasm_src));\n }\n\n if (!this.__cache[name]) {\n var env_base = {\n memoryBase: 0,\n memory: this.__memory,\n tableBase: 0,\n table: new WebAssembly.Table({ initial: 0, element: 'anyfunc' })\n };\n\n this.__cache[name] = new WebAssembly.Instance(this.__wasm[name], {\n env: assign(env_base, env_extra || {})\n });\n }\n\n return this.__cache[name];\n};\n\n\n// Helper to calculate memory aligh for pointers. Webassembly does not require\n// this, but you may wish to experiment. Default base = 8;\n//\nMultiMath.prototype.__align = function align(number, base) {\n base = base || 8;\n var reminder = number % base;\n return number + (reminder ? base - reminder : 0);\n};\n\n\nmodule.exports = MultiMath;\n\n},{\"./lib/base64decode\":21,\"./lib/wa_detect\":22,\"object-assign\":23}],21:[function(_dereq_,module,exports){\n\n\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n\nmodule.exports = function base64decode(str) {\n var input = str.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length;\n\n var out = new Uint8Array((max * 3) >> 2);\n\n // Collect by 6*4 bits (3 bytes)\n\n var bits = 0;\n var ptr = 0;\n\n for (var idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n out[ptr++] = (bits >> 16) & 0xFF;\n out[ptr++] = (bits >> 8) & 0xFF;\n out[ptr++] = bits & 0xFF;\n }\n\n bits = (bits << 6) | BASE64_MAP.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n var tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n out[ptr++] = (bits >> 16) & 0xFF;\n out[ptr++] = (bits >> 8) & 0xFF;\n out[ptr++] = bits & 0xFF;\n } else if (tailbits === 18) {\n out[ptr++] = (bits >> 10) & 0xFF;\n out[ptr++] = (bits >> 2) & 0xFF;\n } else if (tailbits === 12) {\n out[ptr++] = (bits >> 4) & 0xFF;\n }\n\n return out;\n};\n\n},{}],22:[function(_dereq_,module,exports){\n\n\nvar wa;\n\n\nmodule.exports = function hasWebAssembly() {\n // use cache if called before;\n if (typeof wa !== 'undefined') return wa;\n\n wa = false;\n\n if (typeof WebAssembly === 'undefined') return wa;\n\n // If WebAssenbly is disabled, code can throw on compile\n try {\n // https://github.com/brion/min-wasm-fail/blob/master/min-wasm-fail.in.js\n // Additional check that WA internals are correct\n\n /* eslint-disable comma-spacing, max-len */\n var bin = new Uint8Array([ 0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11 ]);\n var module = new WebAssembly.Module(bin);\n var instance = new WebAssembly.Instance(module, {});\n\n // test storing to and loading from a non-zero location via a parameter.\n // Safari on iOS 11.2.5 returns 0 unexpectedly at non-zero locations\n if (instance.exports.test(4) !== 0) wa = true;\n\n return wa;\n } catch (__) {}\n\n return wa;\n};\n\n},{}],23:[function(_dereq_,module,exports){\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n},{}],24:[function(_dereq_,module,exports){\nvar bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\n\nvar stringify = JSON.stringify;\n\nmodule.exports = function (fn, options) {\n var wkey;\n var cacheKeys = Object.keys(cache);\n\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n var exp = cache[key].exports;\n // Using babel as a transpiler to use esmodule, the export will always\n // be an object with the default export as a property of it. To ensure\n // the existing api and babel esmodule exports are both supported we\n // check for both\n if (exp === fn || exp && exp.default === fn) {\n wkey = key;\n break;\n }\n }\n\n if (!wkey) {\n wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n var wcache = {};\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n wcache[key] = key;\n }\n sources[wkey] = [\n 'function(require,module,exports){' + fn + '(self); }',\n wcache\n ];\n }\n var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n\n var scache = {}; scache[wkey] = wkey;\n sources[skey] = [\n 'function(require,module,exports){' +\n // try to call default if defined to also support babel esmodule exports\n 'var f = require(' + stringify(wkey) + ');' +\n '(f.default ? f.default : f)(self);' +\n '}',\n scache\n ];\n\n var workerSources = {};\n resolveSources(skey);\n\n function resolveSources(key) {\n workerSources[key] = true;\n\n for (var depPath in sources[key][1]) {\n var depKey = sources[key][1][depPath];\n if (!workerSources[depKey]) {\n resolveSources(depKey);\n }\n }\n }\n\n var src = '(' + bundleFn + ')({'\n + Object.keys(workerSources).map(function (key) {\n return stringify(key) + ':['\n + sources[key][0]\n + ',' + stringify(sources[key][1]) + ']'\n ;\n }).join(',')\n + '},{},[' + stringify(skey) + '])'\n ;\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n var blob = new Blob([src], { type: 'text/javascript' });\n if (options && options.bare) { return blob; }\n var workerUrl = URL.createObjectURL(blob);\n var worker = new Worker(workerUrl);\n worker.objectURL = workerUrl;\n return worker;\n};\n\n},{}],\"/index.js\":[function(_dereq_,module,exports){\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nvar assign = _dereq_('object-assign');\n\nvar webworkify = _dereq_('webworkify');\n\nvar MathLib = _dereq_('./lib/mathlib');\n\nvar Pool = _dereq_('./lib/pool');\n\nvar utils = _dereq_('./lib/utils');\n\nvar worker = _dereq_('./lib/worker');\n\nvar createStages = _dereq_('./lib/stepper');\n\nvar createRegions = _dereq_('./lib/tiler'); // Deduplicate pools & limiters with the same configs\n// when user creates multiple pica instances.\n\n\nvar singletones = {};\nvar NEED_SAFARI_FIX = false;\n\ntry {\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\n NEED_SAFARI_FIX = navigator.userAgent.indexOf('Safari') >= 0;\n }\n} catch (e) {}\n\nvar concurrency = 1;\n\nif (typeof navigator !== 'undefined') {\n concurrency = Math.min(navigator.hardwareConcurrency || 1, 4);\n}\n\nvar DEFAULT_PICA_OPTS = {\n tile: 1024,\n concurrency: concurrency,\n features: ['js', 'wasm', 'ww'],\n idle: 2000,\n createCanvas: function createCanvas(width, height) {\n var tmpCanvas = document.createElement('canvas');\n tmpCanvas.width = width;\n tmpCanvas.height = height;\n return tmpCanvas;\n }\n};\nvar DEFAULT_RESIZE_OPTS = {\n quality: 3,\n alpha: false,\n unsharpAmount: 0,\n unsharpRadius: 0.0,\n unsharpThreshold: 0\n};\nvar CAN_NEW_IMAGE_DATA = false;\nvar CAN_CREATE_IMAGE_BITMAP = false;\nvar CAN_USE_CANVAS_GET_IMAGE_DATA = false;\nvar CAN_USE_OFFSCREEN_CANVAS = false;\nvar CAN_USE_CIB_REGION_FOR_IMAGE = false;\n\nfunction workerFabric() {\n return {\n value: webworkify(worker),\n destroy: function destroy() {\n this.value.terminate();\n\n if (typeof window !== 'undefined') {\n var url = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n if (url && url.revokeObjectURL && this.value.objectURL) {\n url.revokeObjectURL(this.value.objectURL);\n }\n }\n }\n };\n} ////////////////////////////////////////////////////////////////////////////////\n// API methods\n\n\nfunction Pica(options) {\n if (!(this instanceof Pica)) return new Pica(options);\n this.options = assign({}, DEFAULT_PICA_OPTS, options || {});\n var limiter_key = \"lk_\".concat(this.options.concurrency); // Share limiters to avoid multiple parallel workers when user creates\n // multiple pica instances.\n\n this.__limit = singletones[limiter_key] || utils.limiter(this.options.concurrency);\n if (!singletones[limiter_key]) singletones[limiter_key] = this.__limit; // List of supported features, according to options & browser/node.js\n\n this.features = {\n js: false,\n // pure JS implementation, can be disabled for testing\n wasm: false,\n // webassembly implementation for heavy functions\n cib: false,\n // resize via createImageBitmap (only FF at this moment)\n ww: false // webworkers\n\n };\n this.__workersPool = null; // Store requested features for webworkers\n\n this.__requested_features = [];\n this.__mathlib = null;\n}\n\nPica.prototype.init = function () {\n var _this = this;\n\n if (this.__initPromise) return this.__initPromise; // Test if we can create ImageData without canvas and memory copy\n\n if (typeof ImageData !== 'undefined' && typeof Uint8ClampedArray !== 'undefined') {\n try {\n /* eslint-disable no-new */\n new ImageData(new Uint8ClampedArray(400), 10, 10);\n CAN_NEW_IMAGE_DATA = true;\n } catch (__) {}\n } // ImageBitmap can be effective in 2 places:\n //\n // 1. Threaded jpeg unpack (basic)\n // 2. Built-in resize (blocked due problem in chrome, see issue #89)\n //\n // For basic use we also need ImageBitmap wo support .close() method,\n // see https://developer.mozilla.org/ru/docs/Web/API/ImageBitmap\n\n\n if (typeof ImageBitmap !== 'undefined') {\n if (ImageBitmap.prototype && ImageBitmap.prototype.close) {\n CAN_CREATE_IMAGE_BITMAP = true;\n } else {\n this.debug('ImageBitmap does not support .close(), disabled');\n }\n }\n\n var features = this.options.features.slice();\n\n if (features.indexOf('all') >= 0) {\n features = ['cib', 'wasm', 'js', 'ww'];\n }\n\n this.__requested_features = features;\n this.__mathlib = new MathLib(features); // Check WebWorker support if requested\n\n if (features.indexOf('ww') >= 0) {\n if (typeof window !== 'undefined' && 'Worker' in window) {\n // IE <= 11 don't allow to create webworkers from string. We should check it.\n // https://connect.microsoft.com/IE/feedback/details/801810/web-workers-from-blob-urls-in-ie-10-and-11\n try {\n var wkr = _dereq_('webworkify')(function () {});\n\n wkr.terminate();\n this.features.ww = true; // pool uniqueness depends on pool config + webworker config\n\n var wpool_key = \"wp_\".concat(JSON.stringify(this.options));\n\n if (singletones[wpool_key]) {\n this.__workersPool = singletones[wpool_key];\n } else {\n this.__workersPool = new Pool(workerFabric, this.options.idle);\n singletones[wpool_key] = this.__workersPool;\n }\n } catch (__) {}\n }\n }\n\n var initMath = this.__mathlib.init().then(function (mathlib) {\n // Copy detected features\n assign(_this.features, mathlib.features);\n });\n\n var checkCibResize;\n\n if (!CAN_CREATE_IMAGE_BITMAP) {\n checkCibResize = Promise.resolve(false);\n } else {\n checkCibResize = utils.cib_support(this.options.createCanvas).then(function (status) {\n if (_this.features.cib && features.indexOf('cib') < 0) {\n _this.debug('createImageBitmap() resize supported, but disabled by config');\n\n return;\n }\n\n if (features.indexOf('cib') >= 0) _this.features.cib = status;\n });\n }\n\n CAN_USE_CANVAS_GET_IMAGE_DATA = utils.can_use_canvas(this.options.createCanvas);\n var checkOffscreenCanvas;\n\n if (CAN_CREATE_IMAGE_BITMAP && CAN_NEW_IMAGE_DATA && features.indexOf('ww') !== -1) {\n checkOffscreenCanvas = utils.worker_offscreen_canvas_support();\n } else {\n checkOffscreenCanvas = Promise.resolve(false);\n }\n\n checkOffscreenCanvas = checkOffscreenCanvas.then(function (result) {\n CAN_USE_OFFSCREEN_CANVAS = result;\n }); // we use createImageBitmap to crop image data and pass it to workers,\n // so need to check whether function works correctly;\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n\n var checkCibRegion = utils.cib_can_use_region().then(function (result) {\n CAN_USE_CIB_REGION_FOR_IMAGE = result;\n }); // Init math lib. That's async because can load some\n\n this.__initPromise = Promise.all([initMath, checkCibResize, checkOffscreenCanvas, checkCibRegion]).then(function () {\n return _this;\n });\n return this.__initPromise;\n}; // Call resizer in webworker or locally, depending on config\n\n\nPica.prototype.__invokeResize = function (tileOpts, opts) {\n var _this2 = this;\n\n // Share cache between calls:\n //\n // - wasm instance\n // - wasm memory object\n //\n opts.__mathCache = opts.__mathCache || {};\n return Promise.resolve().then(function () {\n if (!_this2.features.ww) {\n // not possible to have ImageBitmap here if user disabled WW\n return {\n data: _this2.__mathlib.resizeAndUnsharp(tileOpts, opts.__mathCache)\n };\n }\n\n return new Promise(function (resolve, reject) {\n var w = _this2.__workersPool.acquire();\n\n if (opts.cancelToken) opts.cancelToken[\"catch\"](function (err) {\n return reject(err);\n });\n\n w.value.onmessage = function (ev) {\n w.release();\n if (ev.data.err) reject(ev.data.err);else resolve(ev.data);\n };\n\n var transfer = [];\n if (tileOpts.src) transfer.push(tileOpts.src.buffer);\n if (tileOpts.srcBitmap) transfer.push(tileOpts.srcBitmap);\n w.value.postMessage({\n opts: tileOpts,\n features: _this2.__requested_features,\n preload: {\n wasm_nodule: _this2.__mathlib.__\n }\n }, transfer);\n });\n });\n}; // this function can return promise if createImageBitmap is used\n\n\nPica.prototype.__extractTileData = function (tile, from, opts, stageEnv, extractTo) {\n if (this.features.ww && CAN_USE_OFFSCREEN_CANVAS && ( // createImageBitmap doesn't work for images (Image, ImageBitmap) with Exif orientation in Chrome,\n // can use canvas because canvas doesn't have orientation;\n // see https://bugs.chromium.org/p/chromium/issues/detail?id=1220671\n utils.isCanvas(from) || CAN_USE_CIB_REGION_FOR_IMAGE)) {\n this.debug('Create tile for OffscreenCanvas');\n return createImageBitmap(stageEnv.srcImageBitmap || from, tile.x, tile.y, tile.width, tile.height).then(function (bitmap) {\n extractTo.srcBitmap = bitmap;\n return extractTo;\n });\n } // Extract tile RGBA buffer, depending on input type\n\n\n if (utils.isCanvas(from)) {\n if (!stageEnv.srcCtx) stageEnv.srcCtx = from.getContext('2d', {\n alpha: Boolean(opts.alpha)\n }); // If input is Canvas - extract region data directly\n\n this.debug('Get tile pixel data');\n extractTo.src = stageEnv.srcCtx.getImageData(tile.x, tile.y, tile.width, tile.height).data;\n return extractTo;\n } // If input is Image or decoded to ImageBitmap,\n // draw region to temporary canvas and extract data from it\n //\n // Note! Attempt to reuse this canvas causes significant slowdown in chrome\n //\n\n\n this.debug('Draw tile imageBitmap/image to temporary canvas');\n var tmpCanvas = this.options.createCanvas(tile.width, tile.height);\n var tmpCtx = tmpCanvas.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n tmpCtx.globalCompositeOperation = 'copy';\n tmpCtx.drawImage(stageEnv.srcImageBitmap || from, tile.x, tile.y, tile.width, tile.height, 0, 0, tile.width, tile.height);\n this.debug('Get tile pixel data');\n extractTo.src = tmpCtx.getImageData(0, 0, tile.width, tile.height).data; // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n\n tmpCanvas.width = tmpCanvas.height = 0;\n return extractTo;\n};\n\nPica.prototype.__landTileData = function (tile, result, stageEnv) {\n var toImageData;\n this.debug('Convert raw rgba tile result to ImageData');\n\n if (result.bitmap) {\n stageEnv.toCtx.drawImage(result.bitmap, tile.toX, tile.toY);\n return null;\n }\n\n if (CAN_NEW_IMAGE_DATA) {\n // this branch is for modern browsers\n // If `new ImageData()` & Uint8ClampedArray suported\n toImageData = new ImageData(new Uint8ClampedArray(result.data), tile.toWidth, tile.toHeight);\n } else {\n // fallback for `node-canvas` and old browsers\n // (IE11 has ImageData but does not support `new ImageData()`)\n toImageData = stageEnv.toCtx.createImageData(tile.toWidth, tile.toHeight);\n\n if (toImageData.data.set) {\n toImageData.data.set(result.data);\n } else {\n // IE9 don't have `.set()`\n for (var i = toImageData.data.length - 1; i >= 0; i--) {\n toImageData.data[i] = result.data[i];\n }\n }\n }\n\n this.debug('Draw tile');\n\n if (NEED_SAFARI_FIX) {\n // Safari draws thin white stripes between tiles without this fix\n stageEnv.toCtx.putImageData(toImageData, tile.toX, tile.toY, tile.toInnerX - tile.toX, tile.toInnerY - tile.toY, tile.toInnerWidth + 1e-5, tile.toInnerHeight + 1e-5);\n } else {\n stageEnv.toCtx.putImageData(toImageData, tile.toX, tile.toY, tile.toInnerX - tile.toX, tile.toInnerY - tile.toY, tile.toInnerWidth, tile.toInnerHeight);\n }\n\n return null;\n};\n\nPica.prototype.__tileAndResize = function (from, to, opts) {\n var _this3 = this;\n\n var stageEnv = {\n srcCtx: null,\n srcImageBitmap: null,\n isImageBitmapReused: false,\n toCtx: null\n };\n\n var processTile = function processTile(tile) {\n return _this3.__limit(function () {\n if (opts.canceled) return opts.cancelToken;\n var tileOpts = {\n width: tile.width,\n height: tile.height,\n toWidth: tile.toWidth,\n toHeight: tile.toHeight,\n scaleX: tile.scaleX,\n scaleY: tile.scaleY,\n offsetX: tile.offsetX,\n offsetY: tile.offsetY,\n quality: opts.quality,\n alpha: opts.alpha,\n unsharpAmount: opts.unsharpAmount,\n unsharpRadius: opts.unsharpRadius,\n unsharpThreshold: opts.unsharpThreshold\n };\n\n _this3.debug('Invoke resize math');\n\n return Promise.resolve(tileOpts).then(function (tileOpts) {\n return _this3.__extractTileData(tile, from, opts, stageEnv, tileOpts);\n }).then(function (tileOpts) {\n _this3.debug('Invoke resize math');\n\n return _this3.__invokeResize(tileOpts, opts);\n }).then(function (result) {\n if (opts.canceled) return opts.cancelToken;\n stageEnv.srcImageData = null;\n return _this3.__landTileData(tile, result, stageEnv);\n });\n });\n }; // Need to normalize data source first. It can be canvas or image.\n // If image - try to decode in background if possible\n\n\n return Promise.resolve().then(function () {\n stageEnv.toCtx = to.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n if (utils.isCanvas(from)) return null;\n\n if (utils.isImageBitmap(from)) {\n stageEnv.srcImageBitmap = from;\n stageEnv.isImageBitmapReused = true;\n return null;\n }\n\n if (utils.isImage(from)) {\n // try do decode image in background for faster next operations;\n // if we're using offscreen canvas, cib is called per tile, so not needed here\n if (!CAN_CREATE_IMAGE_BITMAP) return null;\n\n _this3.debug('Decode image via createImageBitmap');\n\n return createImageBitmap(from).then(function (imageBitmap) {\n stageEnv.srcImageBitmap = imageBitmap;\n }) // Suppress error to use fallback, if method fails\n // https://github.com/nodeca/pica/issues/190\n\n /* eslint-disable no-unused-vars */\n [\"catch\"](function (e) {\n return null;\n });\n }\n\n throw new Error('Pica: \".from\" should be Image, Canvas or ImageBitmap');\n }).then(function () {\n if (opts.canceled) return opts.cancelToken;\n\n _this3.debug('Calculate tiles'); //\n // Here we are with \"normalized\" source,\n // follow to tiling\n //\n\n\n var regions = createRegions({\n width: opts.width,\n height: opts.height,\n srcTileSize: _this3.options.tile,\n toWidth: opts.toWidth,\n toHeight: opts.toHeight,\n destTileBorder: opts.__destTileBorder\n });\n var jobs = regions.map(function (tile) {\n return processTile(tile);\n });\n\n function cleanup(stageEnv) {\n if (stageEnv.srcImageBitmap) {\n if (!stageEnv.isImageBitmapReused) stageEnv.srcImageBitmap.close();\n stageEnv.srcImageBitmap = null;\n }\n }\n\n _this3.debug('Process tiles');\n\n return Promise.all(jobs).then(function () {\n _this3.debug('Finished!');\n\n cleanup(stageEnv);\n return to;\n }, function (err) {\n cleanup(stageEnv);\n throw err;\n });\n });\n};\n\nPica.prototype.__processStages = function (stages, from, to, opts) {\n var _this4 = this;\n\n if (opts.canceled) return opts.cancelToken;\n\n var _stages$shift = stages.shift(),\n _stages$shift2 = _slicedToArray(_stages$shift, 2),\n toWidth = _stages$shift2[0],\n toHeight = _stages$shift2[1];\n\n var isLastStage = stages.length === 0;\n opts = assign({}, opts, {\n toWidth: toWidth,\n toHeight: toHeight,\n // only use user-defined quality for the last stage,\n // use simpler (Hamming) filter for the first stages where\n // scale factor is large enough (more than 2-3)\n quality: isLastStage ? opts.quality : Math.min(1, opts.quality)\n });\n var tmpCanvas;\n\n if (!isLastStage) {\n // create temporary canvas\n tmpCanvas = this.options.createCanvas(toWidth, toHeight);\n }\n\n return this.__tileAndResize(from, isLastStage ? to : tmpCanvas, opts).then(function () {\n if (isLastStage) return to;\n opts.width = toWidth;\n opts.height = toHeight;\n return _this4.__processStages(stages, tmpCanvas, to, opts);\n }).then(function (res) {\n if (tmpCanvas) {\n // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n tmpCanvas.width = tmpCanvas.height = 0;\n }\n\n return res;\n });\n};\n\nPica.prototype.__resizeViaCreateImageBitmap = function (from, to, opts) {\n var _this5 = this;\n\n var toCtx = to.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n this.debug('Resize via createImageBitmap()');\n return createImageBitmap(from, {\n resizeWidth: opts.toWidth,\n resizeHeight: opts.toHeight,\n resizeQuality: utils.cib_quality_name(opts.quality)\n }).then(function (imageBitmap) {\n if (opts.canceled) return opts.cancelToken; // if no unsharp - draw directly to output canvas\n\n if (!opts.unsharpAmount) {\n toCtx.drawImage(imageBitmap, 0, 0);\n imageBitmap.close();\n toCtx = null;\n\n _this5.debug('Finished!');\n\n return to;\n }\n\n _this5.debug('Unsharp result');\n\n var tmpCanvas = _this5.options.createCanvas(opts.toWidth, opts.toHeight);\n\n var tmpCtx = tmpCanvas.getContext('2d', {\n alpha: Boolean(opts.alpha)\n });\n tmpCtx.drawImage(imageBitmap, 0, 0);\n imageBitmap.close();\n var iData = tmpCtx.getImageData(0, 0, opts.toWidth, opts.toHeight);\n\n _this5.__mathlib.unsharp_mask(iData.data, opts.toWidth, opts.toHeight, opts.unsharpAmount, opts.unsharpRadius, opts.unsharpThreshold);\n\n toCtx.putImageData(iData, 0, 0); // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n\n tmpCanvas.width = tmpCanvas.height = 0;\n iData = tmpCtx = tmpCanvas = toCtx = null;\n\n _this5.debug('Finished!');\n\n return to;\n });\n};\n\nPica.prototype.resize = function (from, to, options) {\n var _this6 = this;\n\n this.debug('Start resize...');\n var opts = assign({}, DEFAULT_RESIZE_OPTS);\n\n if (!isNaN(options)) {\n opts = assign(opts, {\n quality: options\n });\n } else if (options) {\n opts = assign(opts, options);\n }\n\n opts.toWidth = to.width;\n opts.toHeight = to.height;\n opts.width = from.naturalWidth || from.width;\n opts.height = from.naturalHeight || from.height; // Prevent stepper from infinite loop\n\n if (to.width === 0 || to.height === 0) {\n return Promise.reject(new Error(\"Invalid output size: \".concat(to.width, \"x\").concat(to.height)));\n }\n\n if (opts.unsharpRadius > 2) opts.unsharpRadius = 2;\n opts.canceled = false;\n\n if (opts.cancelToken) {\n // Wrap cancelToken to avoid successive resolve & set flag\n opts.cancelToken = opts.cancelToken.then(function (data) {\n opts.canceled = true;\n throw data;\n }, function (err) {\n opts.canceled = true;\n throw err;\n });\n }\n\n var DEST_TILE_BORDER = 3; // Max possible filter window size\n\n opts.__destTileBorder = Math.ceil(Math.max(DEST_TILE_BORDER, 2.5 * opts.unsharpRadius | 0));\n return this.init().then(function () {\n if (opts.canceled) return opts.cancelToken; // if createImageBitmap supports resize, just do it and return\n\n if (_this6.features.cib) {\n return _this6.__resizeViaCreateImageBitmap(from, to, opts);\n }\n\n if (!CAN_USE_CANVAS_GET_IMAGE_DATA) {\n var err = new Error('Pica: cannot use getImageData on canvas, ' + \"make sure fingerprinting protection isn't enabled\");\n err.code = 'ERR_GET_IMAGE_DATA';\n throw err;\n } //\n // No easy way, let's resize manually via arrays\n //\n\n\n var stages = createStages(opts.width, opts.height, opts.toWidth, opts.toHeight, _this6.options.tile, opts.__destTileBorder);\n return _this6.__processStages(stages, from, to, opts);\n });\n}; // RGBA buffer resize\n//\n\n\nPica.prototype.resizeBuffer = function (options) {\n var _this7 = this;\n\n var opts = assign({}, DEFAULT_RESIZE_OPTS, options);\n return this.init().then(function () {\n return _this7.__mathlib.resizeAndUnsharp(opts);\n });\n};\n\nPica.prototype.toBlob = function (canvas, mimeType, quality) {\n mimeType = mimeType || 'image/png';\n return new Promise(function (resolve) {\n if (canvas.toBlob) {\n canvas.toBlob(function (blob) {\n return resolve(blob);\n }, mimeType, quality);\n return;\n }\n\n if (canvas.convertToBlob) {\n resolve(canvas.convertToBlob({\n type: mimeType,\n quality: quality\n }));\n return;\n } // Fallback for old browsers\n\n\n var asString = atob(canvas.toDataURL(mimeType, quality).split(',')[1]);\n var len = asString.length;\n var asBuffer = new Uint8Array(len);\n\n for (var i = 0; i < len; i++) {\n asBuffer[i] = asString.charCodeAt(i);\n }\n\n resolve(new Blob([asBuffer], {\n type: mimeType\n }));\n });\n};\n\nPica.prototype.debug = function () {};\n\nmodule.exports = Pica;\n\n},{\"./lib/mathlib\":1,\"./lib/pool\":13,\"./lib/stepper\":14,\"./lib/tiler\":15,\"./lib/utils\":16,\"./lib/worker\":17,\"object-assign\":23,\"webworkify\":24}]},{},[])(\"/index.js\")\n});\n});\n\nvar image_traverse = createCommonjsModule(function (module) {\n\n//////////////////////////////////////////////////////////////////////////\n// Helpers\n//\nfunction error(message, code) {\n var err = new Error(message);\n err.code = code;\n return err;\n}\n\n\n// Convert number to 0xHH string\n//\nfunction to_hex(number) {\n var n = number.toString(16).toUpperCase();\n for (var i = 2 - n.length; i > 0; i--) n = '0' + n;\n return '0x' + n;\n}\n\n\nfunction utf8_encode(str) {\n try {\n return unescape(encodeURIComponent(str));\n } catch (_) {\n return str;\n }\n}\n\n\nfunction utf8_decode(str) {\n try {\n return decodeURIComponent(escape(str));\n } catch (_) {\n return str;\n }\n}\n\n\n// Check if input is a Uint8Array\n//\nfunction is_uint8array(bin) {\n return Object.prototype.toString.call(bin) === '[object Uint8Array]';\n}\n\n\n//////////////////////////////////////////////////////////////////////////\n// Exif parser\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n// - exif_start: Number - start of TIFF header (after Exif\\0\\0)\n// - exif_end: Number - end of Exif segment\n// - on_entry: Number - callback\n//\nfunction ExifParser(jpeg_bin, exif_start, exif_end) {\n // Uint8Array, exif without signature (which isn't included in offsets)\n this.input = jpeg_bin.subarray(exif_start, exif_end);\n\n // offset correction for `on_entry` callback\n this.start = exif_start;\n\n // Check TIFF header (includes byte alignment and first IFD offset)\n var sig = String.fromCharCode.apply(null, this.input.subarray(0, 4));\n\n if (sig !== 'II\\x2A\\0' && sig !== 'MM\\0\\x2A') {\n throw error('invalid TIFF signature', 'EBADDATA');\n }\n\n // true if motorola (big endian) byte alignment, false if intel\n this.big_endian = sig[0] === 'M';\n}\n\n\nExifParser.prototype.each = function (on_entry) {\n // allow premature exit\n this.aborted = false;\n\n var offset = this.read_uint32(4);\n\n this.ifds_to_read = [ {\n id: 0,\n offset: offset\n } ];\n\n while (this.ifds_to_read.length > 0 && !this.aborted) {\n var i = this.ifds_to_read.shift();\n if (!i.offset) continue;\n this.scan_ifd(i.id, i.offset, on_entry);\n }\n};\n\n\nExifParser.prototype.filter = function (on_entry) {\n var ifds = {};\n\n // make sure IFD0 always exists\n ifds.ifd0 = { id: 0, entries: [] };\n\n this.each(function (entry) {\n if (on_entry(entry) === false && !entry.is_subifd_link) return;\n if (entry.is_subifd_link && entry.count !== 1 && entry.format !== 4) return; // filter out bogus links\n\n if (!ifds['ifd' + entry.ifd]) {\n ifds['ifd' + entry.ifd] = { id: entry.ifd, entries: [] };\n }\n\n ifds['ifd' + entry.ifd].entries.push(entry);\n });\n\n // thumbnails are not supported just yet, so delete all information related to it\n delete ifds.ifd1;\n\n // Calculate output size\n var length = 8;\n Object.keys(ifds).forEach(function (ifd_no) {\n length += 2;\n\n ifds[ifd_no].entries.forEach(function (entry) {\n length += 12 + (entry.data_length > 4 ? Math.ceil(entry.data_length / 2) * 2 : 0);\n });\n\n length += 4;\n });\n\n this.output = new Uint8Array(length);\n this.output[0] = this.output[1] = (this.big_endian ? 'M' : 'I').charCodeAt(0);\n this.write_uint16(2, 0x2A);\n\n var offset = 8;\n var self = this;\n this.write_uint32(4, offset);\n\n Object.keys(ifds).forEach(function (ifd_no) {\n ifds[ifd_no].written_offset = offset;\n\n var ifd_start = offset;\n var ifd_end = ifd_start + 2 + ifds[ifd_no].entries.length * 12 + 4;\n offset = ifd_end;\n\n self.write_uint16(ifd_start, ifds[ifd_no].entries.length);\n\n ifds[ifd_no].entries.sort(function (a, b) {\n // IFD entries must be in order of increasing tag IDs\n return a.tag - b.tag;\n }).forEach(function (entry, idx) {\n var entry_offset = ifd_start + 2 + idx * 12;\n\n self.write_uint16(entry_offset, entry.tag);\n self.write_uint16(entry_offset + 2, entry.format);\n self.write_uint32(entry_offset + 4, entry.count);\n\n if (entry.is_subifd_link) {\n // filled in later\n if (ifds['ifd' + entry.tag]) ifds['ifd' + entry.tag].link_offset = entry_offset + 8;\n } else if (entry.data_length <= 4) {\n self.output.set(\n self.input.subarray(entry.data_offset - self.start, entry.data_offset - self.start + 4),\n entry_offset + 8\n );\n } else {\n self.write_uint32(entry_offset + 8, offset);\n self.output.set(\n self.input.subarray(entry.data_offset - self.start, entry.data_offset - self.start + entry.data_length),\n offset\n );\n offset += Math.ceil(entry.data_length / 2) * 2;\n }\n });\n\n var next_ifd = ifds['ifd' + (ifds[ifd_no].id + 1)];\n if (next_ifd) next_ifd.link_offset = ifd_end - 4;\n });\n\n Object.keys(ifds).forEach(function (ifd_no) {\n if (ifds[ifd_no].written_offset && ifds[ifd_no].link_offset) {\n self.write_uint32(ifds[ifd_no].link_offset, ifds[ifd_no].written_offset);\n }\n });\n\n if (this.output.length !== offset) throw error('internal error: incorrect buffer size allocated');\n\n return this.output;\n};\n\n\nExifParser.prototype.read_uint16 = function (offset) {\n var d = this.input;\n if (offset + 2 > d.length) throw error('unexpected EOF', 'EBADDATA');\n\n return this.big_endian ?\n d[offset] * 0x100 + d[offset + 1] :\n d[offset] + d[offset + 1] * 0x100;\n};\n\n\nExifParser.prototype.read_uint32 = function (offset) {\n var d = this.input;\n if (offset + 4 > d.length) throw error('unexpected EOF', 'EBADDATA');\n\n return this.big_endian ?\n d[offset] * 0x1000000 + d[offset + 1] * 0x10000 + d[offset + 2] * 0x100 + d[offset + 3] :\n d[offset] + d[offset + 1] * 0x100 + d[offset + 2] * 0x10000 + d[offset + 3] * 0x1000000;\n};\n\n\nExifParser.prototype.write_uint16 = function (offset, value) {\n var d = this.output;\n\n if (this.big_endian) {\n d[offset] = (value >>> 8) & 0xFF;\n d[offset + 1] = value & 0xFF;\n } else {\n d[offset] = value & 0xFF;\n d[offset + 1] = (value >>> 8) & 0xFF;\n }\n};\n\n\nExifParser.prototype.write_uint32 = function (offset, value) {\n var d = this.output;\n\n if (this.big_endian) {\n d[offset] = (value >>> 24) & 0xFF;\n d[offset + 1] = (value >>> 16) & 0xFF;\n d[offset + 2] = (value >>> 8) & 0xFF;\n d[offset + 3] = value & 0xFF;\n } else {\n d[offset] = value & 0xFF;\n d[offset + 1] = (value >>> 8) & 0xFF;\n d[offset + 2] = (value >>> 16) & 0xFF;\n d[offset + 3] = (value >>> 24) & 0xFF;\n }\n};\n\n\nExifParser.prototype.is_subifd_link = function (ifd, tag) {\n return (ifd === 0 && tag === 0x8769) || // SubIFD\n (ifd === 0 && tag === 0x8825) || // GPS Info\n (ifd === 0x8769 && tag === 0xA005); // Interop IFD\n};\n\n\n// Returns byte length of a single component of a given format\n//\nExifParser.prototype.exif_format_length = function (format) {\n switch (format) {\n case 1: // byte\n case 2: // ascii\n case 6: // sbyte\n case 7: // undefined\n return 1;\n\n case 3: // short\n case 8: // sshort\n return 2;\n\n case 4: // long\n case 9: // slong\n case 11: // float\n return 4;\n\n case 5: // rational\n case 10: // srational\n case 12: // double\n return 8;\n\n default:\n // unknown type\n return 0;\n }\n};\n\n\n// Reads Exif data\n//\nExifParser.prototype.exif_format_read = function (format, offset) {\n var v;\n\n switch (format) {\n case 1: // byte\n case 2: // ascii\n v = this.input[offset];\n return v;\n\n case 6: // sbyte\n v = this.input[offset];\n return v | (v & 0x80) * 0x1fffffe;\n\n case 3: // short\n v = this.read_uint16(offset);\n return v;\n\n case 8: // sshort\n v = this.read_uint16(offset);\n return v | (v & 0x8000) * 0x1fffe;\n\n case 4: // long\n v = this.read_uint32(offset);\n return v;\n\n case 9: // slong\n v = this.read_uint32(offset);\n return v | 0;\n\n case 5: // rational\n case 10: // srational\n case 11: // float\n case 12: // double\n return null; // not implemented\n\n case 7: // undefined\n return null; // blob\n\n default:\n // unknown type\n return null;\n }\n};\n\n\nExifParser.prototype.scan_ifd = function (ifd_no, offset, on_entry) {\n var entry_count = this.read_uint16(offset);\n\n offset += 2;\n\n for (var i = 0; i < entry_count; i++) {\n var tag = this.read_uint16(offset);\n var format = this.read_uint16(offset + 2);\n var count = this.read_uint32(offset + 4);\n\n var comp_length = this.exif_format_length(format);\n var data_length = count * comp_length;\n var data_offset = data_length <= 4 ? offset + 8 : this.read_uint32(offset + 8);\n var is_subifd_link = false;\n\n if (data_offset + data_length > this.input.length) {\n throw error('unexpected EOF', 'EBADDATA');\n }\n\n var value = [];\n var comp_offset = data_offset;\n\n for (var j = 0; j < count; j++, comp_offset += comp_length) {\n var item = this.exif_format_read(format, comp_offset);\n if (item === null) {\n value = null;\n break;\n }\n value.push(item);\n }\n\n if (Array.isArray(value) && format === 2) {\n try {\n value = utf8_decode(String.fromCharCode.apply(null, value));\n } catch (_) {\n value = null;\n }\n\n if (value && value[value.length - 1] === '\\0') value = value.slice(0, -1);\n }\n\n if (this.is_subifd_link(ifd_no, tag)) {\n if (Array.isArray(value) && Number.isInteger(value[0]) && value[0] > 0) {\n this.ifds_to_read.push({\n id: tag,\n offset: value[0]\n });\n is_subifd_link = true;\n }\n }\n\n var entry = {\n is_big_endian: this.big_endian,\n ifd: ifd_no,\n tag: tag,\n format: format,\n count: count,\n entry_offset: offset + this.start,\n data_length: data_length,\n data_offset: data_offset + this.start,\n value: value,\n is_subifd_link: is_subifd_link\n };\n\n if (on_entry(entry) === false) {\n this.aborted = true;\n return;\n }\n\n offset += 12;\n }\n\n if (ifd_no === 0) {\n this.ifds_to_read.push({\n id: 1,\n offset: this.read_uint32(offset)\n });\n }\n};\n\n\n// Check whether input is a JPEG image\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n//\n// Returns true if it is and false otherwise\n//\nmodule.exports.is_jpeg = function (jpeg_bin) {\n return jpeg_bin.length >= 4 && jpeg_bin[0] === 0xFF && jpeg_bin[1] === 0xD8 && jpeg_bin[2] === 0xFF;\n};\n\n\n// Call an iterator on each segment in the given JPEG image\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n// - on_segment: Function - callback executed on each JPEG marker segment\n// - segment: Object\n// - code: Number - marker type (2nd byte, e.g. 0xE0 for APP0)\n// - offset: Number - offset of the first byte (0xFF) relative to `jpeg_bin` start\n// - length: Number - length of the entire marker segment including first two bytes and length\n// - 2 for standalone markers\n// - 4+length for markers with data\n//\n// Iteration stops when `EOI` (0xFFD9) marker is reached or if `on_segment`\n// function returns `false`.\n//\nmodule.exports.jpeg_segments_each = function (jpeg_bin, on_segment) {\n if (!is_uint8array(jpeg_bin)) {\n throw error('Invalid argument (jpeg_bin), Uint8Array expected', 'EINVAL');\n }\n\n if (typeof on_segment !== 'function') {\n throw error('Invalid argument (on_segment), Function expected', 'EINVAL');\n }\n\n if (!module.exports.is_jpeg(jpeg_bin)) {\n throw error('Unknown file format', 'ENOTJPEG');\n }\n\n var offset = 0, length = jpeg_bin.length, inside_scan = false;\n\n for (;;) {\n var segment_code, segment_length;\n\n if (offset + 1 >= length) throw error('Unexpected EOF', 'EBADDATA');\n var byte1 = jpeg_bin[offset];\n var byte2 = jpeg_bin[offset + 1];\n\n if (byte1 === 0xFF && byte2 === 0xFF) {\n // padding\n segment_code = 0xFF;\n segment_length = 1;\n\n } else if (byte1 === 0xFF && byte2 !== 0) {\n // marker\n segment_code = byte2;\n segment_length = 2;\n\n if ((0xD0 <= segment_code && segment_code <= 0xD9) || segment_code === 0x01) ; else {\n if (offset + 3 >= length) throw error('Unexpected EOF', 'EBADDATA');\n segment_length += jpeg_bin[offset + 2] * 0x100 + jpeg_bin[offset + 3];\n if (segment_length < 2) throw error('Invalid segment length', 'EBADDATA');\n if (offset + segment_length - 1 >= length) throw error('Unexpected EOF', 'EBADDATA');\n }\n\n if (inside_scan) {\n if (segment_code >= 0xD0 && segment_code <= 0xD7) ; else {\n inside_scan = false;\n }\n }\n\n if (segment_code === 0xDA /* SOS */) inside_scan = true;\n } else if (inside_scan) {\n // entropy-encoded segment\n for (var pos = offset + 1; ; pos++) {\n // scan until we find FF\n if (pos >= length) throw error('Unexpected EOF', 'EBADDATA');\n if (jpeg_bin[pos] === 0xFF) {\n if (pos + 1 >= length) throw error('Unexpected EOF', 'EBADDATA');\n if (jpeg_bin[pos + 1] !== 0) {\n segment_code = 0;\n segment_length = pos - offset;\n break;\n }\n }\n }\n } else {\n throw error('Unexpected byte at segment start: ' + to_hex(byte1) +\n ' (offset ' + to_hex(offset) + ')', 'EBADDATA');\n }\n\n if (on_segment({ code: segment_code, offset: offset, length: segment_length }) === false) break;\n if (segment_code === 0xD9 /* EOI */) break;\n offset += segment_length;\n }\n};\n\n\n// Replace or remove segments in the given JPEG image\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n// - on_segment: Function - callback executed on each JPEG marker segment\n// - segment: Object\n// - code: Number - marker type (2nd byte, e.g. 0xE0 for APP0)\n// - offset: Number - offset of the first byte (0xFF) relative to `jpeg_bin` start\n// - length: Number - length of the entire marker segment including first two bytes and length\n// - 2 for standalone markers\n// - 4+length for markers with data\n//\n// `on_segment` function should return one of the following:\n// - `false` - segment is removed from the output\n// - Uint8Array - segment is replaced with the new data\n// - [ Uint8Array ] - segment is replaced with the new data\n// - anything else - segment is copied to the output as is\n//\n// Any data after `EOI` (0xFFD9) marker is removed.\n//\nmodule.exports.jpeg_segments_filter = function (jpeg_bin, on_segment) {\n if (!is_uint8array(jpeg_bin)) {\n throw error('Invalid argument (jpeg_bin), Uint8Array expected', 'EINVAL');\n }\n\n if (typeof on_segment !== 'function') {\n throw error('Invalid argument (on_segment), Function expected', 'EINVAL');\n }\n\n var ranges = [];\n var out_length = 0;\n\n module.exports.jpeg_segments_each(jpeg_bin, function (segment) {\n var new_segment = on_segment(segment);\n\n if (is_uint8array(new_segment)) {\n ranges.push({ data: new_segment });\n out_length += new_segment.length;\n } else if (Array.isArray(new_segment)) {\n new_segment.filter(is_uint8array).forEach(function (s) {\n ranges.push({ data: s });\n out_length += s.length;\n });\n } else if (new_segment !== false) {\n var new_range = { start: segment.offset, end: segment.offset + segment.length };\n\n if (ranges.length > 0 && ranges[ranges.length - 1].end === new_range.start) {\n ranges[ranges.length - 1].end = new_range.end;\n } else {\n ranges.push(new_range);\n }\n\n out_length += segment.length;\n }\n });\n\n var result = new Uint8Array(out_length);\n var offset = 0;\n\n ranges.forEach(function (range) {\n var data = range.data || jpeg_bin.subarray(range.start, range.end);\n result.set(data, offset);\n offset += data.length;\n });\n\n return result;\n};\n\n\n// Call an iterator on each Exif entry in the given JPEG image\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n// - on_entry: Function - callback executed on each Exif entry\n// - entry: Object\n// - is_big_endian: Boolean - whether Exif uses big or little endian byte alignment\n// - ifd: Number - IFD identifier (0 for IFD0, 1 for IFD1, 0x8769 for SubIFD,\n// 0x8825 for GPS Info, 0xA005 for Interop IFD)\n// - tag: Number - exif entry tag (0x0110 - camera name, 0x0112 - orientation, etc. - see Exif spec)\n// - format: Number - exif entry format (1 - byte, 2 - ascii, 3 - short, etc. - see Exif spec)\n// - count: Number - number of components of the given format inside data\n// (usually 1, or string length for ascii format)\n// - entry_offset: Number - start of Exif entry (entry length is always 12, so not included)\n// - data_offset: Number - start of data attached to Exif entry (will overlap with entry if length <= 4)\n// - data_length: Number - length of data attached to Exif entry\n// - value: Array|String|Null - our best attempt at parsing data (not all formats supported right now)\n// - is_subifd_link: Boolean - whether this entry is recognized to be a link to subifd (can't filter these out)\n//\n// Iteration stops early if iterator returns `false`.\n//\n// If Exif wasn't found anywhere (before start of the image data, SOS),\n// iterator is never executed.\n//\nmodule.exports.jpeg_exif_tags_each = function (jpeg_bin, on_exif_entry) {\n if (!is_uint8array(jpeg_bin)) {\n throw error('Invalid argument (jpeg_bin), Uint8Array expected', 'EINVAL');\n }\n\n if (typeof on_exif_entry !== 'function') {\n throw error('Invalid argument (on_exif_entry), Function expected', 'EINVAL');\n }\n\n /* eslint-disable consistent-return */\n module.exports.jpeg_segments_each(jpeg_bin, function (segment) {\n if (segment.code === 0xDA /* SOS */) return false;\n\n // look for APP1 segment and compare header with 'Exif\\0\\0'\n if (segment.code === 0xE1 && segment.length >= 10 &&\n jpeg_bin[segment.offset + 4] === 0x45 && jpeg_bin[segment.offset + 5] === 0x78 &&\n jpeg_bin[segment.offset + 6] === 0x69 && jpeg_bin[segment.offset + 7] === 0x66 &&\n jpeg_bin[segment.offset + 8] === 0x00 && jpeg_bin[segment.offset + 9] === 0x00) {\n\n new ExifParser(jpeg_bin, segment.offset + 10, segment.offset + segment.length).each(on_exif_entry);\n return false;\n }\n });\n};\n\n\n// Remove Exif entries in the given JPEG image\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n// - on_entry: Function - callback executed on each Exif entry\n// - entry: Object\n// - is_big_endian: Boolean - whether Exif uses big or little endian byte alignment\n// - ifd: Number - IFD identifier (0 for IFD0, 1 for IFD1, 0x8769 for SubIFD,\n// 0x8825 for GPS Info, 0xA005 for Interop IFD)\n// - tag: Number - exif entry tag (0x0110 - camera name, 0x0112 - orientation, etc. - see Exif spec)\n// - format: Number - exif entry format (1 - byte, 2 - ascii, 3 - short, etc. - see Exif spec)\n// - count: Number - number of components of the given format inside data\n// (usually 1, or string length for ascii format)\n// - entry_offset: Number - start of Exif entry (entry length is always 12, so not included)\n// - data_offset: Number - start of data attached to Exif entry (will overlap with entry if length <= 4)\n// - data_length: Number - length of data attached to Exif entry\n// - value: Array|String|Null - our best attempt at parsing data (not all formats supported right now)\n// - is_subifd_link: Boolean - whether this entry is recognized to be a link to subifd (can't filter these out)\n//\n// This function removes following from Exif:\n// - all entries where iterator returned false (except subifd links which are mandatory)\n// - IFD1 and thumbnail image (the purpose of this function is to reduce file size,\n// so thumbnail is usually the first thing to go)\n// - all other data that isn't in IFD0, SubIFD, GPSIFD, InteropIFD\n// (theoretically possible proprietary extensions, I haven't seen any of these yet)\n//\n// Changing data inside Exif entries is NOT supported yet (modifying `entry` object inside callback may break stuff).\n//\n// If Exif wasn't found anywhere (before start of the image data, SOS),\n// iterator is never executed, and original JPEG is returned as is.\n//\nmodule.exports.jpeg_exif_tags_filter = function (jpeg_bin, on_exif_entry) {\n if (!is_uint8array(jpeg_bin)) {\n throw error('Invalid argument (jpeg_bin), Uint8Array expected', 'EINVAL');\n }\n\n if (typeof on_exif_entry !== 'function') {\n throw error('Invalid argument (on_exif_entry), Function expected', 'EINVAL');\n }\n\n var stop_search = false;\n\n return module.exports.jpeg_segments_filter(jpeg_bin, function (segment) {\n if (stop_search) return;\n if (segment.code === 0xDA /* SOS */) stop_search = true;\n\n // look for APP1 segment and compare header with 'Exif\\0\\0'\n if (segment.code === 0xE1 && segment.length >= 10 &&\n jpeg_bin[segment.offset + 4] === 0x45 && jpeg_bin[segment.offset + 5] === 0x78 &&\n jpeg_bin[segment.offset + 6] === 0x69 && jpeg_bin[segment.offset + 7] === 0x66 &&\n jpeg_bin[segment.offset + 8] === 0x00 && jpeg_bin[segment.offset + 9] === 0x00) {\n\n var new_exif = new ExifParser(jpeg_bin, segment.offset + 10, segment.offset + segment.length)\n .filter(on_exif_entry);\n if (!new_exif) return false;\n\n var header = new Uint8Array(10);\n\n header.set(jpeg_bin.slice(segment.offset, segment.offset + 10));\n header[2] = ((new_exif.length + 8) >>> 8) & 0xFF;\n header[3] = (new_exif.length + 8) & 0xFF;\n\n stop_search = true;\n return [ header, new_exif ];\n }\n });\n};\n\n\n// Inserts a custom comment marker segment into JPEG file.\n//\n// Input:\n// - jpeg_bin: Uint8Array - jpeg file\n// - comment: String\n//\n// Comment is inserted after first two bytes (FFD8, SOI).\n//\n// If JFIF (APP0) marker exists immediately after SOI (as mandated by the JFIF\n// spec), we insert comment after it instead.\n//\nmodule.exports.jpeg_add_comment = function (jpeg_bin, comment) {\n var comment_inserted = false, segment_count = 0;\n\n return module.exports.jpeg_segments_filter(jpeg_bin, function (segment) {\n segment_count++;\n if (segment_count === 1 && segment.code === 0xD8 /* SOI */) return;\n if (segment_count === 2 && segment.code === 0xE0 /* APP0 */) return;\n\n if (comment_inserted) return;\n comment = utf8_encode(comment);\n\n // comment segment\n var csegment = new Uint8Array(5 + comment.length);\n var offset = 0;\n\n csegment[offset++] = 0xFF;\n csegment[offset++] = 0xFE;\n csegment[offset++] = ((comment.length + 3) >>> 8) & 0xFF;\n csegment[offset++] = (comment.length + 3) & 0xFF;\n\n comment.split('').forEach(function (c) {\n csegment[offset++] = c.charCodeAt(0) & 0xFF;\n });\n\n csegment[offset++] = 0;\n comment_inserted = true;\n\n return [ csegment, jpeg_bin.subarray(segment.offset, segment.offset + segment.length) ];\n });\n};\n});\n\nfunction jpeg_patch_exif(env) {\n return this._getUint8Array(env.blob).then(function (data) {\n env.is_jpeg = image_traverse.is_jpeg(data);\n\n if (!env.is_jpeg) return Promise.resolve(env);\n\n env.orig_blob = env.blob;\n\n try {\n var exif_is_big_endian, orientation_offset;\n\n /* eslint-disable consistent-return */\n image_traverse.jpeg_exif_tags_each(data, function (entry) {\n if (entry.ifd === 0 && entry.tag === 0x112 && Array.isArray(entry.value)) {\n env.orientation = entry.value[0] || 1;\n exif_is_big_endian = entry.is_big_endian;\n orientation_offset = entry.data_offset;\n return false;\n }\n });\n\n if (orientation_offset) {\n var orientation_patch = exif_is_big_endian ?\n new Uint8Array([ 0, 1 ]) :\n new Uint8Array([ 1, 0 ]);\n\n env.blob = new Blob([\n data.slice(0, orientation_offset),\n orientation_patch,\n data.slice(orientation_offset + 2)\n ], { type: 'image/jpeg' });\n }\n } catch (_) {}\n\n return env;\n });\n}\n\n\nfunction jpeg_rotate_canvas(env) {\n if (!env.is_jpeg) return Promise.resolve(env);\n\n var orientation = env.orientation - 1;\n if (!orientation) return Promise.resolve(env);\n\n var canvas;\n\n if (orientation & 4) {\n canvas = this.pica.options.createCanvas(env.out_canvas.height, env.out_canvas.width);\n } else {\n canvas = this.pica.options.createCanvas(env.out_canvas.width, env.out_canvas.height);\n }\n\n var ctx = canvas.getContext('2d');\n\n ctx.save();\n\n if (orientation & 1) ctx.transform(-1, 0, 0, 1, canvas.width, 0);\n if (orientation & 2) ctx.transform(-1, 0, 0, -1, canvas.width, canvas.height);\n if (orientation & 4) ctx.transform(0, 1, 1, 0, 0, 0);\n\n ctx.drawImage(env.out_canvas, 0, 0);\n ctx.restore();\n\n // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n env.out_canvas.width = env.out_canvas.height = 0;\n\n env.out_canvas = canvas;\n\n return Promise.resolve(env);\n}\n\n\nfunction jpeg_attach_orig_segments(env) {\n if (!env.is_jpeg) return Promise.resolve(env);\n\n return Promise.all([\n this._getUint8Array(env.blob),\n this._getUint8Array(env.out_blob)\n ]).then(function (res) {\n var data = res[0];\n var data_out = res[1];\n\n if (!image_traverse.is_jpeg(data)) return Promise.resolve(env);\n\n var segments = [];\n\n image_traverse.jpeg_segments_each(data, function (segment) {\n if (segment.code === 0xDA /* SOS */) return false;\n segments.push(segment);\n });\n\n segments = segments\n .filter(function (segment) {\n // Drop ICC_PROFILE\n //\n if (segment.code === 0xE2) return false;\n\n // Keep all APPn segments excluding APP2 (ICC_PROFILE),\n // remove others because most of them depend on image data (DCT and such).\n //\n // APP0 - JFIF, APP1 - Exif, the rest are photoshop metadata and such\n //\n // See full list at https://www.w3.org/Graphics/JPEG/itu-t81.pdf (table B.1 on page 32)\n //\n if (segment.code >= 0xE0 && segment.code < 0xF0) return true;\n\n // Keep comments\n //\n if (segment.code === 0xFE) return true;\n\n return false;\n })\n .map(function (segment) {\n return data.slice(segment.offset, segment.offset + segment.length);\n });\n\n env.out_blob = new Blob(\n // intentionally omitting expected JFIF segment (offset 2 to 20)\n [ data_out.slice(0, 2) ].concat(segments).concat([ data_out.slice(20) ]),\n { type: 'image/jpeg' }\n );\n\n return env;\n });\n}\n\n\nfunction assign(reducer) {\n reducer.before('_blob_to_image', jpeg_patch_exif);\n reducer.after('_transform', jpeg_rotate_canvas);\n reducer.after('_create_blob', jpeg_attach_orig_segments);\n}\n\n\nvar jpeg_patch_exif_1 = jpeg_patch_exif;\nvar jpeg_rotate_canvas_1 = jpeg_rotate_canvas;\nvar jpeg_attach_orig_segments_1 = jpeg_attach_orig_segments;\nvar assign_1 = assign;\n\nvar jpeg_plugins = {\n\tjpeg_patch_exif: jpeg_patch_exif_1,\n\tjpeg_rotate_canvas: jpeg_rotate_canvas_1,\n\tjpeg_attach_orig_segments: jpeg_attach_orig_segments_1,\n\tassign: assign_1\n};\n\nfunction ImageBlobReduce(options) {\n if (!(this instanceof ImageBlobReduce)) return new ImageBlobReduce(options);\n\n options = options || {};\n\n this.pica = options.pica || pica({});\n this.initialized = false;\n\n this.utils = utils;\n}\n\n\nImageBlobReduce.prototype.use = function (plugin /*, params, ... */) {\n var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n plugin.apply(plugin, args);\n return this;\n};\n\n\nImageBlobReduce.prototype.init = function () {\n this.use(jpeg_plugins.assign);\n};\n\n\nImageBlobReduce.prototype.toBlob = function (blob, options) {\n var opts = utils.assign({ max: Infinity }, options);\n var env = {\n blob: blob,\n opts: opts\n };\n\n if (!this.initialized) {\n this.init();\n this.initialized = true;\n }\n\n return Promise.resolve(env)\n .then(this._blob_to_image)\n .then(this._calculate_size)\n .then(this._transform)\n .then(this._cleanup)\n .then(this._create_blob)\n .then(function (_env) {\n // Safari 12 workaround\n // https://github.com/nodeca/pica/issues/199\n _env.out_canvas.width = _env.out_canvas.height = 0;\n\n return _env.out_blob;\n });\n};\n\n\nImageBlobReduce.prototype.toCanvas = function (blob, options) {\n var opts = utils.assign({ max: Infinity }, options);\n var env = {\n blob: blob,\n opts: opts\n };\n\n if (!this.initialized) {\n this.init();\n this.initialized = true;\n }\n\n return Promise.resolve(env)\n .then(this._blob_to_image)\n .then(this._calculate_size)\n .then(this._transform)\n .then(this._cleanup)\n .then(function (_env) { return _env.out_canvas; });\n};\n\n\nImageBlobReduce.prototype.before = function (method_name, fn) {\n if (!this[method_name]) throw new Error('Method \"' + method_name + '\" does not exist');\n if (typeof fn !== 'function') throw new Error('Invalid argument \"fn\", function expected');\n\n var old_fn = this[method_name];\n var self = this;\n\n this[method_name] = function (env) {\n return fn.call(self, env).then(function (_env) {\n return old_fn.call(self, _env);\n });\n };\n\n return this;\n};\n\n\nImageBlobReduce.prototype.after = function (method_name, fn) {\n if (!this[method_name]) throw new Error('Method \"' + method_name + '\" does not exist');\n if (typeof fn !== 'function') throw new Error('Invalid argument \"fn\", function expected');\n\n var old_fn = this[method_name];\n var self = this;\n\n this[method_name] = function (env) {\n return old_fn.call(self, env).then(function (_env) {\n return fn.call(self, _env);\n });\n };\n\n return this;\n};\n\n\nImageBlobReduce.prototype._blob_to_image = function (env) {\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n env.image = document.createElement('img');\n env.image_url = URL.createObjectURL(env.blob);\n env.image.src = env.image_url;\n\n return new Promise(function (resolve, reject) {\n env.image.onerror = function () { reject(new Error('ImageBlobReduce: failed to create Image() from blob')); };\n env.image.onload = function () { resolve(env); };\n });\n};\n\n\nImageBlobReduce.prototype._calculate_size = function (env) {\n //\n // Note, if your need not \"symmetric\" resize logic, you MUST check\n // `env.orientation` (set by plugins) and swap width/height appropriately.\n //\n var scale_factor = env.opts.max / Math.max(env.image.width, env.image.height);\n\n if (scale_factor > 1) scale_factor = 1;\n\n env.transform_width = Math.max(Math.round(env.image.width * scale_factor), 1);\n env.transform_height = Math.max(Math.round(env.image.height * scale_factor), 1);\n\n // Info for user plugins, to check if scaling applied\n env.scale_factor = scale_factor;\n\n return Promise.resolve(env);\n};\n\n\nImageBlobReduce.prototype._transform = function (env) {\n env.out_canvas = this.pica.options.createCanvas(env.transform_width, env.transform_height);\n\n // Dim env temporary vars to prohibit use and avoid confusion when orientation\n // changed. You should take real size from canvas.\n env.transform_width = null;\n env.transform_height = null;\n\n // By default use alpha for png only\n var pica_opts = { alpha: env.blob.type === 'image/png' };\n\n // Extract pica options if been passed\n this.utils.assign(pica_opts, this.utils.pick_pica_resize_options(env.opts));\n\n return this.pica\n .resize(env.image, env.out_canvas, pica_opts)\n .then(function () { return env; });\n};\n\n\nImageBlobReduce.prototype._cleanup = function (env) {\n env.image.src = '';\n env.image = null;\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n if (URL.revokeObjectURL) URL.revokeObjectURL(env.image_url);\n\n env.image_url = null;\n\n return Promise.resolve(env);\n};\n\n\nImageBlobReduce.prototype._create_blob = function (env) {\n return this.pica.toBlob(env.out_canvas, env.blob.type)\n .then(function (blob) {\n env.out_blob = blob;\n return env;\n });\n};\n\n\nImageBlobReduce.prototype._getUint8Array = function (blob) {\n if (blob.arrayBuffer) {\n return blob.arrayBuffer().then(function (buf) {\n return new Uint8Array(buf);\n });\n }\n\n return new Promise(function (resolve, reject) {\n var fr = new FileReader();\n\n fr.readAsArrayBuffer(blob);\n\n fr.onload = function () { resolve(new Uint8Array(fr.result)); };\n fr.onerror = function () {\n reject(new Error('ImageBlobReduce: failed to load data from input blob'));\n fr.abort();\n };\n fr.onabort = function () {\n reject(new Error('ImageBlobReduce: failed to load data from input blob (aborted)'));\n };\n });\n};\n\n\nImageBlobReduce.pica = pica;\n\nvar imageBlobReduce = ImageBlobReduce;\n\nexport default imageBlobReduce;\n"],"names":["assign$1","to","from","s","key","pick","props","pick_pica_resize_options","pick_1","pick_pica_resize_options_1","utils","createCommonjsModule","fn","module","commonjsRequire","target","pica","exports","f","r","e","n","t","o","i","c","u","a","p","_dereq_","inherits","Multimath","mm_unsharp_mask","mm_resize","MathLib","requested_features","__requested_features","features","options","cache","result","clampTo8","convolveHorizontally","src","dest","srcW","srcH","destW","filters","g","b","filterPtr","filterShift","filterSize","srcPtr","srcY","destX","filterVal","srcOffset","destOffset","convolveVertically","createFilters","resetAlpha","dst","width","height","ptr","len","destH","scaleX","scaleY","offsetX","offsetY","quality","alpha","filtersX","filtersY","tmp","FILTER_INFO","FIXED_FRAC_BITS","toFixedPoint","num","srcSize","destSize","scale","offset","filterFunction","scaleInverted","scaleClamped","srcWindow","destPixel","srcPixel","srcFirst","srcLast","filterElementSize","floatFilter","fxpFilter","total","pxl","idx","floatVal","filterTotal","leftNotEmpty","rightNotEmpty","maxFilterElementSize","packedFilter","packedFilterPtr","slowCopy","x","xpi","asUint8Array","IS_LE","copyInt16asLE","target_offset","data","src_offset","tmp_offset","filtersX_offset","filtersY_offset","alloc_bytes","instance","mem","mem32","src32","dest32","glur_mono16","hsv_v16","img","size","out","max","amount","radius","threshold","v1","v2","vmul","diff","iTimes4","brightness","blured","amountFp","thresholdFp","pixels","img_bytes_cnt","hsv_bytes_cnt","blur_bytes_cnt","blur_line_byte_cnt","blur_coeffs_byte_cnt","img_offset","hsv_offset","blur_offset","blur_tmp_offset","blur_line_offset","blur_coeffs_offset","img32","GC_INTERVAL","Pool","create","idle","_this","resource","_this2","_this3","now","MIN_INNER_TILE_SIZE","fromWidth","fromHeight","toWidth","toHeight","srcTileSize","destTileBorder","minScale","stageCount","PIXEL_EPSILON","pixelFloor","nearest","pixelCeil","innerTileWidth","innerTileHeight","y","innerX","innerY","toTileWidth","toTileHeight","tiles","tile","objClass","obj","element","cname","concurrency","active","queue","roll","resolve","reject","err","createCanvas","bitmap","status","workerPayload","self","canvas","ctx","code","w","ev","usable","d","image","mathLib","tileOpts","returnBitmap","toImageData","_canvas","_ctx","a0","a1","a2","a3","b1","b2","left_corner","right_corner","gaussCoef","sigma","g1","g2","k","convolveMono16","line","coeff","prev_src","curr_src","curr_out","prev_out","prev_prev_out","src_index","out_index","line_index","j","coeff_a0","coeff_a1","coeff_b1","coeff_b2","blurMono16","tmp_line","ctor","superCtor","TempCtor","assign","base64decode","hasWebAssembly","DEFAULT_OPTIONS","MultiMath","opts","name","m","bytes","mem_size","memsize","env_extra","env_base","number","base","reminder","BASE64_MAP","str","input","bits","tailbits","wa","bin","getOwnPropertySymbols","hasOwnProperty","propIsEnumerable","toObject","val","shouldUseNative","test1","test2","order2","test3","letter","source","symbols","bundleFn","sources","stringify","wkey","cacheKeys","l","exp","wcache","skey","scache","workerSources","resolveSources","depPath","depKey","URL","blob","workerUrl","worker","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","minLen","_arrayLikeToArray","arr2","_i","_arr","_n","_d","_s","_e","webworkify","createStages","createRegions","singletones","NEED_SAFARI_FIX","DEFAULT_PICA_OPTS","tmpCanvas","DEFAULT_RESIZE_OPTS","CAN_NEW_IMAGE_DATA","CAN_CREATE_IMAGE_BITMAP","CAN_USE_CANVAS_GET_IMAGE_DATA","CAN_USE_OFFSCREEN_CANVAS","CAN_USE_CIB_REGION_FOR_IMAGE","workerFabric","url","Pica","limiter_key","wkr","wpool_key","initMath","mathlib","checkCibResize","checkOffscreenCanvas","checkCibRegion","transfer","stageEnv","extractTo","tmpCtx","processTile","imageBitmap","regions","jobs","cleanup","stages","_this4","_stages$shift","_stages$shift2","isLastStage","res","_this5","toCtx","iData","_this6","DEST_TILE_BORDER","_this7","mimeType","asString","asBuffer","image_traverse","error","message","to_hex","utf8_encode","utf8_decode","is_uint8array","ExifParser","jpeg_bin","exif_start","exif_end","sig","on_entry","ifds","entry","length","ifd_no","ifd_start","ifd_end","entry_offset","next_ifd","value","ifd","tag","format","v","entry_count","count","comp_length","data_length","data_offset","is_subifd_link","comp_offset","item","on_segment","inside_scan","segment_code","segment_length","byte1","byte2","pos","ranges","out_length","segment","new_segment","new_range","range","on_exif_entry","stop_search","new_exif","header","comment","comment_inserted","segment_count","csegment","jpeg_patch_exif","env","exif_is_big_endian","orientation_offset","orientation_patch","jpeg_rotate_canvas","orientation","jpeg_attach_orig_segments","data_out","segments","reducer","assign_1","jpeg_plugins","ImageBlobReduce","plugin","args","_env","method_name","old_fn","scale_factor","pica_opts","buf","fr","imageBlobReduce"],"mappings":";AAEA,IAAIA,EAAW,SAAgBC,EAAI,CAGjC,QAFIC,EAEKC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzCD,EAAO,OAAO,UAAUC,CAAC,CAAC,EAE1B,QAASC,KAAOF,EACV,OAAO,UAAU,eAAe,KAAKA,EAAME,CAAG,IAAGH,EAAGG,CAAG,EAAIF,EAAKE,CAAG,EAE7E,CAEE,OAAOH,CACT,EAGA,SAASI,EAAKH,EAAMI,EAAO,CACzB,IAAIL,EAAK,CAAE,EAEX,OAAAK,EAAM,QAAQ,SAAUF,EAAK,CACvB,OAAO,UAAU,eAAe,KAAKF,EAAME,CAAG,IAAGH,EAAGG,CAAG,EAAIF,EAAKE,CAAG,EAC3E,CAAG,EAEMH,CACT,CAGA,SAASM,EAAyBL,EAAM,CACtC,OAAOG,EAAKH,EAAM,CAChB,QACA,gBACA,gBACA,mBACA,aACJ,CAAG,CACH,CAGA,IAAIM,EAASH,EACTI,EAA6BF,EAE7BG,EAAQ,CACX,OAAQV,EACR,KAAMQ,EACN,yBAA0BC,CAC3B,EAEA,SAASE,EAAqBC,EAAI,CAChC,IAAIC,EAAS,CAAE,QAAS,EAAI,EAC7B,OAAOD,EAAGC,EAAQA,EAAO,OAAO,EAAGA,EAAO,OAC3C,CAEA,SAASC,EAAiBC,EAAQ,CACjC,MAAM,IAAI,MAAM,kCAAoCA,EAAS,yIAAyI,CACvM,CASA,IAAIC,EAAOL,EAAqB,SAAUE,EAAQI,EAAS,EAC1D,SAASC,EAAE,CAAEL,EAAO,QAAQK,EAAC,CAAI,GAAG,UAAU,CAAC,OAAQ,UAAU,CAAC,SAASC,EAAEC,EAAEC,EAAEC,EAAE,CAAC,SAASC,EAAEC,EAAEN,EAAE,CAAC,GAAG,CAACG,EAAEG,CAAC,EAAE,CAAC,GAAG,CAACJ,EAAEI,CAAC,EAAE,CAAC,IAAIC,EAAc,OAAOX,GAAnB,YAAoCA,EAAgB,GAAG,CAACI,GAAGO,EAAE,OAAOA,EAAED,EAAE,EAAE,EAAE,GAAGE,EAAE,OAAOA,EAAEF,EAAE,EAAE,EAAE,IAAIG,EAAE,IAAI,MAAM,uBAAuBH,EAAE,GAAG,EAAE,MAAMG,EAAE,KAAK,mBAAmBA,CAAC,CAAC,IAAIC,EAAEP,EAAEG,CAAC,EAAE,CAAC,QAAQ,CAAE,CAAA,EAAEJ,EAAEI,CAAC,EAAE,CAAC,EAAE,KAAKI,EAAE,QAAQ,SAAST,EAAE,CAAC,IAAIE,EAAED,EAAEI,CAAC,EAAE,CAAC,EAAEL,CAAC,EAAE,OAAOI,EAAEF,GAAGF,CAAC,CAAC,EAAES,EAAEA,EAAE,QAAQT,EAAEC,EAAEC,EAAEC,CAAC,CAAE,CAAC,OAAOD,EAAEG,CAAC,EAAE,OAAO,CAAC,QAAQE,EAAc,OAAOZ,GAAnB,YAAoCA,EAAgBU,EAAE,EAAEA,EAAEF,EAAE,OAAOE,IAAID,EAAED,EAAEE,CAAC,CAAC,EAAE,OAAOD,CAAC,CAAC,OAAOJ,CAAC,EAAI,EAAC,CAAC,EAAE,CAAC,SAASU,EAAQhB,EAAOI,EAAQ,CAExkB,IAAIa,EAAWD,EAAQ,UAAU,EAE7BE,EAAYF,EAAQ,WAAW,EAE/BG,EAAkBH,EAAQ,mBAAmB,EAE7CI,EAAYJ,EAAQ,aAAa,EAErC,SAASK,EAAQC,EAAoB,CACnC,IAAIC,EAAuBD,GAAsB,CAAE,EAE/CE,EAAW,CACb,GAAID,EAAqB,QAAQ,IAAI,GAAK,EAC1C,KAAMA,EAAqB,QAAQ,MAAM,GAAK,CAC/C,EACDL,EAAU,KAAK,KAAMM,CAAQ,EAC7B,KAAK,SAAW,CACd,GAAIA,EAAS,GACb,KAAMA,EAAS,MAAQ,KAAK,SAAQ,CACrC,EACD,KAAK,IAAIL,CAAe,EACxB,KAAK,IAAIC,CAAS,CACpB,CAEAH,EAASI,EAASH,CAAS,EAE3BG,EAAQ,UAAU,iBAAmB,SAA0BI,EAASC,EAAO,CAC7E,IAAIC,EAAS,KAAK,OAAOF,EAASC,CAAK,EAEvC,OAAID,EAAQ,eACV,KAAK,aAAaE,EAAQF,EAAQ,QAASA,EAAQ,SAAUA,EAAQ,cAAeA,EAAQ,cAAeA,EAAQ,gBAAgB,EAG9HE,CACT,EAEA3B,EAAO,QAAUqB,CAEjB,EAAE,CAAC,cAAc,EAAE,oBAAoB,EAAE,SAAW,GAAG,UAAY,EAAE,CAAC,EAAE,EAAE,CAAC,SAASL,EAAQhB,EAAOI,EAAQ,CAG3G,SAASwB,EAASjB,EAAG,CACnB,OAAOA,EAAI,EAAI,EAAIA,EAAI,IAAM,IAAMA,CACrC,CAWA,SAASkB,EAAqBC,EAAKC,EAAMC,EAAMC,EAAMC,EAAOC,EAAS,CACnE,IAAI7B,EAAG8B,EAAGC,EAAGvB,EACTwB,EAAWC,EAAaC,EACxBC,EAAQC,EAAMC,EAAOC,EACrBC,EAAY,EACZC,EAAa,EAEjB,IAAKJ,EAAO,EAAGA,EAAOT,EAAMS,IAAQ,CAGlC,IAFAJ,EAAY,EAEPK,EAAQ,EAAGA,EAAQT,EAAOS,IAAS,CAOtC,IALAJ,EAAcJ,EAAQG,GAAW,EACjCE,EAAaL,EAAQG,GAAW,EAChCG,EAASI,EAAYN,EAAc,EAAI,EACvCjC,EAAI8B,EAAIC,EAAIvB,EAAI,EAET0B,EAAa,EAAGA,IACrBI,EAAYT,EAAQG,GAAW,EAG/BxB,EAAIA,EAAI8B,EAAYd,EAAIW,EAAS,CAAC,EAAI,EACtCJ,EAAIA,EAAIO,EAAYd,EAAIW,EAAS,CAAC,EAAI,EACtCL,EAAIA,EAAIQ,EAAYd,EAAIW,EAAS,CAAC,EAAI,EACtCnC,EAAIA,EAAIsC,EAAYd,EAAIW,CAAM,EAAI,EAClCA,EAASA,EAAS,EAAI,EAUxBV,EAAKe,EAAa,CAAC,EAAIlB,EAASd,EAAK,MAAY,EAEhD,EACDiB,EAAKe,EAAa,CAAC,EAAIlB,EAASS,EAAK,MAAY,EAEhD,EACDN,EAAKe,EAAa,CAAC,EAAIlB,EAASQ,EAAK,MAAY,EAEhD,EACDL,EAAKe,CAAU,EAAIlB,EAAStB,EAAK,MAAY,EAE5C,EACDwC,EAAaA,EAAab,EAAO,EAAI,CAC3C,CAEIa,GAAcJ,EAAO,GAAK,EAAI,EAC9BG,GAAaH,EAAO,GAAKV,EAAO,EAAI,CACxC,CACA,CAKA,SAASe,EAAmBjB,EAAKC,EAAMC,EAAMC,EAAMC,EAAOC,EAAS,CACjE,IAAI7B,EAAG8B,EAAGC,EAAGvB,EACTwB,EAAWC,EAAaC,EACxBC,EAAQC,EAAMC,EAAOC,EACrBC,EAAY,EACZC,EAAa,EAEjB,IAAKJ,EAAO,EAAGA,EAAOT,EAAMS,IAAQ,CAGlC,IAFAJ,EAAY,EAEPK,EAAQ,EAAGA,EAAQT,EAAOS,IAAS,CAOtC,IALAJ,EAAcJ,EAAQG,GAAW,EACjCE,EAAaL,EAAQG,GAAW,EAChCG,EAASI,EAAYN,EAAc,EAAI,EACvCjC,EAAI8B,EAAIC,EAAIvB,EAAI,EAET0B,EAAa,EAAGA,IACrBI,EAAYT,EAAQG,GAAW,EAG/BxB,EAAIA,EAAI8B,EAAYd,EAAIW,EAAS,CAAC,EAAI,EACtCJ,EAAIA,EAAIO,EAAYd,EAAIW,EAAS,CAAC,EAAI,EACtCL,EAAIA,EAAIQ,EAAYd,EAAIW,EAAS,CAAC,EAAI,EACtCnC,EAAIA,EAAIsC,EAAYd,EAAIW,CAAM,EAAI,EAClCA,EAASA,EAAS,EAAI,EAUxBV,EAAKe,EAAa,CAAC,EAAIlB,EAASd,EAAK,MAAY,EAEhD,EACDiB,EAAKe,EAAa,CAAC,EAAIlB,EAASS,EAAK,MAAY,EAEhD,EACDN,EAAKe,EAAa,CAAC,EAAIlB,EAASQ,EAAK,MAAY,EAEhD,EACDL,EAAKe,CAAU,EAAIlB,EAAStB,EAAK,MAAY,EAE5C,EACDwC,EAAaA,EAAab,EAAO,EAAI,CAC3C,CAEIa,GAAcJ,EAAO,GAAK,EAAI,EAC9BG,GAAaH,EAAO,GAAKV,EAAO,EAAI,CACxC,CACA,CAEAhC,EAAO,QAAU,CACf,qBAAsB6B,EACtB,mBAAoBkB,CACtB,CAEA,EAAE,CAAA,CAAE,EAAE,EAAE,CAAC,SAAS/B,EAAQhB,EAAOI,EAAQ,CAGzCJ,EAAO,QAAU,s3BAEjB,EAAE,CAAA,CAAE,EAAE,EAAE,CAAC,SAASgB,EAAQhB,EAAOI,EAAQ,CAEzCJ,EAAO,QAAU,CACf,KAAM,SACN,GAAIgB,EAAQ,UAAU,EACtB,QAASA,EAAQ,eAAe,EAChC,SAAUA,EAAQ,wBAAwB,CAC5C,CAEA,EAAE,CAAC,yBAAyB,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,EAAE,EAAE,CAAC,SAASA,EAAQhB,EAAOI,EAAQ,CAElG,IAAI4C,EAAgBhC,EAAQ,qBAAqB,EAE7Ca,EAAuBb,EAAQ,YAAY,EAAE,qBAE7C+B,EAAqB/B,EAAQ,YAAY,EAAE,mBAE/C,SAASiC,EAAWC,EAAKC,EAAOC,EAAQ,CAItC,QAHIC,EAAM,EACNC,EAAMH,EAAQC,EAAS,EAAI,EAExBC,EAAMC,GACXJ,EAAIG,CAAG,EAAI,IACXA,EAAMA,EAAM,EAAI,CAEpB,CAEArD,EAAO,QAAU,SAAgByB,EAAS,CACxC,IAAIK,EAAML,EAAQ,IACdO,EAAOP,EAAQ,MACfQ,EAAOR,EAAQ,OACfS,EAAQT,EAAQ,QAChB8B,EAAQ9B,EAAQ,SAChB+B,EAAS/B,EAAQ,QAAUA,EAAQ,QAAUA,EAAQ,MACrDgC,EAAShC,EAAQ,QAAUA,EAAQ,SAAWA,EAAQ,OACtDiC,EAAUjC,EAAQ,SAAW,EAC7BkC,EAAUlC,EAAQ,SAAW,EAC7BM,EAAON,EAAQ,MAAQ,IAAI,WAAWS,EAAQqB,EAAQ,CAAC,EACvDK,EAAU,OAAOnC,EAAQ,QAAY,IAAc,EAAIA,EAAQ,QAC/DoC,EAAQpC,EAAQ,OAAS,GACzBqC,EAAWd,EAAcY,EAAS5B,EAAME,EAAOsB,EAAQE,CAAO,EAC9DK,EAAWf,EAAcY,EAAS3B,EAAMsB,EAAOE,EAAQE,CAAO,EAC9DK,EAAM,IAAI,WAAW9B,EAAQD,EAAO,CAAC,EAIzC,OAAAJ,EAAqBC,EAAKkC,EAAKhC,EAAMC,EAAMC,EAAO4B,CAAQ,EAC1Df,EAAmBiB,EAAKjC,EAAME,EAAMC,EAAOqB,EAAOQ,CAAQ,EAIrDF,GAAOZ,EAAWlB,EAAMG,EAAOqB,CAAK,EAClCxB,CACT,CAEA,EAAE,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC,EAAE,EAAE,CAAC,SAASf,EAAQhB,EAAOI,EAAQ,CAE/E,IAAI6D,EAAcjD,EAAQ,sBAAsB,EAG5CkD,EAAkB,GAEtB,SAASC,EAAaC,EAAK,CACzB,OAAO,KAAK,MAAMA,IAAQ,GAAKF,GAAmB,EAAE,CACtD,CAEAlE,EAAO,QAAU,SAAyB4D,EAASS,EAASC,EAAUC,EAAOC,EAAQ,CACnF,IAAIC,EAAiBR,EAAYL,CAAO,EAAE,OACtCc,EAAgB,EAAMH,EACtBI,EAAe,KAAK,IAAI,EAAKJ,CAAK,EAGlCK,EAAYX,EAAYL,CAAO,EAAE,IAAMe,EACvCE,EAAWC,EAAUC,EAAUC,EAASC,EAAmBC,EAAaC,EAAWC,EAAOC,EAAKC,EAAKC,EAAUC,EAAa5C,EAC3H6C,EAAcC,EAAenD,EAAaC,EAC1CmD,EAAuB,KAAK,OAAOf,EAAY,GAAK,CAAC,EACrDgB,EAAe,IAAI,YAAYD,EAAuB,GAAKrB,CAAQ,EACnEuB,EAAkB,EAClBC,EAAW,CAACF,EAAa,UAAY,CAACA,EAAa,IAEvD,IAAKf,EAAY,EAAGA,EAAYP,EAAUO,IAAa,CAUrD,IARAC,GAAYD,EAAY,IAAOH,EAAgBF,EAC/CO,EAAW,KAAK,IAAI,EAAG,KAAK,MAAMD,EAAWF,CAAS,CAAC,EACvDI,EAAU,KAAK,IAAIX,EAAU,EAAG,KAAK,KAAKS,EAAWF,CAAS,CAAC,EAC/DK,EAAoBD,EAAUD,EAAW,EACzCG,EAAc,IAAI,aAAaD,CAAiB,EAChDE,EAAY,IAAI,WAAWF,CAAiB,EAC5CG,EAAQ,EAEHC,EAAMN,EAAUO,EAAM,EAAGD,GAAOL,EAASK,IAAOC,IACnDC,EAAWd,GAAgBY,EAAM,GAAMP,GAAYH,CAAY,EAC/DS,GAASG,EACTL,EAAYI,CAAG,EAAIC,EAMrB,IAFAC,EAAc,EAETF,EAAM,EAAGA,EAAMJ,EAAY,OAAQI,IACtC1C,EAAYsC,EAAYI,CAAG,EAAIF,EAC/BI,GAAe5C,EACfuC,EAAUG,CAAG,EAAInB,EAAavB,CAAS,EAezC,IAXAuC,EAAUb,GAAY,CAAC,GAAKH,EAAa,EAAMqB,CAAW,EAS1DC,EAAe,EAERA,EAAeN,EAAU,QAAUA,EAAUM,CAAY,IAAM,GACpEA,IAGF,GAAIA,EAAeN,EAAU,OAAQ,CAGnC,IAFAO,EAAgBP,EAAU,OAAS,EAE5BO,EAAgB,GAAKP,EAAUO,CAAa,IAAM,GACvDA,IASF,GANAnD,EAAcwC,EAAWU,EACzBjD,EAAakD,EAAgBD,EAAe,EAC5CG,EAAaC,GAAiB,EAAItD,EAElCqD,EAAaC,GAAiB,EAAIrD,EAE9B,CAACsD,EACHF,EAAa,IAAIT,EAAU,SAASM,EAAcC,EAAgB,CAAC,EAAGG,CAAe,EACrFA,GAAmBrD,MAGd8C,KAAAA,EAAMG,EAAcH,GAAOI,EAAeJ,IAC7CM,EAAaC,GAAiB,EAAIV,EAAUG,CAAG,CAGzD,MAEMM,EAAaC,GAAiB,EAAI,EAElCD,EAAaC,GAAiB,EAAI,CAExC,CAEE,OAAOD,CACT,CAEA,EAAE,CAAC,uBAAuB,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS5E,EAAQhB,EAAOI,EAAQ,CAEjEJ,EAAO,QAAU,CAAC,CAEhB,IAAK,GACL,OAAQ,SAAgB+F,EAAG,CACzB,OAAOA,GAAK,KAAQA,EAAI,GAAM,EAAM,CACxC,CACA,EAAG,CAED,IAAK,EACL,OAAQ,SAAgBA,EAAG,CACzB,GAAIA,GAAK,IAAQA,GAAK,EACpB,SAGF,GAAIA,EAAI,eAAmBA,EAAI,aAC7B,MAAO,GAGT,IAAIC,EAAMD,EAAI,KAAK,GACnB,OAAO,KAAK,IAAIC,CAAG,EAAIA,GAAO,IAAO,IAAO,KAAK,IAAIA,EAAM,CAAG,EAClE,CACA,EAAG,CAED,IAAK,EACL,OAAQ,SAAgBD,EAAG,CACzB,GAAIA,GAAK,IAAQA,GAAK,EACpB,MAGF,GAAA,GAAIA,EAAI,eAAmBA,EAAI,aAC7B,MAGF,GAAA,IAAIC,EAAMD,EAAI,KAAK,GACnB,OAAO,KAAK,IAAIC,CAAG,EAAIA,EAAM,KAAK,IAAIA,EAAM,CAAG,GAAKA,EAAM,EAC9D,CACA,EAAG,CAED,IAAK,EACL,OAAQ,SAAgBD,EAAG,CACzB,GAAIA,GAAK,IAAQA,GAAK,EACpB,MAAO,GAGT,GAAIA,EAAI,eAAmBA,EAAI,aAC7B,MAAO,GAGT,IAAIC,EAAMD,EAAI,KAAK,GACnB,OAAO,KAAK,IAAIC,CAAG,EAAIA,EAAM,KAAK,IAAIA,EAAM,CAAG,GAAKA,EAAM,EAC9D,CACA,CAAC,CAED,EAAE,CAAA,CAAE,EAAE,EAAE,CAAC,SAAShF,EAAQhB,EAAOI,EAAQ,CAEzC,IAAI4C,EAAgBhC,EAAQ,qBAAqB,EAEjD,SAASiC,EAAWC,EAAKC,EAAOC,EAAQ,CAItC,QAHIC,EAAM,EACNC,EAAMH,EAAQC,EAAS,EAAI,EAExBC,EAAMC,GACXJ,EAAIG,CAAG,EAAI,IACXA,EAAMA,EAAM,EAAI,CAEpB,CAEA,SAAS4C,EAAanE,EAAK,CACzB,OAAO,IAAI,WAAWA,EAAI,OAAQ,EAAGA,EAAI,UAAU,CACrD,CAEA,IAAIoE,EAAQ,GAEZ,GAAI,CACFA,EAAQ,IAAI,YAAY,IAAI,WAAW,CAAC,EAAG,EAAG,EAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,IAAM,CACtE,MAAa,CAAA,CAEb,SAASC,EAAcrE,EAAK5B,EAAQkG,EAAe,CACjD,GAAIF,EAAO,CACThG,EAAO,IAAI+F,EAAanE,CAAG,EAAGsE,CAAa,EAC3C,MACJ,CAEE,QAAS/C,EAAM+C,EAAezF,EAAI,EAAGA,EAAImB,EAAI,OAAQnB,IAAK,CACxD,IAAI0F,EAAOvE,EAAInB,CAAC,EAChBT,EAAOmD,GAAK,EAAIgD,EAAO,IACvBnG,EAAOmD,GAAK,EAAIgD,GAAQ,EAAI,GAChC,CACA,CAEArG,EAAO,QAAU,SAAqByB,EAAS,CAC7C,IAAIK,EAAML,EAAQ,IACdO,EAAOP,EAAQ,MACfQ,EAAOR,EAAQ,OACfS,EAAQT,EAAQ,QAChB8B,EAAQ9B,EAAQ,SAChB+B,EAAS/B,EAAQ,QAAUA,EAAQ,QAAUA,EAAQ,MACrDgC,EAAShC,EAAQ,QAAUA,EAAQ,SAAWA,EAAQ,OACtDiC,EAAUjC,EAAQ,SAAW,EAC7BkC,EAAUlC,EAAQ,SAAW,EAC7BM,EAAON,EAAQ,MAAQ,IAAI,WAAWS,EAAQqB,EAAQ,CAAC,EACvDK,EAAU,OAAOnC,EAAQ,QAAY,IAAc,EAAIA,EAAQ,QAC/DoC,EAAQpC,EAAQ,OAAS,GACzBqC,EAAWd,EAAcY,EAAS5B,EAAME,EAAOsB,EAAQE,CAAO,EAC9DK,EAAWf,EAAcY,EAAS3B,EAAMsB,EAAOE,EAAQE,CAAO,EAE9D2C,EAAa,EAEbC,EAAa,KAAK,QAAQD,EAAa,KAAK,IAAIxE,EAAI,WAAYC,EAAK,UAAU,CAAC,EAEhFyE,EAAkB,KAAK,QAAQD,EAAatE,EAAOC,EAAQ,CAAC,EAE5DuE,EAAkB,KAAK,QAAQD,EAAkB1C,EAAS,UAAU,EAEpE4C,EAAcD,EAAkB1C,EAAS,WAEzC4C,EAAW,KAAK,WAAW,SAAUD,CAAW,EAKhDE,EAAM,IAAI,WAAW,KAAK,SAAS,MAAM,EACzCC,EAAQ,IAAI,YAAY,KAAK,SAAS,MAAM,EAE5CC,EAAQ,IAAI,YAAYhF,EAAI,MAAM,EACtC+E,EAAM,IAAIC,CAAK,EAGfX,EAAcrC,EAAU8C,EAAKJ,CAAe,EAC5CL,EAAcpC,EAAU6C,EAAKH,CAAe,EAI5C,IAAI1G,EAAK4G,EAAS,QAAQ,YAAcA,EAAS,QAAQ,YACzD5G,EAAGyG,EAAiBC,EAAiBF,EAAYvE,EAAMC,EAAMC,EAAOqB,CAAK,EAKzE,IAAIwD,EAAS,IAAI,YAAYhF,EAAK,MAAM,EACxC,OAAAgF,EAAO,IAAI,IAAI,YAAY,KAAK,SAAS,OAAQ,EAAGxD,EAAQrB,CAAK,CAAC,EAI7D2B,GAAOZ,EAAWlB,EAAMG,EAAOqB,CAAK,EAClCxB,CACT,CAEA,EAAE,CAAC,sBAAsB,CAAC,CAAC,EAAE,EAAE,CAAC,SAASf,EAAQhB,EAAOI,EAAQ,CAEhEJ,EAAO,QAAU,CACf,KAAM,eACN,GAAIgB,EAAQ,gBAAgB,EAC5B,QAASA,EAAQ,qBAAqB,EACtC,SAAUA,EAAQ,4BAA4B,CAChD,CAEA,EAAE,CAAC,iBAAiB,GAAG,sBAAsB,GAAG,6BAA6B,EAAE,CAAC,EAAE,GAAG,CAAC,SAASA,EAAQhB,EAAOI,EAAQ,CAEtH,IAAI4G,EAAchG,EAAQ,aAAa,EAEvC,SAASiG,EAAQC,EAAK/D,EAAOC,EAAQ,CAKnC,QAJI+D,EAAOhE,EAAQC,EACfgE,EAAM,IAAI,YAAYD,CAAI,EAC1B7G,EAAG8B,EAAGC,EAAGgF,EAEJ1G,EAAI,EAAGA,EAAIwG,EAAMxG,IACxBL,EAAI4G,EAAI,EAAIvG,CAAC,EACbyB,EAAI8E,EAAI,EAAIvG,EAAI,CAAC,EACjB0B,EAAI6E,EAAI,EAAIvG,EAAI,CAAC,EACjB0G,EAAM/G,GAAK8B,GAAK9B,GAAK+B,EAAI/B,EAAI8B,GAAKC,GAAKD,GAAK9B,EAAI8B,EAAIC,EACpD+E,EAAIzG,CAAC,EAAI0G,GAAO,EAGlB,OAAOD,CACT,CAEApH,EAAO,QAAU,SAAiBkH,EAAK/D,EAAOC,EAAQkE,EAAQC,EAAQC,EAAW,CAC/E,IAAIC,EAAIC,EAAIC,EACRC,EAAMC,EAEV,GAAI,EAAAP,IAAW,GAAKC,EAAS,IAI7B,CAAIA,EAAS,IACXA,EAAS,GAGX,IAAIO,EAAab,EAAQC,EAAK/D,EAAOC,CAAM,EACvC2E,EAAS,IAAI,YAAYD,CAAU,EAEvCd,EAAYe,EAAQ5E,EAAOC,EAAQmE,CAAM,EAMzC,QALIS,EAAWV,EAAS,IAAM,KAAS,GAAM,EACzCW,EAAcT,GAAa,EAC3BL,EAAOhE,EAAQC,EAGVzC,EAAI,EAAGA,EAAIwG,EAAMxG,IACxB8G,EAAKK,EAAWnH,CAAC,EACjBiH,EAAOH,EAAKM,EAAOpH,CAAC,EAEhB,KAAK,IAAIiH,CAAI,GAAKK,IAEpBP,EAAKD,GAAMO,EAAWJ,EAAO,MAAS,IAItCF,EAAKA,EAAK,MAAS,MAASA,EAC5BA,EAAKA,EAAK,EAAS,EAASA,EAG5BD,EAAKA,IAAO,EAAIA,EAAK,EAIrBE,GAAQD,GAAM,IAAMD,EAAK,EAMzBI,EAAUlH,EAAI,EACduG,EAAIW,CAAO,EAAIX,EAAIW,CAAO,EAAIF,EAAO,MAAS,GAE9CT,EAAIW,EAAU,CAAC,EAAIX,EAAIW,EAAU,CAAC,EAAIF,EAAO,MAAS,GAEtDT,EAAIW,EAAU,CAAC,EAAIX,EAAIW,EAAU,CAAC,EAAIF,EAAO,MAAS,GAAA,CAG5D,CAEA,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS3G,EAAQhB,EAAOI,EAAQ,CAE1DJ,EAAO,QAAU,SAAiBkH,EAAK/D,EAAOC,EAAQkE,EAAQC,EAAQC,EAAW,CAC/E,GAAI,EAAAF,IAAW,GAAKC,EAAS,IAI7B,CAAIA,EAAS,IACXA,EAAS,GAGX,IAAIW,EAAS/E,EAAQC,EACjB+E,EAAgBD,EAAS,EACzBE,EAAgBF,EAAS,EACzBG,EAAiBH,EAAS,EAC1BI,EAAqB,KAAK,IAAInF,EAAOC,CAAM,EAAI,EAE/CmF,EAAuB,EAAI,EAE3BC,EAAa,EACbC,EAAaN,EACbO,EAAcD,EAAaL,EAC3BO,EAAkBD,EAAcL,EAChCO,EAAmBD,EAAkBN,EACrCQ,EAAqBD,EAAmBN,EAExC3B,EAAW,KAAK,WAAW,eAAgBwB,EAAgBC,EAAgBC,EAAiB,EAAIC,EAAqBC,EAAsB,CAC7I,IAAK,KAAK,GACd,CAAG,EAGGO,EAAQ,IAAI,YAAY5B,EAAI,MAAM,EAClCL,EAAQ,IAAI,YAAY,KAAK,SAAS,MAAM,EAChDA,EAAM,IAAIiC,CAAK,EAEf,IAAI/I,EAAK4G,EAAS,QAAQ,SAAWA,EAAS,QAAQ,SACtD5G,EAAGyI,EAAYC,EAAYtF,EAAOC,CAAM,EAExCrD,EAAK4G,EAAS,QAAQ,YAAcA,EAAS,QAAQ,YACrD5G,EAAG0I,EAAYC,EAAaC,EAAiBC,EAAkBC,EAAoB1F,EAAOC,EAAQmE,CAAM,EAExGxH,EAAK4G,EAAS,QAAQ,SAAWA,EAAS,QAAQ,SAClD5G,EAAGyI,EAAYA,EAAYC,EAAYC,EAAavF,EAAOC,EAAQkE,EAAQE,CAAS,EAEpFsB,EAAM,IAAI,IAAI,YAAY,KAAK,SAAS,OAAQ,EAAGZ,CAAM,CAAC,EAC5D,CAEA,EAAE,CAAA,CAAE,EAAE,GAAG,CAAC,SAASlH,EAAQhB,EAAOI,EAAQ,CAG1CJ,EAAO,QAAU,87EAEjB,EAAE,CAAA,CAAE,EAAE,GAAG,CAAC,SAASgB,EAAQhB,EAAOI,EAAQ,CAE1C,IAAI2I,EAAc,IAElB,SAASC,EAAKC,EAAQC,EAAM,CAC1B,KAAK,OAASD,EACd,KAAK,UAAY,CAAE,EACnB,KAAK,SAAW,CAAE,EAClB,KAAK,OAAS,EACd,KAAK,UAAY,EACjB,KAAK,KAAOC,GAAQ,GACtB,CAEAF,EAAK,UAAU,QAAU,UAAY,CACnC,IAAIG,EAAQ,KAERC,EAEJ,OAAI,KAAK,UAAU,SAAW,EAC5BA,EAAW,KAAK,UAAU,IAAK,GAE/BA,EAAW,KAAK,OAAQ,EACxBA,EAAS,GAAK,KAAK,SAEnBA,EAAS,QAAU,UAAY,CAC7B,OAAOD,EAAM,QAAQC,CAAQ,CAC9B,GAGH,KAAK,SAASA,EAAS,EAAE,EAAIA,EACtBA,CACT,EAEAJ,EAAK,UAAU,QAAU,SAAUI,EAAU,CAC3C,IAAIC,EAAS,KAEb,OAAO,KAAK,SAASD,EAAS,EAAE,EAChCA,EAAS,SAAW,KAAK,IAAK,EAC9B,KAAK,UAAU,KAAKA,CAAQ,EAExB,KAAK,YAAc,IACrB,KAAK,UAAY,WAAW,UAAY,CACtC,OAAOC,EAAO,GAAI,CACnB,EAAEN,CAAW,EAElB,EAEAC,EAAK,UAAU,GAAK,UAAY,CAC9B,IAAIM,EAAS,KAETC,EAAM,KAAK,IAAK,EACpB,KAAK,UAAY,KAAK,UAAU,OAAO,SAAUH,EAAU,CACzD,OAAIG,EAAMH,EAAS,SAAWE,EAAO,MACnCF,EAAS,QAAS,EACX,IAGF,EACX,CAAG,EAEG,KAAK,UAAU,SAAW,EAC5B,KAAK,UAAY,WAAW,UAAY,CACtC,OAAOE,EAAO,GAAI,CACnB,EAAEP,CAAW,EAEd,KAAK,UAAY,CAErB,EAEA/I,EAAO,QAAUgJ,CAEjB,EAAE,CAAA,CAAE,EAAE,GAAG,CAAC,SAAShI,EAAQhB,EAAOI,EAAQ,CAG1C,IAAIoJ,EAAsB,EAE1BxJ,EAAO,QAAU,SAAsByJ,EAAWC,EAAYC,EAASC,EAAUC,EAAaC,EAAgB,CAC5G,IAAItG,EAASmG,EAAUF,EACnBhG,EAASmG,EAAWF,EAGpBK,GAAY,EAAID,EAAiBN,EAAsB,GAAKK,EAGhE,GAAIE,EAAW,GAAK,MAAO,CAAC,CAACJ,EAASC,CAAQ,CAAC,EAC/C,IAAII,EAAa,KAAK,KAAK,KAAK,IAAI,KAAK,IAAIxG,EAAQC,CAAM,CAAC,EAAI,KAAK,IAAIsG,CAAQ,CAAC,EAGlF,GAAIC,GAAc,EAAG,MAAO,CAAC,CAACL,EAASC,CAAQ,CAAC,EAGhD,QAFIjI,EAAS,CAAE,EAENhB,EAAI,EAAGA,EAAIqJ,EAAYrJ,IAAK,CACnC,IAAIwC,EAAQ,KAAK,MAAM,KAAK,IAAI,KAAK,IAAIsG,EAAWO,EAAarJ,EAAI,CAAC,EAAI,KAAK,IAAIgJ,EAAShJ,EAAI,CAAC,EAAG,EAAIqJ,CAAU,CAAC,EAC/G5G,EAAS,KAAK,MAAM,KAAK,IAAI,KAAK,IAAIsG,EAAYM,EAAarJ,EAAI,CAAC,EAAI,KAAK,IAAIiJ,EAAUjJ,EAAI,CAAC,EAAG,EAAIqJ,CAAU,CAAC,EACtHrI,EAAO,KAAK,CAACwB,EAAOC,CAAM,CAAC,CAC/B,CAEE,OAAOzB,CACT,CAEA,EAAE,CAAA,CAAE,EAAE,GAAG,CAAC,SAASX,EAAQhB,EAAOI,EAAQ,CAS1C,IAAI6J,EAAgB,KAEpB,SAASC,EAAWnE,EAAG,CACrB,IAAIoE,EAAU,KAAK,MAAMpE,CAAC,EAE1B,OAAI,KAAK,IAAIA,EAAIoE,CAAO,EAAIF,EACnBE,EAGF,KAAK,MAAMpE,CAAC,CACrB,CAEA,SAASqE,EAAUrE,EAAG,CACpB,IAAIoE,EAAU,KAAK,MAAMpE,CAAC,EAE1B,OAAI,KAAK,IAAIA,EAAIoE,CAAO,EAAIF,EACnBE,EAGF,KAAK,KAAKpE,CAAC,CACpB,CAEA/F,EAAO,QAAU,SAAuByB,EAAS,CAC/C,IAAI+B,EAAS/B,EAAQ,QAAUA,EAAQ,MACnCgC,EAAShC,EAAQ,SAAWA,EAAQ,OACpC4I,EAAiBH,EAAWzI,EAAQ,YAAc+B,CAAM,EAAI,EAAI/B,EAAQ,eACxE6I,EAAkBJ,EAAWzI,EAAQ,YAAcgC,CAAM,EAAI,EAAIhC,EAAQ,eAE7E,GAAI4I,EAAiB,GAAKC,EAAkB,EAC1C,MAAM,IAAI,MAAM,gEAAgE,EAGlF,IAAIvE,EAAGwE,EACHC,EAAQC,EAAQC,EAAaC,EAC7BC,EAAQ,CAAE,EACVC,EAGJ,IAAKJ,EAAS,EAAGA,EAAShJ,EAAQ,SAAUgJ,GAAUH,EACpD,IAAKE,EAAS,EAAGA,EAAS/I,EAAQ,QAAS+I,GAAUH,EACnDtE,EAAIyE,EAAS/I,EAAQ,eAEjBsE,EAAI,IACNA,EAAI,GAGN2E,EAAcF,EAASH,EAAiB5I,EAAQ,eAAiBsE,EAE7DA,EAAI2E,GAAejJ,EAAQ,UAC7BiJ,EAAcjJ,EAAQ,QAAUsE,GAGlCwE,EAAIE,EAAShJ,EAAQ,eAEjB8I,EAAI,IACNA,EAAI,GAGNI,EAAeF,EAASH,EAAkB7I,EAAQ,eAAiB8I,EAE/DA,EAAII,GAAgBlJ,EAAQ,WAC9BkJ,EAAelJ,EAAQ,SAAW8I,GAGpCM,EAAO,CACL,IAAK9E,EACL,IAAKwE,EACL,QAASG,EACT,SAAUC,EACV,SAAUH,EACV,SAAUC,EACV,aAAcJ,EACd,cAAeC,EACf,QAASvE,EAAIvC,EAAS0G,EAAWnE,EAAIvC,CAAM,EAC3C,QAAS+G,EAAI9G,EAASyG,EAAWK,EAAI9G,CAAM,EAC3C,OAAQD,EACR,OAAQC,EACR,EAAGyG,EAAWnE,EAAIvC,CAAM,EACxB,EAAG0G,EAAWK,EAAI9G,CAAM,EACxB,MAAO2G,EAAUM,EAAclH,CAAM,EACrC,OAAQ4G,EAAUO,EAAelH,CAAM,CACxC,EACDmH,EAAM,KAAKC,CAAI,EAInB,OAAOD,CACT,CAEA,EAAE,CAAA,CAAE,EAAE,GAAG,CAAC,SAAS5J,EAAQhB,EAAOI,EAAQ,CAE1C,SAAS0K,EAASC,EAAK,CACrB,OAAO,OAAO,UAAU,SAAS,KAAKA,CAAG,CAC3C,CAEA/K,EAAO,QAAQ,SAAW,SAAkBgL,EAAS,CACnD,IAAIC,EAAQH,EAASE,CAAO,EAC5B,OAAOC,IAAU,8BAEdA,IAAU,4BAA8BA,IAAU,iBAGvD,EAEAjL,EAAO,QAAQ,QAAU,SAAiBgL,EAAS,CACjD,OAAOF,EAASE,CAAO,IAAM,2BAC/B,EAEAhL,EAAO,QAAQ,cAAgB,SAAuBgL,EAAS,CAC7D,OAAOF,EAASE,CAAO,IAAM,sBAC/B,EAEAhL,EAAO,QAAQ,QAAU,SAAiBkL,EAAa,CACrD,IAAIC,EAAS,EACTC,EAAQ,CAAE,EAEd,SAASC,GAAO,CACVF,EAASD,GAAeE,EAAM,SAChCD,IACAC,EAAM,MAAK,EAAI,EAErB,CAEE,OAAO,SAAerL,EAAI,CACxB,OAAO,IAAI,QAAQ,SAAUuL,EAASC,EAAQ,CAC5CH,EAAM,KAAK,UAAY,CACrBrL,EAAI,EAAC,KAAK,SAAU4B,EAAQ,CAC1B2J,EAAQ3J,CAAM,EACdwJ,IACAE,EAAM,CACP,EAAE,SAAUG,EAAK,CAChBD,EAAOC,CAAG,EACVL,IACAE,EAAM,CAChB,CAAS,CACT,CAAO,EACDA,EAAM,CACZ,CAAK,CACF,CACH,EAEArL,EAAO,QAAQ,iBAAmB,SAA0BoE,EAAK,CAC/D,OAAQA,EAAG,CACT,OACE,MAAO,YAET,IAAK,GACH,MAAO,MAET,IACE,GAAA,MAAO,QACb,CAEE,MAAO,MACT,EAEApE,EAAO,QAAQ,YAAc,SAAqByL,EAAc,CAC9D,OAAO,QAAQ,UAAU,KAAK,UAAY,CACxC,GAAI,OAAO,kBAAsB,IAC/B,MAAO,GAGT,IAAI7K,EAAI6K,EAAa,IAAK,GAAG,EAC7B,OAAO,kBAAkB7K,EAAG,EAAG,EAAG,IAAK,IAAK,CAC1C,YAAa,GACb,aAAc,GACd,cAAe,MACrB,CAAK,EAAE,KAAK,SAAU8K,EAAQ,CACxB,IAAIC,EAASD,EAAO,QAAU,GAQ9B,OAAAA,EAAO,MAAO,EACd9K,EAAI,KACG+K,CACb,CAAK,CACL,CAAG,EAAE,MAAS,UAAY,CACtB,MAAO,EACX,CAAG,CACH,EAEA3L,EAAO,QAAQ,gCAAkC,UAA2C,CAC1F,OAAO,IAAI,QAAQ,SAAUsL,EAASC,EAAQ,CAC5C,GAAI,OAAO,gBAAoB,IAAa,CAE1CD,EAAQ,EAAK,EACb,MACN,CAEI,SAASM,EAAcC,EAAM,CAC3B,GAAI,OAAO,kBAAsB,IAAa,CAC5CA,EAAK,YAAY,EAAK,EACtB,MACR,CAEM,QAAQ,UAAU,KAAK,UAAY,CACjC,IAAIC,EAAS,IAAI,gBAAgB,GAAI,EAAE,EAEnCC,EAAMD,EAAO,WAAW,IAAI,EAChC,OAAAC,EAAI,KAAK,EAAG,EAAG,EAAG,CAAC,EAEZ,kBAAkBD,EAAQ,EAAG,EAAG,EAAG,CAAC,CACnD,CAAO,EAAE,KAAK,UAAY,CAClB,OAAOD,EAAK,YAAY,EAAI,CACpC,EAAS,UAAY,CACb,OAAOA,EAAK,YAAY,EAAK,CACrC,CAAO,CACP,CAEI,IAAIG,EAAO,KAAK,IAAI,OAAOJ,EAAc,SAAQ,EAAI,UAAU,CAAC,EAC5DK,EAAI,IAAI,OAAO,+BAA+B,OAAOD,CAAI,CAAC,EAE9DC,EAAE,UAAY,SAAUC,EAAI,CAC1B,OAAOZ,EAAQY,EAAG,IAAI,CACvB,EAEDD,EAAE,QAAUV,CAChB,CAAG,EAAE,KAAK,SAAU5J,EAAQ,CACxB,OAAOA,CACX,EAAK,UAAY,CACb,MAAO,EACX,CAAG,CACH,EAIA3B,EAAO,QAAQ,eAAiB,SAAwByL,EAAc,CACpE,IAAIU,EAAS,GAEb,GAAI,CACF,IAAIL,EAASL,EAAa,EAAG,CAAC,EAC1BM,EAAMD,EAAO,WAAW,IAAI,EAC5BM,EAAIL,EAAI,gBAAgB,EAAG,CAAC,EAChCK,EAAE,KAAK,CAAC,EAAI,GACZA,EAAE,KAAK,CAAC,EAAI,GACZA,EAAE,KAAK,CAAC,EAAI,GACZA,EAAE,KAAK,CAAC,EAAI,IACZA,EAAE,KAAK,CAAC,EAAI,GACZA,EAAE,KAAK,CAAC,EAAI,GACZA,EAAE,KAAK,CAAC,EAAI,GACZA,EAAE,KAAK,CAAC,EAAI,IACZL,EAAI,aAAaK,EAAG,EAAG,CAAC,EACxBA,EAAI,KACJA,EAAIL,EAAI,aAAa,EAAG,EAAG,EAAG,CAAC,EAE3BK,EAAE,KAAK,CAAC,IAAM,IAAMA,EAAE,KAAK,CAAC,IAAM,IAAMA,EAAE,KAAK,CAAC,IAAM,IAAMA,EAAE,KAAK,CAAC,IAAM,KAAOA,EAAE,KAAK,CAAC,IAAM,IAAMA,EAAE,KAAK,CAAC,IAAM,IAAMA,EAAE,KAAK,CAAC,IAAM,IAAMA,EAAE,KAAK,CAAC,IAAM,MAC7JD,EAAS,GAEZ,MAAa,CAAA,CAEd,OAAOA,CACT,EAMAnM,EAAO,QAAQ,mBAAqB,UAA8B,CAChE,OAAO,IAAI,QAAQ,SAAUsL,EAAS,CACpC,GAAI,OAAO,kBAAsB,IAAa,CAC5CA,EAAQ,EAAK,EACb,MACN,CAEI,IAAIe,EAAQ,IAAI,MAChBA,EAAM,IAAM,0zBAEZA,EAAM,OAAS,UAAY,CACzB,kBAAkBA,EAAO,EAAG,EAAGA,EAAM,MAAOA,EAAM,MAAM,EAAE,KAAK,SAAUX,EAAQ,CAC3EA,EAAO,QAAUW,EAAM,OAASX,EAAO,SAAWW,EAAM,OAC1Df,EAAQ,EAAI,EAEZA,EAAQ,EAAK,CAEvB,EAAS,UAAY,CACb,OAAOA,EAAQ,EAAK,CAC5B,CAAO,CACF,EAEDe,EAAM,QAAU,UAAY,CAC1B,OAAOf,EAAQ,EAAK,CACrB,CACL,CAAG,CACH,CAEA,EAAE,CAAA,CAAE,EAAE,GAAG,CAAC,SAAStK,EAAQhB,EAAOI,EAAQ,CAE1CJ,EAAO,QAAU,UAAY,CAC3B,IAAIqB,EAAUL,EAAQ,WAAW,EAE7BsL,EAGJ,UAAY,SAAmBJ,EAAI,CACjC,IAAIK,EAAWL,EAAG,KAAK,KACnBM,EAAe,GAEnB,GAAI,CAACD,EAAS,KAAOA,EAAS,UAAW,CACvC,IAAIT,EAAS,IAAI,gBAAgBS,EAAS,MAAOA,EAAS,MAAM,EAC5DR,EAAMD,EAAO,WAAW,KAAM,CAChC,MAAO,EAAQS,EAAS,KAChC,CAAO,EACDR,EAAI,UAAUQ,EAAS,UAAW,EAAG,CAAC,EACtCA,EAAS,IAAMR,EAAI,aAAa,EAAG,EAAGQ,EAAS,MAAOA,EAAS,MAAM,EAAE,KACvET,EAAO,MAAQA,EAAO,OAAS,EAC/BA,EAAS,KACTS,EAAS,UAAU,MAAO,EAC1BA,EAAS,UAAY,KACrBC,EAAe,EACrB,CAESF,IAASA,EAAU,IAAIjL,EAAQ6K,EAAG,KAAK,QAAQ,GAGpD,IAAI7F,EAAOiG,EAAQ,iBAAiBC,CAAQ,EAE5C,GAAIC,EAAc,CAChB,IAAIC,EAAc,IAAI,UAAU,IAAI,kBAAkBpG,CAAI,EAAGkG,EAAS,QAASA,EAAS,QAAQ,EAE5FG,EAAU,IAAI,gBAAgBH,EAAS,QAASA,EAAS,QAAQ,EAEjEI,EAAOD,EAAQ,WAAW,KAAM,CAClC,MAAO,EAAQH,EAAS,KAChC,CAAO,EAEDI,EAAK,aAAaF,EAAa,EAAG,CAAC,EAEnC,kBAAkBC,CAAO,EAAE,KAAK,SAAUhB,EAAQ,CAChD,YAAY,CACV,OAAQA,CAClB,EAAW,CAACA,CAAM,CAAC,CACnB,CAAO,CACP,MACM,YAAY,CACV,KAAMrF,CACd,EAAS,CAACA,EAAK,MAAM,CAAC,CAEnB,CACH,CAEA,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,SAASrF,EAAQhB,EAAOI,EAAQ,CAMvD,IAAIwM,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAaC,EAEzC,SAASC,EAAUC,EAAO,CACpBA,EAAQ,KACVA,EAAQ,IAGV,IAAIvM,EAAI,KAAK,IAAI,KAAQ,IAAK,EAAIuM,EAC9BC,EAAK,KAAK,IAAI,CAACxM,CAAC,EAChByM,EAAK,KAAK,IAAI,GAAKzM,CAAC,EACpB0M,GAAK,EAAIF,IAAO,EAAIA,IAAO,EAAI,EAAIxM,EAAIwM,EAAKC,GAEhD,OAAAX,EAAKY,EACLX,EAAKW,GAAK1M,EAAI,GAAKwM,EACnBR,EAAKU,GAAK1M,EAAI,GAAKwM,EACnBP,EAAK,CAACS,EAAID,EACVP,EAAK,EAAIM,EACTL,EAAK,CAACM,EACNL,GAAeN,EAAKC,IAAO,EAAIG,EAAKC,GACpCE,GAAgBL,EAAKC,IAAO,EAAIC,EAAKC,GAG9B,IAAI,aAAa,CAAEL,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAaC,CAAY,CAAE,CAC/E,CAEA,SAASM,EAAe3L,EAAKsF,EAAKsG,EAAMC,EAAOxK,EAAOC,EAAQ,CAG5D,IAAIwK,EAAUC,EAAUC,EAAUC,EAAUC,EACxCC,EAAWC,EAAWC,EACtBxN,EAAGyN,EACHC,EAAUC,EAAUC,EAAUC,EAElC,IAAK7N,EAAI,EAAGA,EAAIyC,EAAQzC,IAAK,CAe3B,IAdAsN,EAAYtN,EAAIwC,EAChB+K,EAAYvN,EACZwN,EAAa,EAGbP,EAAW9L,EAAImM,CAAS,EACxBD,EAAgBJ,EAAWD,EAAM,CAAC,EAClCI,EAAWC,EAEXK,EAAWV,EAAM,CAAC,EAClBW,EAAWX,EAAM,CAAC,EAClBY,EAAWZ,EAAM,CAAC,EAClBa,EAAWb,EAAM,CAAC,EAEbS,EAAI,EAAGA,EAAIjL,EAAOiL,IACrBP,EAAW/L,EAAImM,CAAS,EAExBH,EAAWD,EAAWQ,EACXT,EAAWU,EACXP,EAAWQ,EACXP,EAAgBQ,EAE3BR,EAAgBD,EAChBA,EAAWD,EACXF,EAAWC,EAEXH,EAAKS,CAAU,EAAIJ,EACnBI,IACAF,IAgBF,IAbAA,IACAE,IACAD,GAAa9K,GAAUD,EAAQ,GAG/ByK,EAAW9L,EAAImM,CAAS,EACxBD,EAAgBJ,EAAWD,EAAM,CAAC,EAClCI,EAAWC,EACXH,EAAWD,EAEXS,EAAWV,EAAM,CAAC,EAClBW,EAAWX,EAAM,CAAC,EAEbS,EAAIjL,EAAQ,EAAGiL,GAAK,EAAGA,IAC1BN,EAAWD,EAAWQ,EACXT,EAAWU,EACXP,EAAWQ,EACXP,EAAgBQ,EAE3BR,EAAgBD,EAChBA,EAAWD,EAEXF,EAAWC,EACXA,EAAW/L,EAAImM,CAAS,EAExB7G,EAAI8G,CAAS,EAAIR,EAAKS,CAAU,EAAIJ,EAEpCE,IACAE,IACAD,GAAa9K,CAEnB,CACA,CAGA,SAASqL,EAAW3M,EAAKqB,EAAOC,EAAQmE,EAAQ,CAE9C,GAAKA,EAEL,CAAA,IAAIH,EAAW,IAAI,YAAYtF,EAAI,MAAM,EACrC4M,EAAW,IAAI,aAAa,KAAK,IAAIvL,EAAOC,CAAM,CAAC,EAEnDuK,EAAQP,EAAU7F,CAAM,EAE5BkG,EAAe3L,EAAKsF,EAAKsH,EAAUf,EAAOxK,EAAOC,CAAM,EACvDqK,EAAerG,EAAKtF,EAAK4M,EAAUf,EAAOvK,EAAQD,CAAK,CAAA,CACzD,CAEAnD,EAAO,QAAUyO,CAEjB,EAAE,CAAA,CAAE,EAAE,GAAG,CAAC,SAASzN,EAAQhB,EAAOI,EAAQ,CACtC,OAAO,OAAO,QAAW,WAE3BJ,EAAO,QAAU,SAAkB2O,EAAMC,EAAW,CAC9CA,IACFD,EAAK,OAASC,EACdD,EAAK,UAAY,OAAO,OAAOC,EAAU,UAAW,CAClD,YAAa,CACX,MAAOD,EACP,WAAY,GACZ,SAAU,GACV,aAAc,EACxB,CACA,CAAO,EAEJ,EAGD3O,EAAO,QAAU,SAAkB2O,EAAMC,EAAW,CAClD,GAAIA,EAAW,CACbD,EAAK,OAASC,EACd,IAAIC,EAAW,UAAY,CAAE,EAC7BA,EAAS,UAAYD,EAAU,UAC/BD,EAAK,UAAY,IAAIE,EACrBF,EAAK,UAAU,YAAcA,CACnC,CACG,CAGH,EAAE,CAAA,CAAE,EAAE,GAAG,CAAC,SAAS3N,EAAQhB,EAAOI,EAAQ,CAG1C,IAAI0O,EAAiB9N,EAAQ,eAAe,EACxC+N,EAAiB/N,EAAQ,oBAAoB,EAC7CgO,EAAiBhO,EAAQ,iBAAiB,EAG1CiO,EAAkB,CACpB,GAAI,GACJ,KAAM,EACR,EAGA,SAASC,EAAUzN,EAAS,CAC1B,GAAI,EAAE,gBAAgByN,GAAY,OAAO,IAAIA,EAAUzN,CAAO,EAE9D,IAAI0N,EAAOL,EAAO,CAAA,EAAIG,EAAiBxN,GAAW,CAAA,CAAE,EAapD,GAXA,KAAK,QAAkB0N,EAEvB,KAAK,QAAkB,CAAE,EAEzB,KAAK,eAAkB,KACvB,KAAK,UAAkBA,EAAK,SAAW,CAAE,EACzC,KAAK,SAAkB,KACvB,KAAK,OAAkB,CAAE,EAEzB,KAAK,OAAW,IAAI,YAAa,IAAI,WAAW,CAAE,EAAG,EAAG,EAAG,CAAC,CAAE,EAAG,MAAM,EAAG,CAAC,IAAM,EAE7E,CAAC,KAAK,QAAQ,IAAM,CAAC,KAAK,QAAQ,KACpC,MAAM,IAAI,MAAM,oDAAoD,CAExE,CAGAD,EAAU,UAAU,SAAWF,EAG/BE,EAAU,UAAU,IAAM,SAAUlP,EAAQ,CAC1C,OAAK,KAAA,UAAUA,EAAO,IAAI,EAAIA,EAG1B,KAAK,QAAQ,MAAQ,KAAK,SAAU,GAAIA,EAAO,QACjD,KAAKA,EAAO,IAAI,EAAIA,EAAO,QAE3B,KAAKA,EAAO,IAAI,EAAIA,EAAO,GAGtB,IACT,EAGAkP,EAAU,UAAU,KAAO,UAAY,CACrC,GAAI,KAAK,eAAgB,OAAO,KAAK,eAErC,GAAI,CAAC,KAAK,QAAQ,IAAM,KAAK,QAAQ,MAAQ,CAAC,KAAK,WACjD,OAAO,QAAQ,OAAO,IAAI,MAAM,0DAA2D,CAAC,EAG9F,IAAIrD,EAAO,KAEX,YAAK,eAAiB,QAAQ,IAAI,OAAO,KAAKA,EAAK,SAAS,EAAE,IAAI,SAAUuD,EAAM,CAChF,IAAIpP,EAAS6L,EAAK,UAAUuD,CAAI,EAKhC,MAHI,CAACvD,EAAK,QAAQ,MAAQ,CAACA,EAAK,SAAQ,GAAM,CAAC7L,EAAO,SAGlD6L,EAAK,OAAOuD,CAAI,EAAU,KAGvB,YAAY,QAAQvD,EAAK,eAAe7L,EAAO,QAAQ,CAAC,EAC5D,KAAK,SAAUqP,EAAG,CAAExD,EAAK,OAAOuD,CAAI,EAAIC,EAAI,CACnD,CAAG,CAAC,EACC,KAAK,UAAY,CAAE,OAAOxD,EAAO,EAE7B,KAAK,cACd,EAUAqD,EAAU,UAAU,eAAiBH,EAOrCG,EAAU,UAAU,aAAe,SAAqBI,EAAO,CAC7D,GAAI,CAAC,KAAK,SACR,OAAA,KAAK,SAAW,IAAI,YAAY,OAAO,CACrC,QAAS,KAAK,KAAKA,GAAS,GAAK,KAAK,CAC5C,CAAK,EACM,KAAK,SAGd,IAAIC,EAAW,KAAK,SAAS,OAAO,WAEpC,OAAIA,EAAWD,GACb,KAAK,SAAS,KAAK,KAAK,MAAMA,EAAQC,IAAa,GAAK,KAAK,CAAC,EAGzD,KAAK,QACd,EAWAL,EAAU,UAAU,WAAa,SAAkBE,EAAMI,EAASC,EAAW,CAI3E,GAHID,GAAS,KAAK,aAAaA,CAAO,EAGlC,CAAC,KAAK,OAAOJ,CAAI,EAAG,CACtB,IAAIpP,EAAS,KAAK,UAAUoP,CAAI,EAChC,KAAK,OAAOA,CAAI,EAAI,IAAI,YAAY,OAAO,KAAK,eAAepP,EAAO,QAAQ,CAAC,CACnF,CAEE,GAAI,CAAC,KAAK,QAAQoP,CAAI,EAAG,CACvB,IAAIM,EAAW,CACb,WAAY,EACZ,OAAQ,KAAK,SACb,UAAW,EACX,MAAO,IAAI,YAAY,MAAM,CAAE,QAAS,EAAG,QAAS,SAAW,CAAA,CAChE,EAED,KAAK,QAAQN,CAAI,EAAI,IAAI,YAAY,SAAS,KAAK,OAAOA,CAAI,EAAG,CAC/D,IAAKN,EAAOY,EAAUD,GAAa,CAAE,CAAA,CAC3C,CAAK,CACL,CAEE,OAAO,KAAK,QAAQL,CAAI,CAC1B,EAMAF,EAAU,UAAU,QAAU,SAAeS,EAAQC,EAAM,CACzDA,EAAOA,GAAQ,EACf,IAAIC,EAAWF,EAASC,EACxB,OAAOD,GAAUE,EAAWD,EAAOC,EAAW,EAChD,EAGA7P,EAAO,QAAUkP,CAEjB,EAAE,CAAC,qBAAqB,GAAG,kBAAkB,GAAG,gBAAgB,EAAE,CAAC,EAAE,GAAG,CAAC,SAASlO,EAAQhB,EAAOI,EAAQ,CAGzG,IAAI0P,EAAa,mEAGjB9P,EAAO,QAAU,SAAsB+P,EAAK,CAW1C,QAVIC,EAAQD,EAAI,QAAQ,WAAY,EAAE,EAClC1I,EAAQ2I,EAAM,OAEd5I,EAAM,IAAI,WAAYC,EAAM,GAAM,CAAC,EAInC4I,EAAO,EACP5M,EAAO,EAEFiC,EAAM,EAAGA,EAAM+B,EAAK/B,IACtBA,EAAM,IAAM,GAAMA,IACrB8B,EAAI/D,GAAK,EAAK4M,GAAQ,GAAM,IAC5B7I,EAAI/D,GAAK,EAAK4M,GAAQ,EAAK,IAC3B7I,EAAI/D,GAAK,EAAI4M,EAAO,KAGtBA,EAAQA,GAAQ,EAAKH,EAAW,QAAQE,EAAM,OAAO1K,CAAG,CAAC,EAK3D,IAAI4K,EAAY7I,EAAM,EAAK,EAE3B,OAAI6I,IAAa,GACf9I,EAAI/D,GAAK,EAAK4M,GAAQ,GAAM,IAC5B7I,EAAI/D,GAAK,EAAK4M,GAAQ,EAAK,IAC3B7I,EAAI/D,GAAK,EAAI4M,EAAO,KACXC,IAAa,IACtB9I,EAAI/D,GAAK,EAAK4M,GAAQ,GAAM,IAC5B7I,EAAI/D,GAAK,EAAK4M,GAAQ,EAAK,KAClBC,IAAa,KACtB9I,EAAI/D,GAAK,EAAK4M,GAAQ,EAAK,KAGtB7I,CACT,CAEA,EAAE,CAAA,CAAE,EAAE,GAAG,CAAC,SAASpG,EAAQhB,EAAOI,EAAQ,CAG1C,IAAI+P,EAGJnQ,EAAO,QAAU,UAA0B,CAMzC,GAJI,OAAOmQ,EAAO,MAElBA,EAAK,GAED,OAAO,YAAgB,KAAa,OAAOA,EAG/C,GAAI,CAKF,IAAIC,EAAW,IAAI,WAAW,CAAE,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,EAClKpQ,EAAW,IAAI,YAAY,OAAOoQ,CAAG,EACrCzJ,EAAW,IAAI,YAAY,SAAS3G,EAAQ,CAAA,CAAE,EAIlD,OAAI2G,EAAS,QAAQ,KAAK,CAAC,IAAM,IAAGwJ,EAAK,IAElCA,CACR,MAAY,CAAA,CAEb,OAAOA,CACT,CAEA,EAAE,CAAA,CAAE,EAAE,GAAG,CAAC,SAASnP,EAAQhB,EAAOI,EAAQ,CAE1C,IAAIiQ,EAAwB,OAAO,sBAC/BC,EAAiB,OAAO,UAAU,eAClCC,EAAmB,OAAO,UAAU,qBAExC,SAASC,EAASC,EAAK,CACtB,GAAIA,GAAQ,KACX,MAAM,IAAI,UAAU,uDAAuD,EAG5E,OAAO,OAAOA,CAAG,CAClB,CAEA,SAASC,GAAkB,CAC1B,GAAI,CACH,GAAI,CAAC,OAAO,OACX,MAAO,GAMR,IAAIC,EAAQ,IAAI,OAAO,KAAK,EAE5B,GADAA,EAAM,CAAC,EAAI,KACP,OAAO,oBAAoBA,CAAK,EAAE,CAAC,IAAM,IAC5C,MAAO,GAKR,QADIC,EAAQ,CAAE,EACLjQ,EAAI,EAAGA,EAAI,GAAIA,IACvBiQ,EAAM,IAAM,OAAO,aAAajQ,CAAC,CAAC,EAAIA,EAEvC,IAAIkQ,EAAS,OAAO,oBAAoBD,CAAK,EAAE,IAAI,SAAUpQ,EAAG,CAC/D,OAAOoQ,EAAMpQ,CAAC,CACjB,CAAG,EACD,GAAIqQ,EAAO,KAAK,EAAE,IAAM,aACvB,MAAO,GAIR,IAAIC,EAAQ,CAAE,EAId,MAHA,uBAAuB,MAAM,EAAE,EAAE,QAAQ,SAAUC,EAAQ,CAC1DD,EAAMC,CAAM,EAAIA,CACnB,CAAG,EACG,OAAO,KAAK,OAAO,OAAO,CAAE,EAAED,CAAK,CAAC,EAAE,KAAK,EAAE,IAC/C,sBAKF,MAAa,CAEb,MAAO,EACT,CACA,CAEA9Q,EAAO,QAAU0Q,IAAoB,OAAO,OAAS,SAAUxQ,EAAQ8Q,EAAQ,CAK9E,QAJI3R,EACAD,EAAKoR,EAAStQ,CAAM,EACpB+Q,EAEK3R,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAC1CD,EAAO,OAAO,UAAUC,CAAC,CAAC,EAE1B,QAASC,KAAOF,EACXiR,EAAe,KAAKjR,EAAME,CAAG,IAChCH,EAAGG,CAAG,EAAIF,EAAKE,CAAG,GAIpB,GAAI8Q,EAAuB,CAC1BY,EAAUZ,EAAsBhR,CAAI,EACpC,QAASsB,EAAI,EAAGA,EAAIsQ,EAAQ,OAAQtQ,IAC/B4P,EAAiB,KAAKlR,EAAM4R,EAAQtQ,CAAC,CAAC,IACzCvB,EAAG6R,EAAQtQ,CAAC,CAAC,EAAItB,EAAK4R,EAAQtQ,CAAC,CAAC,EAGrC,CACA,CAEC,OAAOvB,CACR,CAEA,EAAE,CAAA,CAAE,EAAE,GAAG,CAAC,SAAS4B,EAAQhB,EAAOI,EAAQ,CAC1C,IAAI8Q,EAAW,UAAU,CAAC,EACtBC,EAAU,UAAU,CAAC,EACrBzP,EAAQ,UAAU,CAAC,EAEnB0P,EAAY,KAAK,UAErBpR,EAAO,QAAU,SAAUD,EAAI0B,EAAS,CAIpC,QAHI4P,EACAC,EAAY,OAAO,KAAK5P,CAAK,EAExBf,EAAI,EAAG4Q,EAAID,EAAU,OAAQ3Q,EAAI4Q,EAAG5Q,IAAK,CAC9C,IAAIpB,EAAM+R,EAAU3Q,CAAC,EACjB6Q,EAAM9P,EAAMnC,CAAG,EAAE,QAKrB,GAAIiS,IAAQzR,GAAMyR,GAAOA,EAAI,UAAYzR,EAAI,CACzCsR,EAAO9R,EACP,KACZ,CACA,CAEI,GAAI,CAAC8R,EAAM,CACPA,EAAO,KAAK,MAAM,KAAK,IAAI,GAAI,CAAC,EAAI,KAAK,OAAM,CAAE,EAAE,SAAS,EAAE,EAE9D,QADII,EAAS,CAAE,EACN9Q,EAAI,EAAG4Q,EAAID,EAAU,OAAQ3Q,EAAI4Q,EAAG5Q,IAAK,CAC9C,IAAIpB,EAAM+R,EAAU3Q,CAAC,EACrB8Q,EAAOlS,CAAG,EAAIA,CAC1B,CACQ4R,EAAQE,CAAI,EAAI,CACZ,oCAAsCtR,EAAK,YAC3C0R,CACH,CACT,CACI,IAAIC,EAAO,KAAK,MAAM,KAAK,IAAI,GAAI,CAAC,EAAI,KAAK,OAAQ,CAAA,EAAE,SAAS,EAAE,EAE9DC,EAAS,CAAE,EAAEA,EAAON,CAAI,EAAIA,EAChCF,EAAQO,CAAI,EAAI,CACZ,oDAEyBN,EAAUC,CAAI,EAAI,wCAG3CM,CACH,EAED,IAAIC,EAAgB,CAAE,EACtBC,EAAeH,CAAI,EAEnB,SAASG,EAAetS,EAAK,CACzBqS,EAAcrS,CAAG,EAAI,GAErB,QAASuS,KAAWX,EAAQ5R,CAAG,EAAE,CAAC,EAAG,CACjC,IAAIwS,EAASZ,EAAQ5R,CAAG,EAAE,CAAC,EAAEuS,CAAO,EAC/BF,EAAcG,CAAM,GACrBF,EAAeE,CAAM,CAErC,CACA,CAEI,IAAIjQ,EAAM,IAAMoP,EAAW,MACrB,OAAO,KAAKU,CAAa,EAAE,IAAI,SAAUrS,EAAK,CAC5C,OAAO6R,EAAU7R,CAAG,EAAI,KAClB4R,EAAQ5R,CAAG,EAAE,CAAC,EACd,IAAM6R,EAAUD,EAAQ5R,CAAG,EAAE,CAAC,CAAC,EAAI,GAErD,CAAS,EAAE,KAAK,GAAG,EACT,SAAW6R,EAAUM,CAAI,EAAI,KAG/BM,EAAM,OAAO,KAAO,OAAO,WAAa,OAAO,QAAU,OAAO,MAEhEC,EAAO,IAAI,KAAK,CAACnQ,CAAG,EAAG,CAAE,KAAM,kBAAmB,EACtD,GAAIL,GAAWA,EAAQ,KAAQ,OAAOwQ,EACtC,IAAIC,EAAYF,EAAI,gBAAgBC,CAAI,EACpCE,EAAS,IAAI,OAAOD,CAAS,EACjC,OAAAC,EAAO,UAAYD,EACZC,CACX,CAEA,EAAE,CAAA,CAAE,EAAE,YAAY,CAAC,SAASnR,EAAQhB,EAAOI,EAAQ,CAEnD,SAASgS,EAAeC,EAAK1R,EAAG,CAAE,OAAO2R,EAAgBD,CAAG,GAAKE,EAAsBF,EAAK1R,CAAC,GAAK6R,EAA4BH,EAAK1R,CAAC,GAAK8R,GAAmB,CAE5J,SAASA,GAAmB,CAAE,MAAM,IAAI,UAAU;AAAA,mFAA2I,CAAE,CAE/L,SAASD,EAA4B9R,EAAGgS,EAAQ,CAAE,GAAKhS,EAAW,CAAA,GAAI,OAAOA,GAAM,SAAU,OAAOiS,EAAkBjS,EAAGgS,CAAM,EAAG,IAAIlS,EAAI,OAAO,UAAU,SAAS,KAAKE,CAAC,EAAE,MAAM,EAAG,EAAE,EAAgE,GAAzDF,IAAM,UAAYE,EAAE,cAAaF,EAAIE,EAAE,YAAY,MAAUF,IAAM,OAASA,IAAM,MAAO,OAAO,MAAM,KAAKE,CAAC,EAAG,GAAIF,IAAM,aAAe,2CAA2C,KAAKA,CAAC,EAAG,OAAOmS,EAAkBjS,EAAGgS,CAAM,CAAA,CAAE,CAE9Z,SAASC,EAAkBN,EAAK/O,EAAK,EAAMA,GAAO,MAAQA,EAAM+O,EAAI,UAAQ/O,EAAM+O,EAAI,QAAQ,QAAS1R,EAAI,EAAGiS,EAAO,IAAI,MAAMtP,CAAG,EAAG3C,EAAI2C,EAAK3C,IAAOiS,EAAKjS,CAAC,EAAI0R,EAAI1R,CAAC,EAAK,OAAOiS,CAAK,CAErL,SAASL,EAAsBF,EAAK1R,EAAG,CAAE,IAAIkS,EAAKR,GAAO,KAAO,KAAO,OAAO,OAAW,KAAeA,EAAI,OAAO,QAAQ,GAAKA,EAAI,YAAY,EAAG,GAAIQ,GAAM,KAAc,CAAA,IAAIC,EAAO,CAAE,EAAMC,EAAK,GAAUC,EAAK,GAAWC,EAAIC,EAAI,GAAI,CAAE,IAAKL,EAAKA,EAAG,KAAKR,CAAG,EAAG,EAAEU,GAAME,EAAKJ,EAAG,QAAQ,QAAoBC,EAAK,KAAKG,EAAG,KAAK,EAAO,EAAAtS,GAAKmS,EAAK,SAAWnS,IAA3DoS,EAAK,GAA6B,CAAoC,OAAUvH,EAAK,CAAEwH,EAAK,GAAME,EAAK1H,CAAM,QAAA,CAAW,GAAI,CAAM,CAACuH,GAAMF,EAAG,QAAa,MAAMA,EAAG,OAAS,CAAK,QAAA,CAAW,GAAIG,EAAI,MAAME,CAAG,EAAK,OAAOJ,CAAK,CAAA,CAE/f,SAASR,EAAgBD,EAAK,CAAE,GAAI,MAAM,QAAQA,CAAG,EAAG,OAAOA,CAAI,CAEnE,IAAIvD,EAAS9N,EAAQ,eAAe,EAEhCmS,EAAanS,EAAQ,YAAY,EAEjCK,EAAUL,EAAQ,eAAe,EAEjCgI,EAAOhI,EAAQ,YAAY,EAE3BnB,EAAQmB,EAAQ,aAAa,EAE7BmR,EAASnR,EAAQ,cAAc,EAE/BoS,EAAepS,EAAQ,eAAe,EAEtCqS,EAAgBrS,EAAQ,aAAa,EAIrCsS,EAAc,CAAE,EAChBC,EAAkB,GAEtB,GAAI,CACE,OAAO,UAAc,KAAe,UAAU,YAChDA,EAAkB,UAAU,UAAU,QAAQ,QAAQ,GAAK,EAE/D,MAAY,CAAA,CAEZ,IAAIrI,EAAc,EAEd,OAAO,UAAc,MACvBA,EAAc,KAAK,IAAI,UAAU,qBAAuB,EAAG,CAAC,GAG9D,IAAIsI,EAAoB,CACtB,KAAM,KACN,YAAatI,EACb,SAAU,CAAC,KAAM,OAAQ,IAAI,EAC7B,KAAM,IACN,aAAc,SAAsB/H,EAAOC,EAAQ,CACjD,IAAIqQ,EAAY,SAAS,cAAc,QAAQ,EAC/C,OAAAA,EAAU,MAAQtQ,EAClBsQ,EAAU,OAASrQ,EACZqQ,CACX,CACA,EACIC,EAAsB,CACxB,QAAS,EACT,MAAO,GACP,cAAe,EACf,cAAe,EACf,iBAAkB,CACpB,EACIC,EAAqB,GACrBC,EAA0B,GAC1BC,EAAgC,GAChCC,EAA2B,GAC3BC,EAA+B,GAEnC,SAASC,GAAe,CACtB,MAAO,CACL,MAAOb,EAAWhB,CAAM,EACxB,QAAS,UAAmB,CAG1B,GAFA,KAAK,MAAM,UAAW,EAElB,OAAO,OAAW,IAAa,CACjC,IAAI8B,EAAM,OAAO,KAAO,OAAO,WAAa,OAAO,QAAU,OAAO,MAEhEA,GAAOA,EAAI,iBAAmB,KAAK,MAAM,WAC3CA,EAAI,gBAAgB,KAAK,MAAM,SAAS,CAElD,CACA,CACG,CACH,CAIA,SAASC,EAAKzS,EAAS,CACrB,GAAI,EAAE,gBAAgByS,GAAO,OAAO,IAAIA,EAAKzS,CAAO,EACpD,KAAK,QAAUqN,EAAO,CAAE,EAAE0E,EAAmB/R,GAAW,EAAE,EAC1D,IAAI0S,EAAc,MAAM,OAAO,KAAK,QAAQ,WAAW,EAGvD,KAAK,QAAUb,EAAYa,CAAW,GAAKtU,EAAM,QAAQ,KAAK,QAAQ,WAAW,EAC5EyT,EAAYa,CAAW,IAAGb,EAAYa,CAAW,EAAI,KAAK,SAE/D,KAAK,SAAW,CACd,GAAI,GAEJ,KAAM,GAEN,IAAK,GAEL,GAAI,EAEL,EACD,KAAK,cAAgB,KAErB,KAAK,qBAAuB,CAAE,EAC9B,KAAK,UAAY,IACnB,CAEAD,EAAK,UAAU,KAAO,UAAY,CAChC,IAAI/K,EAAQ,KAEZ,GAAI,KAAK,cAAe,OAAO,KAAK,cAEpC,GAAI,OAAO,UAAc,KAAe,OAAO,kBAAsB,IACnE,GAAI,CAEF,IAAI,UAAU,IAAI,kBAAkB,GAAG,EAAG,GAAI,EAAE,EAChDwK,EAAqB,EACtB,MAAY,CAAA,CAUX,OAAO,YAAgB,MACrB,YAAY,WAAa,YAAY,UAAU,MACjDC,EAA0B,GAE1B,KAAK,MAAM,iDAAiD,GAIhE,IAAIpS,EAAW,KAAK,QAAQ,SAAS,MAAO,EAS5C,GAPIA,EAAS,QAAQ,KAAK,GAAK,IAC7BA,EAAW,CAAC,MAAO,OAAQ,KAAM,IAAI,GAGvC,KAAK,qBAAuBA,EAC5B,KAAK,UAAY,IAAIH,EAAQG,CAAQ,EAEjCA,EAAS,QAAQ,IAAI,GAAK,GACxB,OAAO,OAAW,KAAe,WAAY,OAG/C,GAAI,CACF,IAAI4S,EAAMpT,EAAQ,YAAY,EAAE,UAAY,CAAA,CAAE,EAE9CoT,EAAI,UAAW,EACf,KAAK,SAAS,GAAK,GAEnB,IAAIC,EAAY,MAAM,OAAO,KAAK,UAAU,KAAK,OAAO,CAAC,EAErDf,EAAYe,CAAS,EACvB,KAAK,cAAgBf,EAAYe,CAAS,GAE1C,KAAK,cAAgB,IAAIrL,EAAKgL,EAAc,KAAK,QAAQ,IAAI,EAC7DV,EAAYe,CAAS,EAAI,KAAK,cAEjC,MAAY,CAAA,CAIjB,IAAIC,EAAW,KAAK,UAAU,KAAI,EAAG,KAAK,SAAUC,EAAS,CAE3DzF,EAAO3F,EAAM,SAAUoL,EAAQ,QAAQ,CAC3C,CAAG,EAEGC,EAECZ,EAGHY,EAAiB3U,EAAM,YAAY,KAAK,QAAQ,YAAY,EAAE,KAAK,SAAU8L,EAAQ,CACnF,GAAIxC,EAAM,SAAS,KAAO3H,EAAS,QAAQ,KAAK,EAAI,EAAG,CACrD2H,EAAM,MAAM,8DAA8D,EAE1E,MACR,CAEU3H,EAAS,QAAQ,KAAK,GAAK,IAAG2H,EAAM,SAAS,IAAMwC,EAC7D,CAAK,EAVD6I,EAAiB,QAAQ,QAAQ,EAAK,EAaxCX,EAAgChU,EAAM,eAAe,KAAK,QAAQ,YAAY,EAC9E,IAAI4U,EAEAb,GAA2BD,GAAsBnS,EAAS,QAAQ,IAAI,IAAM,GAC9EiT,EAAuB5U,EAAM,gCAAiC,EAE9D4U,EAAuB,QAAQ,QAAQ,EAAK,EAG9CA,EAAuBA,EAAqB,KAAK,SAAU9S,EAAQ,CACjEmS,EAA2BnS,CAC/B,CAAG,EAID,IAAI+S,EAAiB7U,EAAM,mBAAoB,EAAC,KAAK,SAAU8B,EAAQ,CACrEoS,EAA+BpS,CACnC,CAAG,EAED,OAAA,KAAK,cAAgB,QAAQ,IAAI,CAAC2S,EAAUE,EAAgBC,EAAsBC,CAAc,CAAC,EAAE,KAAK,UAAY,CAClH,OAAOvL,CACX,CAAG,EACM,KAAK,aACd,EAGA+K,EAAK,UAAU,eAAiB,SAAU3H,EAAU4C,EAAM,CACxD,IAAI9F,EAAS,KAOb,OAAA8F,EAAK,YAAcA,EAAK,aAAe,CAAE,EAClC,QAAQ,UAAU,KAAK,UAAY,CACxC,OAAK9F,EAAO,SAAS,GAOd,IAAI,QAAQ,SAAUiC,EAASC,EAAQ,CAC5C,IAAIU,EAAI5C,EAAO,cAAc,QAAS,EAElC8F,EAAK,aAAaA,EAAK,YAAY,MAAS,SAAU3D,EAAK,CAC7D,OAAOD,EAAOC,CAAG,CACzB,CAAO,EAEDS,EAAE,MAAM,UAAY,SAAUC,EAAI,CAChCD,EAAE,QAAS,EACPC,EAAG,KAAK,IAAKX,EAAOW,EAAG,KAAK,GAAG,EAAOZ,EAAQY,EAAG,IAAI,CAC1D,EAED,IAAIyI,EAAW,CAAE,EACbpI,EAAS,KAAKoI,EAAS,KAAKpI,EAAS,IAAI,MAAM,EAC/CA,EAAS,WAAWoI,EAAS,KAAKpI,EAAS,SAAS,EACxDN,EAAE,MAAM,YAAY,CAClB,KAAMM,EACN,SAAUlD,EAAO,qBACjB,QAAS,CACP,YAAaA,EAAO,UAAU,EACxC,CACO,EAAEsL,CAAQ,CACjB,CAAK,EA3BQ,CACL,KAAMtL,EAAO,UAAU,iBAAiBkD,EAAU4C,EAAK,WAAW,CACnE,CA0BP,CAAG,CACH,EAGA+E,EAAK,UAAU,kBAAoB,SAAUrJ,EAAMxL,EAAM8P,EAAMyF,EAAUC,EAAW,CAClF,GAAI,KAAK,SAAS,IAAMf,IAGxBjU,EAAM,SAASR,CAAI,GAAK0U,GACtB,OAAK,KAAA,MAAM,iCAAiC,EACrC,kBAAkBa,EAAS,gBAAkBvV,EAAMwL,EAAK,EAAGA,EAAK,EAAGA,EAAK,MAAOA,EAAK,MAAM,EAAE,KAAK,SAAUa,EAAQ,CACxH,OAAAmJ,EAAU,UAAYnJ,EACfmJ,CACb,CAAK,EAIH,GAAIhV,EAAM,SAASR,CAAI,EACrB,OAAKuV,EAAS,SAAQA,EAAS,OAASvV,EAAK,WAAW,KAAM,CAC5D,MAAO,CAAA,CAAQ8P,EAAK,KAC1B,CAAK,GAED,KAAK,MAAM,qBAAqB,EAChC0F,EAAU,IAAMD,EAAS,OAAO,aAAa/J,EAAK,EAAGA,EAAK,EAAGA,EAAK,MAAOA,EAAK,MAAM,EAAE,KAC/EgK,EAQT,KAAK,MAAM,iDAAiD,EAC5D,IAAIpB,EAAY,KAAK,QAAQ,aAAa5I,EAAK,MAAOA,EAAK,MAAM,EAC7DiK,EAASrB,EAAU,WAAW,KAAM,CACtC,MAAO,CAAQtE,CAAAA,EAAK,KACxB,CAAG,EACD,OAAA2F,EAAO,yBAA2B,OAClCA,EAAO,UAAUF,EAAS,gBAAkBvV,EAAMwL,EAAK,EAAGA,EAAK,EAAGA,EAAK,MAAOA,EAAK,OAAQ,EAAG,EAAGA,EAAK,MAAOA,EAAK,MAAM,EACxH,KAAK,MAAM,qBAAqB,EAChCgK,EAAU,IAAMC,EAAO,aAAa,EAAG,EAAGjK,EAAK,MAAOA,EAAK,MAAM,EAAE,KAGnE4I,EAAU,MAAQA,EAAU,OAAS,EAC9BoB,CACT,EAEAX,EAAK,UAAU,eAAiB,SAAUrJ,EAAMlJ,EAAQiT,EAAU,CAChE,IAAInI,EAGJ,GAFA,KAAK,MAAM,2CAA2C,EAElD9K,EAAO,OACT,OAAAiT,EAAS,MAAM,UAAUjT,EAAO,OAAQkJ,EAAK,IAAKA,EAAK,GAAG,EACnD,KAGT,GAAI8I,EAGFlH,EAAc,IAAI,UAAU,IAAI,kBAAkB9K,EAAO,IAAI,EAAGkJ,EAAK,QAASA,EAAK,QAAQ,UAI3F4B,EAAcmI,EAAS,MAAM,gBAAgB/J,EAAK,QAASA,EAAK,QAAQ,EAEpE4B,EAAY,KAAK,IACnBA,EAAY,KAAK,IAAI9K,EAAO,IAAI,MAGhC,SAAShB,EAAI8L,EAAY,KAAK,OAAS,EAAG9L,GAAK,EAAGA,IAChD8L,EAAY,KAAK9L,CAAC,EAAIgB,EAAO,KAAKhB,CAAC,EAKzC,OAAA,KAAK,MAAM,WAAW,EAElB4S,EAEFqB,EAAS,MAAM,aAAanI,EAAa5B,EAAK,IAAKA,EAAK,IAAKA,EAAK,SAAWA,EAAK,IAAKA,EAAK,SAAWA,EAAK,IAAKA,EAAK,aAAe,KAAMA,EAAK,cAAgB,IAAI,EAEpK+J,EAAS,MAAM,aAAanI,EAAa5B,EAAK,IAAKA,EAAK,IAAKA,EAAK,SAAWA,EAAK,IAAKA,EAAK,SAAWA,EAAK,IAAKA,EAAK,aAAcA,EAAK,aAAa,EAGjJ,IACT,EAEAqJ,EAAK,UAAU,gBAAkB,SAAU7U,EAAMD,EAAI+P,EAAM,CACzD,IAAI7F,EAAS,KAETsL,EAAW,CACb,OAAQ,KACR,eAAgB,KAChB,oBAAqB,GACrB,MAAO,IACR,EAEGG,EAAc,SAAqBlK,EAAM,CAC3C,OAAOvB,EAAO,QAAQ,UAAY,CAChC,GAAI6F,EAAK,SAAU,OAAOA,EAAK,YAC/B,IAAI5C,EAAW,CACb,MAAO1B,EAAK,MACZ,OAAQA,EAAK,OACb,QAASA,EAAK,QACd,SAAUA,EAAK,SACf,OAAQA,EAAK,OACb,OAAQA,EAAK,OACb,QAASA,EAAK,QACd,QAASA,EAAK,QACd,QAASsE,EAAK,QACd,MAAOA,EAAK,MACZ,cAAeA,EAAK,cACpB,cAAeA,EAAK,cACpB,iBAAkBA,EAAK,gBACxB,EAED,OAAA7F,EAAO,MAAM,oBAAoB,EAE1B,QAAQ,QAAQiD,CAAQ,EAAE,KAAK,SAAUA,EAAU,CACxD,OAAOjD,EAAO,kBAAkBuB,EAAMxL,EAAM8P,EAAMyF,EAAUrI,CAAQ,CAC5E,CAAO,EAAE,KAAK,SAAUA,EAAU,CAC1B,OAAAjD,EAAO,MAAM,oBAAoB,EAE1BA,EAAO,eAAeiD,EAAU4C,CAAI,CACnD,CAAO,EAAE,KAAK,SAAUxN,EAAQ,CACxB,OAAIwN,EAAK,SAAiBA,EAAK,aAC/ByF,EAAS,aAAe,KACjBtL,EAAO,eAAeuB,EAAMlJ,EAAQiT,CAAQ,EAC3D,CAAO,CACP,CAAK,CACL,EAIE,OAAO,QAAQ,UAAU,KAAK,UAAY,CAIxC,GAHAA,EAAS,MAAQxV,EAAG,WAAW,KAAM,CACnC,MAAO,CAAA,CAAQ+P,EAAK,KAC1B,CAAK,EACGtP,EAAM,SAASR,CAAI,EAAG,OAAO,KAEjC,GAAIQ,EAAM,cAAcR,CAAI,EAC1B,OAAAuV,EAAS,eAAiBvV,EAC1BuV,EAAS,oBAAsB,GACxB,KAGT,GAAI/U,EAAM,QAAQR,CAAI,EAGpB,OAAKuU,GAELtK,EAAO,MAAM,oCAAoC,EAE1C,kBAAkBjK,CAAI,EAAE,KAAK,SAAU2V,EAAa,CACzDJ,EAAS,eAAiBI,CAClC,CAAO,EAIA,MAAS,SAAUzU,EAAG,CACrB,OAAO,IACf,CAAO,GAZoC,KAevC,MAAM,IAAI,MAAM,sDAAsD,CAC1E,CAAG,EAAE,KAAK,UAAY,CAClB,GAAI4O,EAAK,SAAU,OAAOA,EAAK,YAE/B7F,EAAO,MAAM,iBAAiB,EAM9B,IAAI2L,EAAU5B,EAAc,CAC1B,MAAOlE,EAAK,MACZ,OAAQA,EAAK,OACb,YAAa7F,EAAO,QAAQ,KAC5B,QAAS6F,EAAK,QACd,SAAUA,EAAK,SACf,eAAgBA,EAAK,gBAC3B,CAAK,EACG+F,EAAOD,EAAQ,IAAI,SAAUpK,EAAM,CACrC,OAAOkK,EAAYlK,CAAI,CAC7B,CAAK,EAED,SAASsK,EAAQP,EAAU,CACrBA,EAAS,iBACNA,EAAS,qBAAqBA,EAAS,eAAe,MAAO,EAClEA,EAAS,eAAiB,KAElC,CAEI,OAAAtL,EAAO,MAAM,eAAe,EAErB,QAAQ,IAAI4L,CAAI,EAAE,KAAK,UAAY,CACxC,OAAA5L,EAAO,MAAM,WAAW,EAExB6L,EAAQP,CAAQ,EACTxV,CACR,EAAE,SAAUoM,EAAK,CAChB,MAAA2J,EAAQP,CAAQ,EACVpJ,CACZ,CAAK,CACL,CAAG,CACH,EAEA0I,EAAK,UAAU,gBAAkB,SAAUkB,EAAQ/V,EAAMD,EAAI+P,EAAM,CACjE,IAAIkG,EAAS,KAEb,GAAIlG,EAAK,SAAU,OAAOA,EAAK,YAE/B,IAAImG,EAAgBF,EAAO,MAAO,EAC9BG,EAAiBnD,EAAekD,EAAe,CAAC,EAChD3L,EAAU4L,EAAe,CAAC,EAC1B3L,EAAW2L,EAAe,CAAC,EAE3BC,EAAcJ,EAAO,SAAW,EACpCjG,EAAOL,EAAO,CAAE,EAAEK,EAAM,CACtB,QAASxF,EACT,SAAUC,EAIV,QAAS4L,EAAcrG,EAAK,QAAU,KAAK,IAAI,EAAGA,EAAK,OAAO,CAClE,CAAG,EACD,IAAIsE,EAEJ,OAAK+B,IAEH/B,EAAY,KAAK,QAAQ,aAAa9J,EAASC,CAAQ,GAGlD,KAAK,gBAAgBvK,EAAMmW,EAAcpW,EAAKqU,EAAWtE,CAAI,EAAE,KAAK,UAAY,CACrF,OAAIqG,EAAoBpW,GACxB+P,EAAK,MAAQxF,EACbwF,EAAK,OAASvF,EACPyL,EAAO,gBAAgBD,EAAQ3B,EAAWrU,EAAI+P,CAAI,EAC7D,CAAG,EAAE,KAAK,SAAUsG,EAAK,CACrB,OAAIhC,IAGFA,EAAU,MAAQA,EAAU,OAAS,GAGhCgC,CACX,CAAG,CACH,EAEAvB,EAAK,UAAU,6BAA+B,SAAU7U,EAAMD,EAAI+P,EAAM,CACtE,IAAIuG,EAAS,KAETC,EAAQvW,EAAG,WAAW,KAAM,CAC9B,MAAO,EAAQ+P,EAAK,KACxB,CAAG,EACD,OAAA,KAAK,MAAM,gCAAgC,EACpC,kBAAkB9P,EAAM,CAC7B,YAAa8P,EAAK,QAClB,aAAcA,EAAK,SACnB,cAAetP,EAAM,iBAAiBsP,EAAK,OAAO,CACtD,CAAG,EAAE,KAAK,SAAU6F,EAAa,CAC7B,GAAI7F,EAAK,SAAU,OAAOA,EAAK,YAE/B,GAAI,CAACA,EAAK,cACR,OAAAwG,EAAM,UAAUX,EAAa,EAAG,CAAC,EACjCA,EAAY,MAAO,EACnBW,EAAQ,KAERD,EAAO,MAAM,WAAW,EAEjBtW,EAGTsW,EAAO,MAAM,gBAAgB,EAE7B,IAAIjC,EAAYiC,EAAO,QAAQ,aAAavG,EAAK,QAASA,EAAK,QAAQ,EAEnE2F,EAASrB,EAAU,WAAW,KAAM,CACtC,MAAO,CAAQtE,CAAAA,EAAK,KAC1B,CAAK,EACD2F,EAAO,UAAUE,EAAa,EAAG,CAAC,EAClCA,EAAY,MAAO,EACnB,IAAIY,EAAQd,EAAO,aAAa,EAAG,EAAG3F,EAAK,QAASA,EAAK,QAAQ,EAEjE,OAAAuG,EAAO,UAAU,aAAaE,EAAM,KAAMzG,EAAK,QAASA,EAAK,SAAUA,EAAK,cAAeA,EAAK,cAAeA,EAAK,gBAAgB,EAEpIwG,EAAM,aAAaC,EAAO,EAAG,CAAC,EAG9BnC,EAAU,MAAQA,EAAU,OAAS,EACrCmC,EAAQd,EAASrB,EAAYkC,EAAQ,KAErCD,EAAO,MAAM,WAAW,EAEjBtW,CACX,CAAG,CACH,EAEA8U,EAAK,UAAU,OAAS,SAAU7U,EAAMD,EAAIqC,EAAS,CACnD,IAAIoU,EAAS,KAEb,KAAK,MAAM,iBAAiB,EAC5B,IAAI1G,EAAOL,EAAO,CAAE,EAAE4E,CAAmB,EAezC,GAbK,MAAMjS,CAAO,EAIPA,IACT0N,EAAOL,EAAOK,EAAM1N,CAAO,GAJ3B0N,EAAOL,EAAOK,EAAM,CAClB,QAAS1N,CACf,CAAK,EAKH0N,EAAK,QAAU/P,EAAG,MAClB+P,EAAK,SAAW/P,EAAG,OACnB+P,EAAK,MAAQ9P,EAAK,cAAgBA,EAAK,MACvC8P,EAAK,OAAS9P,EAAK,eAAiBA,EAAK,OAErCD,EAAG,QAAU,GAAKA,EAAG,SAAW,EAClC,OAAO,QAAQ,OAAO,IAAI,MAAM,wBAAwB,OAAOA,EAAG,MAAO,GAAG,EAAE,OAAOA,EAAG,MAAM,CAAC,CAAC,EAG9F+P,EAAK,cAAgB,IAAGA,EAAK,cAAgB,GACjDA,EAAK,SAAW,GAEZA,EAAK,cAEPA,EAAK,YAAcA,EAAK,YAAY,KAAK,SAAU9I,EAAM,CACvD,MAAA8I,EAAK,SAAW,GACV9I,CACP,EAAE,SAAUmF,EAAK,CAChB,MAAA2D,EAAK,SAAW,GACV3D,CACZ,CAAK,GAGH,IAAIsK,EAAmB,EAEvB,OAAA3G,EAAK,iBAAmB,KAAK,KAAK,KAAK,IAAI2G,EAAkB,IAAM3G,EAAK,cAAgB,CAAC,CAAC,EACnF,KAAK,OAAO,KAAK,UAAY,CAClC,GAAIA,EAAK,SAAU,OAAOA,EAAK,YAE/B,GAAI0G,EAAO,SAAS,IAClB,OAAOA,EAAO,6BAA6BxW,EAAMD,EAAI+P,CAAI,EAG3D,GAAI,CAAC0E,EAA+B,CAClC,IAAIrI,EAAM,IAAI,MAAM,4FAAiG,EACrH,MAAAA,EAAI,KAAO,qBACLA,CACP,CAKD,IAAI4J,EAAShC,EAAajE,EAAK,MAAOA,EAAK,OAAQA,EAAK,QAASA,EAAK,SAAU0G,EAAO,QAAQ,KAAM1G,EAAK,gBAAgB,EAC1H,OAAO0G,EAAO,gBAAgBT,EAAQ/V,EAAMD,EAAI+P,CAAI,CACxD,CAAG,CACH,EAIA+E,EAAK,UAAU,aAAe,SAAUzS,EAAS,CAC/C,IAAIsU,EAAS,KAET5G,EAAOL,EAAO,GAAI4E,EAAqBjS,CAAO,EAClD,OAAO,KAAK,OAAO,KAAK,UAAY,CAClC,OAAOsU,EAAO,UAAU,iBAAiB5G,CAAI,CACjD,CAAG,CACH,EAEA+E,EAAK,UAAU,OAAS,SAAUpI,EAAQkK,EAAUpS,EAAS,CAC3D,OAAAoS,EAAWA,GAAY,YAChB,IAAI,QAAQ,SAAU1K,EAAS,CACpC,GAAIQ,EAAO,OAAQ,CACjBA,EAAO,OAAO,SAAUmG,EAAM,CAC5B,OAAO3G,EAAQ2G,CAAI,CAC3B,EAAS+D,EAAUpS,CAAO,EACpB,MACN,CAEI,GAAIkI,EAAO,cAAe,CACxBR,EAAQQ,EAAO,cAAc,CAC3B,KAAMkK,EACN,QAASpS,CACjB,CAAO,CAAC,EACF,MACD,CAOD,QAJIqS,EAAW,KAAKnK,EAAO,UAAUkK,EAAUpS,CAAO,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,EACjEN,EAAM2S,EAAS,OACfC,EAAW,IAAI,WAAW5S,CAAG,EAExB3C,EAAI,EAAGA,EAAI2C,EAAK3C,IACvBuV,EAASvV,CAAC,EAAIsV,EAAS,WAAWtV,CAAC,EAGrC2K,EAAQ,IAAI,KAAK,CAAC4K,CAAQ,EAAG,CAC3B,KAAMF,CACZ,CAAK,CAAC,CACN,CAAG,CACH,EAEA9B,EAAK,UAAU,MAAQ,UAAY,CAAE,EAErClU,EAAO,QAAUkU,CAEjB,EAAE,CAAC,gBAAgB,EAAE,aAAa,GAAG,gBAAgB,GAAG,cAAc,GAAG,cAAc,GAAG,eAAe,GAAG,gBAAgB,GAAG,WAAa,EAAE,CAAC,CAAC,EAAE,CAAA,EAAG,CAAE,CAAA,EAAE,WAAW,CACpK,CAAC,CACD,CAAC,EAEGiC,EAAiBrW,EAAqB,SAAUE,EAAQ,CAK5D,SAASoW,EAAMC,EAASrK,EAAM,CAC5B,IAAIR,EAAM,IAAI,MAAM6K,CAAO,EAC3B,OAAA7K,EAAI,KAAOQ,EACJR,CACT,CAKA,SAAS8K,EAAO3G,EAAQ,CAEtB,QADInP,EAAImP,EAAO,SAAS,EAAE,EAAE,YAAa,EAChChP,EAAI,EAAIH,EAAE,OAAQG,EAAI,EAAGA,IAAKH,EAAI,IAAMA,EACjD,MAAO,KAAOA,CAChB,CAGA,SAAS+V,EAAYxG,EAAK,CACxB,GAAI,CACF,OAAO,SAAS,mBAAmBA,CAAG,CAAC,CACxC,MAAW,CACV,OAAOA,CACX,CACA,CAGA,SAASyG,EAAYzG,EAAK,CACxB,GAAI,CACF,OAAO,mBAAmB,OAAOA,CAAG,CAAC,CACtC,MAAW,CACV,OAAOA,CACX,CACA,CAKA,SAAS0G,EAAcrG,EAAK,CAC1B,OAAO,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,qBACjD,CAYA,SAASsG,EAAWC,EAAUC,EAAYC,EAAU,CAElD,KAAK,MAAaF,EAAS,SAASC,EAAYC,CAAQ,EAGxD,KAAK,MAAaD,EAGlB,IAAIE,EAAM,OAAO,aAAa,MAAM,KAAM,KAAK,MAAM,SAAS,EAAG,CAAC,CAAC,EAEnE,GAAIA,IAAQ,SAAcA,IAAQ,QAChC,MAAMV,EAAM,yBAA0B,UAAU,EAIlD,KAAK,WAAaU,EAAI,CAAC,IAAM,GAC/B,CAGAJ,EAAW,UAAU,KAAO,SAAUK,EAAU,CAE9C,KAAK,QAAU,GAEf,IAAIvS,EAAS,KAAK,YAAY,CAAC,EAO/B,IALA,KAAK,aAAe,CAAE,CACpB,GAAQ,EACR,OAAQA,CACZ,CAAK,EAEI,KAAK,aAAa,OAAS,GAAK,CAAC,KAAK,SAAS,CACpD,IAAI7D,EAAI,KAAK,aAAa,MAAO,EAC5BA,EAAE,QACP,KAAK,SAASA,EAAE,GAAIA,EAAE,OAAQoW,CAAQ,CAC1C,CACA,EAGAL,EAAW,UAAU,OAAS,SAAUK,EAAU,CAChD,IAAIC,EAAO,CAAE,EAGbA,EAAK,KAAO,CAAE,GAAI,EAAG,QAAS,CAAA,CAAI,EAElC,KAAK,KAAK,SAAUC,EAAO,CACrBF,EAASE,CAAK,IAAM,IAAS,CAACA,EAAM,gBACpCA,EAAM,gBAAkBA,EAAM,QAAU,GAAKA,EAAM,SAAW,IAE7DD,EAAK,MAAQC,EAAM,GAAG,IACzBD,EAAK,MAAQC,EAAM,GAAG,EAAI,CAAE,GAAIA,EAAM,IAAK,QAAS,EAAI,GAG1DD,EAAK,MAAQC,EAAM,GAAG,EAAE,QAAQ,KAAKA,CAAK,EAC9C,CAAG,EAGD,OAAOD,EAAK,KAGZ,IAAIE,EAAS,EACb,OAAO,KAAKF,CAAI,EAAE,QAAQ,SAAUG,EAAQ,CAC1CD,GAAU,EAEVF,EAAKG,CAAM,EAAE,QAAQ,QAAQ,SAAUF,EAAO,CAC5CC,GAAU,IAAMD,EAAM,YAAc,EAAI,KAAK,KAAKA,EAAM,YAAc,CAAC,EAAI,EAAI,EACrF,CAAK,EAEDC,GAAU,CACd,CAAG,EAED,KAAK,OAAS,IAAI,WAAWA,CAAM,EACnC,KAAK,OAAO,CAAC,EAAI,KAAK,OAAO,CAAC,GAAK,KAAK,WAAa,IAAM,KAAK,WAAW,CAAC,EAC5E,KAAK,aAAa,EAAG,EAAI,EAEzB,IAAI1S,EAAS,EACTqH,EAAO,KAkDX,GAjDA,KAAK,aAAa,EAAGrH,CAAM,EAE3B,OAAO,KAAKwS,CAAI,EAAE,QAAQ,SAAUG,EAAQ,CAC1CH,EAAKG,CAAM,EAAE,eAAiB3S,EAE9B,IAAI4S,EAAY5S,EACZ6S,EAAYD,EAAY,EAAIJ,EAAKG,CAAM,EAAE,QAAQ,OAAS,GAAK,EACnE3S,EAAS6S,EAETxL,EAAK,aAAauL,EAAWJ,EAAKG,CAAM,EAAE,QAAQ,MAAM,EAExDH,EAAKG,CAAM,EAAE,QAAQ,KAAK,SAAUrW,EAAGuB,EAAG,CAExC,OAAOvB,EAAE,IAAMuB,EAAE,GAClB,CAAA,EAAE,QAAQ,SAAU4U,EAAO3R,EAAK,CAC/B,IAAIgS,EAAeF,EAAY,EAAI9R,EAAM,GAEzCuG,EAAK,aAAayL,EAAcL,EAAM,GAAG,EACzCpL,EAAK,aAAayL,EAAe,EAAGL,EAAM,MAAM,EAChDpL,EAAK,aAAayL,EAAe,EAAGL,EAAM,KAAK,EAE3CA,EAAM,eAEJD,EAAK,MAAQC,EAAM,GAAG,IAAGD,EAAK,MAAQC,EAAM,GAAG,EAAE,YAAcK,EAAe,GACzEL,EAAM,aAAe,EAC9BpL,EAAK,OAAO,IACVA,EAAK,MAAM,SAASoL,EAAM,YAAcpL,EAAK,MAAOoL,EAAM,YAAcpL,EAAK,MAAQ,CAAC,EACtFyL,EAAe,CAChB,GAEDzL,EAAK,aAAayL,EAAe,EAAG9S,CAAM,EAC1CqH,EAAK,OAAO,IACVA,EAAK,MAAM,SAASoL,EAAM,YAAcpL,EAAK,MAAOoL,EAAM,YAAcpL,EAAK,MAAQoL,EAAM,WAAW,EACtGzS,CACD,EACDA,GAAU,KAAK,KAAKyS,EAAM,YAAc,CAAC,EAAI,EAErD,CAAK,EAED,IAAIM,EAAWP,EAAK,OAASA,EAAKG,CAAM,EAAE,GAAK,EAAE,EAC7CI,IAAUA,EAAS,YAAcF,EAAU,EACnD,CAAG,EAED,OAAO,KAAKL,CAAI,EAAE,QAAQ,SAAUG,EAAQ,CACtCH,EAAKG,CAAM,EAAE,gBAAkBH,EAAKG,CAAM,EAAE,aAC9CtL,EAAK,aAAamL,EAAKG,CAAM,EAAE,YAAaH,EAAKG,CAAM,EAAE,cAAc,CAE7E,CAAG,EAEG,KAAK,OAAO,SAAW3S,EAAQ,MAAM4R,EAAM,iDAAiD,EAEhG,OAAO,KAAK,MACd,EAGAM,EAAW,UAAU,YAAc,SAAUlS,EAAQ,CACnD,IAAI4H,EAAI,KAAK,MACb,GAAI5H,EAAS,EAAI4H,EAAE,OAAQ,MAAMgK,EAAM,iBAAkB,UAAU,EAEnE,OAAO,KAAK,WACVhK,EAAE5H,CAAM,EAAI,IAAQ4H,EAAE5H,EAAS,CAAC,EAChC4H,EAAE5H,CAAM,EAAI4H,EAAE5H,EAAS,CAAC,EAAI,GAChC,EAGAkS,EAAW,UAAU,YAAc,SAAUlS,EAAQ,CACnD,IAAI4H,EAAI,KAAK,MACb,GAAI5H,EAAS,EAAI4H,EAAE,OAAQ,MAAMgK,EAAM,iBAAkB,UAAU,EAEnE,OAAO,KAAK,WACVhK,EAAE5H,CAAM,EAAI,SAAY4H,EAAE5H,EAAS,CAAC,EAAI,MAAU4H,EAAE5H,EAAS,CAAC,EAAI,IAAQ4H,EAAE5H,EAAS,CAAC,EACtF4H,EAAE5H,CAAM,EAAI4H,EAAE5H,EAAS,CAAC,EAAI,IAAQ4H,EAAE5H,EAAS,CAAC,EAAI,MAAU4H,EAAE5H,EAAS,CAAC,EAAI,QAClF,EAGAkS,EAAW,UAAU,aAAe,SAAUlS,EAAQgT,EAAO,CAC3D,IAAIpL,EAAI,KAAK,OAET,KAAK,YACPA,EAAE5H,CAAM,EAASgT,IAAU,EAAK,IAChCpL,EAAE5H,EAAS,CAAC,EAAIgT,EAAQ,MAExBpL,EAAE5H,CAAM,EAAQgT,EAAQ,IACxBpL,EAAE5H,EAAS,CAAC,EAAKgT,IAAU,EAAK,IAEpC,EAGAd,EAAW,UAAU,aAAe,SAAUlS,EAAQgT,EAAO,CAC3D,IAAIpL,EAAI,KAAK,OAET,KAAK,YACPA,EAAE5H,CAAM,EAASgT,IAAU,GAAM,IACjCpL,EAAE5H,EAAS,CAAC,EAAKgT,IAAU,GAAM,IACjCpL,EAAE5H,EAAS,CAAC,EAAKgT,IAAU,EAAK,IAChCpL,EAAE5H,EAAS,CAAC,EAAIgT,EAAQ,MAExBpL,EAAE5H,CAAM,EAAQgT,EAAQ,IACxBpL,EAAE5H,EAAS,CAAC,EAAKgT,IAAU,EAAK,IAChCpL,EAAE5H,EAAS,CAAC,EAAKgT,IAAU,GAAM,IACjCpL,EAAE5H,EAAS,CAAC,EAAKgT,IAAU,GAAM,IAErC,EAGAd,EAAW,UAAU,eAAiB,SAAUe,EAAKC,EAAK,CACxD,OAAQD,IAAQ,GAAKC,IAAQ,OACrBD,IAAQ,GAAKC,IAAQ,OACrBD,IAAQ,OAAUC,IAAQ,KACpC,EAKAhB,EAAW,UAAU,mBAAqB,SAAUiB,EAAQ,CAC1D,OAAQA,EAAM,CACZ,IACA,GAAA,IACA,GAAA,OACA,IAAK,GACH,MAAO,GAET,IACA,GAAA,IACE,GAAA,SAEF,IAAK,GACL,IAAK,GACL,IACE,IAAA,MAEF,GAAA,OACA,IAAK,IACL,IAAK,IACH,MAEF,GAAA,QAEE,MAAO,EACb,CACA,EAKAjB,EAAW,UAAU,iBAAmB,SAAUiB,EAAQnT,EAAQ,CAChE,IAAIoT,EAEJ,OAAQD,EAAM,CACZ,OACA,IAAK,GACH,OAAAC,EAAI,KAAK,MAAMpT,CAAM,EACdoT,EAET,IACE,GAAA,OAAAA,EAAI,KAAK,MAAMpT,CAAM,EACdoT,GAAKA,EAAI,KAAQ,SAE1B,IACE,GAAA,OAAAA,EAAI,KAAK,YAAYpT,CAAM,EACpBoT,EAET,IAAK,GACH,OAAAA,EAAI,KAAK,YAAYpT,CAAM,EACpBoT,GAAKA,EAAI,OAAU,OAE5B,IAAK,GACH,OAAAA,EAAI,KAAK,YAAYpT,CAAM,EACpBoT,EAET,IACE,GAAA,OAAAA,EAAI,KAAK,YAAYpT,CAAM,EACpBoT,EAAI,EAEb,IACA,GAAA,QACA,IAAK,IACL,IAAK,IACH,OAAO,KAET,IACE,GAAA,OAAO,KAET,QAEE,OAAO,IACb,CACA,EAGAlB,EAAW,UAAU,SAAW,SAAUS,EAAQ3S,EAAQuS,EAAU,CAClE,IAAIc,EAAc,KAAK,YAAYrT,CAAM,EAEzCA,GAAU,EAEV,QAAS7D,EAAI,EAAGA,EAAIkX,EAAalX,IAAK,CACpC,IAAI+W,EAAS,KAAK,YAAYlT,CAAM,EAChCmT,EAAS,KAAK,YAAYnT,EAAS,CAAC,EACpCsT,EAAS,KAAK,YAAYtT,EAAS,CAAC,EAEpCuT,EAAiB,KAAK,mBAAmBJ,CAAM,EAC/CK,EAAiBF,EAAQC,EACzBE,EAAiBD,GAAe,EAAIxT,EAAS,EAAI,KAAK,YAAYA,EAAS,CAAC,EAC5E0T,EAAiB,GAErB,GAAID,EAAcD,EAAc,KAAK,MAAM,OACzC,MAAM5B,EAAM,iBAAkB,UAAU,EAM1C,QAHIoB,EAAQ,CAAE,EACVW,EAAcF,EAET7J,EAAI,EAAGA,EAAI0J,EAAO1J,IAAK+J,GAAeJ,EAAa,CAC1D,IAAIK,EAAO,KAAK,iBAAiBT,EAAQQ,CAAW,EACpD,GAAIC,IAAS,KAAM,CACjBZ,EAAQ,KACR,KACR,CACMA,EAAM,KAAKY,CAAI,CACrB,CAEI,GAAI,MAAM,QAAQZ,CAAK,GAAKG,IAAW,EAAG,CACxC,GAAI,CACFH,EAAQhB,EAAY,OAAO,aAAa,MAAM,KAAMgB,CAAK,CAAC,CAC3D,MAAW,CACVA,EAAQ,IAChB,CAEUA,GAASA,EAAMA,EAAM,OAAS,CAAC,IAAM,OAAMA,EAAQA,EAAM,MAAM,EAAG,EAAE,EAC9E,CAEQ,KAAK,eAAeL,EAAQO,CAAG,GAC7B,MAAM,QAAQF,CAAK,GAAK,OAAO,UAAUA,EAAM,CAAC,CAAC,GAAKA,EAAM,CAAC,EAAI,IACnE,KAAK,aAAa,KAAK,CACrB,GAAQE,EACR,OAAQF,EAAM,CAAC,CACzB,CAAS,EACDU,EAAiB,IAIrB,IAAIjB,EAAQ,CACV,cAAgB,KAAK,WACrB,IAAgBE,EAChB,IAAgBO,EAChB,OAAgBC,EAChB,MAAgBG,EAChB,aAAgBtT,EAAS,KAAK,MAC9B,YAAgBwT,EAChB,YAAgBC,EAAc,KAAK,MACnC,MAAgBT,EAChB,eAAgBU,CACjB,EAED,GAAInB,EAASE,CAAK,IAAM,GAAO,CAC7B,KAAK,QAAU,GACf,MACN,CAEIzS,GAAU,EACd,CAEM2S,IAAW,GACb,KAAK,aAAa,KAAK,CACrB,GAAQ,EACR,OAAQ,KAAK,YAAY3S,CAAM,CACrC,CAAK,CAEL,EAUAxE,EAAO,QAAQ,QAAU,SAAU2W,EAAU,CAC3C,OAAOA,EAAS,QAAU,GAAKA,EAAS,CAAC,IAAM,KAAQA,EAAS,CAAC,IAAM,KAAQA,EAAS,CAAC,IAAM,GACjG,EAkBA3W,EAAO,QAAQ,mBAAqB,SAAU2W,EAAU0B,EAAY,CAClE,GAAI,CAAC5B,EAAcE,CAAQ,EACzB,MAAMP,EAAM,mDAAoD,QAAQ,EAG1E,GAAI,OAAOiC,GAAe,WACxB,MAAMjC,EAAM,mDAAoD,QAAQ,EAG1E,GAAI,CAACpW,EAAO,QAAQ,QAAQ2W,CAAQ,EAClC,MAAMP,EAAM,sBAAuB,UAAU,EAK/C,QAFI5R,EAAS,EAAG0S,EAASP,EAAS,OAAQ2B,EAAc,KAE/C,CACP,IAAIC,EAAcC,EAElB,GAAIhU,EAAS,GAAK0S,EAAQ,MAAMd,EAAM,iBAAkB,UAAU,EAClE,IAAIqC,EAAQ9B,EAASnS,CAAM,EACvBkU,EAAQ/B,EAASnS,EAAS,CAAC,EAE/B,GAAIiU,IAAU,KAAQC,IAAU,IAE9BH,EAAe,IACfC,EAAiB,UAERC,IAAU,KAAQC,IAAU,EAAG,CAKxC,GAHAH,EAAeG,EACfF,EAAiB,EAEZ,EAAA,KAAQD,GAAgBA,GAAgB,KAASA,IAAiB,GAAa,CAClF,GAAI/T,EAAS,GAAK0S,EAAQ,MAAMd,EAAM,iBAAkB,UAAU,EAElE,GADAoC,GAAkB7B,EAASnS,EAAS,CAAC,EAAI,IAAQmS,EAASnS,EAAS,CAAC,EAChEgU,EAAiB,EAAG,MAAMpC,EAAM,yBAA0B,UAAU,EACxE,GAAI5R,EAASgU,EAAiB,GAAKtB,EAAQ,MAAMd,EAAM,iBAAkB,UAAU,CAC3F,CAEUkC,IACEC,GAAgB,KAAQA,GAAgB,MAC1CD,EAAc,KAIdC,IAAiB,MAAgBD,EAAc,GACpD,SAAUA,EAET,QAASK,EAAMnU,EAAS,GAAKmU,IAAO,CAElC,GAAIA,GAAOzB,EAAQ,MAAMd,EAAM,iBAAkB,UAAU,EAC3D,GAAIO,EAASgC,CAAG,IAAM,IAAM,CAC1B,GAAIA,EAAM,GAAKzB,EAAQ,MAAMd,EAAM,iBAAkB,UAAU,EAC/D,GAAIO,EAASgC,EAAM,CAAC,IAAM,EAAG,CAC3BJ,EAAe,EACfC,EAAiBG,EAAMnU,EACvB,KACZ,CACA,CACA,YAEY4R,EAAM,qCAAuCE,EAAOmC,CAAK,EAC7D,YAAcnC,EAAO9R,CAAM,EAAI,IAAK,UAAU,EAIlD,GADI6T,EAAW,CAAE,KAAME,EAAc,OAAQ/T,EAAQ,OAAQgU,EAAgB,IAAM,IAC/ED,IAAiB,IAAgB,MACrC/T,GAAUgU,CACd,CACA,EAuBAxY,EAAO,QAAQ,qBAAuB,SAAU2W,EAAU0B,EAAY,CACpE,GAAI,CAAC5B,EAAcE,CAAQ,EACzB,MAAMP,EAAM,mDAAoD,QAAQ,EAG1E,GAAI,OAAOiC,GAAe,WACxB,MAAMjC,EAAM,mDAAoD,QAAQ,EAG1E,IAAIwC,EAAS,CAAE,EACXC,EAAa,EAEjB7Y,EAAO,QAAQ,mBAAmB2W,EAAU,SAAUmC,EAAS,CAC7D,IAAIC,EAAcV,EAAWS,CAAO,EAEpC,GAAIrC,EAAcsC,CAAW,EAC3BH,EAAO,KAAK,CAAE,KAAMG,CAAW,CAAE,EACjCF,GAAcE,EAAY,eACjB,MAAM,QAAQA,CAAW,EAClCA,EAAY,OAAOtC,CAAa,EAAE,QAAQ,SAAUnX,EAAG,CACrDsZ,EAAO,KAAK,CAAE,KAAMtZ,CAAC,CAAE,EACvBuZ,GAAcvZ,EAAE,MACxB,CAAO,UACQyZ,IAAgB,GAAO,CAChC,IAAIC,EAAY,CAAE,MAAOF,EAAQ,OAAQ,IAAKA,EAAQ,OAASA,EAAQ,MAAQ,EAE3EF,EAAO,OAAS,GAAKA,EAAOA,EAAO,OAAS,CAAC,EAAE,MAAQI,EAAU,MACnEJ,EAAOA,EAAO,OAAS,CAAC,EAAE,IAAMI,EAAU,IAE1CJ,EAAO,KAAKI,CAAS,EAGvBH,GAAcC,EAAQ,MAC5B,CACA,CAAG,EAED,IAAInX,EAAS,IAAI,WAAWkX,CAAU,EAClCrU,EAAS,EAEb,OAAAoU,EAAO,QAAQ,SAAUK,EAAO,CAC9B,IAAI5S,EAAO4S,EAAM,MAAQtC,EAAS,SAASsC,EAAM,MAAOA,EAAM,GAAG,EACjEtX,EAAO,IAAI0E,EAAM7B,CAAM,EACvBA,GAAU6B,EAAK,MACnB,CAAG,EAEM1E,CACT,EA2BA3B,EAAO,QAAQ,oBAAsB,SAAU2W,EAAUuC,EAAe,CACtE,GAAI,CAACzC,EAAcE,CAAQ,EACzB,MAAMP,EAAM,mDAAoD,QAAQ,EAG1E,GAAI,OAAO8C,GAAkB,WAC3B,MAAM9C,EAAM,sDAAuD,QAAQ,EAI7EpW,EAAO,QAAQ,mBAAmB2W,EAAU,SAAUmC,EAAS,CAC7D,GAAIA,EAAQ,OAAS,IAAgB,MAAO,GAG5C,GAAIA,EAAQ,OAAS,KAAQA,EAAQ,QAAU,IAC3CnC,EAASmC,EAAQ,OAAS,CAAC,IAAM,IAAQnC,EAASmC,EAAQ,OAAS,CAAC,IAAM,KAC1EnC,EAASmC,EAAQ,OAAS,CAAC,IAAM,KAAQnC,EAASmC,EAAQ,OAAS,CAAC,IAAM,KAC1EnC,EAASmC,EAAQ,OAAS,CAAC,IAAM,GAAQnC,EAASmC,EAAQ,OAAS,CAAC,IAAM,EAE5E,WAAIpC,EAAWC,EAAUmC,EAAQ,OAAS,GAAIA,EAAQ,OAASA,EAAQ,MAAM,EAAE,KAAKI,CAAa,EAC1F,EAEb,CAAG,CACH,EAkCAlZ,EAAO,QAAQ,sBAAwB,SAAU2W,EAAUuC,EAAe,CACxE,GAAI,CAACzC,EAAcE,CAAQ,EACzB,MAAMP,EAAM,mDAAoD,QAAQ,EAG1E,GAAI,OAAO8C,GAAkB,WAC3B,MAAM9C,EAAM,sDAAuD,QAAQ,EAG7E,IAAI+C,EAAc,GAElB,OAAOnZ,EAAO,QAAQ,qBAAqB2W,EAAU,SAAUmC,EAAS,CACtE,GAAI,CAAAK,IACAL,EAAQ,OAAS,MAAgBK,EAAc,IAG/CL,EAAQ,OAAS,KAAQA,EAAQ,QAAU,IAC3CnC,EAASmC,EAAQ,OAAS,CAAC,IAAM,IAAQnC,EAASmC,EAAQ,OAAS,CAAC,IAAM,KAC1EnC,EAASmC,EAAQ,OAAS,CAAC,IAAM,KAAQnC,EAASmC,EAAQ,OAAS,CAAC,IAAM,KAC1EnC,EAASmC,EAAQ,OAAS,CAAC,IAAM,GAAQnC,EAASmC,EAAQ,OAAS,CAAC,IAAM,GAAM,CAElF,IAAIM,EAAW,IAAI1C,EAAWC,EAAUmC,EAAQ,OAAS,GAAIA,EAAQ,OAASA,EAAQ,MAAM,EACzF,OAAOI,CAAa,EACvB,GAAI,CAACE,EAAU,MAAO,GAEtB,IAAIC,EAAS,IAAI,WAAW,EAAE,EAE9B,OAAAA,EAAO,IAAI1C,EAAS,MAAMmC,EAAQ,OAAQA,EAAQ,OAAS,EAAE,CAAC,EAC9DO,EAAO,CAAC,EAAMD,EAAS,OAAS,IAAO,EAAK,IAC5CC,EAAO,CAAC,EAAKD,EAAS,OAAS,EAAK,IAEpCD,EAAc,GACP,CAAEE,EAAQD,CAAU,CACjC,CACA,CAAG,CACH,EAcApZ,EAAO,QAAQ,iBAAmB,SAAU2W,EAAU2C,EAAS,CAC7D,IAAIC,EAAmB,GAAOC,EAAgB,EAE9C,OAAOxZ,EAAO,QAAQ,qBAAqB2W,EAAU,SAAUmC,EAAS,CAEtE,GADAU,IACI,EAAAA,IAAkB,GAAKV,EAAQ,OAAS,MACxC,EAAAU,IAAkB,GAAKV,EAAQ,OAAS,MAExC,CAAAS,EACJ,CAAAD,EAAU/C,EAAY+C,CAAO,EAG7B,IAAIG,EAAW,IAAI,WAAW,EAAIH,EAAQ,MAAM,EAC5C9U,EAAS,EAEb,OAAAiV,EAASjV,GAAQ,EAAI,IACrBiV,EAASjV,GAAQ,EAAI,IACrBiV,EAASjV,GAAQ,EAAM8U,EAAQ,OAAS,IAAO,EAAK,IACpDG,EAASjV,GAAQ,EAAK8U,EAAQ,OAAS,EAAK,IAE5CA,EAAQ,MAAM,EAAE,EAAE,QAAQ,SAAU1Y,EAAG,CACrC6Y,EAASjV,GAAQ,EAAI5D,EAAE,WAAW,CAAC,EAAI,GAC7C,CAAK,EAED6Y,EAASjV,GAAQ,EAAI,EACrB+U,EAAmB,GAEZ,CAAEE,EAAU9C,EAAS,SAASmC,EAAQ,OAAQA,EAAQ,OAASA,EAAQ,MAAM,CAAG,CAAA,CAC3F,CAAG,CACH,CACA,CAAC,EAED,SAASY,GAAgBC,EAAK,CAC5B,OAAO,KAAK,eAAeA,EAAI,IAAI,EAAE,KAAK,SAAUtT,EAAM,CAGxD,GAFAsT,EAAI,QAAUxD,EAAe,QAAQ9P,CAAI,EAErC,CAACsT,EAAI,QAAS,OAAO,QAAQ,QAAQA,CAAG,EAE5CA,EAAI,UAAYA,EAAI,KAEpB,GAAI,CACF,IAAIC,EAAoBC,EAYxB,GATA1D,EAAe,oBAAoB9P,EAAM,SAAU4Q,EAAO,CACxD,GAAIA,EAAM,MAAQ,GAAKA,EAAM,MAAQ,KAAS,MAAM,QAAQA,EAAM,KAAK,EACrE,OAAA0C,EAAI,YAAiB1C,EAAM,MAAM,CAAC,GAAK,EACvC2C,EAAqB3C,EAAM,cAC3B4C,EAAqB5C,EAAM,YACpB,EAEjB,CAAO,EAEG4C,EAAoB,CACtB,IAAIC,EAAoBF,EACtB,IAAI,WAAW,CAAE,EAAG,EAAG,EACvB,IAAI,WAAW,CAAE,EAAG,EAAG,EAEzBD,EAAI,KAAO,IAAI,KAAK,CAClBtT,EAAK,MAAM,EAAGwT,CAAkB,EAChCC,EACAzT,EAAK,MAAMwT,EAAqB,CAAC,CAC3C,EAAW,CAAE,KAAM,aAAc,CACjC,CACK,MAAW,CAAA,CAEZ,OAAOF,CACX,CAAG,CACH,CAGA,SAASI,GAAmBJ,EAAK,CAC/B,GAAI,CAACA,EAAI,QAAS,OAAO,QAAQ,QAAQA,CAAG,EAE5C,IAAIK,EAAcL,EAAI,YAAc,EACpC,GAAI,CAACK,EAAa,OAAO,QAAQ,QAAQL,CAAG,EAE5C,IAAI7N,EAEAkO,EAAc,EAChBlO,EAAS,KAAK,KAAK,QAAQ,aAAa6N,EAAI,WAAW,OAAQA,EAAI,WAAW,KAAK,EAEnF7N,EAAS,KAAK,KAAK,QAAQ,aAAa6N,EAAI,WAAW,MAAOA,EAAI,WAAW,MAAM,EAGrF,IAAI5N,EAAMD,EAAO,WAAW,IAAI,EAEhC,OAAAC,EAAI,KAAM,EAENiO,EAAc,GAAGjO,EAAI,UAAU,GAAI,EAAG,EAAG,EAAGD,EAAO,MAAO,CAAC,EAC3DkO,EAAc,GAAGjO,EAAI,UAAU,GAAI,EAAG,EAAG,GAAID,EAAO,MAAOA,EAAO,MAAM,EACxEkO,EAAc,GAAGjO,EAAI,UAAU,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAEnDA,EAAI,UAAU4N,EAAI,WAAY,EAAG,CAAC,EAClC5N,EAAI,QAAS,EAIb4N,EAAI,WAAW,MAAQA,EAAI,WAAW,OAAS,EAE/CA,EAAI,WAAa7N,EAEV,QAAQ,QAAQ6N,CAAG,CAC5B,CAGA,SAASM,GAA0BN,EAAK,CACtC,OAAKA,EAAI,QAEF,QAAQ,IAAI,CACjB,KAAK,eAAeA,EAAI,IAAI,EAC5B,KAAK,eAAeA,EAAI,QAAQ,CACpC,CAAG,EAAE,KAAK,SAAUlE,EAAK,CACrB,IAAIpP,EAAOoP,EAAI,CAAC,EACZyE,EAAWzE,EAAI,CAAC,EAEpB,GAAI,CAACU,EAAe,QAAQ9P,CAAI,EAAG,OAAO,QAAQ,QAAQsT,CAAG,EAE7D,IAAIQ,EAAW,CAAE,EAEjB,OAAAhE,EAAe,mBAAmB9P,EAAM,SAAUyS,EAAS,CACzD,GAAIA,EAAQ,OAAS,IAAgB,MAAO,GAC5CqB,EAAS,KAAKrB,CAAO,CAC3B,CAAK,EAEDqB,EAAWA,EACR,OAAO,SAAUrB,EAAS,CAGzB,OAAIA,EAAQ,OAAS,IAAa,GAS9BA,EAAQ,MAAQ,KAAQA,EAAQ,KAAO,KAIvCA,EAAQ,OAAS,GAGtB,CAAA,EACA,IAAI,SAAUA,EAAS,CACtB,OAAOzS,EAAK,MAAMyS,EAAQ,OAAQA,EAAQ,OAASA,EAAQ,MAAM,CACzE,CAAO,EAEHa,EAAI,SAAW,IAAI,KAEjB,CAAEO,EAAS,MAAM,EAAG,CAAC,CAAG,EAAC,OAAOC,CAAQ,EAAE,OAAO,CAAED,EAAS,MAAM,EAAE,CAAC,CAAE,EACvE,CAAE,KAAM,YAAY,CACrB,EAEMP,CACX,CAAG,EAlDwB,QAAQ,QAAQA,CAAG,CAmD9C,CAGA,SAAS7K,GAAOsL,EAAS,CACvBA,EAAQ,OAAO,iBAAkBV,EAAe,EAChDU,EAAQ,MAAM,aAAmBL,EAAkB,EACnDK,EAAQ,MAAM,eAAmBH,EAAyB,CAC5D,CAMA,IAAII,GAAWvL,GAEXwL,GAAe,CAIlB,OAAQD,EACT,EAEA,SAASE,EAAgB9Y,EAAS,CAChC,GAAI,EAAE,gBAAgB8Y,GAAkB,OAAO,IAAIA,EAAgB9Y,CAAO,EAE1EA,EAAUA,GAAW,CAAE,EAEvB,KAAK,KAAOA,EAAQ,MAAQtB,EAAK,CAAA,CAAE,EACnC,KAAK,YAAc,GAEnB,KAAK,MAAQN,CACf,CAGA0a,EAAgB,UAAU,IAAM,SAAUC,EAA2B,CACnE,IAAIC,EAAO,CAAE,IAAM,EAAC,OAAO,MAAM,UAAU,MAAM,KAAK,UAAW,CAAC,CAAC,EACnE,OAAAD,EAAO,MAAMA,EAAQC,CAAI,EAClB,IACT,EAGAF,EAAgB,UAAU,KAAO,UAAY,CAC3C,KAAK,IAAID,GAAa,MAAM,CAC9B,EAGAC,EAAgB,UAAU,OAAS,SAAUtI,EAAMxQ,EAAS,CAC1D,IAAI0N,EAAOtP,EAAM,OAAO,CAAE,IAAK,GAAU,EAAE4B,CAAO,EAC9CkY,EAAM,CACR,KAAM1H,EACN,KAAM9C,CACP,EAED,OAAK,KAAK,cACR,KAAK,KAAM,EACX,KAAK,YAAc,IAGd,QAAQ,QAAQwK,CAAG,EACvB,KAAK,KAAK,cAAc,EACxB,KAAK,KAAK,eAAe,EACzB,KAAK,KAAK,UAAU,EACpB,KAAK,KAAK,QAAQ,EAClB,KAAK,KAAK,YAAY,EACtB,KAAK,SAAUe,EAAM,CAGpB,OAAAA,EAAK,WAAW,MAAQA,EAAK,WAAW,OAAS,EAE1CA,EAAK,QAClB,CAAK,CACL,EAGAH,EAAgB,UAAU,SAAW,SAAUtI,EAAMxQ,EAAS,CAC5D,IAAI0N,EAAOtP,EAAM,OAAO,CAAE,IAAK,GAAU,EAAE4B,CAAO,EAC9CkY,EAAM,CACR,KAAM1H,EACN,KAAM9C,CACP,EAED,OAAK,KAAK,cACR,KAAK,KAAM,EACX,KAAK,YAAc,IAGd,QAAQ,QAAQwK,CAAG,EACvB,KAAK,KAAK,cAAc,EACxB,KAAK,KAAK,eAAe,EACzB,KAAK,KAAK,UAAU,EACpB,KAAK,KAAK,QAAQ,EAClB,KAAK,SAAUe,EAAM,CAAE,OAAOA,EAAK,UAAW,CAAE,CACrD,EAGAH,EAAgB,UAAU,OAAS,SAAUI,EAAa5a,EAAI,CAC5D,GAAI,CAAC,KAAK4a,CAAW,EAAG,MAAM,IAAI,MAAM,WAAaA,EAAc,kBAAkB,EACrF,GAAI,OAAO5a,GAAO,WAAY,MAAM,IAAI,MAAM,0CAA0C,EAExF,IAAI6a,EAAS,KAAKD,CAAW,EACzB9O,EAAO,KAEX,YAAK8O,CAAW,EAAI,SAAUhB,EAAK,CACjC,OAAO5Z,EAAG,KAAK8L,EAAM8N,CAAG,EAAE,KAAK,SAAUe,EAAM,CAC7C,OAAOE,EAAO,KAAK/O,EAAM6O,CAAI,CACnC,CAAK,CACF,EAEM,IACT,EAGAH,EAAgB,UAAU,MAAQ,SAAUI,EAAa5a,EAAI,CAC3D,GAAI,CAAC,KAAK4a,CAAW,EAAG,MAAM,IAAI,MAAM,WAAaA,EAAc,kBAAkB,EACrF,GAAI,OAAO5a,GAAO,WAAY,MAAM,IAAI,MAAM,0CAA0C,EAExF,IAAI6a,EAAS,KAAKD,CAAW,EACzB9O,EAAO,KAEX,OAAA,KAAK8O,CAAW,EAAI,SAAUhB,EAAK,CACjC,OAAOiB,EAAO,KAAK/O,EAAM8N,CAAG,EAAE,KAAK,SAAUe,EAAM,CACjD,OAAO3a,EAAG,KAAK8L,EAAM6O,CAAI,CAC/B,CAAK,CACF,EAEM,IACT,EAGAH,EAAgB,UAAU,eAAiB,SAAUZ,EAAK,CACxD,IAAI3H,EAAM,OAAO,KAAO,OAAO,WAAa,OAAO,QAAU,OAAO,MAEpE,OAAA2H,EAAI,MAAQ,SAAS,cAAc,KAAK,EACxCA,EAAI,UAAY3H,EAAI,gBAAgB2H,EAAI,IAAI,EAC5CA,EAAI,MAAM,IAAMA,EAAI,UAEb,IAAI,QAAQ,SAAUrO,EAASC,EAAQ,CAC5CoO,EAAI,MAAM,QAAU,UAAY,CAAEpO,EAAO,IAAI,MAAM,qDAAqD,CAAC,CAAI,EAC7GoO,EAAI,MAAM,OAAS,UAAY,CAAErO,EAAQqO,CAAG,CAAI,CACpD,CAAG,CACH,EAGAY,EAAgB,UAAU,gBAAkB,SAAUZ,EAAK,CAKzD,IAAIkB,EAAelB,EAAI,KAAK,IAAM,KAAK,IAAIA,EAAI,MAAM,MAAOA,EAAI,MAAM,MAAM,EAE5E,OAAIkB,EAAe,IAAGA,EAAe,GAErClB,EAAI,gBAAkB,KAAK,IAAI,KAAK,MAAMA,EAAI,MAAM,MAAQkB,CAAY,EAAG,CAAC,EAC5ElB,EAAI,iBAAmB,KAAK,IAAI,KAAK,MAAMA,EAAI,MAAM,OAASkB,CAAY,EAAG,CAAC,EAG9ElB,EAAI,aAAekB,EAEZ,QAAQ,QAAQlB,CAAG,CAC5B,EAGAY,EAAgB,UAAU,WAAa,SAAUZ,EAAK,CACpDA,EAAI,WAAa,KAAK,KAAK,QAAQ,aAAaA,EAAI,gBAAiBA,EAAI,gBAAgB,EAIzFA,EAAI,gBAAkB,KACtBA,EAAI,iBAAmB,KAGvB,IAAImB,EAAY,CAAE,MAAOnB,EAAI,KAAK,OAAS,WAAa,EAGxD,OAAA,KAAK,MAAM,OAAOmB,EAAW,KAAK,MAAM,yBAAyBnB,EAAI,IAAI,CAAC,EAEnE,KAAK,KACT,OAAOA,EAAI,MAAOA,EAAI,WAAYmB,CAAS,EAC3C,KAAK,UAAY,CAAE,OAAOnB,EAAM,CACrC,EAGAY,EAAgB,UAAU,SAAW,SAAUZ,EAAK,CAClDA,EAAI,MAAM,IAAM,GAChBA,EAAI,MAAQ,KAEZ,IAAI3H,EAAM,OAAO,KAAO,OAAO,WAAa,OAAO,QAAU,OAAO,MACpE,OAAIA,EAAI,iBAAiBA,EAAI,gBAAgB2H,EAAI,SAAS,EAE1DA,EAAI,UAAY,KAET,QAAQ,QAAQA,CAAG,CAC5B,EAGAY,EAAgB,UAAU,aAAe,SAAUZ,EAAK,CACtD,OAAO,KAAK,KAAK,OAAOA,EAAI,WAAYA,EAAI,KAAK,IAAI,EAClD,KAAK,SAAU1H,EAAM,CACpB,OAAA0H,EAAI,SAAW1H,EACR0H,CACb,CAAK,CACL,EAGAY,EAAgB,UAAU,eAAiB,SAAUtI,EAAM,CACzD,OAAIA,EAAK,YACAA,EAAK,YAAW,EAAG,KAAK,SAAU8I,EAAK,CAC5C,OAAO,IAAI,WAAWA,CAAG,CAC/B,CAAK,EAGI,IAAI,QAAQ,SAAUzP,EAASC,EAAQ,CAC5C,IAAIyP,EAAK,IAAI,WAEbA,EAAG,kBAAkB/I,CAAI,EAEzB+I,EAAG,OAAS,UAAY,CAAE1P,EAAQ,IAAI,WAAW0P,EAAG,MAAM,CAAC,CAAI,EAC/DA,EAAG,QAAU,UAAY,CACvBzP,EAAO,IAAI,MAAM,sDAAsD,CAAC,EACxEyP,EAAG,MAAO,CACX,EACDA,EAAG,QAAU,UAAY,CACvBzP,EAAO,IAAI,MAAM,gEAAgE,CAAC,CACnF,CACL,CAAG,CACH,EAGAgP,EAAgB,KAAOpa,EAEpB,IAAC8a,GAAkBV","x_google_ignoreList":[0]}